diff --git a/client/tools/buildbot_annotated_steps.py b/client/tools/buildbot_annotated_steps.py
index 32f8579..658e25c 100755
--- a/client/tools/buildbot_annotated_steps.py
+++ b/client/tools/buildbot_annotated_steps.py
@@ -185,20 +185,17 @@
   # The buildbot will set a BUILDBOT_JAVA_HOME relative to the dart
   # root directory, set JAVA_HOME based on that.
   FixJavaHome()
-  if name.startswith('dart-editor'):
-    # Run the old annotated steps script
-    status = ProcessTools('release', name, version)
-  elif name.startswith('pub-'):
+  if name.startswith('pub-'):
     status = ProcessBot(name, 'pub')
   elif name.startswith('vm-android'):
     status = ProcessBot(name, 'android')
+  elif name.startswith('dart-sdk'):
+    status = ProcessBot(name, 'dart_sdk')
   elif name.startswith('cross') or name.startswith('target'):
     status = ProcessBot(name, 'cross-vm',
                         custom_env=EnvironmentWithoutBotoConfig())
   elif name.startswith('linux-distribution-support'):
     status = ProcessBot(name, 'linux_distribution_support')
-  elif name.startswith('ft'):
-    status = ProcessBot(name, 'functional_testing')
   elif name.startswith('version-checker'):
     status = ProcessBot(name, 'version_checker')
   elif name.startswith('dart2js-dump-info'):
diff --git a/dart.gyp b/dart.gyp
index 93d2214..fb973e1 100644
--- a/dart.gyp
+++ b/dart.gyp
@@ -9,11 +9,9 @@
       'type': 'none',
       'dependencies': [
         'analysis_server',
-        'analyzer_java',
         'create_sdk',
         'dart2js',
         'dartanalyzer',
-        'editor',
         'packages',
         'runtime',
         'samples',
@@ -57,13 +55,6 @@
       ],
     },
     {
-      'target_name': 'analyzer_java',
-      'type': 'none',
-      'dependencies': [
-        'editor/analyzer_java.gyp:analyzer',
-      ],
-    },
-    {
       'target_name': 'dartfmt',
       'type': 'none',
       'dependencies': [
@@ -78,28 +69,6 @@
       ],
     },
     {
-      # This is the target that is built on the dart2dart bots.
-      # It must depend on anything that is required by dart2dart
-      # tests.
-      'target_name': 'dart2dart_bot',
-      'type': 'none',
-      'dependencies': [
-        'create_sdk',
-        'packages',
-      ],
-    },
-    {
-      # This is the target that is built on the dartc bots.
-      # It must depend on anything that is required by dartc
-      # tests.
-      'target_name': 'dartc_bot',
-      'type': 'none',
-      'dependencies': [
-        'create_sdk',
-        'packages',
-      ],
-    },
-    {
       # This is the target that is built on the dart2js build bots.
       # It must depend on anything that is required by the dart2js
       # test suites.
@@ -132,45 +101,6 @@
       ],
     },
     {
-      'target_name': 'editor',
-      'type': 'none',
-      'dependencies': [
-        'editor/build/generated/editor_deps.gyp:editor_deps',
-
-        # This dependency on create_sdk does not mean that the
-        # Editor is rebuilt if the SDK is. It only means that when you build
-        # the Editor, you should also build the SDK. If we wanted to
-        # make sure that the editor is rebuilt when the SDK is, we
-        # should list a *file* in PRODUCT_DIR which the action below
-        # uses as input.
-        # This is the desired behavior as we would otherwise have to
-        # rebuild the editor each time the VM, dart2js, or library
-        # code changes.
-        'create_sdk',
-      ],
-      'actions': [
-        {
-          'action_name': 'create_editor_py',
-          'inputs': [
-            'tools/create_editor.py',
-            '<(SHARED_INTERMEDIATE_DIR)/editor_deps/editor.stamp',
-            '<!@(["python", "tools/list_files.py", "", "editor/tools/features/'
-            'com.google.dart.tools.deploy.feature_releng"])',
-          ],
-          'outputs': [
-            '<(PRODUCT_DIR)/editor/VERSION',
-          ],
-          'action': [
-            'python',
-            'tools/create_editor.py',
-            '--out', '<(PRODUCT_DIR)/editor',
-            '--build', '<(INTERMEDIATE_DIR)',
-          ],
-          'message': 'Creating editor.',
-        },
-      ],
-    },
-    {
       'target_name': 'samples',
       'type': 'none',
       'dependencies': [],
diff --git a/pkg/analysis_server/AUTHORS b/pkg/analysis_server/AUTHORS
old mode 100755
new mode 100644
diff --git a/pkg/analysis_server/CHANGELOG.md b/pkg/analysis_server/CHANGELOG.md
old mode 100755
new mode 100644
diff --git a/pkg/analysis_server/CONTRIBUTING.md b/pkg/analysis_server/CONTRIBUTING.md
old mode 100755
new mode 100644
diff --git a/pkg/analysis_server/README.md b/pkg/analysis_server/README.md
old mode 100755
new mode 100644
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 121227a..b101f37 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -564,7 +564,7 @@
     List<CompilationUnit> units = getResolvedCompilationUnits(file);
     List<AstNode> nodes = <AstNode>[];
     for (CompilationUnit unit in units) {
-      AstNode node = new NodeLocator.con1(offset).searchWithin(unit);
+      AstNode node = new NodeLocator(offset).searchWithin(unit);
       if (node != null) {
         nodes.add(node);
       }
@@ -979,7 +979,7 @@
     folderMap.forEach((Folder folder, AnalysisContext context) {
       List<Source> sourceList = sourceMap[context];
       if (sourceList == null) {
-        sourceList = Source.EMPTY_ARRAY;
+        sourceList = Source.EMPTY_LIST;
       }
       context.analysisPriorityOrder = sourceList;
       // Schedule the context for analysis so that it has the opportunity to
@@ -1139,7 +1139,7 @@
     //
     folderMap.forEach((Folder folder, AnalysisContext context) {
       AnalysisOptionsImpl options =
-          new AnalysisOptionsImpl.con1(context.analysisOptions);
+          new AnalysisOptionsImpl.from(context.analysisOptions);
       optionUpdaters.forEach((OptionUpdater optionUpdater) {
         optionUpdater(options);
       });
@@ -1321,7 +1321,7 @@
     context.contentCache = analysisServer.overlayState;
     analysisServer.folderMap[folder] = context;
     context.sourceFactory = _createSourceFactory(packageUriResolver);
-    context.analysisOptions = new AnalysisOptionsImpl.con1(defaultOptions);
+    context.analysisOptions = new AnalysisOptionsImpl.from(defaultOptions);
     _onContextsChangedController
         .add(new ContextsChangedEvent(added: [context]));
     analysisServer.schedulePerformAnalysisOperation(context);
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index ceafb22e..e80a243 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -65,7 +65,7 @@
    * Returns the computed hover, maybe `null`.
    */
   HoverInformation compute() {
-    AstNode node = new NodeLocator.con1(_offset).searchWithin(_unit);
+    AstNode node = new NodeLocator(_offset).searchWithin(_unit);
     if (node == null) {
       return null;
     }
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index 7f0fe1a..6ac3935 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -174,7 +174,7 @@
  */
 void setCacheSize(AnalysisContext context, int cacheSize) {
   AnalysisOptionsImpl options =
-      new AnalysisOptionsImpl.con1(context.analysisOptions);
+      new AnalysisOptionsImpl.from(context.analysisOptions);
   options.cacheSize = cacheSize;
   context.analysisOptions = options;
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/import_uri_contributor.dart b/pkg/analysis_server/lib/src/services/completion/import_uri_contributor.dart
index 8551852..0d56e98 100644
--- a/pkg/analysis_server/lib/src/services/completion/import_uri_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/import_uri_contributor.dart
@@ -137,7 +137,9 @@
         String prefix = 'package:$pkgName/';
         _addSuggestion(prefix);
         for (Folder folder in folders) {
-          _addPackageFolderSuggestions(partial, prefix, folder);
+          if (folder.exists) {
+            _addPackageFolderSuggestions(partial, prefix, folder);
+          }
         }
       });
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart
index 5414bcc..d4379d9 100644
--- a/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/keyword_contributor.dart
@@ -52,6 +52,23 @@
 
   @override
   visitBlock(Block node) {
+    if (entity is ExpressionStatement) {
+      Expression expression = (entity as ExpressionStatement).expression;
+      if (expression is SimpleIdentifier) {
+        Token token = expression.token;
+        Token previous = token.previous;
+        if (previous.isSynthetic) {
+          previous = previous.previous;
+        }
+        Token next = token.next;
+        if (next.isSynthetic) {
+          next = next.next;
+        }
+        if (previous.lexeme == ')' && next.lexeme == '{') {
+          _addSuggestion2(ASYNC);
+        }
+      }
+    }
     _addStatementKeywords(node);
   }
 
@@ -128,6 +145,11 @@
   }
 
   @override
+  visitExpression(Expression node) {
+    _addExpressionKeywords(node);
+  }
+
+  @override
   visitExpressionFunctionBody(ExpressionFunctionBody node) {
     if (entity == node.expression) {
       _addExpressionKeywords(node);
@@ -146,7 +168,9 @@
   @override
   visitFunctionExpression(FunctionExpression node) {
     if (entity == node.body) {
-      _addSuggestion2(ASYNC, relevance: DART_RELEVANCE_HIGH);
+      if (!node.body.isAsynchronous) {
+        _addSuggestion2(ASYNC, relevance: DART_RELEVANCE_HIGH);
+      }
       if (node.body is EmptyFunctionBody &&
           node.parent is FunctionDeclaration &&
           node.parent.parent is CompilationUnit) {
@@ -199,6 +223,25 @@
   }
 
   @override
+  visitPrefixedIdentifier(PrefixedIdentifier node) {
+    if (entity != node.identifier) {
+      _addExpressionKeywords(node);
+    }
+  }
+
+  @override
+  visitReturnStatement(ReturnStatement node) {
+    if (entity == node.expression) {
+      _addExpressionKeywords(node);
+    }
+  }
+
+  @override
+  visitStringLiteral(StringLiteral node) {
+    // ignored
+  }
+
+  @override
   visitSwitchStatement(SwitchStatement node) {
     if (entity == node.expression) {
       _addExpressionKeywords(node);
diff --git a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
index 296ca24..5abb208 100644
--- a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
@@ -73,7 +73,20 @@
       }
     }
     if (node is Expression) {
-      InterfaceTypeSuggestionBuilder.suggestionsFor(request, node.bestType);
+      String containingMethodName;
+      bool isSuper = node is SuperExpression;
+      if (isSuper) {
+        MethodDeclaration containingMethod =
+            node.getAncestor((p) => p is MethodDeclaration);
+        if (containingMethod != null) {
+          SimpleIdentifier id = containingMethod.name;
+          if (id != null) {
+            containingMethodName = id.name;
+          }
+        }
+      }
+      InterfaceTypeSuggestionBuilder.suggestionsFor(request, node.bestType,
+          isSuper: isSuper, containingMethodName: containingMethodName);
       return new Future.value(true);
     }
     return new Future.value(false);
diff --git a/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
index 80ddd85..07ee074 100644
--- a/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/suggestion_builder.dart
@@ -294,7 +294,7 @@
    * Add a suggestion based upon the given element, provided that it is not
    * shadowed by a previously added suggestion.
    */
-  void addSuggestion(Element element) {
+  void addSuggestion(Element element, {int relevance: DART_RELEVANCE_DEFAULT}) {
     if (element.isPrivate) {
       LibraryElement elementLibrary = element.library;
       LibraryElement unitLibrary = request.unit.element.library;
@@ -339,22 +339,35 @@
       assert(false);
       return;
     }
-    CompletionSuggestion suggestion = createSuggestion(element, kind: kind);
+    CompletionSuggestion suggestion =
+        createSuggestion(element, kind: kind, relevance: relevance);
     if (suggestion != null) {
       request.addSuggestion(suggestion);
     }
   }
 
-  void _buildSuggestions(InterfaceType type, LibraryElement library) {
+  void _buildSuggestions(InterfaceType type, LibraryElement library,
+      bool isSuper, String containingMethodName) {
+    if (isSuper) {
+      // Suggest members from superclass if the target is "super"
+      type = type.superclass;
+      if (type == null) {
+        return;
+      }
+    }
     // Visit all of the types in the class hierarchy, collecting possible
     // completions.  If multiple elements are found that complete to the same
     // identifier, addSuggestion will discard all but the first (with a few
     // exceptions to handle getter/setter pairs).
-    for (InterfaceType targetType in _getTypeOrdering(type)) {
+    List<InterfaceType> types = _getTypeOrdering(type);
+    for (InterfaceType targetType in types) {
       for (MethodElement method in targetType.methods) {
         // Exclude static methods when completion on an instance
         if (!method.isStatic) {
-          addSuggestion(method);
+          addSuggestion(method,
+              relevance: method.name == containingMethodName
+                  ? DART_RELEVANCE_HIGH
+                  : DART_RELEVANCE_DEFAULT);
         }
       }
       for (PropertyAccessorElement propertyAccessor in targetType.accessors) {
@@ -412,7 +425,8 @@
   /**
    * Add suggestions for the visible members in the given interface
    */
-  static void suggestionsFor(DartCompletionRequest request, DartType type) {
+  static void suggestionsFor(DartCompletionRequest request, DartType type,
+      {bool isSuper: false, String containingMethodName: null}) {
     CompilationUnit compilationUnit =
         request.target.containingNode.getAncestor((n) => n is CompilationUnit);
     LibraryElement library = compilationUnit.element.library;
@@ -421,7 +435,7 @@
     }
     if (type is InterfaceType) {
       return new InterfaceTypeSuggestionBuilder(request)._buildSuggestions(
-          type, library);
+          type, library, isSuper, containingMethodName);
     }
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index dbb8255..5d03c83 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -72,8 +72,7 @@
 
   List<Assist> compute() {
     utils = new CorrectionUtils(unit);
-    node =
-        new NodeLocator.con2(selectionOffset, selectionEnd).searchWithin(unit);
+    node = new NodeLocator(selectionOffset, selectionEnd).searchWithin(unit);
     if (node == null) {
       return assists;
     }
@@ -1093,7 +1092,7 @@
       return;
     }
     int declOffset = element.nameOffset;
-    AstNode declNode = new NodeLocator.con1(declOffset).searchWithin(unit);
+    AstNode declNode = new NodeLocator(declOffset).searchWithin(unit);
     if (declNode != null &&
         declNode.parent is VariableDeclaration &&
         (declNode.parent as VariableDeclaration).name == declNode &&
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 9ae3c0e..25dfa1c 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -107,8 +107,8 @@
     errorLength = error.length;
     errorEnd = errorOffset + errorLength;
     errorRange = new SourceRange(errorOffset, errorLength);
-    node = new NodeLocator.con1(errorOffset).searchWithin(unit);
-    coveredNode = new NodeLocator.con2(errorOffset, errorOffset + errorLength)
+    node = new NodeLocator(errorOffset).searchWithin(unit);
+    coveredNode = new NodeLocator(errorOffset, errorOffset + errorLength)
         .searchWithin(unit);
     // analyze ErrorCode
     ErrorCode errorCode = error.errorCode;
@@ -813,7 +813,7 @@
       DartType parameterType = parameterElement.type;
       if (parameterType is InterfaceType && parameterType.isDartCoreFunction) {
         ExecutableElement element = new MethodElementImpl('', -1);
-        parameterType = new FunctionTypeImpl.con1(element);
+        parameterType = new FunctionTypeImpl(element);
       }
       if (parameterType is! FunctionType) {
         return;
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index ba7a858..67ab4db 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -442,7 +442,7 @@
       classElement.getAncestor((e) => e is CompilationUnitElement);
   CompilationUnit unit = getParsedUnit(unitElement);
   int offset = classElement.nameOffset;
-  AstNode classNameNode = new NodeLocator.con1(offset).searchWithin(unit);
+  AstNode classNameNode = new NodeLocator(offset).searchWithin(unit);
   if (classElement.isEnum) {
     return classNameNode.getAncestor((node) => node is EnumDeclaration);
   } else {
@@ -642,8 +642,7 @@
   /**
    * Returns the [AstNode] that encloses the given offset.
    */
-  AstNode findNode(int offset) =>
-      new NodeLocator.con1(offset).searchWithin(unit);
+  AstNode findNode(int offset) => new NodeLocator(offset).searchWithin(unit);
 
   /**
    * Returns names of elements that might conflict with a new local variable
diff --git a/pkg/analysis_server/lib/src/services/generated/util.dart b/pkg/analysis_server/lib/src/services/generated/util.dart
index 0650257..31a15c3 100644
--- a/pkg/analysis_server/lib/src/services/generated/util.dart
+++ b/pkg/analysis_server/lib/src/services/generated/util.dart
@@ -83,8 +83,7 @@
    */
   AstNode get coveredNode {
     if (_coveredNode == null) {
-      NodeLocator locator =
-          new NodeLocator.con2(selectionOffset, selectionOffset);
+      NodeLocator locator = new NodeLocator(selectionOffset, selectionOffset);
       _coveredNode = locator.searchWithin(compilationUnit);
     }
     return _coveredNode;
@@ -95,8 +94,8 @@
    */
   AstNode get coveringNode {
     if (_coveringNode == null) {
-      NodeLocator locator = new NodeLocator.con2(
-          selectionOffset, selectionOffset + selectionLength);
+      NodeLocator locator =
+          new NodeLocator(selectionOffset, selectionOffset + selectionLength);
       _coveringNode = locator.searchWithin(compilationUnit);
     }
     return _coveringNode;
@@ -935,8 +934,7 @@
   /**
    * @return the [AstNode] that encloses the given offset.
    */
-  AstNode findNode(int offset) =>
-      new NodeLocator.con1(offset).searchWithin(unit);
+  AstNode findNode(int offset) => new NodeLocator(offset).searchWithin(unit);
 
   /**
    * TODO(scheglov) replace with nodes once there will be [CompilationUnit.comments].
diff --git a/pkg/analysis_server/lib/src/services/index/index.dart b/pkg/analysis_server/lib/src/services/index/index.dart
index 4582ac8..00bfeab 100644
--- a/pkg/analysis_server/lib/src/services/index/index.dart
+++ b/pkg/analysis_server/lib/src/services/index/index.dart
@@ -224,7 +224,7 @@
   /**
    * An empty array of locations.
    */
-  static const List<LocationImpl> EMPTY_ARRAY = const <LocationImpl>[];
+  static const List<LocationImpl> EMPTY_LIST = const <LocationImpl>[];
 
   /**
    * The element containing this location.
diff --git a/pkg/analysis_server/lib/src/services/index/store/split_store.dart b/pkg/analysis_server/lib/src/services/index/store/split_store.dart
index bde1d08..594e18d 100644
--- a/pkg/analysis_server/lib/src/services/index/store/split_store.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/split_store.dart
@@ -283,7 +283,7 @@
     // find LocationData(s)
     List<LocationData> locationDatas = _relations[key];
     if (locationDatas == null) {
-      return LocationImpl.EMPTY_ARRAY;
+      return LocationImpl.EMPTY_LIST;
     }
     // convert to Location(s)
     List<LocationImpl> locations = <LocationImpl>[];
@@ -733,7 +733,7 @@
       Future<List<LocationImpl>> locationsFuture = nodeFuture.then((node) {
         if (node == null) {
           // TODO(scheglov) remove node
-          return LocationImpl.EMPTY_ARRAY;
+          return LocationImpl.EMPTY_LIST;
         }
         return node.getRelationships(element, relationship);
       });
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart b/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
index e0182cc..22adfa3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
@@ -124,7 +124,7 @@
       {
         CompilationUnit refUnit = refElement.unit;
         AstNode refNode =
-            new NodeLocator.con1(refRange.offset).searchWithin(refUnit);
+            new NodeLocator(refRange.offset).searchWithin(refUnit);
         invocation = refNode.getAncestor((node) => node is MethodInvocation);
       }
       // we need invocation
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 8d7782c..3acc982 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -319,7 +319,7 @@
   List<AstNode> _findNodes(List<SourceRange> ranges) {
     List<AstNode> nodes = <AstNode>[];
     for (SourceRange range in ranges) {
-      AstNode node = new NodeLocator.con1(range.offset).searchWithin(unit);
+      AstNode node = new NodeLocator(range.offset).searchWithin(unit);
       nodes.add(node);
     }
     return nodes;
@@ -402,7 +402,7 @@
     AstNode enclosingFunction;
     {
       AstNode selectionNode =
-          new NodeLocator.con1(selectionOffset).searchWithin(unit);
+          new NodeLocator(selectionOffset).searchWithin(unit);
       enclosingFunction = getEnclosingExecutableNode(selectionNode);
     }
     // visit function
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index 2f85e83..be9162d 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -125,7 +125,7 @@
 
   @override
   String get refactoringName {
-    AstNode node = new NodeLocator.con1(selectionOffset).searchWithin(unit);
+    AstNode node = new NodeLocator(selectionOffset).searchWithin(unit);
     if (node != null &&
         node.getAncestor((node) => node is ClassDeclaration) != null) {
       return 'Extract Method';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
index 350517a..8ae9b94 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
@@ -69,7 +69,7 @@
     RefactoringStatus result = new RefactoringStatus();
     // prepare variable
     {
-      AstNode offsetNode = new NodeLocator.con1(offset).searchWithin(unit);
+      AstNode offsetNode = new NodeLocator(offset).searchWithin(unit);
       if (offsetNode is SimpleIdentifier) {
         Element element = offsetNode.staticElement;
         if (element is LocalVariableElement) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index fb8791f..f3100ef 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -324,7 +324,7 @@
     RefactoringStatus fatalStatus = new RefactoringStatus.fatal(
         'Method declaration or reference must be selected to activate this refactoring.');
     // prepare selected SimpleIdentifier
-    AstNode node = new NodeLocator.con1(offset).searchWithin(unit);
+    AstNode node = new NodeLocator(offset).searchWithin(unit);
     if (node is! SimpleIdentifier) {
       return fatalStatus;
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index 6f910a9..608eb73 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -101,7 +101,7 @@
   SimpleIdentifier _getInterpolationIdentifier(SourceReference reference) {
     Source source = reference.element.source;
     CompilationUnit unit = context.parseCompilationUnit(source);
-    NodeLocator nodeLocator = new NodeLocator.con1(reference.range.offset);
+    NodeLocator nodeLocator = new NodeLocator(reference.range.offset);
     AstNode node = nodeLocator.searchWithin(unit);
     if (node is SimpleIdentifier) {
       AstNode parent = node.parent;
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 6d0e7a0..757c819 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -49,7 +49,7 @@
   }
 
   AstNode findNodeAtOffset(int offset, [Predicate<AstNode> predicate]) {
-    AstNode result = new NodeLocator.con1(offset).searchWithin(testUnit);
+    AstNode result = new NodeLocator(offset).searchWithin(testUnit);
     if (result != null && predicate != null) {
       result = result.getAncestor(predicate);
     }
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index 1101d88..0d96743 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -1421,7 +1421,7 @@
   main() {
     super.!1
   }
-}''', <String>["1+fa", "1-fb", "1+ma", "1-mb"], failingTests: '1');
+}''', <String>["1+fa", "1-fb", "1+ma", "1-mb"]);
 
     buildTests('testCompletion_superConstructorInvocation_noNamePrefix', '''
 class A {
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index 94bc8c6..1aa8f47 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -21,7 +21,6 @@
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:matcher/matcher.dart';
 import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart';
 
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index 3e44f63..6e76a4e 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -634,7 +634,7 @@
 
   CompletionSuggestion assertSuggestInvocationMethod(
       String name, String declaringType, String returnType,
-      [int relevance = DART_RELEVANCE_DEFAULT]) {
+      {int relevance: DART_RELEVANCE_DEFAULT}) {
     if (contributor is PrefixedElementContributor) {
       return assertSuggestMethod(name, declaringType, returnType,
           relevance: relevance);
diff --git a/pkg/analysis_server/test/services/completion/import_uri_contributor_test.dart b/pkg/analysis_server/test/services/completion/import_uri_contributor_test.dart
index bfea35a..e584c4d 100644
--- a/pkg/analysis_server/test/services/completion/import_uri_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/import_uri_contributor_test.dart
@@ -164,6 +164,18 @@
         csKind: CompletionSuggestionKind.IMPORT);
   }
 
+  test_import_package_missing_lib() {
+    var pkgSrc = addPackageSource('bar', 'bar.dart', 'library bar;');
+    provider.deleteFolder(dirname(pkgSrc.fullName));
+    addTestSource('import "p^" class');
+    computeFast();
+    expect(request.replacementOffset, completionOffset - 1);
+    expect(request.replacementLength, 1);
+    assertSuggest('package:', csKind: CompletionSuggestionKind.IMPORT);
+    assertSuggest('package:bar/', csKind: CompletionSuggestionKind.IMPORT);
+    assertNotSuggested('package:bar/bar.dart');
+  }
+
   test_outside_import() {
     addTestSource('import ^"d" import');
     computeFast();
diff --git a/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart
index 46940bf..9569141 100644
--- a/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart
@@ -258,6 +258,25 @@
         relevance: DART_RELEVANCE_HIGH);
   }
 
+  test_anonymous_function_async() {
+    addTestSource('main() {foo(() ^ {}}}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords([],
+        pseudoKeywords: ['async'], relevance: DART_RELEVANCE_HIGH);
+  }
+
+  test_anonymous_function_async2() {
+    addTestSource('main() {foo(() a^ {}}}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords(STMT_START_OUTSIDE_CLASS, pseudoKeywords: ['async']);
+  }
+
+  test_anonymous_function_async3() {
+    addTestSource('main() {foo(() async ^ {}}}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords([]);
+  }
+
   test_argument() {
     addTestSource('main() {foo(^);}');
     expect(computeFast(), isTrue);
@@ -880,6 +899,24 @@
     assertSuggestKeywords(EXPRESSION_START_INSTANCE, pseudoKeywords: ['await']);
   }
 
+  test_method_body_expression1() {
+    addTestSource('class A { foo() {return b == true ? ^}}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords(EXPRESSION_START_INSTANCE);
+  }
+
+  test_method_body_expression2() {
+    addTestSource('class A { foo() {return b == true ? 1 : ^}}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords(EXPRESSION_START_INSTANCE);
+  }
+
+  test_method_body_return() {
+    addTestSource('class A { foo() {return ^}}');
+    expect(computeFast(), isTrue);
+    assertSuggestKeywords(EXPRESSION_START_INSTANCE);
+  }
+
   test_method_param() {
     addTestSource('class A { foo(^) {});}');
     expect(computeFast(), isTrue);
diff --git a/pkg/analysis_server/test/services/completion/prefixed_element_contributor_test.dart b/pkg/analysis_server/test/services/completion/prefixed_element_contributor_test.dart
index 5c4bfc8..8015d8f 100644
--- a/pkg/analysis_server/test/services/completion/prefixed_element_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/prefixed_element_contributor_test.dart
@@ -523,4 +523,46 @@
       assertSuggestMethod('f', 'Base', 'void');
     });
   }
+
+  test_super() {
+    // SimpleIdentifier  MethodInvocation  ExpressionStatement
+    addTestSource('''
+class C3 {
+  int fi3;
+  static int fs3;
+  m() {}
+  mi3() {}
+  static ms3() {}
+}
+class C2 {
+  int fi2;
+  static int fs2;
+  m() {}
+  mi2() {}
+  static ms2() {}
+}
+class C1 extends C2 implements C3 {
+  int fi1;
+  static int fs1;
+  m() {super.^}
+  mi1() {}
+  static ms1() {}
+}''');
+    return computeFull((bool result) {
+      assertNotSuggested('fi1');
+      assertNotSuggested('fs1');
+      assertNotSuggested('mi1');
+      assertNotSuggested('ms1');
+      assertSuggestInvocationField('fi2', 'int');
+      assertNotSuggested('fs2');
+      assertSuggestInvocationMethod('mi2', 'C2', null);
+      assertNotSuggested('ms2');
+      assertSuggestInvocationMethod('m', 'C2', null,
+          relevance: DART_RELEVANCE_HIGH);
+      assertNotSuggested('fi3');
+      assertNotSuggested('fs3');
+      assertNotSuggested('mi3');
+      assertNotSuggested('ms3');
+    });
+  }
 }
diff --git a/pkg/analysis_server/test/services/correction/source_range_test.dart b/pkg/analysis_server/test/services/correction/source_range_test.dart
index 41bb641..4754b56 100644
--- a/pkg/analysis_server/test/services/correction/source_range_test.dart
+++ b/pkg/analysis_server/test/services/correction/source_range_test.dart
@@ -46,7 +46,7 @@
 
   void test_rangeError() {
     AnalysisError error =
-        new AnalysisError.con2(null, 10, 5, ParserErrorCode.CONST_CLASS, []);
+        new AnalysisError(null, 10, 5, ParserErrorCode.CONST_CLASS, []);
     expect(rangeError(error), new SourceRange(10, 5));
   }
 
diff --git a/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart b/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart
index 3e73a39..513fbd8 100644
--- a/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart
+++ b/pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart
@@ -5,9 +5,7 @@
 library analysis_server.test.src.utilities.change_builder_dart_test;
 
 import 'package:analysis_server/src/protocol.dart';
-import 'package:analysis_server/src/utilities/change_builder_core.dart';
 import 'package:analysis_server/src/utilities/change_builder_dart.dart';
-import 'package:analysis_server/utilities/change_builder_core.dart';
 import 'package:analysis_server/utilities/change_builder_dart.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -15,7 +13,6 @@
 import 'package:unittest/unittest.dart';
 
 import '../../abstract_context.dart';
-import '../../domain_execution_test.dart';
 
 main() {
   groupSep = ' | ';
diff --git a/pkg/analysis_server/tool/spec/codegen_analysis_server.dart b/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
index 497460a..db90acc 100644
--- a/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
+++ b/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
@@ -12,7 +12,7 @@
 import 'codegen_tools.dart';
 
 final GeneratedFile target = javaGeneratedFile(
-    '../../../../editor/tools/plugins/com.google.dart.server/src/com/google/dart/server/generated/AnalysisServer.java',
+    'generated/java/AnalysisServer.java',
     (Api api) => new CodegenAnalysisServer(api));
 
 /**
diff --git a/pkg/analysis_server/tool/spec/codegen_java_types.dart b/pkg/analysis_server/tool/spec/codegen_java_types.dart
index 16bfade..b6915b1 100644
--- a/pkg/analysis_server/tool/spec/codegen_java_types.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java_types.dart
@@ -15,8 +15,7 @@
 import 'from_html.dart';
 import 'implied_types.dart';
 
-final String pathToGenTypes =
-    '../../../../editor/tools/plugins/com.google.dart.server/src/com/google/dart/server/generated/types/';
+final String pathToGenTypes = 'generated/java/types/';
 
 final GeneratedDirectory targetDir = new GeneratedDirectory(pathToGenTypes, () {
   Api api = readApi();
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
new file mode 100644
index 0000000..2f39f5e
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -0,0 +1,520 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated;
+
+import com.google.dart.server.*;
+import com.google.dart.server.generated.types.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The interface {@code AnalysisServer} defines the behavior of objects that interface to an
+ * analysis server.
+ *
+ * @coverage dart.server
+ */
+public interface AnalysisServer {
+
+  /**
+   * Add the given listener to the list of listeners that will receive notification when new
+   * analysis results become available.
+   *
+   * @param listener the listener to be added
+   */
+  public void addAnalysisServerListener(AnalysisServerListener listener);
+
+  /**
+   * Add the given listener to the list of listeners that will receive notification when the server
+   * is not active
+   *
+   * @param listener the listener to be added
+   */
+  public void addStatusListener(AnalysisServerStatusListener listener);
+
+  /**
+   * {@code analysis.getErrors}
+   *
+   * Return the errors associated with the given file. If the errors for the given file have not yet
+   * been computed, or the most recently computed errors for the given file are out of date, then the
+   * response for this request will be delayed until they have been computed. If some or all of the
+   * errors for the file cannot be computed, then the subset of the errors that can be computed will
+   * be returned and the response will contain an error to indicate why the errors could not be
+   * computed. If the content of the file changes after this request was received but before a
+   * response could be sent, then an error of type CONTENT_MODIFIED will be generated.
+   *
+   * This request is intended to be used by clients that cannot asynchronously apply updated error
+   * information. Clients that can apply error information as it becomes available should use the
+   * information provided by the 'analysis.errors' notification.
+   *
+   * If a request is made for a file which does not exist, or which is not currently subject to
+   * analysis (e.g. because it is not associated with any analysis root specified to
+   * analysis.setAnalysisRoots), an error of type GET_ERRORS_INVALID_FILE will be generated.
+   *
+   * @param file The file for which errors are being requested.
+   */
+  public void analysis_getErrors(String file, GetErrorsConsumer consumer);
+
+  /**
+   * {@code analysis.getHover}
+   *
+   * Return the hover information associate with the given location. If some or all of the hover
+   * information is not available at the time this request is processed the information will be
+   * omitted from the response.
+   *
+   * @param file The file in which hover information is being requested.
+   * @param offset The offset for which hover information is being requested.
+   */
+  public void analysis_getHover(String file, int offset, GetHoverConsumer consumer);
+
+  /**
+   * {@code analysis.getLibraryDependencies}
+   *
+   * Return library dependency information for use in client-side indexing and package URI
+   * resolution.
+   */
+  public void analysis_getLibraryDependencies(GetLibraryDependenciesConsumer consumer);
+
+  /**
+   * {@code analysis.getNavigation}
+   *
+   * Return the navigation information associated with the given region of the given file. If the
+   * navigation information for the given file has not yet been computed, or the most recently
+   * computed navigation information for the given file is out of date, then the response for this
+   * request will be delayed until it has been computed. If the content of the file changes after
+   * this request was received but before a response could be sent, then an error of type
+   * CONTENT_MODIFIED will be generated.
+   *
+   * If a navigation region overlaps (but extends either before or after) the given region of the
+   * file it will be included in the result. This means that it is theoretically possible to get the
+   * same navigation region in response to multiple requests. Clients can avoid this by always
+   * choosing a region that starts at the beginning of a line and ends at the end of a (possibly
+   * different) line in the file.
+   *
+   * @param file The file in which navigation information is being requested.
+   * @param offset The offset of the region for which navigation information is being requested.
+   * @param length The length of the region for which navigation information is being requested.
+   */
+  public void analysis_getNavigation(String file, int offset, int length, GetNavigationConsumer consumer);
+
+  /**
+   * {@code analysis.reanalyze}
+   *
+   * Force the re-analysis of everything contained in the specified analysis roots. This will cause
+   * all previously computed analysis results to be discarded and recomputed, and will cause all
+   * subscribed notifications to be re-sent.
+   *
+   * If no analysis roots are provided, then all current analysis roots will be re-analyzed. If an
+   * empty list of analysis roots is provided, then nothing will be re-analyzed. If the list contains
+   * one or more paths that are not currently analysis roots, then an error of type
+   * INVALID_ANALYSIS_ROOT will be generated.
+   *
+   * @param roots A list of the analysis roots that are to be re-analyzed.
+   */
+  public void analysis_reanalyze(List<String> roots);
+
+  /**
+   * {@code analysis.setAnalysisRoots}
+   *
+   * Sets the root paths used to determine which files to analyze. The set of files to be analyzed
+   * are all of the files in one of the root paths that are not either explicitly or implicitly
+   * excluded. A file is explicitly excluded if it is in one of the excluded paths. A file is
+   * implicitly excluded if it is in a subdirectory of one of the root paths where the name of the
+   * subdirectory starts with a period (that is, a hidden directory).
+   *
+   * Note that this request determines the set of requested analysis roots. The actual set of
+   * analysis roots at any given time is the intersection of this set with the set of files and
+   * directories actually present on the filesystem. When the filesystem changes, the actual set of
+   * analysis roots is automatically updated, but the set of requested analysis roots is unchanged.
+   * This means that if the client sets an analysis root before the root becomes visible to server in
+   * the filesystem, there is no error; once the server sees the root in the filesystem it will start
+   * analyzing it. Similarly, server will stop analyzing files that are removed from the file system
+   * but they will remain in the set of requested roots.
+   *
+   * If an included path represents a file, then server will look in the directory containing the
+   * file for a pubspec.yaml file. If none is found, then the parents of the directory will be
+   * searched until such a file is found or the root of the file system is reached. If such a file is
+   * found, it will be used to resolve package: URI’s within the file.
+   *
+   * @param included A list of the files and directories that should be analyzed.
+   * @param excluded A list of the files and directories within the included directories that should
+   *         not be analyzed.
+   * @param packageRoots A mapping from source directories to target directories that should override
+   *         the normal package: URI resolution mechanism. The analyzer will behave as though each
+   *         source directory in the map contains a special pubspec.yaml file which resolves any
+   *         package: URI to the corresponding path within the target directory. The effect is the
+   *         same as specifying the target directory as a "--package_root" parameter to the Dart VM
+   *         when executing any Dart file inside the source directory. Files in any directories that
+   *         are not overridden by this mapping have their package: URI's resolved using the normal
+   *         pubspec.yaml mechanism. If this field is absent, or the empty map is specified, that
+   *         indicates that the normal pubspec.yaml mechanism should always be used.
+   */
+  public void analysis_setAnalysisRoots(List<String> included, List<String> excluded, Map<String, String> packageRoots);
+
+  /**
+   * {@code analysis.setPriorityFiles}
+   *
+   * Set the priority files to the files in the given list. A priority file is a file that is given
+   * priority when scheduling which analysis work to do first. The list typically contains those
+   * files that are visible to the user and those for which analysis results will have the biggest
+   * impact on the user experience. The order of the files within the list is significant: the first
+   * file will be given higher priority than the second, the second higher priority than the third,
+   * and so on.
+   *
+   * Note that this request determines the set of requested priority files. The actual set of
+   * priority files is the intersection of the requested set of priority files with the set of files
+   * currently subject to analysis. (See analysis.setSubscriptions for a description of files that
+   * are subject to analysis.)
+   *
+   * If a requested priority file is a directory it is ignored, but remains in the set of requested
+   * priority files so that if it later becomes a file it can be included in the set of actual
+   * priority files.
+   *
+   * @param files The files that are to be a priority for analysis.
+   */
+  public void analysis_setPriorityFiles(List<String> files);
+
+  /**
+   * {@code analysis.setSubscriptions}
+   *
+   * Subscribe for services. All previous subscriptions are replaced by the current set of
+   * subscriptions. If a given service is not included as a key in the map then no files will be
+   * subscribed to the service, exactly as if the service had been included in the map with an
+   * explicit empty list of files.
+   *
+   * Note that this request determines the set of requested subscriptions. The actual set of
+   * subscriptions at any given time is the intersection of this set with the set of files currently
+   * subject to analysis. The files currently subject to analysis are the set of files contained
+   * within an actual analysis root but not excluded, plus all of the files transitively reachable
+   * from those files via import, export and part directives. (See analysis.setAnalysisRoots for an
+   * explanation of how the actual analysis roots are determined.) When the actual analysis roots
+   * change, the actual set of subscriptions is automatically updated, but the set of requested
+   * subscriptions is unchanged.
+   *
+   * If a requested subscription is a directory it is ignored, but remains in the set of requested
+   * subscriptions so that if it later becomes a file it can be included in the set of actual
+   * subscriptions.
+   *
+   * It is an error if any of the keys in the map are not valid services. If there is an error, then
+   * the existing subscriptions will remain unchanged.
+   *
+   * @param subscriptions A table mapping services to a list of the files being subscribed to the
+   *         service.
+   */
+  public void analysis_setSubscriptions(Map<String, List<String>> subscriptions);
+
+  /**
+   * {@code analysis.updateContent}
+   *
+   * Update the content of one or more files. Files that were previously updated but not included in
+   * this update remain unchanged. This effectively represents an overlay of the filesystem. The
+   * files whose content is overridden are therefore seen by server as being files with the given
+   * content, even if the files do not exist on the filesystem or if the file path represents the
+   * path to a directory on the filesystem.
+   *
+   * @param files A table mapping the files whose content has changed to a description of the content
+   *         change.
+   */
+  public void analysis_updateContent(Map<String, Object> files, UpdateContentConsumer consumer);
+
+  /**
+   * {@code analysis.updateOptions}
+   *
+   * Update the options controlling analysis based on the given set of options. Any options that are
+   * not included in the analysis options will not be changed. If there are options in the analysis
+   * options that are not valid, they will be silently ignored.
+   *
+   * @param options The options that are to be used to control analysis.
+   */
+  public void analysis_updateOptions(AnalysisOptions options);
+
+  /**
+   * {@code completion.getSuggestions}
+   *
+   * Request that completion suggestions for the given offset in the given file be returned.
+   *
+   * @param file The file containing the point at which suggestions are to be made.
+   * @param offset The offset within the file at which suggestions are to be made.
+   */
+  public void completion_getSuggestions(String file, int offset, GetSuggestionsConsumer consumer);
+
+  /**
+   * {@code edit.format}
+   *
+   * Format the contents of a single file. The currently selected region of text is passed in so that
+   * the selection can be preserved across the formatting operation. The updated selection will be as
+   * close to matching the original as possible, but whitespace at the beginning or end of the
+   * selected region will be ignored. If preserving selection information is not required, zero (0)
+   * can be specified for both the selection offset and selection length.
+   *
+   * If a request is made for a file which does not exist, or which is not currently subject to
+   * analysis (e.g. because it is not associated with any analysis root specified to
+   * analysis.setAnalysisRoots), an error of type FORMAT_INVALID_FILE will be generated. If the
+   * source contains syntax errors, an error of type FORMAT_WITH_ERRORS will be generated.
+   *
+   * @param file The file containing the code to be formatted.
+   * @param selectionOffset The offset of the current selection in the file.
+   * @param selectionLength The length of the current selection in the file.
+   */
+  public void edit_format(String file, int selectionOffset, int selectionLength, FormatConsumer consumer);
+
+  /**
+   * {@code edit.getAssists}
+   *
+   * Return the set of assists that are available at the given location. An assist is distinguished
+   * from a refactoring primarily by the fact that it affects a single file and does not require user
+   * input in order to be performed.
+   *
+   * @param file The file containing the code for which assists are being requested.
+   * @param offset The offset of the code for which assists are being requested.
+   * @param length The length of the code for which assists are being requested.
+   */
+  public void edit_getAssists(String file, int offset, int length, GetAssistsConsumer consumer);
+
+  /**
+   * {@code edit.getAvailableRefactorings}
+   *
+   * Get a list of the kinds of refactorings that are valid for the given selection in the given
+   * file.
+   *
+   * @param file The file containing the code on which the refactoring would be based.
+   * @param offset The offset of the code on which the refactoring would be based.
+   * @param length The length of the code on which the refactoring would be based.
+   */
+  public void edit_getAvailableRefactorings(String file, int offset, int length, GetAvailableRefactoringsConsumer consumer);
+
+  /**
+   * {@code edit.getFixes}
+   *
+   * Return the set of fixes that are available for the errors at a given offset in a given file.
+   *
+   * @param file The file containing the errors for which fixes are being requested.
+   * @param offset The offset used to select the errors for which fixes will be returned.
+   */
+  public void edit_getFixes(String file, int offset, GetFixesConsumer consumer);
+
+  /**
+   * {@code edit.getRefactoring}
+   *
+   * Get the changes required to perform a refactoring.
+   *
+   * If another refactoring request is received during the processing of this one, an error of type
+   * REFACTORING_REQUEST_CANCELLED will be generated.
+   *
+   * @param kind The kind of refactoring to be performed.
+   * @param file The file containing the code involved in the refactoring.
+   * @param offset The offset of the region involved in the refactoring.
+   * @param length The length of the region involved in the refactoring.
+   * @param validateOnly True if the client is only requesting that the values of the options be
+   *         validated and no change be generated.
+   * @param options Data used to provide values provided by the user. The structure of the data is
+   *         dependent on the kind of refactoring being performed. The data that is expected is
+   *         documented in the section titled Refactorings, labeled as “Options”. This field can be
+   *         omitted if the refactoring does not require any options or if the values of those
+   *         options are not known.
+   */
+  public void edit_getRefactoring(String kind, String file, int offset, int length, boolean validateOnly, RefactoringOptions options, GetRefactoringConsumer consumer);
+
+  /**
+   * {@code edit.sortMembers}
+   *
+   * Sort all of the directives, unit and class members of the given Dart file.
+   *
+   * If a request is made for a file that does not exist, does not belong to an analysis root or is
+   * not a Dart file, SORT_MEMBERS_INVALID_FILE will be generated.
+   *
+   * If the Dart file has scan or parse errors, SORT_MEMBERS_PARSE_ERRORS will be generated.
+   *
+   * @param file The Dart file to sort.
+   */
+  public void edit_sortMembers(String file, SortMembersConsumer consumer);
+
+  /**
+   * {@code execution.createContext}
+   *
+   * Create an execution context for the executable file with the given path. The context that is
+   * created will persist until execution.deleteContext is used to delete it. Clients, therefore, are
+   * responsible for managing the lifetime of execution contexts.
+   *
+   * @param contextRoot The path of the Dart or HTML file that will be launched, or the path of the
+   *         directory containing the file.
+   */
+  public void execution_createContext(String contextRoot, CreateContextConsumer consumer);
+
+  /**
+   * {@code execution.deleteContext}
+   *
+   * Delete the execution context with the given identifier. The context id is no longer valid after
+   * this command. The server is allowed to re-use ids when they are no longer valid.
+   *
+   * @param id The identifier of the execution context that is to be deleted.
+   */
+  public void execution_deleteContext(String id);
+
+  /**
+   * {@code execution.mapUri}
+   *
+   * Map a URI from the execution context to the file that it corresponds to, or map a file to the
+   * URI that it corresponds to in the execution context.
+   *
+   * Exactly one of the file and uri fields must be provided. If both fields are provided, then an
+   * error of type INVALID_PARAMETER will be generated. Similarly, if neither field is provided, then
+   * an error of type INVALID_PARAMETER will be generated.
+   *
+   * If the file field is provided and the value is not the path of a file (either the file does not
+   * exist or the path references something other than a file), then an error of type
+   * INVALID_PARAMETER will be generated.
+   *
+   * If the uri field is provided and the value is not a valid URI or if the URI references something
+   * that is not a file (either a file that does not exist or something other than a file), then an
+   * error of type INVALID_PARAMETER will be generated.
+   *
+   * If the contextRoot used to create the execution context does not exist, then an error of type
+   * INVALID_EXECUTION_CONTEXT will be generated.
+   *
+   * @param id The identifier of the execution context in which the URI is to be mapped.
+   * @param file The path of the file to be mapped into a URI.
+   * @param uri The URI to be mapped into a file path.
+   */
+  public void execution_mapUri(String id, String file, String uri, MapUriConsumer consumer);
+
+  /**
+   * {@code execution.setSubscriptions}
+   *
+   * Subscribe for services. All previous subscriptions are replaced by the given set of services.
+   *
+   * It is an error if any of the elements in the list are not valid services. If there is an error,
+   * then the current subscriptions will remain unchanged.
+   *
+   * @param subscriptions A list of the services being subscribed to.
+   */
+  public void execution_setSubscriptions(List<String> subscriptions);
+
+  /**
+   * Return {@code true} if the socket is open.
+   */
+  public boolean isSocketOpen();
+
+  /**
+   * Remove the given listener from the list of listeners that will receive notification when new
+     * analysis results become available.
+   *
+   * @param listener the listener to be removed
+   */
+  public void removeAnalysisServerListener(AnalysisServerListener listener);
+
+  /**
+   * {@code search.findElementReferences}
+   *
+   * Perform a search for references to the element defined or referenced at the given offset in the
+   * given file.
+   *
+   * An identifier is returned immediately, and individual results will be returned via the
+   * search.results notification as they become available.
+   *
+   * @param file The file containing the declaration of or reference to the element used to define
+   *         the search.
+   * @param offset The offset within the file of the declaration of or reference to the element.
+   * @param includePotential True if potential matches are to be included in the results.
+   */
+  public void search_findElementReferences(String file, int offset, boolean includePotential, FindElementReferencesConsumer consumer);
+
+  /**
+   * {@code search.findMemberDeclarations}
+   *
+   * Perform a search for declarations of members whose name is equal to the given name.
+   *
+   * An identifier is returned immediately, and individual results will be returned via the
+   * search.results notification as they become available.
+   *
+   * @param name The name of the declarations to be found.
+   */
+  public void search_findMemberDeclarations(String name, FindMemberDeclarationsConsumer consumer);
+
+  /**
+   * {@code search.findMemberReferences}
+   *
+   * Perform a search for references to members whose name is equal to the given name. This search
+   * does not check to see that there is a member defined with the given name, so it is able to find
+   * references to undefined members as well.
+   *
+   * An identifier is returned immediately, and individual results will be returned via the
+   * search.results notification as they become available.
+   *
+   * @param name The name of the references to be found.
+   */
+  public void search_findMemberReferences(String name, FindMemberReferencesConsumer consumer);
+
+  /**
+   * {@code search.findTopLevelDeclarations}
+   *
+   * Perform a search for declarations of top-level elements (classes, typedefs, getters, setters,
+   * functions and fields) whose name matches the given pattern.
+   *
+   * An identifier is returned immediately, and individual results will be returned via the
+   * search.results notification as they become available.
+   *
+   * @param pattern The regular expression used to match the names of the declarations to be found.
+   */
+  public void search_findTopLevelDeclarations(String pattern, FindTopLevelDeclarationsConsumer consumer);
+
+  /**
+   * {@code search.getTypeHierarchy}
+   *
+   * Return the type hierarchy of the class declared or referenced at the given location.
+   *
+   * @param file The file containing the declaration or reference to the type for which a hierarchy
+   *         is being requested.
+   * @param offset The offset of the name of the type within the file.
+   */
+  public void search_getTypeHierarchy(String file, int offset, GetTypeHierarchyConsumer consumer);
+
+  /**
+   * {@code server.getVersion}
+   *
+   * Return the version number of the analysis server.
+   */
+  public void server_getVersion(GetVersionConsumer consumer);
+
+  /**
+   * {@code server.setSubscriptions}
+   *
+   * Subscribe for services. All previous subscriptions are replaced by the given set of services.
+   *
+   * It is an error if any of the elements in the list are not valid services. If there is an error,
+   * then the current subscriptions will remain unchanged.
+   *
+   * @param subscriptions A list of the services being subscribed to.
+   */
+  public void server_setSubscriptions(List<String> subscriptions);
+
+  /**
+   * {@code server.shutdown}
+   *
+   * Cleanly shutdown the analysis server. Requests that are received after this request will not be
+   * processed. Requests that were received before this request, but for which a response has not yet
+   * been sent, will not be responded to. No further responses or notifications will be sent after
+   * the response to this request has been sent.
+   */
+  public void server_shutdown();
+
+  /**
+   * Start the analysis server.
+   */
+  public void start() throws Exception;
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java b/pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java
new file mode 100644
index 0000000..3ffc75f
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A directive to begin overlaying the contents of a file. The supplied content will be used for
+ * analysis in place of the file contents in the filesystem.
+ *
+ * If this directive is used on a file that already has a file content overlay, the old overlay is
+ * discarded and replaced with the new one.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class AddContentOverlay {
+
+  public static final AddContentOverlay[] EMPTY_ARRAY = new AddContentOverlay[0];
+
+  public static final List<AddContentOverlay> EMPTY_LIST = Lists.newArrayList();
+
+  private final String type;
+
+  /**
+   * The new content of the file.
+   */
+  private final String content;
+
+  /**
+   * Constructor for {@link AddContentOverlay}.
+   */
+  public AddContentOverlay(String content) {
+    this.type = "add";
+    this.content = content;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof AddContentOverlay) {
+      AddContentOverlay other = (AddContentOverlay) obj;
+      return
+        ObjectUtilities.equals(other.type, type) &&
+        ObjectUtilities.equals(other.content, content);
+    }
+    return false;
+  }
+
+  public static AddContentOverlay fromJson(JsonObject jsonObject) {
+    String type = jsonObject.get("type").getAsString();
+    String content = jsonObject.get("content").getAsString();
+    return new AddContentOverlay(content);
+  }
+
+  public static List<AddContentOverlay> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<AddContentOverlay> list = new ArrayList<AddContentOverlay>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The new content of the file.
+   */
+  public String getContent() {
+    return content;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(type);
+    builder.append(content);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("type", type);
+    jsonObject.addProperty("content", content);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("type=");
+    builder.append(type + ", ");
+    builder.append("content=");
+    builder.append(content);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java
new file mode 100644
index 0000000..c9b75e8
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An indication of an error, warning, or hint that was produced by the analysis.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class AnalysisError {
+
+  public static final AnalysisError[] EMPTY_ARRAY = new AnalysisError[0];
+
+  public static final List<AnalysisError> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The severity of the error.
+   */
+  private final String severity;
+
+  /**
+   * The type of the error.
+   */
+  private final String type;
+
+  /**
+   * The location associated with the error.
+   */
+  private final Location location;
+
+  /**
+   * The message to be displayed for this error. The message should indicate what is wrong with the
+   * code and why it is wrong.
+   */
+  private final String message;
+
+  /**
+   * The correction message to be displayed for this error. The correction message should indicate
+   * how the user can fix the error. The field is omitted if there is no correction message
+   * associated with the error code.
+   */
+  private final String correction;
+
+  /**
+   * Constructor for {@link AnalysisError}.
+   */
+  public AnalysisError(String severity, String type, Location location, String message, String correction) {
+    this.severity = severity;
+    this.type = type;
+    this.location = location;
+    this.message = message;
+    this.correction = correction;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof AnalysisError) {
+      AnalysisError other = (AnalysisError) obj;
+      return
+        ObjectUtilities.equals(other.severity, severity) &&
+        ObjectUtilities.equals(other.type, type) &&
+        ObjectUtilities.equals(other.location, location) &&
+        ObjectUtilities.equals(other.message, message) &&
+        ObjectUtilities.equals(other.correction, correction);
+    }
+    return false;
+  }
+
+  public static AnalysisError fromJson(JsonObject jsonObject) {
+    String severity = jsonObject.get("severity").getAsString();
+    String type = jsonObject.get("type").getAsString();
+    Location location = Location.fromJson(jsonObject.get("location").getAsJsonObject());
+    String message = jsonObject.get("message").getAsString();
+    String correction = jsonObject.get("correction") == null ? null : jsonObject.get("correction").getAsString();
+    return new AnalysisError(severity, type, location, message, correction);
+  }
+
+  public static List<AnalysisError> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<AnalysisError> list = new ArrayList<AnalysisError>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The correction message to be displayed for this error. The correction message should indicate
+   * how the user can fix the error. The field is omitted if there is no correction message
+   * associated with the error code.
+   */
+  public String getCorrection() {
+    return correction;
+  }
+
+  /**
+   * The location associated with the error.
+   */
+  public Location getLocation() {
+    return location;
+  }
+
+  /**
+   * The message to be displayed for this error. The message should indicate what is wrong with the
+   * code and why it is wrong.
+   */
+  public String getMessage() {
+    return message;
+  }
+
+  /**
+   * The severity of the error.
+   */
+  public String getSeverity() {
+    return severity;
+  }
+
+  /**
+   * The type of the error.
+   */
+  public String getType() {
+    return type;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(severity);
+    builder.append(type);
+    builder.append(location);
+    builder.append(message);
+    builder.append(correction);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("severity", severity);
+    jsonObject.addProperty("type", type);
+    jsonObject.add("location", location.toJson());
+    jsonObject.addProperty("message", message);
+    if (correction != null) {
+      jsonObject.addProperty("correction", correction);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("severity=");
+    builder.append(severity + ", ");
+    builder.append("type=");
+    builder.append(type + ", ");
+    builder.append("location=");
+    builder.append(location + ", ");
+    builder.append("message=");
+    builder.append(message + ", ");
+    builder.append("correction=");
+    builder.append(correction);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java
new file mode 100644
index 0000000..1868fbd
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A list of fixes associated with a specific error
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class AnalysisErrorFixes {
+
+  public static final AnalysisErrorFixes[] EMPTY_ARRAY = new AnalysisErrorFixes[0];
+
+  public static final List<AnalysisErrorFixes> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The error with which the fixes are associated.
+   */
+  private final AnalysisError error;
+
+  /**
+   * The fixes associated with the error.
+   */
+  private final List<SourceChange> fixes;
+
+  /**
+   * Constructor for {@link AnalysisErrorFixes}.
+   */
+  public AnalysisErrorFixes(AnalysisError error, List<SourceChange> fixes) {
+    this.error = error;
+    this.fixes = fixes;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof AnalysisErrorFixes) {
+      AnalysisErrorFixes other = (AnalysisErrorFixes) obj;
+      return
+        ObjectUtilities.equals(other.error, error) &&
+        ObjectUtilities.equals(other.fixes, fixes);
+    }
+    return false;
+  }
+
+  public static AnalysisErrorFixes fromJson(JsonObject jsonObject) {
+    AnalysisError error = AnalysisError.fromJson(jsonObject.get("error").getAsJsonObject());
+    List<SourceChange> fixes = SourceChange.fromJsonArray(jsonObject.get("fixes").getAsJsonArray());
+    return new AnalysisErrorFixes(error, fixes);
+  }
+
+  public static List<AnalysisErrorFixes> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<AnalysisErrorFixes> list = new ArrayList<AnalysisErrorFixes>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The error with which the fixes are associated.
+   */
+  public AnalysisError getError() {
+    return error;
+  }
+
+  /**
+   * The fixes associated with the error.
+   */
+  public List<SourceChange> getFixes() {
+    return fixes;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(error);
+    builder.append(fixes);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.add("error", error.toJson());
+    JsonArray jsonArrayFixes = new JsonArray();
+    for (SourceChange elt : fixes) {
+      jsonArrayFixes.add(elt.toJson());
+    }
+    jsonObject.add("fixes", jsonArrayFixes);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("error=");
+    builder.append(error + ", ");
+    builder.append("fixes=");
+    builder.append(StringUtils.join(fixes, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java
new file mode 100644
index 0000000..6fbfabb
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the possible severities of analysis errors.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class AnalysisErrorSeverity {
+
+  public static final String INFO = "INFO";
+
+  public static final String WARNING = "WARNING";
+
+  public static final String ERROR = "ERROR";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java
new file mode 100644
index 0000000..eb45b09
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the possible types of analysis errors.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class AnalysisErrorType {
+
+  public static final String CHECKED_MODE_COMPILE_TIME_ERROR = "CHECKED_MODE_COMPILE_TIME_ERROR";
+
+  public static final String COMPILE_TIME_ERROR = "COMPILE_TIME_ERROR";
+
+  public static final String HINT = "HINT";
+
+  public static final String LINT = "LINT";
+
+  public static final String STATIC_TYPE_WARNING = "STATIC_TYPE_WARNING";
+
+  public static final String STATIC_WARNING = "STATIC_WARNING";
+
+  public static final String SYNTACTIC_ERROR = "SYNTACTIC_ERROR";
+
+  public static final String TODO = "TODO";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java
new file mode 100644
index 0000000..9ec191d
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java
@@ -0,0 +1,258 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A set of options controlling what kind of analysis is to be performed. If the value of a field
+ * is omitted the value of the option will not be changed.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class AnalysisOptions {
+
+  public static final AnalysisOptions[] EMPTY_ARRAY = new AnalysisOptions[0];
+
+  public static final List<AnalysisOptions> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * Deprecated
+   *
+   * True if the client wants to enable support for the proposed async feature.
+   */
+  private final Boolean enableAsync;
+
+  /**
+   * Deprecated
+   *
+   * True if the client wants to enable support for the proposed deferred loading feature.
+   */
+  private final Boolean enableDeferredLoading;
+
+  /**
+   * Deprecated
+   *
+   * True if the client wants to enable support for the proposed enum feature.
+   */
+  private final Boolean enableEnums;
+
+  /**
+   * True if the client wants to enable support for the proposed "null aware operators" feature.
+   */
+  private final Boolean enableNullAwareOperators;
+
+  /**
+   * True if hints that are specific to dart2js should be generated. This option is ignored if
+   * generateHints is false.
+   */
+  private final Boolean generateDart2jsHints;
+
+  /**
+   * True if hints should be generated as part of generating errors and warnings.
+   */
+  private final Boolean generateHints;
+
+  /**
+   * True if lints should be generated as part of generating errors and warnings.
+   */
+  private final Boolean generateLints;
+
+  /**
+   * Constructor for {@link AnalysisOptions}.
+   */
+  public AnalysisOptions(Boolean enableAsync, Boolean enableDeferredLoading, Boolean enableEnums, Boolean enableNullAwareOperators, Boolean generateDart2jsHints, Boolean generateHints, Boolean generateLints) {
+    this.enableAsync = enableAsync;
+    this.enableDeferredLoading = enableDeferredLoading;
+    this.enableEnums = enableEnums;
+    this.enableNullAwareOperators = enableNullAwareOperators;
+    this.generateDart2jsHints = generateDart2jsHints;
+    this.generateHints = generateHints;
+    this.generateLints = generateLints;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof AnalysisOptions) {
+      AnalysisOptions other = (AnalysisOptions) obj;
+      return
+        ObjectUtilities.equals(other.enableAsync, enableAsync) &&
+        ObjectUtilities.equals(other.enableDeferredLoading, enableDeferredLoading) &&
+        ObjectUtilities.equals(other.enableEnums, enableEnums) &&
+        ObjectUtilities.equals(other.enableNullAwareOperators, enableNullAwareOperators) &&
+        ObjectUtilities.equals(other.generateDart2jsHints, generateDart2jsHints) &&
+        ObjectUtilities.equals(other.generateHints, generateHints) &&
+        ObjectUtilities.equals(other.generateLints, generateLints);
+    }
+    return false;
+  }
+
+  public static AnalysisOptions fromJson(JsonObject jsonObject) {
+    Boolean enableAsync = jsonObject.get("enableAsync") == null ? null : jsonObject.get("enableAsync").getAsBoolean();
+    Boolean enableDeferredLoading = jsonObject.get("enableDeferredLoading") == null ? null : jsonObject.get("enableDeferredLoading").getAsBoolean();
+    Boolean enableEnums = jsonObject.get("enableEnums") == null ? null : jsonObject.get("enableEnums").getAsBoolean();
+    Boolean enableNullAwareOperators = jsonObject.get("enableNullAwareOperators") == null ? null : jsonObject.get("enableNullAwareOperators").getAsBoolean();
+    Boolean generateDart2jsHints = jsonObject.get("generateDart2jsHints") == null ? null : jsonObject.get("generateDart2jsHints").getAsBoolean();
+    Boolean generateHints = jsonObject.get("generateHints") == null ? null : jsonObject.get("generateHints").getAsBoolean();
+    Boolean generateLints = jsonObject.get("generateLints") == null ? null : jsonObject.get("generateLints").getAsBoolean();
+    return new AnalysisOptions(enableAsync, enableDeferredLoading, enableEnums, enableNullAwareOperators, generateDart2jsHints, generateHints, generateLints);
+  }
+
+  public static List<AnalysisOptions> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<AnalysisOptions> list = new ArrayList<AnalysisOptions>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * Deprecated
+   *
+   * True if the client wants to enable support for the proposed async feature.
+   */
+  public Boolean getEnableAsync() {
+    return enableAsync;
+  }
+
+  /**
+   * Deprecated
+   *
+   * True if the client wants to enable support for the proposed deferred loading feature.
+   */
+  public Boolean getEnableDeferredLoading() {
+    return enableDeferredLoading;
+  }
+
+  /**
+   * Deprecated
+   *
+   * True if the client wants to enable support for the proposed enum feature.
+   */
+  public Boolean getEnableEnums() {
+    return enableEnums;
+  }
+
+  /**
+   * True if the client wants to enable support for the proposed "null aware operators" feature.
+   */
+  public Boolean getEnableNullAwareOperators() {
+    return enableNullAwareOperators;
+  }
+
+  /**
+   * True if hints that are specific to dart2js should be generated. This option is ignored if
+   * generateHints is false.
+   */
+  public Boolean getGenerateDart2jsHints() {
+    return generateDart2jsHints;
+  }
+
+  /**
+   * True if hints should be generated as part of generating errors and warnings.
+   */
+  public Boolean getGenerateHints() {
+    return generateHints;
+  }
+
+  /**
+   * True if lints should be generated as part of generating errors and warnings.
+   */
+  public Boolean getGenerateLints() {
+    return generateLints;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(enableAsync);
+    builder.append(enableDeferredLoading);
+    builder.append(enableEnums);
+    builder.append(enableNullAwareOperators);
+    builder.append(generateDart2jsHints);
+    builder.append(generateHints);
+    builder.append(generateLints);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    if (enableAsync != null) {
+      jsonObject.addProperty("enableAsync", enableAsync);
+    }
+    if (enableDeferredLoading != null) {
+      jsonObject.addProperty("enableDeferredLoading", enableDeferredLoading);
+    }
+    if (enableEnums != null) {
+      jsonObject.addProperty("enableEnums", enableEnums);
+    }
+    if (enableNullAwareOperators != null) {
+      jsonObject.addProperty("enableNullAwareOperators", enableNullAwareOperators);
+    }
+    if (generateDart2jsHints != null) {
+      jsonObject.addProperty("generateDart2jsHints", generateDart2jsHints);
+    }
+    if (generateHints != null) {
+      jsonObject.addProperty("generateHints", generateHints);
+    }
+    if (generateLints != null) {
+      jsonObject.addProperty("generateLints", generateLints);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("enableAsync=");
+    builder.append(enableAsync + ", ");
+    builder.append("enableDeferredLoading=");
+    builder.append(enableDeferredLoading + ", ");
+    builder.append("enableEnums=");
+    builder.append(enableEnums + ", ");
+    builder.append("enableNullAwareOperators=");
+    builder.append(enableNullAwareOperators + ", ");
+    builder.append("generateDart2jsHints=");
+    builder.append(generateDart2jsHints + ", ");
+    builder.append("generateHints=");
+    builder.append(generateHints + ", ");
+    builder.append("generateLints=");
+    builder.append(generateLints);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
new file mode 100644
index 0000000..eef2903
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the services provided by the analysis domain.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class AnalysisService {
+
+  public static final String FOLDING = "FOLDING";
+
+  public static final String HIGHLIGHTS = "HIGHLIGHTS";
+
+  public static final String INVALIDATE = "INVALIDATE";
+
+  public static final String NAVIGATION = "NAVIGATION";
+
+  public static final String OCCURRENCES = "OCCURRENCES";
+
+  public static final String OUTLINE = "OUTLINE";
+
+  public static final String OVERRIDES = "OVERRIDES";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java
new file mode 100644
index 0000000..fcff703
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An indication of the current state of analysis.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class AnalysisStatus {
+
+  public static final AnalysisStatus[] EMPTY_ARRAY = new AnalysisStatus[0];
+
+  public static final List<AnalysisStatus> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * True if analysis is currently being performed.
+   */
+  private final boolean isAnalyzing;
+
+  /**
+   * The name of the current target of analysis. This field is omitted if analyzing is false.
+   */
+  private final String analysisTarget;
+
+  /**
+   * Constructor for {@link AnalysisStatus}.
+   */
+  public AnalysisStatus(boolean isAnalyzing, String analysisTarget) {
+    this.isAnalyzing = isAnalyzing;
+    this.analysisTarget = analysisTarget;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof AnalysisStatus) {
+      AnalysisStatus other = (AnalysisStatus) obj;
+      return
+        other.isAnalyzing == isAnalyzing &&
+        ObjectUtilities.equals(other.analysisTarget, analysisTarget);
+    }
+    return false;
+  }
+
+  public static AnalysisStatus fromJson(JsonObject jsonObject) {
+    boolean isAnalyzing = jsonObject.get("isAnalyzing").getAsBoolean();
+    String analysisTarget = jsonObject.get("analysisTarget") == null ? null : jsonObject.get("analysisTarget").getAsString();
+    return new AnalysisStatus(isAnalyzing, analysisTarget);
+  }
+
+  public static List<AnalysisStatus> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<AnalysisStatus> list = new ArrayList<AnalysisStatus>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The name of the current target of analysis. This field is omitted if analyzing is false.
+   */
+  public String getAnalysisTarget() {
+    return analysisTarget;
+  }
+
+  /**
+   * True if analysis is currently being performed.
+   */
+  public boolean isAnalyzing() {
+    return isAnalyzing;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(isAnalyzing);
+    builder.append(analysisTarget);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("isAnalyzing", isAnalyzing);
+    if (analysisTarget != null) {
+      jsonObject.addProperty("analysisTarget", analysisTarget);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("isAnalyzing=");
+    builder.append(isAnalyzing + ", ");
+    builder.append("analysisTarget=");
+    builder.append(analysisTarget);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java b/pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java
new file mode 100644
index 0000000..468bb07
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A directive to modify an existing file content overlay. One or more ranges of text are deleted
+ * from the old file content overlay and replaced with new text.
+ *
+ * The edits are applied in the order in which they occur in the list. This means that the offset
+ * of each edit must be correct under the assumption that all previous edits have been applied.
+ *
+ * It is an error to use this overlay on a file that does not yet have a file content overlay or
+ * that has had its overlay removed via RemoveContentOverlay.
+ *
+ * If any of the edits cannot be applied due to its offset or length being out of range, an
+ * INVALID_OVERLAY_CHANGE error will be reported.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ChangeContentOverlay {
+
+  public static final ChangeContentOverlay[] EMPTY_ARRAY = new ChangeContentOverlay[0];
+
+  public static final List<ChangeContentOverlay> EMPTY_LIST = Lists.newArrayList();
+
+  private final String type;
+
+  /**
+   * The edits to be applied to the file.
+   */
+  private final List<SourceEdit> edits;
+
+  /**
+   * Constructor for {@link ChangeContentOverlay}.
+   */
+  public ChangeContentOverlay(List<SourceEdit> edits) {
+    this.type = "change";
+    this.edits = edits;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ChangeContentOverlay) {
+      ChangeContentOverlay other = (ChangeContentOverlay) obj;
+      return
+        ObjectUtilities.equals(other.type, type) &&
+        ObjectUtilities.equals(other.edits, edits);
+    }
+    return false;
+  }
+
+  public static ChangeContentOverlay fromJson(JsonObject jsonObject) {
+    String type = jsonObject.get("type").getAsString();
+    List<SourceEdit> edits = SourceEdit.fromJsonArray(jsonObject.get("edits").getAsJsonArray());
+    return new ChangeContentOverlay(edits);
+  }
+
+  public static List<ChangeContentOverlay> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ChangeContentOverlay> list = new ArrayList<ChangeContentOverlay>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The edits to be applied to the file.
+   */
+  public List<SourceEdit> getEdits() {
+    return edits;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(type);
+    builder.append(edits);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("type", type);
+    JsonArray jsonArrayEdits = new JsonArray();
+    for (SourceEdit elt : edits) {
+      jsonArrayEdits.add(elt.toJson());
+    }
+    jsonObject.add("edits", jsonArrayEdits);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("type=");
+    builder.append(type + ", ");
+    builder.append("edits=");
+    builder.append(StringUtils.join(edits, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
new file mode 100644
index 0000000..922dbf4
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
@@ -0,0 +1,520 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A suggestion for how to complete partially entered text. Many of the fields are optional,
+ * depending on the kind of element being suggested.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class CompletionSuggestion {
+
+  public static final CompletionSuggestion[] EMPTY_ARRAY = new CompletionSuggestion[0];
+
+  public static final List<CompletionSuggestion> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The kind of element being suggested.
+   */
+  private final String kind;
+
+  /**
+   * The relevance of this completion suggestion where a higher number indicates a higher relevance.
+   */
+  private final int relevance;
+
+  /**
+   * The identifier to be inserted if the suggestion is selected. If the suggestion is for a method
+   * or function, the client might want to additionally insert a template for the parameters. The
+   * information required in order to do so is contained in other fields.
+   */
+  private final String completion;
+
+  /**
+   * The offset, relative to the beginning of the completion, of where the selection should be placed
+   * after insertion.
+   */
+  private final int selectionOffset;
+
+  /**
+   * The number of characters that should be selected after insertion.
+   */
+  private final int selectionLength;
+
+  /**
+   * True if the suggested element is deprecated.
+   */
+  private final boolean isDeprecated;
+
+  /**
+   * True if the element is not known to be valid for the target. This happens if the type of the
+   * target is dynamic.
+   */
+  private final boolean isPotential;
+
+  /**
+   * An abbreviated version of the Dartdoc associated with the element being suggested, This field is
+   * omitted if there is no Dartdoc associated with the element.
+   */
+  private final String docSummary;
+
+  /**
+   * The Dartdoc associated with the element being suggested, This field is omitted if there is no
+   * Dartdoc associated with the element.
+   */
+  private final String docComplete;
+
+  /**
+   * The class that declares the element being suggested. This field is omitted if the suggested
+   * element is not a member of a class.
+   */
+  private final String declaringType;
+
+  /**
+   * Information about the element reference being suggested.
+   */
+  private final Element element;
+
+  /**
+   * The return type of the getter, function or method or the type of the field being suggested. This
+   * field is omitted if the suggested element is not a getter, function or method.
+   */
+  private final String returnType;
+
+  /**
+   * The names of the parameters of the function or method being suggested. This field is omitted if
+   * the suggested element is not a setter, function or method.
+   */
+  private final List<String> parameterNames;
+
+  /**
+   * The types of the parameters of the function or method being suggested. This field is omitted if
+   * the parameterNames field is omitted.
+   */
+  private final List<String> parameterTypes;
+
+  /**
+   * The number of required parameters for the function or method being suggested. This field is
+   * omitted if the parameterNames field is omitted.
+   */
+  private final Integer requiredParameterCount;
+
+  /**
+   * True if the function or method being suggested has at least one named parameter. This field is
+   * omitted if the parameterNames field is omitted.
+   */
+  private final Boolean hasNamedParameters;
+
+  /**
+   * The name of the optional parameter being suggested. This field is omitted if the suggestion is
+   * not the addition of an optional argument within an argument list.
+   */
+  private final String parameterName;
+
+  /**
+   * The type of the options parameter being suggested. This field is omitted if the parameterName
+   * field is omitted.
+   */
+  private final String parameterType;
+
+  /**
+   * The import to be added if the suggestion is out of scope and needs an import to be added to be
+   * in scope.
+   */
+  private final String importUri;
+
+  /**
+   * Constructor for {@link CompletionSuggestion}.
+   */
+  public CompletionSuggestion(String kind, int relevance, String completion, int selectionOffset, int selectionLength, boolean isDeprecated, boolean isPotential, String docSummary, String docComplete, String declaringType, Element element, String returnType, List<String> parameterNames, List<String> parameterTypes, Integer requiredParameterCount, Boolean hasNamedParameters, String parameterName, String parameterType, String importUri) {
+    this.kind = kind;
+    this.relevance = relevance;
+    this.completion = completion;
+    this.selectionOffset = selectionOffset;
+    this.selectionLength = selectionLength;
+    this.isDeprecated = isDeprecated;
+    this.isPotential = isPotential;
+    this.docSummary = docSummary;
+    this.docComplete = docComplete;
+    this.declaringType = declaringType;
+    this.element = element;
+    this.returnType = returnType;
+    this.parameterNames = parameterNames;
+    this.parameterTypes = parameterTypes;
+    this.requiredParameterCount = requiredParameterCount;
+    this.hasNamedParameters = hasNamedParameters;
+    this.parameterName = parameterName;
+    this.parameterType = parameterType;
+    this.importUri = importUri;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof CompletionSuggestion) {
+      CompletionSuggestion other = (CompletionSuggestion) obj;
+      return
+        ObjectUtilities.equals(other.kind, kind) &&
+        other.relevance == relevance &&
+        ObjectUtilities.equals(other.completion, completion) &&
+        other.selectionOffset == selectionOffset &&
+        other.selectionLength == selectionLength &&
+        other.isDeprecated == isDeprecated &&
+        other.isPotential == isPotential &&
+        ObjectUtilities.equals(other.docSummary, docSummary) &&
+        ObjectUtilities.equals(other.docComplete, docComplete) &&
+        ObjectUtilities.equals(other.declaringType, declaringType) &&
+        ObjectUtilities.equals(other.element, element) &&
+        ObjectUtilities.equals(other.returnType, returnType) &&
+        ObjectUtilities.equals(other.parameterNames, parameterNames) &&
+        ObjectUtilities.equals(other.parameterTypes, parameterTypes) &&
+        ObjectUtilities.equals(other.requiredParameterCount, requiredParameterCount) &&
+        ObjectUtilities.equals(other.hasNamedParameters, hasNamedParameters) &&
+        ObjectUtilities.equals(other.parameterName, parameterName) &&
+        ObjectUtilities.equals(other.parameterType, parameterType) &&
+        ObjectUtilities.equals(other.importUri, importUri);
+    }
+    return false;
+  }
+
+  public static CompletionSuggestion fromJson(JsonObject jsonObject) {
+    String kind = jsonObject.get("kind").getAsString();
+    int relevance = jsonObject.get("relevance").getAsInt();
+    String completion = jsonObject.get("completion").getAsString();
+    int selectionOffset = jsonObject.get("selectionOffset").getAsInt();
+    int selectionLength = jsonObject.get("selectionLength").getAsInt();
+    boolean isDeprecated = jsonObject.get("isDeprecated").getAsBoolean();
+    boolean isPotential = jsonObject.get("isPotential").getAsBoolean();
+    String docSummary = jsonObject.get("docSummary") == null ? null : jsonObject.get("docSummary").getAsString();
+    String docComplete = jsonObject.get("docComplete") == null ? null : jsonObject.get("docComplete").getAsString();
+    String declaringType = jsonObject.get("declaringType") == null ? null : jsonObject.get("declaringType").getAsString();
+    Element element = jsonObject.get("element") == null ? null : Element.fromJson(jsonObject.get("element").getAsJsonObject());
+    String returnType = jsonObject.get("returnType") == null ? null : jsonObject.get("returnType").getAsString();
+    List<String> parameterNames = jsonObject.get("parameterNames") == null ? null : JsonUtilities.decodeStringList(jsonObject.get("parameterNames").getAsJsonArray());
+    List<String> parameterTypes = jsonObject.get("parameterTypes") == null ? null : JsonUtilities.decodeStringList(jsonObject.get("parameterTypes").getAsJsonArray());
+    Integer requiredParameterCount = jsonObject.get("requiredParameterCount") == null ? null : jsonObject.get("requiredParameterCount").getAsInt();
+    Boolean hasNamedParameters = jsonObject.get("hasNamedParameters") == null ? null : jsonObject.get("hasNamedParameters").getAsBoolean();
+    String parameterName = jsonObject.get("parameterName") == null ? null : jsonObject.get("parameterName").getAsString();
+    String parameterType = jsonObject.get("parameterType") == null ? null : jsonObject.get("parameterType").getAsString();
+    String importUri = jsonObject.get("importUri") == null ? null : jsonObject.get("importUri").getAsString();
+    return new CompletionSuggestion(kind, relevance, completion, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary, docComplete, declaringType, element, returnType, parameterNames, parameterTypes, requiredParameterCount, hasNamedParameters, parameterName, parameterType, importUri);
+  }
+
+  public static List<CompletionSuggestion> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<CompletionSuggestion> list = new ArrayList<CompletionSuggestion>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The identifier to be inserted if the suggestion is selected. If the suggestion is for a method
+   * or function, the client might want to additionally insert a template for the parameters. The
+   * information required in order to do so is contained in other fields.
+   */
+  public String getCompletion() {
+    return completion;
+  }
+
+  /**
+   * The class that declares the element being suggested. This field is omitted if the suggested
+   * element is not a member of a class.
+   */
+  public String getDeclaringType() {
+    return declaringType;
+  }
+
+  /**
+   * The Dartdoc associated with the element being suggested, This field is omitted if there is no
+   * Dartdoc associated with the element.
+   */
+  public String getDocComplete() {
+    return docComplete;
+  }
+
+  /**
+   * An abbreviated version of the Dartdoc associated with the element being suggested, This field is
+   * omitted if there is no Dartdoc associated with the element.
+   */
+  public String getDocSummary() {
+    return docSummary;
+  }
+
+  /**
+   * Information about the element reference being suggested.
+   */
+  public Element getElement() {
+    return element;
+  }
+
+  /**
+   * True if the function or method being suggested has at least one named parameter. This field is
+   * omitted if the parameterNames field is omitted.
+   */
+  public Boolean getHasNamedParameters() {
+    return hasNamedParameters;
+  }
+
+  /**
+   * The import to be added if the suggestion is out of scope and needs an import to be added to be
+   * in scope.
+   */
+  public String getImportUri() {
+    return importUri;
+  }
+
+  /**
+   * True if the suggested element is deprecated.
+   */
+  public boolean isDeprecated() {
+    return isDeprecated;
+  }
+
+  /**
+   * True if the element is not known to be valid for the target. This happens if the type of the
+   * target is dynamic.
+   */
+  public boolean isPotential() {
+    return isPotential;
+  }
+
+  /**
+   * The kind of element being suggested.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The name of the optional parameter being suggested. This field is omitted if the suggestion is
+   * not the addition of an optional argument within an argument list.
+   */
+  public String getParameterName() {
+    return parameterName;
+  }
+
+  /**
+   * The names of the parameters of the function or method being suggested. This field is omitted if
+   * the suggested element is not a setter, function or method.
+   */
+  public List<String> getParameterNames() {
+    return parameterNames;
+  }
+
+  /**
+   * The type of the options parameter being suggested. This field is omitted if the parameterName
+   * field is omitted.
+   */
+  public String getParameterType() {
+    return parameterType;
+  }
+
+  /**
+   * The types of the parameters of the function or method being suggested. This field is omitted if
+   * the parameterNames field is omitted.
+   */
+  public List<String> getParameterTypes() {
+    return parameterTypes;
+  }
+
+  /**
+   * The relevance of this completion suggestion where a higher number indicates a higher relevance.
+   */
+  public int getRelevance() {
+    return relevance;
+  }
+
+  /**
+   * The number of required parameters for the function or method being suggested. This field is
+   * omitted if the parameterNames field is omitted.
+   */
+  public Integer getRequiredParameterCount() {
+    return requiredParameterCount;
+  }
+
+  /**
+   * The return type of the getter, function or method or the type of the field being suggested. This
+   * field is omitted if the suggested element is not a getter, function or method.
+   */
+  public String getReturnType() {
+    return returnType;
+  }
+
+  /**
+   * The number of characters that should be selected after insertion.
+   */
+  public int getSelectionLength() {
+    return selectionLength;
+  }
+
+  /**
+   * The offset, relative to the beginning of the completion, of where the selection should be placed
+   * after insertion.
+   */
+  public int getSelectionOffset() {
+    return selectionOffset;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(kind);
+    builder.append(relevance);
+    builder.append(completion);
+    builder.append(selectionOffset);
+    builder.append(selectionLength);
+    builder.append(isDeprecated);
+    builder.append(isPotential);
+    builder.append(docSummary);
+    builder.append(docComplete);
+    builder.append(declaringType);
+    builder.append(element);
+    builder.append(returnType);
+    builder.append(parameterNames);
+    builder.append(parameterTypes);
+    builder.append(requiredParameterCount);
+    builder.append(hasNamedParameters);
+    builder.append(parameterName);
+    builder.append(parameterType);
+    builder.append(importUri);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("kind", kind);
+    jsonObject.addProperty("relevance", relevance);
+    jsonObject.addProperty("completion", completion);
+    jsonObject.addProperty("selectionOffset", selectionOffset);
+    jsonObject.addProperty("selectionLength", selectionLength);
+    jsonObject.addProperty("isDeprecated", isDeprecated);
+    jsonObject.addProperty("isPotential", isPotential);
+    if (docSummary != null) {
+      jsonObject.addProperty("docSummary", docSummary);
+    }
+    if (docComplete != null) {
+      jsonObject.addProperty("docComplete", docComplete);
+    }
+    if (declaringType != null) {
+      jsonObject.addProperty("declaringType", declaringType);
+    }
+    if (element != null) {
+      jsonObject.add("element", element.toJson());
+    }
+    if (returnType != null) {
+      jsonObject.addProperty("returnType", returnType);
+    }
+    if (parameterNames != null) {
+      JsonArray jsonArrayParameterNames = new JsonArray();
+      for (String elt : parameterNames) {
+        jsonArrayParameterNames.add(new JsonPrimitive(elt));
+      }
+      jsonObject.add("parameterNames", jsonArrayParameterNames);
+    }
+    if (parameterTypes != null) {
+      JsonArray jsonArrayParameterTypes = new JsonArray();
+      for (String elt : parameterTypes) {
+        jsonArrayParameterTypes.add(new JsonPrimitive(elt));
+      }
+      jsonObject.add("parameterTypes", jsonArrayParameterTypes);
+    }
+    if (requiredParameterCount != null) {
+      jsonObject.addProperty("requiredParameterCount", requiredParameterCount);
+    }
+    if (hasNamedParameters != null) {
+      jsonObject.addProperty("hasNamedParameters", hasNamedParameters);
+    }
+    if (parameterName != null) {
+      jsonObject.addProperty("parameterName", parameterName);
+    }
+    if (parameterType != null) {
+      jsonObject.addProperty("parameterType", parameterType);
+    }
+    if (importUri != null) {
+      jsonObject.addProperty("importUri", importUri);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("kind=");
+    builder.append(kind + ", ");
+    builder.append("relevance=");
+    builder.append(relevance + ", ");
+    builder.append("completion=");
+    builder.append(completion + ", ");
+    builder.append("selectionOffset=");
+    builder.append(selectionOffset + ", ");
+    builder.append("selectionLength=");
+    builder.append(selectionLength + ", ");
+    builder.append("isDeprecated=");
+    builder.append(isDeprecated + ", ");
+    builder.append("isPotential=");
+    builder.append(isPotential + ", ");
+    builder.append("docSummary=");
+    builder.append(docSummary + ", ");
+    builder.append("docComplete=");
+    builder.append(docComplete + ", ");
+    builder.append("declaringType=");
+    builder.append(declaringType + ", ");
+    builder.append("element=");
+    builder.append(element + ", ");
+    builder.append("returnType=");
+    builder.append(returnType + ", ");
+    builder.append("parameterNames=");
+    builder.append(StringUtils.join(parameterNames, ", ") + ", ");
+    builder.append("parameterTypes=");
+    builder.append(StringUtils.join(parameterTypes, ", ") + ", ");
+    builder.append("requiredParameterCount=");
+    builder.append(requiredParameterCount + ", ");
+    builder.append("hasNamedParameters=");
+    builder.append(hasNamedParameters + ", ");
+    builder.append("parameterName=");
+    builder.append(parameterName + ", ");
+    builder.append("parameterType=");
+    builder.append(parameterType + ", ");
+    builder.append("importUri=");
+    builder.append(importUri);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java
new file mode 100644
index 0000000..3e79fab
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of elements that can be included in a completion suggestion.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class CompletionSuggestionKind {
+
+  /**
+   * A list of arguments for the method or function that is being invoked. For this suggestion kind,
+   * the completion field is a textual representation of the invocation and the parameterNames,
+   * parameterTypes, and requiredParameterCount attributes are defined.
+   */
+  public static final String ARGUMENT_LIST = "ARGUMENT_LIST";
+
+  public static final String IMPORT = "IMPORT";
+
+  /**
+   * The element identifier should be inserted at the completion location. For example "someMethod"
+   * in import 'myLib.dart' show someMethod; . For suggestions of this kind, the element attribute is
+   * defined and the completion field is the element's identifier.
+   */
+  public static final String IDENTIFIER = "IDENTIFIER";
+
+  /**
+   * The element is being invoked at the completion location. For example, "someMethod" in
+   * x.someMethod(); . For suggestions of this kind, the element attribute is defined and the
+   * completion field is the element's identifier.
+   */
+  public static final String INVOCATION = "INVOCATION";
+
+  /**
+   * A keyword is being suggested. For suggestions of this kind, the completion is the keyword.
+   */
+  public static final String KEYWORD = "KEYWORD";
+
+  /**
+   * A named argument for the current callsite is being suggested. For suggestions of this kind, the
+   * completion is the named argument identifier including a trailing ':' and space.
+   */
+  public static final String NAMED_ARGUMENT = "NAMED_ARGUMENT";
+
+  public static final String OPTIONAL_ARGUMENT = "OPTIONAL_ARGUMENT";
+
+  public static final String PARAMETER = "PARAMETER";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Element.java b/pkg/analysis_server/tool/spec/generated/java/types/Element.java
new file mode 100644
index 0000000..cbef7ea
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Element.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * Information about an element (something that can be declared in code).
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class Element {
+
+  public static final Element[] EMPTY_ARRAY = new Element[0];
+
+  public static final List<Element> EMPTY_LIST = Lists.newArrayList();
+
+  private static final int ABSTRACT = 0x01;
+
+  private static final int CONST = 0x02;
+
+  private static final int FINAL = 0x04;
+
+  private static final int TOP_LEVEL_STATIC = 0x08;
+
+  private static final int PRIVATE = 0x10;
+
+  private static final int DEPRECATED = 0x20;
+
+  /**
+   * The kind of the element.
+   */
+  private final String kind;
+
+  /**
+   * The name of the element. This is typically used as the label in the outline.
+   */
+  private final String name;
+
+  /**
+   * The location of the name in the declaration of the element.
+   */
+  private final Location location;
+
+  /**
+   * A bit-map containing the following flags:
+   *
+   * - 0x01 - set if the element is explicitly or implicitly abstract
+   * - 0x02 - set if the element was declared to be ‘const’
+   * - 0x04 - set if the element was declared to be ‘final’
+   * - 0x08 - set if the element is a static member of a class or is a top-level function or field
+   * - 0x10 - set if the element is private
+   * - 0x20 - set if the element is deprecated
+   */
+  private final int flags;
+
+  /**
+   * The parameter list for the element. If the element is not a method or function this field will
+   * not be defined. If the element doesn't have parameters (e.g. getter), this field will not be
+   * defined. If the element has zero parameters, this field will have a value of "()".
+   */
+  private final String parameters;
+
+  /**
+   * The return type of the element. If the element is not a method or function this field will not
+   * be defined. If the element does not have a declared return type, this field will contain an
+   * empty string.
+   */
+  private final String returnType;
+
+  /**
+   * The type parameter list for the element. If the element doesn't have type parameters, this field
+   * will not be defined.
+   */
+  private final String typeParameters;
+
+  /**
+   * Constructor for {@link Element}.
+   */
+  public Element(String kind, String name, Location location, int flags, String parameters, String returnType, String typeParameters) {
+    this.kind = kind;
+    this.name = name;
+    this.location = location;
+    this.flags = flags;
+    this.parameters = parameters;
+    this.returnType = returnType;
+    this.typeParameters = typeParameters;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof Element) {
+      Element other = (Element) obj;
+      return
+        ObjectUtilities.equals(other.kind, kind) &&
+        ObjectUtilities.equals(other.name, name) &&
+        ObjectUtilities.equals(other.location, location) &&
+        other.flags == flags &&
+        ObjectUtilities.equals(other.parameters, parameters) &&
+        ObjectUtilities.equals(other.returnType, returnType) &&
+        ObjectUtilities.equals(other.typeParameters, typeParameters);
+    }
+    return false;
+  }
+
+  public static Element fromJson(JsonObject jsonObject) {
+    String kind = jsonObject.get("kind").getAsString();
+    String name = jsonObject.get("name").getAsString();
+    Location location = jsonObject.get("location") == null ? null : Location.fromJson(jsonObject.get("location").getAsJsonObject());
+    int flags = jsonObject.get("flags").getAsInt();
+    String parameters = jsonObject.get("parameters") == null ? null : jsonObject.get("parameters").getAsString();
+    String returnType = jsonObject.get("returnType") == null ? null : jsonObject.get("returnType").getAsString();
+    String typeParameters = jsonObject.get("typeParameters") == null ? null : jsonObject.get("typeParameters").getAsString();
+    return new Element(kind, name, location, flags, parameters, returnType, typeParameters);
+  }
+
+  public static List<Element> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<Element> list = new ArrayList<Element>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * A bit-map containing the following flags:
+   *
+   * - 0x01 - set if the element is explicitly or implicitly abstract
+   * - 0x02 - set if the element was declared to be ‘const’
+   * - 0x04 - set if the element was declared to be ‘final’
+   * - 0x08 - set if the element is a static member of a class or is a top-level function or field
+   * - 0x10 - set if the element is private
+   * - 0x20 - set if the element is deprecated
+   */
+  public int getFlags() {
+    return flags;
+  }
+
+  /**
+   * The kind of the element.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The location of the name in the declaration of the element.
+   */
+  public Location getLocation() {
+    return location;
+  }
+
+  /**
+   * The name of the element. This is typically used as the label in the outline.
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * The parameter list for the element. If the element is not a method or function this field will
+   * not be defined. If the element doesn't have parameters (e.g. getter), this field will not be
+   * defined. If the element has zero parameters, this field will have a value of "()".
+   */
+  public String getParameters() {
+    return parameters;
+  }
+
+  /**
+   * The return type of the element. If the element is not a method or function this field will not
+   * be defined. If the element does not have a declared return type, this field will contain an
+   * empty string.
+   */
+  public String getReturnType() {
+    return returnType;
+  }
+
+  /**
+   * The type parameter list for the element. If the element doesn't have type parameters, this field
+   * will not be defined.
+   */
+  public String getTypeParameters() {
+    return typeParameters;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(kind);
+    builder.append(name);
+    builder.append(location);
+    builder.append(flags);
+    builder.append(parameters);
+    builder.append(returnType);
+    builder.append(typeParameters);
+    return builder.toHashCode();
+  }
+
+  public boolean isAbstract() {
+    return (flags & ABSTRACT) != 0;
+  }
+
+  public boolean isConst() {
+    return (flags & CONST) != 0;
+  }
+
+  public boolean isDeprecated() {
+    return (flags & DEPRECATED) != 0;
+  }
+
+  public boolean isFinal() {
+    return (flags & FINAL) != 0;
+  }
+
+  public boolean isPrivate() {
+    return (flags & PRIVATE) != 0;
+  }
+
+  public boolean isTopLevelOrStatic() {
+    return (flags & TOP_LEVEL_STATIC) != 0;
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("kind", kind);
+    jsonObject.addProperty("name", name);
+    if (location != null) {
+      jsonObject.add("location", location.toJson());
+    }
+    jsonObject.addProperty("flags", flags);
+    if (parameters != null) {
+      jsonObject.addProperty("parameters", parameters);
+    }
+    if (returnType != null) {
+      jsonObject.addProperty("returnType", returnType);
+    }
+    if (typeParameters != null) {
+      jsonObject.addProperty("typeParameters", typeParameters);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("kind=");
+    builder.append(kind + ", ");
+    builder.append("name=");
+    builder.append(name + ", ");
+    builder.append("location=");
+    builder.append(location + ", ");
+    builder.append("flags=");
+    builder.append(flags + ", ");
+    builder.append("parameters=");
+    builder.append(parameters + ", ");
+    builder.append("returnType=");
+    builder.append(returnType + ", ");
+    builder.append("typeParameters=");
+    builder.append(typeParameters);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java b/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
new file mode 100644
index 0000000..ff0b4ee
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of elements.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class ElementKind {
+
+  public static final String CLASS = "CLASS";
+
+  public static final String CLASS_TYPE_ALIAS = "CLASS_TYPE_ALIAS";
+
+  public static final String COMPILATION_UNIT = "COMPILATION_UNIT";
+
+  public static final String CONSTRUCTOR = "CONSTRUCTOR";
+
+  public static final String ENUM = "ENUM";
+
+  public static final String ENUM_CONSTANT = "ENUM_CONSTANT";
+
+  public static final String FIELD = "FIELD";
+
+  public static final String FUNCTION = "FUNCTION";
+
+  public static final String FUNCTION_TYPE_ALIAS = "FUNCTION_TYPE_ALIAS";
+
+  public static final String GETTER = "GETTER";
+
+  public static final String LABEL = "LABEL";
+
+  public static final String LIBRARY = "LIBRARY";
+
+  public static final String LOCAL_VARIABLE = "LOCAL_VARIABLE";
+
+  public static final String METHOD = "METHOD";
+
+  public static final String PARAMETER = "PARAMETER";
+
+  public static final String PREFIX = "PREFIX";
+
+  public static final String SETTER = "SETTER";
+
+  public static final String TOP_LEVEL_VARIABLE = "TOP_LEVEL_VARIABLE";
+
+  public static final String TYPE_PARAMETER = "TYPE_PARAMETER";
+
+  public static final String UNIT_TEST_GROUP = "UNIT_TEST_GROUP";
+
+  public static final String UNIT_TEST_TEST = "UNIT_TEST_TEST";
+
+  public static final String UNKNOWN = "UNKNOWN";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java
new file mode 100644
index 0000000..140984a
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of an executable file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ExecutableFile {
+
+  public static final ExecutableFile[] EMPTY_ARRAY = new ExecutableFile[0];
+
+  public static final List<ExecutableFile> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The path of the executable file.
+   */
+  private final String file;
+
+  /**
+   * The kind of the executable file.
+   */
+  private final String kind;
+
+  /**
+   * Constructor for {@link ExecutableFile}.
+   */
+  public ExecutableFile(String file, String kind) {
+    this.file = file;
+    this.kind = kind;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ExecutableFile) {
+      ExecutableFile other = (ExecutableFile) obj;
+      return
+        ObjectUtilities.equals(other.file, file) &&
+        ObjectUtilities.equals(other.kind, kind);
+    }
+    return false;
+  }
+
+  public static ExecutableFile fromJson(JsonObject jsonObject) {
+    String file = jsonObject.get("file").getAsString();
+    String kind = jsonObject.get("kind").getAsString();
+    return new ExecutableFile(file, kind);
+  }
+
+  public static List<ExecutableFile> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ExecutableFile> list = new ArrayList<ExecutableFile>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The path of the executable file.
+   */
+  public String getFile() {
+    return file;
+  }
+
+  /**
+   * The kind of the executable file.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(file);
+    builder.append(kind);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("file", file);
+    jsonObject.addProperty("kind", kind);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("file=");
+    builder.append(file + ", ");
+    builder.append("kind=");
+    builder.append(kind);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java
new file mode 100644
index 0000000..a206c9c
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of executable files.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class ExecutableKind {
+
+  public static final String CLIENT = "CLIENT";
+
+  public static final String EITHER = "EITHER";
+
+  public static final String NOT_EXECUTABLE = "NOT_EXECUTABLE";
+
+  public static final String SERVER = "SERVER";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java b/pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java
new file mode 100644
index 0000000..499982a
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the services provided by the execution domain.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class ExecutionService {
+
+  public static final String LAUNCH_DATA = "LAUNCH_DATA";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java
new file mode 100644
index 0000000..8dc8afc
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ExtractLocalVariableFeedback extends RefactoringFeedback {
+
+  public static final ExtractLocalVariableFeedback[] EMPTY_ARRAY = new ExtractLocalVariableFeedback[0];
+
+  public static final List<ExtractLocalVariableFeedback> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The proposed names for the local variable.
+   */
+  private final List<String> names;
+
+  /**
+   * The offsets of the expressions that would be replaced by a reference to the variable.
+   */
+  private final int[] offsets;
+
+  /**
+   * The lengths of the expressions that would be replaced by a reference to the variable. The
+   * lengths correspond to the offsets. In other words, for a given expression, if the offset of that
+   * expression is offsets[i], then the length of that expression is lengths[i].
+   */
+  private final int[] lengths;
+
+  /**
+   * Constructor for {@link ExtractLocalVariableFeedback}.
+   */
+  public ExtractLocalVariableFeedback(List<String> names, int[] offsets, int[] lengths) {
+    this.names = names;
+    this.offsets = offsets;
+    this.lengths = lengths;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ExtractLocalVariableFeedback) {
+      ExtractLocalVariableFeedback other = (ExtractLocalVariableFeedback) obj;
+      return
+        ObjectUtilities.equals(other.names, names) &&
+        Arrays.equals(other.offsets, offsets) &&
+        Arrays.equals(other.lengths, lengths);
+    }
+    return false;
+  }
+
+  public static ExtractLocalVariableFeedback fromJson(JsonObject jsonObject) {
+    List<String> names = JsonUtilities.decodeStringList(jsonObject.get("names").getAsJsonArray());
+    int[] offsets = JsonUtilities.decodeIntArray(jsonObject.get("offsets").getAsJsonArray());
+    int[] lengths = JsonUtilities.decodeIntArray(jsonObject.get("lengths").getAsJsonArray());
+    return new ExtractLocalVariableFeedback(names, offsets, lengths);
+  }
+
+  public static List<ExtractLocalVariableFeedback> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ExtractLocalVariableFeedback> list = new ArrayList<ExtractLocalVariableFeedback>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The lengths of the expressions that would be replaced by a reference to the variable. The
+   * lengths correspond to the offsets. In other words, for a given expression, if the offset of that
+   * expression is offsets[i], then the length of that expression is lengths[i].
+   */
+  public int[] getLengths() {
+    return lengths;
+  }
+
+  /**
+   * The proposed names for the local variable.
+   */
+  public List<String> getNames() {
+    return names;
+  }
+
+  /**
+   * The offsets of the expressions that would be replaced by a reference to the variable.
+   */
+  public int[] getOffsets() {
+    return offsets;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(names);
+    builder.append(offsets);
+    builder.append(lengths);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    JsonArray jsonArrayNames = new JsonArray();
+    for (String elt : names) {
+      jsonArrayNames.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("names", jsonArrayNames);
+    JsonArray jsonArrayOffsets = new JsonArray();
+    for (int elt : offsets) {
+      jsonArrayOffsets.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("offsets", jsonArrayOffsets);
+    JsonArray jsonArrayLengths = new JsonArray();
+    for (int elt : lengths) {
+      jsonArrayLengths.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("lengths", jsonArrayLengths);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("names=");
+    builder.append(StringUtils.join(names, ", ") + ", ");
+    builder.append("offsets=");
+    builder.append(StringUtils.join(offsets, ", ") + ", ");
+    builder.append("lengths=");
+    builder.append(StringUtils.join(lengths, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java
new file mode 100644
index 0000000..543d20db
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ExtractLocalVariableOptions extends RefactoringOptions {
+
+  public static final ExtractLocalVariableOptions[] EMPTY_ARRAY = new ExtractLocalVariableOptions[0];
+
+  public static final List<ExtractLocalVariableOptions> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The name that the local variable should be given.
+   */
+  private String name;
+
+  /**
+   * True if all occurrences of the expression within the scope in which the variable will be defined
+   * should be replaced by a reference to the local variable. The expression used to initiate the
+   * refactoring will always be replaced.
+   */
+  private boolean extractAll;
+
+  /**
+   * Constructor for {@link ExtractLocalVariableOptions}.
+   */
+  public ExtractLocalVariableOptions(String name, boolean extractAll) {
+    this.name = name;
+    this.extractAll = extractAll;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ExtractLocalVariableOptions) {
+      ExtractLocalVariableOptions other = (ExtractLocalVariableOptions) obj;
+      return
+        ObjectUtilities.equals(other.name, name) &&
+        other.extractAll == extractAll;
+    }
+    return false;
+  }
+
+  public static ExtractLocalVariableOptions fromJson(JsonObject jsonObject) {
+    String name = jsonObject.get("name").getAsString();
+    boolean extractAll = jsonObject.get("extractAll").getAsBoolean();
+    return new ExtractLocalVariableOptions(name, extractAll);
+  }
+
+  public static List<ExtractLocalVariableOptions> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ExtractLocalVariableOptions> list = new ArrayList<ExtractLocalVariableOptions>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * True if all occurrences of the expression within the scope in which the variable will be defined
+   * should be replaced by a reference to the local variable. The expression used to initiate the
+   * refactoring will always be replaced.
+   */
+  public boolean extractAll() {
+    return extractAll;
+  }
+
+  /**
+   * The name that the local variable should be given.
+   */
+  public String getName() {
+    return name;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(name);
+    builder.append(extractAll);
+    return builder.toHashCode();
+  }
+
+  /**
+   * True if all occurrences of the expression within the scope in which the variable will be defined
+   * should be replaced by a reference to the local variable. The expression used to initiate the
+   * refactoring will always be replaced.
+   */
+  public void setExtractAll(boolean extractAll) {
+    this.extractAll = extractAll;
+  }
+
+  /**
+   * The name that the local variable should be given.
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("name", name);
+    jsonObject.addProperty("extractAll", extractAll);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("name=");
+    builder.append(name + ", ");
+    builder.append("extractAll=");
+    builder.append(extractAll);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java
new file mode 100644
index 0000000..7e446a9
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java
@@ -0,0 +1,272 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ExtractMethodFeedback extends RefactoringFeedback {
+
+  public static final ExtractMethodFeedback[] EMPTY_ARRAY = new ExtractMethodFeedback[0];
+
+  public static final List<ExtractMethodFeedback> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset to the beginning of the expression or statements that will be extracted.
+   */
+  private final int offset;
+
+  /**
+   * The length of the expression or statements that will be extracted.
+   */
+  private final int length;
+
+  /**
+   * The proposed return type for the method. If the returned element does not have a declared return
+   * type, this field will contain an empty string.
+   */
+  private final String returnType;
+
+  /**
+   * The proposed names for the method.
+   */
+  private final List<String> names;
+
+  /**
+   * True if a getter could be created rather than a method.
+   */
+  private final boolean canCreateGetter;
+
+  /**
+   * The proposed parameters for the method.
+   */
+  private final List<RefactoringMethodParameter> parameters;
+
+  /**
+   * The offsets of the expressions or statements that would be replaced by an invocation of the
+   * method.
+   */
+  private final int[] offsets;
+
+  /**
+   * The lengths of the expressions or statements that would be replaced by an invocation of the
+   * method. The lengths correspond to the offsets. In other words, for a given expression (or block
+   * of statements), if the offset of that expression is offsets[i], then the length of that
+   * expression is lengths[i].
+   */
+  private final int[] lengths;
+
+  /**
+   * Constructor for {@link ExtractMethodFeedback}.
+   */
+  public ExtractMethodFeedback(int offset, int length, String returnType, List<String> names, boolean canCreateGetter, List<RefactoringMethodParameter> parameters, int[] offsets, int[] lengths) {
+    this.offset = offset;
+    this.length = length;
+    this.returnType = returnType;
+    this.names = names;
+    this.canCreateGetter = canCreateGetter;
+    this.parameters = parameters;
+    this.offsets = offsets;
+    this.lengths = lengths;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ExtractMethodFeedback) {
+      ExtractMethodFeedback other = (ExtractMethodFeedback) obj;
+      return
+        other.offset == offset &&
+        other.length == length &&
+        ObjectUtilities.equals(other.returnType, returnType) &&
+        ObjectUtilities.equals(other.names, names) &&
+        other.canCreateGetter == canCreateGetter &&
+        ObjectUtilities.equals(other.parameters, parameters) &&
+        Arrays.equals(other.offsets, offsets) &&
+        Arrays.equals(other.lengths, lengths);
+    }
+    return false;
+  }
+
+  public static ExtractMethodFeedback fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    String returnType = jsonObject.get("returnType").getAsString();
+    List<String> names = JsonUtilities.decodeStringList(jsonObject.get("names").getAsJsonArray());
+    boolean canCreateGetter = jsonObject.get("canCreateGetter").getAsBoolean();
+    List<RefactoringMethodParameter> parameters = RefactoringMethodParameter.fromJsonArray(jsonObject.get("parameters").getAsJsonArray());
+    int[] offsets = JsonUtilities.decodeIntArray(jsonObject.get("offsets").getAsJsonArray());
+    int[] lengths = JsonUtilities.decodeIntArray(jsonObject.get("lengths").getAsJsonArray());
+    return new ExtractMethodFeedback(offset, length, returnType, names, canCreateGetter, parameters, offsets, lengths);
+  }
+
+  public static List<ExtractMethodFeedback> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ExtractMethodFeedback> list = new ArrayList<ExtractMethodFeedback>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * True if a getter could be created rather than a method.
+   */
+  public boolean canCreateGetter() {
+    return canCreateGetter;
+  }
+
+  /**
+   * The length of the expression or statements that will be extracted.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The lengths of the expressions or statements that would be replaced by an invocation of the
+   * method. The lengths correspond to the offsets. In other words, for a given expression (or block
+   * of statements), if the offset of that expression is offsets[i], then the length of that
+   * expression is lengths[i].
+   */
+  public int[] getLengths() {
+    return lengths;
+  }
+
+  /**
+   * The proposed names for the method.
+   */
+  public List<String> getNames() {
+    return names;
+  }
+
+  /**
+   * The offset to the beginning of the expression or statements that will be extracted.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The offsets of the expressions or statements that would be replaced by an invocation of the
+   * method.
+   */
+  public int[] getOffsets() {
+    return offsets;
+  }
+
+  /**
+   * The proposed parameters for the method.
+   */
+  public List<RefactoringMethodParameter> getParameters() {
+    return parameters;
+  }
+
+  /**
+   * The proposed return type for the method. If the returned element does not have a declared return
+   * type, this field will contain an empty string.
+   */
+  public String getReturnType() {
+    return returnType;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    builder.append(returnType);
+    builder.append(names);
+    builder.append(canCreateGetter);
+    builder.append(parameters);
+    builder.append(offsets);
+    builder.append(lengths);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    jsonObject.addProperty("returnType", returnType);
+    JsonArray jsonArrayNames = new JsonArray();
+    for (String elt : names) {
+      jsonArrayNames.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("names", jsonArrayNames);
+    jsonObject.addProperty("canCreateGetter", canCreateGetter);
+    JsonArray jsonArrayParameters = new JsonArray();
+    for (RefactoringMethodParameter elt : parameters) {
+      jsonArrayParameters.add(elt.toJson());
+    }
+    jsonObject.add("parameters", jsonArrayParameters);
+    JsonArray jsonArrayOffsets = new JsonArray();
+    for (int elt : offsets) {
+      jsonArrayOffsets.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("offsets", jsonArrayOffsets);
+    JsonArray jsonArrayLengths = new JsonArray();
+    for (int elt : lengths) {
+      jsonArrayLengths.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("lengths", jsonArrayLengths);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("returnType=");
+    builder.append(returnType + ", ");
+    builder.append("names=");
+    builder.append(StringUtils.join(names, ", ") + ", ");
+    builder.append("canCreateGetter=");
+    builder.append(canCreateGetter + ", ");
+    builder.append("parameters=");
+    builder.append(StringUtils.join(parameters, ", ") + ", ");
+    builder.append("offsets=");
+    builder.append(StringUtils.join(offsets, ", ") + ", ");
+    builder.append("lengths=");
+    builder.append(StringUtils.join(lengths, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java
new file mode 100644
index 0000000..54b2a6b
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java
@@ -0,0 +1,261 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ExtractMethodOptions extends RefactoringOptions {
+
+  public static final ExtractMethodOptions[] EMPTY_ARRAY = new ExtractMethodOptions[0];
+
+  public static final List<ExtractMethodOptions> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The return type that should be defined for the method.
+   */
+  private String returnType;
+
+  /**
+   * True if a getter should be created rather than a method. It is an error if this field is true
+   * and the list of parameters is non-empty.
+   */
+  private boolean createGetter;
+
+  /**
+   * The name that the method should be given.
+   */
+  private String name;
+
+  /**
+   * The parameters that should be defined for the method.
+   *
+   * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL parameter. It is an error
+   * if a REQUIRED or POSITIONAL parameter follows a NAMED parameter.
+   *
+   * - To change the order and/or update proposed parameters, add parameters with the same
+   *   identifiers as proposed.
+   * - To add new parameters, omit their identifier.
+   * - To remove some parameters, omit them in this list.
+   */
+  private List<RefactoringMethodParameter> parameters;
+
+  /**
+   * True if all occurrences of the expression or statements should be replaced by an invocation of
+   * the method. The expression or statements used to initiate the refactoring will always be
+   * replaced.
+   */
+  private boolean extractAll;
+
+  /**
+   * Constructor for {@link ExtractMethodOptions}.
+   */
+  public ExtractMethodOptions(String returnType, boolean createGetter, String name, List<RefactoringMethodParameter> parameters, boolean extractAll) {
+    this.returnType = returnType;
+    this.createGetter = createGetter;
+    this.name = name;
+    this.parameters = parameters;
+    this.extractAll = extractAll;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ExtractMethodOptions) {
+      ExtractMethodOptions other = (ExtractMethodOptions) obj;
+      return
+        ObjectUtilities.equals(other.returnType, returnType) &&
+        other.createGetter == createGetter &&
+        ObjectUtilities.equals(other.name, name) &&
+        ObjectUtilities.equals(other.parameters, parameters) &&
+        other.extractAll == extractAll;
+    }
+    return false;
+  }
+
+  public static ExtractMethodOptions fromJson(JsonObject jsonObject) {
+    String returnType = jsonObject.get("returnType").getAsString();
+    boolean createGetter = jsonObject.get("createGetter").getAsBoolean();
+    String name = jsonObject.get("name").getAsString();
+    List<RefactoringMethodParameter> parameters = RefactoringMethodParameter.fromJsonArray(jsonObject.get("parameters").getAsJsonArray());
+    boolean extractAll = jsonObject.get("extractAll").getAsBoolean();
+    return new ExtractMethodOptions(returnType, createGetter, name, parameters, extractAll);
+  }
+
+  public static List<ExtractMethodOptions> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ExtractMethodOptions> list = new ArrayList<ExtractMethodOptions>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * True if a getter should be created rather than a method. It is an error if this field is true
+   * and the list of parameters is non-empty.
+   */
+  public boolean createGetter() {
+    return createGetter;
+  }
+
+  /**
+   * True if all occurrences of the expression or statements should be replaced by an invocation of
+   * the method. The expression or statements used to initiate the refactoring will always be
+   * replaced.
+   */
+  public boolean extractAll() {
+    return extractAll;
+  }
+
+  /**
+   * The name that the method should be given.
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * The parameters that should be defined for the method.
+   *
+   * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL parameter. It is an error
+   * if a REQUIRED or POSITIONAL parameter follows a NAMED parameter.
+   *
+   * - To change the order and/or update proposed parameters, add parameters with the same
+   *   identifiers as proposed.
+   * - To add new parameters, omit their identifier.
+   * - To remove some parameters, omit them in this list.
+   */
+  public List<RefactoringMethodParameter> getParameters() {
+    return parameters;
+  }
+
+  /**
+   * The return type that should be defined for the method.
+   */
+  public String getReturnType() {
+    return returnType;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(returnType);
+    builder.append(createGetter);
+    builder.append(name);
+    builder.append(parameters);
+    builder.append(extractAll);
+    return builder.toHashCode();
+  }
+
+  /**
+   * True if a getter should be created rather than a method. It is an error if this field is true
+   * and the list of parameters is non-empty.
+   */
+  public void setCreateGetter(boolean createGetter) {
+    this.createGetter = createGetter;
+  }
+
+  /**
+   * True if all occurrences of the expression or statements should be replaced by an invocation of
+   * the method. The expression or statements used to initiate the refactoring will always be
+   * replaced.
+   */
+  public void setExtractAll(boolean extractAll) {
+    this.extractAll = extractAll;
+  }
+
+  /**
+   * The name that the method should be given.
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * The parameters that should be defined for the method.
+   *
+   * It is an error if a REQUIRED or NAMED parameter follows a POSITIONAL parameter. It is an error
+   * if a REQUIRED or POSITIONAL parameter follows a NAMED parameter.
+   *
+   * - To change the order and/or update proposed parameters, add parameters with the same
+   *   identifiers as proposed.
+   * - To add new parameters, omit their identifier.
+   * - To remove some parameters, omit them in this list.
+   */
+  public void setParameters(List<RefactoringMethodParameter> parameters) {
+    this.parameters = parameters;
+  }
+
+  /**
+   * The return type that should be defined for the method.
+   */
+  public void setReturnType(String returnType) {
+    this.returnType = returnType;
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("returnType", returnType);
+    jsonObject.addProperty("createGetter", createGetter);
+    jsonObject.addProperty("name", name);
+    JsonArray jsonArrayParameters = new JsonArray();
+    for (RefactoringMethodParameter elt : parameters) {
+      jsonArrayParameters.add(elt.toJson());
+    }
+    jsonObject.add("parameters", jsonArrayParameters);
+    jsonObject.addProperty("extractAll", extractAll);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("returnType=");
+    builder.append(returnType + ", ");
+    builder.append("createGetter=");
+    builder.append(createGetter + ", ");
+    builder.append("name=");
+    builder.append(name + ", ");
+    builder.append("parameters=");
+    builder.append(StringUtils.join(parameters, ", ") + ", ");
+    builder.append("extractAll=");
+    builder.append(extractAll);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java b/pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java
new file mode 100644
index 0000000..f48452c
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of folding regions.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class FoldingKind {
+
+  public static final String COMMENT = "COMMENT";
+
+  public static final String CLASS_MEMBER = "CLASS_MEMBER";
+
+  public static final String DIRECTIVES = "DIRECTIVES";
+
+  public static final String DOCUMENTATION_COMMENT = "DOCUMENTATION_COMMENT";
+
+  public static final String TOP_LEVEL_DECLARATION = "TOP_LEVEL_DECLARATION";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java b/pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java
new file mode 100644
index 0000000..75b0736
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a region that can be folded.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class FoldingRegion {
+
+  public static final FoldingRegion[] EMPTY_ARRAY = new FoldingRegion[0];
+
+  public static final List<FoldingRegion> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The kind of the region.
+   */
+  private final String kind;
+
+  /**
+   * The offset of the region to be folded.
+   */
+  private final int offset;
+
+  /**
+   * The length of the region to be folded.
+   */
+  private final int length;
+
+  /**
+   * Constructor for {@link FoldingRegion}.
+   */
+  public FoldingRegion(String kind, int offset, int length) {
+    this.kind = kind;
+    this.offset = offset;
+    this.length = length;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof FoldingRegion) {
+      FoldingRegion other = (FoldingRegion) obj;
+      return
+        ObjectUtilities.equals(other.kind, kind) &&
+        other.offset == offset &&
+        other.length == length;
+    }
+    return false;
+  }
+
+  public static FoldingRegion fromJson(JsonObject jsonObject) {
+    String kind = jsonObject.get("kind").getAsString();
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    return new FoldingRegion(kind, offset, length);
+  }
+
+  public static List<FoldingRegion> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<FoldingRegion> list = new ArrayList<FoldingRegion>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The kind of the region.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The length of the region to be folded.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the region to be folded.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(kind);
+    builder.append(offset);
+    builder.append(length);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("kind", kind);
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("kind=");
+    builder.append(kind + ", ");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java
new file mode 100644
index 0000000..11b64e0
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a region that could have special highlighting associated with it.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class HighlightRegion {
+
+  public static final HighlightRegion[] EMPTY_ARRAY = new HighlightRegion[0];
+
+  public static final List<HighlightRegion> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The type of highlight associated with the region.
+   */
+  private final String type;
+
+  /**
+   * The offset of the region to be highlighted.
+   */
+  private final int offset;
+
+  /**
+   * The length of the region to be highlighted.
+   */
+  private final int length;
+
+  /**
+   * Constructor for {@link HighlightRegion}.
+   */
+  public HighlightRegion(String type, int offset, int length) {
+    this.type = type;
+    this.offset = offset;
+    this.length = length;
+  }
+
+  public boolean containsInclusive(int x) {
+    return offset <= x && x <= offset + length;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof HighlightRegion) {
+      HighlightRegion other = (HighlightRegion) obj;
+      return
+        ObjectUtilities.equals(other.type, type) &&
+        other.offset == offset &&
+        other.length == length;
+    }
+    return false;
+  }
+
+  public static HighlightRegion fromJson(JsonObject jsonObject) {
+    String type = jsonObject.get("type").getAsString();
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    return new HighlightRegion(type, offset, length);
+  }
+
+  public static List<HighlightRegion> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<HighlightRegion> list = new ArrayList<HighlightRegion>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The length of the region to be highlighted.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the region to be highlighted.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The type of highlight associated with the region.
+   */
+  public String getType() {
+    return type;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(type);
+    builder.append(offset);
+    builder.append(length);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("type", type);
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("type=");
+    builder.append(type + ", ");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
new file mode 100644
index 0000000..cf9d006
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of highlighting that can be applied to files.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class HighlightRegionType {
+
+  public static final String ANNOTATION = "ANNOTATION";
+
+  public static final String BUILT_IN = "BUILT_IN";
+
+  public static final String CLASS = "CLASS";
+
+  public static final String COMMENT_BLOCK = "COMMENT_BLOCK";
+
+  public static final String COMMENT_DOCUMENTATION = "COMMENT_DOCUMENTATION";
+
+  public static final String COMMENT_END_OF_LINE = "COMMENT_END_OF_LINE";
+
+  public static final String CONSTRUCTOR = "CONSTRUCTOR";
+
+  public static final String DIRECTIVE = "DIRECTIVE";
+
+  public static final String DYNAMIC_TYPE = "DYNAMIC_TYPE";
+
+  public static final String ENUM = "ENUM";
+
+  public static final String ENUM_CONSTANT = "ENUM_CONSTANT";
+
+  public static final String FIELD = "FIELD";
+
+  public static final String FIELD_STATIC = "FIELD_STATIC";
+
+  public static final String FUNCTION = "FUNCTION";
+
+  public static final String FUNCTION_DECLARATION = "FUNCTION_DECLARATION";
+
+  public static final String FUNCTION_TYPE_ALIAS = "FUNCTION_TYPE_ALIAS";
+
+  public static final String GETTER_DECLARATION = "GETTER_DECLARATION";
+
+  public static final String IDENTIFIER_DEFAULT = "IDENTIFIER_DEFAULT";
+
+  public static final String IMPORT_PREFIX = "IMPORT_PREFIX";
+
+  public static final String KEYWORD = "KEYWORD";
+
+  public static final String LABEL = "LABEL";
+
+  public static final String LITERAL_BOOLEAN = "LITERAL_BOOLEAN";
+
+  public static final String LITERAL_DOUBLE = "LITERAL_DOUBLE";
+
+  public static final String LITERAL_INTEGER = "LITERAL_INTEGER";
+
+  public static final String LITERAL_LIST = "LITERAL_LIST";
+
+  public static final String LITERAL_MAP = "LITERAL_MAP";
+
+  public static final String LITERAL_STRING = "LITERAL_STRING";
+
+  public static final String LOCAL_VARIABLE = "LOCAL_VARIABLE";
+
+  public static final String LOCAL_VARIABLE_DECLARATION = "LOCAL_VARIABLE_DECLARATION";
+
+  public static final String METHOD = "METHOD";
+
+  public static final String METHOD_DECLARATION = "METHOD_DECLARATION";
+
+  public static final String METHOD_DECLARATION_STATIC = "METHOD_DECLARATION_STATIC";
+
+  public static final String METHOD_STATIC = "METHOD_STATIC";
+
+  public static final String PARAMETER = "PARAMETER";
+
+  public static final String SETTER_DECLARATION = "SETTER_DECLARATION";
+
+  public static final String TOP_LEVEL_VARIABLE = "TOP_LEVEL_VARIABLE";
+
+  public static final String TYPE_NAME_DYNAMIC = "TYPE_NAME_DYNAMIC";
+
+  public static final String TYPE_PARAMETER = "TYPE_PARAMETER";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java b/pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java
new file mode 100644
index 0000000..b203bcb
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * The hover information associated with a specific location.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class HoverInformation {
+
+  public static final HoverInformation[] EMPTY_ARRAY = new HoverInformation[0];
+
+  public static final List<HoverInformation> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset of the range of characters that encompases the cursor position and has the same hover
+   * information as the cursor position.
+   */
+  private final int offset;
+
+  /**
+   * The length of the range of characters that encompases the cursor position and has the same hover
+   * information as the cursor position.
+   */
+  private final int length;
+
+  /**
+   * The path to the defining compilation unit of the library in which the referenced element is
+   * declared. This data is omitted if there is no referenced element, or if the element is declared
+   * inside an HTML file.
+   */
+  private final String containingLibraryPath;
+
+  /**
+   * The name of the library in which the referenced element is declared. This data is omitted if
+   * there is no referenced element, or if the element is declared inside an HTML file.
+   */
+  private final String containingLibraryName;
+
+  /**
+   * A human-readable description of the class declaring the element being referenced. This data is
+   * omitted if there is no referenced element, or if the element is not a class member.
+   */
+  private final String containingClassDescription;
+
+  /**
+   * The dartdoc associated with the referenced element. Other than the removal of the comment
+   * delimiters, including leading asterisks in the case of a block comment, the dartdoc is
+   * unprocessed markdown. This data is omitted if there is no referenced element, or if the element
+   * has no dartdoc.
+   */
+  private final String dartdoc;
+
+  /**
+   * A human-readable description of the element being referenced. This data is omitted if there is
+   * no referenced element.
+   */
+  private final String elementDescription;
+
+  /**
+   * A human-readable description of the kind of element being referenced (such as “class” or
+   * “function type alias”). This data is omitted if there is no referenced element.
+   */
+  private final String elementKind;
+
+  /**
+   * A human-readable description of the parameter corresponding to the expression being hovered
+   * over. This data is omitted if the location is not in an argument to a function.
+   */
+  private final String parameter;
+
+  /**
+   * The name of the propagated type of the expression. This data is omitted if the location does not
+   * correspond to an expression or if there is no propagated type information.
+   */
+  private final String propagatedType;
+
+  /**
+   * The name of the static type of the expression. This data is omitted if the location does not
+   * correspond to an expression.
+   */
+  private final String staticType;
+
+  /**
+   * Constructor for {@link HoverInformation}.
+   */
+  public HoverInformation(int offset, int length, String containingLibraryPath, String containingLibraryName, String containingClassDescription, String dartdoc, String elementDescription, String elementKind, String parameter, String propagatedType, String staticType) {
+    this.offset = offset;
+    this.length = length;
+    this.containingLibraryPath = containingLibraryPath;
+    this.containingLibraryName = containingLibraryName;
+    this.containingClassDescription = containingClassDescription;
+    this.dartdoc = dartdoc;
+    this.elementDescription = elementDescription;
+    this.elementKind = elementKind;
+    this.parameter = parameter;
+    this.propagatedType = propagatedType;
+    this.staticType = staticType;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof HoverInformation) {
+      HoverInformation other = (HoverInformation) obj;
+      return
+        other.offset == offset &&
+        other.length == length &&
+        ObjectUtilities.equals(other.containingLibraryPath, containingLibraryPath) &&
+        ObjectUtilities.equals(other.containingLibraryName, containingLibraryName) &&
+        ObjectUtilities.equals(other.containingClassDescription, containingClassDescription) &&
+        ObjectUtilities.equals(other.dartdoc, dartdoc) &&
+        ObjectUtilities.equals(other.elementDescription, elementDescription) &&
+        ObjectUtilities.equals(other.elementKind, elementKind) &&
+        ObjectUtilities.equals(other.parameter, parameter) &&
+        ObjectUtilities.equals(other.propagatedType, propagatedType) &&
+        ObjectUtilities.equals(other.staticType, staticType);
+    }
+    return false;
+  }
+
+  public static HoverInformation fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    String containingLibraryPath = jsonObject.get("containingLibraryPath") == null ? null : jsonObject.get("containingLibraryPath").getAsString();
+    String containingLibraryName = jsonObject.get("containingLibraryName") == null ? null : jsonObject.get("containingLibraryName").getAsString();
+    String containingClassDescription = jsonObject.get("containingClassDescription") == null ? null : jsonObject.get("containingClassDescription").getAsString();
+    String dartdoc = jsonObject.get("dartdoc") == null ? null : jsonObject.get("dartdoc").getAsString();
+    String elementDescription = jsonObject.get("elementDescription") == null ? null : jsonObject.get("elementDescription").getAsString();
+    String elementKind = jsonObject.get("elementKind") == null ? null : jsonObject.get("elementKind").getAsString();
+    String parameter = jsonObject.get("parameter") == null ? null : jsonObject.get("parameter").getAsString();
+    String propagatedType = jsonObject.get("propagatedType") == null ? null : jsonObject.get("propagatedType").getAsString();
+    String staticType = jsonObject.get("staticType") == null ? null : jsonObject.get("staticType").getAsString();
+    return new HoverInformation(offset, length, containingLibraryPath, containingLibraryName, containingClassDescription, dartdoc, elementDescription, elementKind, parameter, propagatedType, staticType);
+  }
+
+  public static List<HoverInformation> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<HoverInformation> list = new ArrayList<HoverInformation>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * A human-readable description of the class declaring the element being referenced. This data is
+   * omitted if there is no referenced element, or if the element is not a class member.
+   */
+  public String getContainingClassDescription() {
+    return containingClassDescription;
+  }
+
+  /**
+   * The name of the library in which the referenced element is declared. This data is omitted if
+   * there is no referenced element, or if the element is declared inside an HTML file.
+   */
+  public String getContainingLibraryName() {
+    return containingLibraryName;
+  }
+
+  /**
+   * The path to the defining compilation unit of the library in which the referenced element is
+   * declared. This data is omitted if there is no referenced element, or if the element is declared
+   * inside an HTML file.
+   */
+  public String getContainingLibraryPath() {
+    return containingLibraryPath;
+  }
+
+  /**
+   * The dartdoc associated with the referenced element. Other than the removal of the comment
+   * delimiters, including leading asterisks in the case of a block comment, the dartdoc is
+   * unprocessed markdown. This data is omitted if there is no referenced element, or if the element
+   * has no dartdoc.
+   */
+  public String getDartdoc() {
+    return dartdoc;
+  }
+
+  /**
+   * A human-readable description of the element being referenced. This data is omitted if there is
+   * no referenced element.
+   */
+  public String getElementDescription() {
+    return elementDescription;
+  }
+
+  /**
+   * A human-readable description of the kind of element being referenced (such as “class” or
+   * “function type alias”). This data is omitted if there is no referenced element.
+   */
+  public String getElementKind() {
+    return elementKind;
+  }
+
+  /**
+   * The length of the range of characters that encompases the cursor position and has the same hover
+   * information as the cursor position.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the range of characters that encompases the cursor position and has the same hover
+   * information as the cursor position.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * A human-readable description of the parameter corresponding to the expression being hovered
+   * over. This data is omitted if the location is not in an argument to a function.
+   */
+  public String getParameter() {
+    return parameter;
+  }
+
+  /**
+   * The name of the propagated type of the expression. This data is omitted if the location does not
+   * correspond to an expression or if there is no propagated type information.
+   */
+  public String getPropagatedType() {
+    return propagatedType;
+  }
+
+  /**
+   * The name of the static type of the expression. This data is omitted if the location does not
+   * correspond to an expression.
+   */
+  public String getStaticType() {
+    return staticType;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    builder.append(containingLibraryPath);
+    builder.append(containingLibraryName);
+    builder.append(containingClassDescription);
+    builder.append(dartdoc);
+    builder.append(elementDescription);
+    builder.append(elementKind);
+    builder.append(parameter);
+    builder.append(propagatedType);
+    builder.append(staticType);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    if (containingLibraryPath != null) {
+      jsonObject.addProperty("containingLibraryPath", containingLibraryPath);
+    }
+    if (containingLibraryName != null) {
+      jsonObject.addProperty("containingLibraryName", containingLibraryName);
+    }
+    if (containingClassDescription != null) {
+      jsonObject.addProperty("containingClassDescription", containingClassDescription);
+    }
+    if (dartdoc != null) {
+      jsonObject.addProperty("dartdoc", dartdoc);
+    }
+    if (elementDescription != null) {
+      jsonObject.addProperty("elementDescription", elementDescription);
+    }
+    if (elementKind != null) {
+      jsonObject.addProperty("elementKind", elementKind);
+    }
+    if (parameter != null) {
+      jsonObject.addProperty("parameter", parameter);
+    }
+    if (propagatedType != null) {
+      jsonObject.addProperty("propagatedType", propagatedType);
+    }
+    if (staticType != null) {
+      jsonObject.addProperty("staticType", staticType);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("containingLibraryPath=");
+    builder.append(containingLibraryPath + ", ");
+    builder.append("containingLibraryName=");
+    builder.append(containingLibraryName + ", ");
+    builder.append("containingClassDescription=");
+    builder.append(containingClassDescription + ", ");
+    builder.append("dartdoc=");
+    builder.append(dartdoc + ", ");
+    builder.append("elementDescription=");
+    builder.append(elementDescription + ", ");
+    builder.append("elementKind=");
+    builder.append(elementKind + ", ");
+    builder.append("parameter=");
+    builder.append(parameter + ", ");
+    builder.append("propagatedType=");
+    builder.append(propagatedType + ", ");
+    builder.append("staticType=");
+    builder.append(staticType);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java
new file mode 100644
index 0000000..4e8503b
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class InlineLocalVariableFeedback extends RefactoringFeedback {
+
+  public static final InlineLocalVariableFeedback[] EMPTY_ARRAY = new InlineLocalVariableFeedback[0];
+
+  public static final List<InlineLocalVariableFeedback> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The name of the variable being inlined.
+   */
+  private final String name;
+
+  /**
+   * The number of times the variable occurs.
+   */
+  private final int occurrences;
+
+  /**
+   * Constructor for {@link InlineLocalVariableFeedback}.
+   */
+  public InlineLocalVariableFeedback(String name, int occurrences) {
+    this.name = name;
+    this.occurrences = occurrences;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof InlineLocalVariableFeedback) {
+      InlineLocalVariableFeedback other = (InlineLocalVariableFeedback) obj;
+      return
+        ObjectUtilities.equals(other.name, name) &&
+        other.occurrences == occurrences;
+    }
+    return false;
+  }
+
+  public static InlineLocalVariableFeedback fromJson(JsonObject jsonObject) {
+    String name = jsonObject.get("name").getAsString();
+    int occurrences = jsonObject.get("occurrences").getAsInt();
+    return new InlineLocalVariableFeedback(name, occurrences);
+  }
+
+  public static List<InlineLocalVariableFeedback> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<InlineLocalVariableFeedback> list = new ArrayList<InlineLocalVariableFeedback>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The name of the variable being inlined.
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * The number of times the variable occurs.
+   */
+  public int getOccurrences() {
+    return occurrences;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(name);
+    builder.append(occurrences);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("name", name);
+    jsonObject.addProperty("occurrences", occurrences);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("name=");
+    builder.append(name + ", ");
+    builder.append("occurrences=");
+    builder.append(occurrences);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java
new file mode 100644
index 0000000..6cd3e0c
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class InlineMethodFeedback extends RefactoringFeedback {
+
+  public static final InlineMethodFeedback[] EMPTY_ARRAY = new InlineMethodFeedback[0];
+
+  public static final List<InlineMethodFeedback> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The name of the class enclosing the method being inlined. If not a class member is being
+   * inlined, this field will be absent.
+   */
+  private final String className;
+
+  /**
+   * The name of the method (or function) being inlined.
+   */
+  private final String methodName;
+
+  /**
+   * True if the declaration of the method is selected. So all references should be inlined.
+   */
+  private final boolean isDeclaration;
+
+  /**
+   * Constructor for {@link InlineMethodFeedback}.
+   */
+  public InlineMethodFeedback(String className, String methodName, boolean isDeclaration) {
+    this.className = className;
+    this.methodName = methodName;
+    this.isDeclaration = isDeclaration;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof InlineMethodFeedback) {
+      InlineMethodFeedback other = (InlineMethodFeedback) obj;
+      return
+        ObjectUtilities.equals(other.className, className) &&
+        ObjectUtilities.equals(other.methodName, methodName) &&
+        other.isDeclaration == isDeclaration;
+    }
+    return false;
+  }
+
+  public static InlineMethodFeedback fromJson(JsonObject jsonObject) {
+    String className = jsonObject.get("className") == null ? null : jsonObject.get("className").getAsString();
+    String methodName = jsonObject.get("methodName").getAsString();
+    boolean isDeclaration = jsonObject.get("isDeclaration").getAsBoolean();
+    return new InlineMethodFeedback(className, methodName, isDeclaration);
+  }
+
+  public static List<InlineMethodFeedback> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<InlineMethodFeedback> list = new ArrayList<InlineMethodFeedback>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The name of the class enclosing the method being inlined. If not a class member is being
+   * inlined, this field will be absent.
+   */
+  public String getClassName() {
+    return className;
+  }
+
+  /**
+   * True if the declaration of the method is selected. So all references should be inlined.
+   */
+  public boolean isDeclaration() {
+    return isDeclaration;
+  }
+
+  /**
+   * The name of the method (or function) being inlined.
+   */
+  public String getMethodName() {
+    return methodName;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(className);
+    builder.append(methodName);
+    builder.append(isDeclaration);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    if (className != null) {
+      jsonObject.addProperty("className", className);
+    }
+    jsonObject.addProperty("methodName", methodName);
+    jsonObject.addProperty("isDeclaration", isDeclaration);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("className=");
+    builder.append(className + ", ");
+    builder.append("methodName=");
+    builder.append(methodName + ", ");
+    builder.append("isDeclaration=");
+    builder.append(isDeclaration);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java
new file mode 100644
index 0000000..707977e
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class InlineMethodOptions extends RefactoringOptions {
+
+  public static final InlineMethodOptions[] EMPTY_ARRAY = new InlineMethodOptions[0];
+
+  public static final List<InlineMethodOptions> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * True if the method being inlined should be removed. It is an error if this field is true and
+   * inlineAll is false.
+   */
+  private boolean deleteSource;
+
+  /**
+   * True if all invocations of the method should be inlined, or false if only the invocation site
+   * used to create this refactoring should be inlined.
+   */
+  private boolean inlineAll;
+
+  /**
+   * Constructor for {@link InlineMethodOptions}.
+   */
+  public InlineMethodOptions(boolean deleteSource, boolean inlineAll) {
+    this.deleteSource = deleteSource;
+    this.inlineAll = inlineAll;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof InlineMethodOptions) {
+      InlineMethodOptions other = (InlineMethodOptions) obj;
+      return
+        other.deleteSource == deleteSource &&
+        other.inlineAll == inlineAll;
+    }
+    return false;
+  }
+
+  public static InlineMethodOptions fromJson(JsonObject jsonObject) {
+    boolean deleteSource = jsonObject.get("deleteSource").getAsBoolean();
+    boolean inlineAll = jsonObject.get("inlineAll").getAsBoolean();
+    return new InlineMethodOptions(deleteSource, inlineAll);
+  }
+
+  public static List<InlineMethodOptions> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<InlineMethodOptions> list = new ArrayList<InlineMethodOptions>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * True if the method being inlined should be removed. It is an error if this field is true and
+   * inlineAll is false.
+   */
+  public boolean deleteSource() {
+    return deleteSource;
+  }
+
+  /**
+   * True if all invocations of the method should be inlined, or false if only the invocation site
+   * used to create this refactoring should be inlined.
+   */
+  public boolean inlineAll() {
+    return inlineAll;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(deleteSource);
+    builder.append(inlineAll);
+    return builder.toHashCode();
+  }
+
+  /**
+   * True if the method being inlined should be removed. It is an error if this field is true and
+   * inlineAll is false.
+   */
+  public void setDeleteSource(boolean deleteSource) {
+    this.deleteSource = deleteSource;
+  }
+
+  /**
+   * True if all invocations of the method should be inlined, or false if only the invocation site
+   * used to create this refactoring should be inlined.
+   */
+  public void setInlineAll(boolean inlineAll) {
+    this.inlineAll = inlineAll;
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("deleteSource", deleteSource);
+    jsonObject.addProperty("inlineAll", inlineAll);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("deleteSource=");
+    builder.append(deleteSource + ", ");
+    builder.append("inlineAll=");
+    builder.append(inlineAll);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
new file mode 100644
index 0000000..06e1e26
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A collection of positions that should be linked (edited simultaneously) for the purposes of
+ * updating code after a source change. For example, if a set of edits introduced a new variable
+ * name, the group would contain all of the positions of the variable name so that if the client
+ * wanted to let the user edit the variable name after the operation, all occurrences of the name
+ * could be edited simultaneously.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class LinkedEditGroup {
+
+  public static final LinkedEditGroup[] EMPTY_ARRAY = new LinkedEditGroup[0];
+
+  public static final List<LinkedEditGroup> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The positions of the regions that should be edited simultaneously.
+   */
+  private final List<Position> positions;
+
+  /**
+   * The length of the regions that should be edited simultaneously.
+   */
+  private final int length;
+
+  /**
+   * Pre-computed suggestions for what every region might want to be changed to.
+   */
+  private final List<LinkedEditSuggestion> suggestions;
+
+  /**
+   * Constructor for {@link LinkedEditGroup}.
+   */
+  public LinkedEditGroup(List<Position> positions, int length, List<LinkedEditSuggestion> suggestions) {
+    this.positions = positions;
+    this.length = length;
+    this.suggestions = suggestions;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof LinkedEditGroup) {
+      LinkedEditGroup other = (LinkedEditGroup) obj;
+      return
+        ObjectUtilities.equals(other.positions, positions) &&
+        other.length == length &&
+        ObjectUtilities.equals(other.suggestions, suggestions);
+    }
+    return false;
+  }
+
+  public static LinkedEditGroup fromJson(JsonObject jsonObject) {
+    List<Position> positions = Position.fromJsonArray(jsonObject.get("positions").getAsJsonArray());
+    int length = jsonObject.get("length").getAsInt();
+    List<LinkedEditSuggestion> suggestions = LinkedEditSuggestion.fromJsonArray(jsonObject.get("suggestions").getAsJsonArray());
+    return new LinkedEditGroup(positions, length, suggestions);
+  }
+
+  public static List<LinkedEditGroup> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<LinkedEditGroup> list = new ArrayList<LinkedEditGroup>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The length of the regions that should be edited simultaneously.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The positions of the regions that should be edited simultaneously.
+   */
+  public List<Position> getPositions() {
+    return positions;
+  }
+
+  /**
+   * Pre-computed suggestions for what every region might want to be changed to.
+   */
+  public List<LinkedEditSuggestion> getSuggestions() {
+    return suggestions;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(positions);
+    builder.append(length);
+    builder.append(suggestions);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    JsonArray jsonArrayPositions = new JsonArray();
+    for (Position elt : positions) {
+      jsonArrayPositions.add(elt.toJson());
+    }
+    jsonObject.add("positions", jsonArrayPositions);
+    jsonObject.addProperty("length", length);
+    JsonArray jsonArraySuggestions = new JsonArray();
+    for (LinkedEditSuggestion elt : suggestions) {
+      jsonArraySuggestions.add(elt.toJson());
+    }
+    jsonObject.add("suggestions", jsonArraySuggestions);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("positions=");
+    builder.append(StringUtils.join(positions, ", ") + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("suggestions=");
+    builder.append(StringUtils.join(suggestions, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java
new file mode 100644
index 0000000..4301ff1
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A suggestion of a value that could be used to replace all of the linked edit regions in a
+ * LinkedEditGroup.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class LinkedEditSuggestion {
+
+  public static final LinkedEditSuggestion[] EMPTY_ARRAY = new LinkedEditSuggestion[0];
+
+  public static final List<LinkedEditSuggestion> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The value that could be used to replace all of the linked edit regions.
+   */
+  private final String value;
+
+  /**
+   * The kind of value being proposed.
+   */
+  private final String kind;
+
+  /**
+   * Constructor for {@link LinkedEditSuggestion}.
+   */
+  public LinkedEditSuggestion(String value, String kind) {
+    this.value = value;
+    this.kind = kind;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof LinkedEditSuggestion) {
+      LinkedEditSuggestion other = (LinkedEditSuggestion) obj;
+      return
+        ObjectUtilities.equals(other.value, value) &&
+        ObjectUtilities.equals(other.kind, kind);
+    }
+    return false;
+  }
+
+  public static LinkedEditSuggestion fromJson(JsonObject jsonObject) {
+    String value = jsonObject.get("value").getAsString();
+    String kind = jsonObject.get("kind").getAsString();
+    return new LinkedEditSuggestion(value, kind);
+  }
+
+  public static List<LinkedEditSuggestion> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<LinkedEditSuggestion> list = new ArrayList<LinkedEditSuggestion>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The kind of value being proposed.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The value that could be used to replace all of the linked edit regions.
+   */
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(value);
+    builder.append(kind);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("value", value);
+    jsonObject.addProperty("kind", kind);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("value=");
+    builder.append(value + ", ");
+    builder.append("kind=");
+    builder.append(kind);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java
new file mode 100644
index 0000000..25343a2
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kind of values that can be suggested for a linked edit.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class LinkedEditSuggestionKind {
+
+  public static final String METHOD = "METHOD";
+
+  public static final String PARAMETER = "PARAMETER";
+
+  public static final String TYPE = "TYPE";
+
+  public static final String VARIABLE = "VARIABLE";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Location.java b/pkg/analysis_server/tool/spec/generated/java/types/Location.java
new file mode 100644
index 0000000..a0eac20
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Location.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A location (character range) within a file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class Location {
+
+  public static final Location[] EMPTY_ARRAY = new Location[0];
+
+  public static final List<Location> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The file containing the range.
+   */
+  private final String file;
+
+  /**
+   * The offset of the range.
+   */
+  private final int offset;
+
+  /**
+   * The length of the range.
+   */
+  private final int length;
+
+  /**
+   * The one-based index of the line containing the first character of the range.
+   */
+  private final int startLine;
+
+  /**
+   * The one-based index of the column containing the first character of the range.
+   */
+  private final int startColumn;
+
+  /**
+   * Constructor for {@link Location}.
+   */
+  public Location(String file, int offset, int length, int startLine, int startColumn) {
+    this.file = file;
+    this.offset = offset;
+    this.length = length;
+    this.startLine = startLine;
+    this.startColumn = startColumn;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof Location) {
+      Location other = (Location) obj;
+      return
+        ObjectUtilities.equals(other.file, file) &&
+        other.offset == offset &&
+        other.length == length &&
+        other.startLine == startLine &&
+        other.startColumn == startColumn;
+    }
+    return false;
+  }
+
+  public static Location fromJson(JsonObject jsonObject) {
+    String file = jsonObject.get("file").getAsString();
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    int startLine = jsonObject.get("startLine").getAsInt();
+    int startColumn = jsonObject.get("startColumn").getAsInt();
+    return new Location(file, offset, length, startLine, startColumn);
+  }
+
+  public static List<Location> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<Location> list = new ArrayList<Location>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The file containing the range.
+   */
+  public String getFile() {
+    return file;
+  }
+
+  /**
+   * The length of the range.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the range.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The one-based index of the column containing the first character of the range.
+   */
+  public int getStartColumn() {
+    return startColumn;
+  }
+
+  /**
+   * The one-based index of the line containing the first character of the range.
+   */
+  public int getStartLine() {
+    return startLine;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(file);
+    builder.append(offset);
+    builder.append(length);
+    builder.append(startLine);
+    builder.append(startColumn);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("file", file);
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    jsonObject.addProperty("startLine", startLine);
+    jsonObject.addProperty("startColumn", startColumn);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("file=");
+    builder.append(file + ", ");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("startLine=");
+    builder.append(startLine + ", ");
+    builder.append("startColumn=");
+    builder.append(startColumn);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java
new file mode 100644
index 0000000..a24c3eb
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class MoveFileOptions extends RefactoringOptions {
+
+  public static final MoveFileOptions[] EMPTY_ARRAY = new MoveFileOptions[0];
+
+  public static final List<MoveFileOptions> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The new file path to which the given file is being moved.
+   */
+  private String newFile;
+
+  /**
+   * Constructor for {@link MoveFileOptions}.
+   */
+  public MoveFileOptions(String newFile) {
+    this.newFile = newFile;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof MoveFileOptions) {
+      MoveFileOptions other = (MoveFileOptions) obj;
+      return
+        ObjectUtilities.equals(other.newFile, newFile);
+    }
+    return false;
+  }
+
+  public static MoveFileOptions fromJson(JsonObject jsonObject) {
+    String newFile = jsonObject.get("newFile").getAsString();
+    return new MoveFileOptions(newFile);
+  }
+
+  public static List<MoveFileOptions> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<MoveFileOptions> list = new ArrayList<MoveFileOptions>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The new file path to which the given file is being moved.
+   */
+  public String getNewFile() {
+    return newFile;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(newFile);
+    return builder.toHashCode();
+  }
+
+  /**
+   * The new file path to which the given file is being moved.
+   */
+  public void setNewFile(String newFile) {
+    this.newFile = newFile;
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("newFile", newFile);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("newFile=");
+    builder.append(newFile);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java b/pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java
new file mode 100644
index 0000000..a968156
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a region from which the user can navigate to the declaration of an element.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class NavigationRegion {
+
+  public static final NavigationRegion[] EMPTY_ARRAY = new NavigationRegion[0];
+
+  public static final List<NavigationRegion> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset of the region from which the user can navigate.
+   */
+  private final int offset;
+
+  /**
+   * The length of the region from which the user can navigate.
+   */
+  private final int length;
+
+  /**
+   * The indexes of the targets (in the enclosing navigation response) to which the given region is
+   * bound. By opening the target, clients can implement one form of navigation.
+   */
+  private final int[] targets;
+
+  private final List<NavigationTarget> targetObjects = Lists.newArrayList();
+
+  /**
+   * Constructor for {@link NavigationRegion}.
+   */
+  public NavigationRegion(int offset, int length, int[] targets) {
+    this.offset = offset;
+    this.length = length;
+    this.targets = targets;
+  }
+
+  public boolean containsInclusive(int x) {
+    return offset <= x && x <= offset + length;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof NavigationRegion) {
+      NavigationRegion other = (NavigationRegion) obj;
+      return
+        other.offset == offset &&
+        other.length == length &&
+        Arrays.equals(other.targets, targets);
+    }
+    return false;
+  }
+
+  public static NavigationRegion fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    int[] targets = JsonUtilities.decodeIntArray(jsonObject.get("targets").getAsJsonArray());
+    return new NavigationRegion(offset, length, targets);
+  }
+
+  public static List<NavigationRegion> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<NavigationRegion> list = new ArrayList<NavigationRegion>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  public List<NavigationTarget> getTargetObjects() {
+    return targetObjects;
+  }
+
+  /**
+   * The length of the region from which the user can navigate.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the region from which the user can navigate.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The indexes of the targets (in the enclosing navigation response) to which the given region is
+   * bound. By opening the target, clients can implement one form of navigation.
+   */
+  public int[] getTargets() {
+    return targets;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    builder.append(targets);
+    return builder.toHashCode();
+  }
+
+  public void lookupTargets(List<NavigationTarget> allTargets) {
+    for (int i = 0; i < targets.length; i++) {
+      int targetIndex = targets[i];
+      NavigationTarget target = allTargets.get(targetIndex);
+      targetObjects.add(target);
+    }
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    JsonArray jsonArrayTargets = new JsonArray();
+    for (int elt : targets) {
+      jsonArrayTargets.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("targets", jsonArrayTargets);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("targets=");
+    builder.append(StringUtils.join(targets, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java b/pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java
new file mode 100644
index 0000000..9290862
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a target to which the user can navigate.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class NavigationTarget {
+
+  public static final NavigationTarget[] EMPTY_ARRAY = new NavigationTarget[0];
+
+  public static final List<NavigationTarget> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The kind of the element.
+   */
+  private final String kind;
+
+  /**
+   * The index of the file (in the enclosing navigation response) to navigate to.
+   */
+  private final int fileIndex;
+
+  /**
+   * The offset of the region from which the user can navigate.
+   */
+  private final int offset;
+
+  /**
+   * The length of the region from which the user can navigate.
+   */
+  private final int length;
+
+  /**
+   * The one-based index of the line containing the first character of the region.
+   */
+  private final int startLine;
+
+  /**
+   * The one-based index of the column containing the first character of the region.
+   */
+  private final int startColumn;
+
+  private String file;
+
+  /**
+   * Constructor for {@link NavigationTarget}.
+   */
+  public NavigationTarget(String kind, int fileIndex, int offset, int length, int startLine, int startColumn) {
+    this.kind = kind;
+    this.fileIndex = fileIndex;
+    this.offset = offset;
+    this.length = length;
+    this.startLine = startLine;
+    this.startColumn = startColumn;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof NavigationTarget) {
+      NavigationTarget other = (NavigationTarget) obj;
+      return
+        ObjectUtilities.equals(other.kind, kind) &&
+        other.fileIndex == fileIndex &&
+        other.offset == offset &&
+        other.length == length &&
+        other.startLine == startLine &&
+        other.startColumn == startColumn;
+    }
+    return false;
+  }
+
+  public static NavigationTarget fromJson(JsonObject jsonObject) {
+    String kind = jsonObject.get("kind").getAsString();
+    int fileIndex = jsonObject.get("fileIndex").getAsInt();
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    int startLine = jsonObject.get("startLine").getAsInt();
+    int startColumn = jsonObject.get("startColumn").getAsInt();
+    return new NavigationTarget(kind, fileIndex, offset, length, startLine, startColumn);
+  }
+
+  public static List<NavigationTarget> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<NavigationTarget> list = new ArrayList<NavigationTarget>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  public String getFile() {
+    return file;
+  }
+
+  /**
+   * The index of the file (in the enclosing navigation response) to navigate to.
+   */
+  public int getFileIndex() {
+    return fileIndex;
+  }
+
+  /**
+   * The kind of the element.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The length of the region from which the user can navigate.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the region from which the user can navigate.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The one-based index of the column containing the first character of the region.
+   */
+  public int getStartColumn() {
+    return startColumn;
+  }
+
+  /**
+   * The one-based index of the line containing the first character of the region.
+   */
+  public int getStartLine() {
+    return startLine;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(kind);
+    builder.append(fileIndex);
+    builder.append(offset);
+    builder.append(length);
+    builder.append(startLine);
+    builder.append(startColumn);
+    return builder.toHashCode();
+  }
+
+  public void lookupFile(String[] allTargetFiles) {
+    file = allTargetFiles[fileIndex];
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("kind", kind);
+    jsonObject.addProperty("fileIndex", fileIndex);
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    jsonObject.addProperty("startLine", startLine);
+    jsonObject.addProperty("startColumn", startColumn);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("kind=");
+    builder.append(kind + ", ");
+    builder.append("fileIndex=");
+    builder.append(fileIndex + ", ");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("startLine=");
+    builder.append(startLine + ", ");
+    builder.append("startColumn=");
+    builder.append(startColumn);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java b/pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java
new file mode 100644
index 0000000..db04138
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of the references to a single element within a single file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class Occurrences {
+
+  public static final Occurrences[] EMPTY_ARRAY = new Occurrences[0];
+
+  public static final List<Occurrences> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The element that was referenced.
+   */
+  private final Element element;
+
+  /**
+   * The offsets of the name of the referenced element within the file.
+   */
+  private final int[] offsets;
+
+  /**
+   * The length of the name of the referenced element.
+   */
+  private final int length;
+
+  /**
+   * Constructor for {@link Occurrences}.
+   */
+  public Occurrences(Element element, int[] offsets, int length) {
+    this.element = element;
+    this.offsets = offsets;
+    this.length = length;
+  }
+
+  public boolean containsInclusive(int x) {
+    for (int offset : offsets) {
+      if (offset <= x && x <= offset + length) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof Occurrences) {
+      Occurrences other = (Occurrences) obj;
+      return
+        ObjectUtilities.equals(other.element, element) &&
+        Arrays.equals(other.offsets, offsets) &&
+        other.length == length;
+    }
+    return false;
+  }
+
+  public static Occurrences fromJson(JsonObject jsonObject) {
+    Element element = Element.fromJson(jsonObject.get("element").getAsJsonObject());
+    int[] offsets = JsonUtilities.decodeIntArray(jsonObject.get("offsets").getAsJsonArray());
+    int length = jsonObject.get("length").getAsInt();
+    return new Occurrences(element, offsets, length);
+  }
+
+  public static List<Occurrences> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<Occurrences> list = new ArrayList<Occurrences>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The element that was referenced.
+   */
+  public Element getElement() {
+    return element;
+  }
+
+  /**
+   * The length of the name of the referenced element.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offsets of the name of the referenced element within the file.
+   */
+  public int[] getOffsets() {
+    return offsets;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(element);
+    builder.append(offsets);
+    builder.append(length);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.add("element", element.toJson());
+    JsonArray jsonArrayOffsets = new JsonArray();
+    for (int elt : offsets) {
+      jsonArrayOffsets.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("offsets", jsonArrayOffsets);
+    jsonObject.addProperty("length", length);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("element=");
+    builder.append(element + ", ");
+    builder.append("offsets=");
+    builder.append(StringUtils.join(offsets, ", ") + ", ");
+    builder.append("length=");
+    builder.append(length);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Outline.java b/pkg/analysis_server/tool/spec/generated/java/types/Outline.java
new file mode 100644
index 0000000..5a6576f
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Outline.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An node in the outline structure of a file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class Outline {
+
+  public static final Outline[] EMPTY_ARRAY = new Outline[0];
+
+  public static final List<Outline> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * A description of the element represented by this node.
+   */
+  private Element element;
+
+  /**
+   * The offset of the first character of the element. This is different than the offset in the
+   * Element, which if the offset of the name of the element. It can be used, for example, to map
+   * locations in the file back to an outline.
+   */
+  private int offset;
+
+  /**
+   * The length of the element.
+   */
+  private int length;
+
+  private final Outline parent;
+
+  private List<Outline> children;
+
+  /**
+   * Constructor for {@link Outline}.
+   */
+  public Outline(Outline parent, Element element, int offset, int length) {
+    this.parent = parent;
+    this.element = element;
+    this.offset = offset;
+    this.length = length;
+  }
+
+  public boolean containsInclusive(int x) {
+    return offset <= x && x <= offset + length;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof Outline) {
+      Outline other = (Outline) obj;
+      return
+        ObjectUtilities.equals(other.element, element) &&
+        other.offset == offset &&
+        other.length == length &&
+        ObjectUtilities.equals(other.children, children);
+    }
+    return false;
+  }
+
+  public static Outline fromJson(Outline parent, JsonObject outlineObject) {
+    JsonObject elementObject = outlineObject.get("element").getAsJsonObject();
+    Element element = Element.fromJson(elementObject);
+    int offset = outlineObject.get("offset").getAsInt();
+    int length = outlineObject.get("length").getAsInt();
+
+    // create outline object
+    Outline outline = new Outline(parent, element, offset, length);
+
+    // compute children recursively
+    List<Outline> childrenList = Lists.newArrayList();
+    JsonElement childrenJsonArray = outlineObject.get("children");
+    if (childrenJsonArray instanceof JsonArray) {
+      Iterator<JsonElement> childrenElementIterator = ((JsonArray) childrenJsonArray).iterator();
+      while (childrenElementIterator.hasNext()) {
+        JsonObject childObject = childrenElementIterator.next().getAsJsonObject();
+        childrenList.add(fromJson(outline, childObject));
+      }
+    }
+    outline.setChildren(childrenList);
+    return outline;
+  }
+
+  public Outline getParent() {
+    return parent;
+  }
+
+  /**
+   * The children of the node. The field will be omitted if the node has no children.
+   */
+  public List<Outline> getChildren() {
+    return children;
+  }
+
+  /**
+   * A description of the element represented by this node.
+   */
+  public Element getElement() {
+    return element;
+  }
+
+  /**
+   * The length of the element.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the first character of the element. This is different than the offset in the
+   * Element, which if the offset of the name of the element. It can be used, for example, to map
+   * locations in the file back to an outline.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(element);
+    builder.append(offset);
+    builder.append(length);
+    builder.append(children);
+    return builder.toHashCode();
+  }
+
+  /**
+   * The children of the node. The field will be omitted if the node has no children.
+   */
+  public void setChildren(List<Outline> children) {
+    this.children = children;
+  }
+
+  /**
+   * A description of the element represented by this node.
+   */
+  public void setElement(Element element) {
+    this.element = element;
+  }
+
+  /**
+   * The length of the element.
+   */
+  public void setLength(int length) {
+    this.length = length;
+  }
+
+  /**
+   * The offset of the first character of the element. This is different than the offset in the
+   * Element, which if the offset of the name of the element. It can be used, for example, to map
+   * locations in the file back to an outline.
+   */
+  public void setOffset(int offset) {
+    this.offset = offset;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("element=");
+    builder.append(element + ", ");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("children=");
+    builder.append(StringUtils.join(children, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java b/pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java
new file mode 100644
index 0000000..47c085f
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a member that is being overridden.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class OverriddenMember {
+
+  public static final OverriddenMember[] EMPTY_ARRAY = new OverriddenMember[0];
+
+  public static final List<OverriddenMember> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The element that is being overridden.
+   */
+  private final Element element;
+
+  /**
+   * The name of the class in which the member is defined.
+   */
+  private final String className;
+
+  /**
+   * Constructor for {@link OverriddenMember}.
+   */
+  public OverriddenMember(Element element, String className) {
+    this.element = element;
+    this.className = className;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof OverriddenMember) {
+      OverriddenMember other = (OverriddenMember) obj;
+      return
+        ObjectUtilities.equals(other.element, element) &&
+        ObjectUtilities.equals(other.className, className);
+    }
+    return false;
+  }
+
+  public static OverriddenMember fromJson(JsonObject jsonObject) {
+    Element element = Element.fromJson(jsonObject.get("element").getAsJsonObject());
+    String className = jsonObject.get("className").getAsString();
+    return new OverriddenMember(element, className);
+  }
+
+  public static List<OverriddenMember> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<OverriddenMember> list = new ArrayList<OverriddenMember>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The name of the class in which the member is defined.
+   */
+  public String getClassName() {
+    return className;
+  }
+
+  /**
+   * The element that is being overridden.
+   */
+  public Element getElement() {
+    return element;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(element);
+    builder.append(className);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.add("element", element.toJson());
+    jsonObject.addProperty("className", className);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("element=");
+    builder.append(element + ", ");
+    builder.append("className=");
+    builder.append(className);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java b/pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java
new file mode 100644
index 0000000..6fb38e1
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a member that overrides an inherited member.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class OverrideMember {
+
+  public static final OverrideMember[] EMPTY_ARRAY = new OverrideMember[0];
+
+  public static final List<OverrideMember> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset of the name of the overriding member.
+   */
+  private final int offset;
+
+  /**
+   * The length of the name of the overriding member.
+   */
+  private final int length;
+
+  /**
+   * The member inherited from a superclass that is overridden by the overriding member. The field is
+   * omitted if there is no superclass member, in which case there must be at least one interface
+   * member.
+   */
+  private final OverriddenMember superclassMember;
+
+  /**
+   * The members inherited from interfaces that are overridden by the overriding member. The field is
+   * omitted if there are no interface members, in which case there must be a superclass member.
+   */
+  private final List<OverriddenMember> interfaceMembers;
+
+  /**
+   * Constructor for {@link OverrideMember}.
+   */
+  public OverrideMember(int offset, int length, OverriddenMember superclassMember, List<OverriddenMember> interfaceMembers) {
+    this.offset = offset;
+    this.length = length;
+    this.superclassMember = superclassMember;
+    this.interfaceMembers = interfaceMembers;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof OverrideMember) {
+      OverrideMember other = (OverrideMember) obj;
+      return
+        other.offset == offset &&
+        other.length == length &&
+        ObjectUtilities.equals(other.superclassMember, superclassMember) &&
+        ObjectUtilities.equals(other.interfaceMembers, interfaceMembers);
+    }
+    return false;
+  }
+
+  public static OverrideMember fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    OverriddenMember superclassMember = jsonObject.get("superclassMember") == null ? null : OverriddenMember.fromJson(jsonObject.get("superclassMember").getAsJsonObject());
+    List<OverriddenMember> interfaceMembers = jsonObject.get("interfaceMembers") == null ? null : OverriddenMember.fromJsonArray(jsonObject.get("interfaceMembers").getAsJsonArray());
+    return new OverrideMember(offset, length, superclassMember, interfaceMembers);
+  }
+
+  public static List<OverrideMember> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<OverrideMember> list = new ArrayList<OverrideMember>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The members inherited from interfaces that are overridden by the overriding member. The field is
+   * omitted if there are no interface members, in which case there must be a superclass member.
+   */
+  public List<OverriddenMember> getInterfaceMembers() {
+    return interfaceMembers;
+  }
+
+  /**
+   * The length of the name of the overriding member.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the name of the overriding member.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The member inherited from a superclass that is overridden by the overriding member. The field is
+   * omitted if there is no superclass member, in which case there must be at least one interface
+   * member.
+   */
+  public OverriddenMember getSuperclassMember() {
+    return superclassMember;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    builder.append(superclassMember);
+    builder.append(interfaceMembers);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    if (superclassMember != null) {
+      jsonObject.add("superclassMember", superclassMember.toJson());
+    }
+    if (interfaceMembers != null) {
+      JsonArray jsonArrayInterfaceMembers = new JsonArray();
+      for (OverriddenMember elt : interfaceMembers) {
+        jsonArrayInterfaceMembers.add(elt.toJson());
+      }
+      jsonObject.add("interfaceMembers", jsonArrayInterfaceMembers);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("superclassMember=");
+    builder.append(superclassMember + ", ");
+    builder.append("interfaceMembers=");
+    builder.append(StringUtils.join(interfaceMembers, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Position.java b/pkg/analysis_server/tool/spec/generated/java/types/Position.java
new file mode 100644
index 0000000..f5c7acb
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Position.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A position within a file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class Position {
+
+  public static final Position[] EMPTY_ARRAY = new Position[0];
+
+  public static final List<Position> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The file containing the position.
+   */
+  private final String file;
+
+  /**
+   * The offset of the position.
+   */
+  private final int offset;
+
+  /**
+   * Constructor for {@link Position}.
+   */
+  public Position(String file, int offset) {
+    this.file = file;
+    this.offset = offset;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof Position) {
+      Position other = (Position) obj;
+      return
+        ObjectUtilities.equals(other.file, file) &&
+        other.offset == offset;
+    }
+    return false;
+  }
+
+  public static Position fromJson(JsonObject jsonObject) {
+    String file = jsonObject.get("file").getAsString();
+    int offset = jsonObject.get("offset").getAsInt();
+    return new Position(file, offset);
+  }
+
+  public static List<Position> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<Position> list = new ArrayList<Position>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The file containing the position.
+   */
+  public String getFile() {
+    return file;
+  }
+
+  /**
+   * The offset of the position.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(file);
+    builder.append(offset);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("file", file);
+    jsonObject.addProperty("offset", offset);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("file=");
+    builder.append(file + ", ");
+    builder.append("offset=");
+    builder.append(offset);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java b/pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java
new file mode 100644
index 0000000..c46b87a
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An indication of the current state of pub execution.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class PubStatus {
+
+  public static final PubStatus[] EMPTY_ARRAY = new PubStatus[0];
+
+  public static final List<PubStatus> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * True if the server is currently running pub to produce a list of package directories.
+   */
+  private final boolean isListingPackageDirs;
+
+  /**
+   * Constructor for {@link PubStatus}.
+   */
+  public PubStatus(boolean isListingPackageDirs) {
+    this.isListingPackageDirs = isListingPackageDirs;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof PubStatus) {
+      PubStatus other = (PubStatus) obj;
+      return
+        other.isListingPackageDirs == isListingPackageDirs;
+    }
+    return false;
+  }
+
+  public static PubStatus fromJson(JsonObject jsonObject) {
+    boolean isListingPackageDirs = jsonObject.get("isListingPackageDirs").getAsBoolean();
+    return new PubStatus(isListingPackageDirs);
+  }
+
+  public static List<PubStatus> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<PubStatus> list = new ArrayList<PubStatus>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * True if the server is currently running pub to produce a list of package directories.
+   */
+  public boolean isListingPackageDirs() {
+    return isListingPackageDirs;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(isListingPackageDirs);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("isListingPackageDirs", isListingPackageDirs);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("isListingPackageDirs=");
+    builder.append(isListingPackageDirs);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java
new file mode 100644
index 0000000..c1864b7
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An abstract superclass of all refactoring feedbacks.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RefactoringFeedback {
+
+  public static final RefactoringFeedback[] EMPTY_ARRAY = new RefactoringFeedback[0];
+
+  public static final List<RefactoringFeedback> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * Constructor for {@link RefactoringFeedback}.
+   */
+  public RefactoringFeedback() {
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RefactoringFeedback) {
+      RefactoringFeedback other = (RefactoringFeedback) obj;
+      return
+        true;
+    }
+    return false;
+  }
+
+  public static RefactoringFeedback fromJson(JsonObject jsonObject) {
+    return new RefactoringFeedback();
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java
new file mode 100644
index 0000000..822770d
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of refactorings that can be created.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class RefactoringKind {
+
+  public static final String CONVERT_GETTER_TO_METHOD = "CONVERT_GETTER_TO_METHOD";
+
+  public static final String CONVERT_METHOD_TO_GETTER = "CONVERT_METHOD_TO_GETTER";
+
+  public static final String EXTRACT_LOCAL_VARIABLE = "EXTRACT_LOCAL_VARIABLE";
+
+  public static final String EXTRACT_METHOD = "EXTRACT_METHOD";
+
+  public static final String INLINE_LOCAL_VARIABLE = "INLINE_LOCAL_VARIABLE";
+
+  public static final String INLINE_METHOD = "INLINE_METHOD";
+
+  public static final String MOVE_FILE = "MOVE_FILE";
+
+  public static final String RENAME = "RENAME";
+
+  public static final String SORT_MEMBERS = "SORT_MEMBERS";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java
new file mode 100644
index 0000000..d5f7dfe
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a parameter in a method refactoring.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RefactoringMethodParameter {
+
+  public static final RefactoringMethodParameter[] EMPTY_ARRAY = new RefactoringMethodParameter[0];
+
+  public static final List<RefactoringMethodParameter> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The unique identifier of the parameter. Clients may omit this field for the parameters they want
+   * to add.
+   */
+  private String id;
+
+  /**
+   * The kind of the parameter.
+   */
+  private String kind;
+
+  /**
+   * The type that should be given to the parameter, or the return type of the parameter's function
+   * type.
+   */
+  private String type;
+
+  /**
+   * The name that should be given to the parameter.
+   */
+  private String name;
+
+  /**
+   * The parameter list of the parameter's function type. If the parameter is not of a function type,
+   * this field will not be defined. If the function type has zero parameters, this field will have a
+   * value of "()".
+   */
+  private String parameters;
+
+  /**
+   * Constructor for {@link RefactoringMethodParameter}.
+   */
+  public RefactoringMethodParameter(String id, String kind, String type, String name, String parameters) {
+    this.id = id;
+    this.kind = kind;
+    this.type = type;
+    this.name = name;
+    this.parameters = parameters;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RefactoringMethodParameter) {
+      RefactoringMethodParameter other = (RefactoringMethodParameter) obj;
+      return
+        ObjectUtilities.equals(other.id, id) &&
+        ObjectUtilities.equals(other.kind, kind) &&
+        ObjectUtilities.equals(other.type, type) &&
+        ObjectUtilities.equals(other.name, name) &&
+        ObjectUtilities.equals(other.parameters, parameters);
+    }
+    return false;
+  }
+
+  public static RefactoringMethodParameter fromJson(JsonObject jsonObject) {
+    String id = jsonObject.get("id") == null ? null : jsonObject.get("id").getAsString();
+    String kind = jsonObject.get("kind").getAsString();
+    String type = jsonObject.get("type").getAsString();
+    String name = jsonObject.get("name").getAsString();
+    String parameters = jsonObject.get("parameters") == null ? null : jsonObject.get("parameters").getAsString();
+    return new RefactoringMethodParameter(id, kind, type, name, parameters);
+  }
+
+  public static List<RefactoringMethodParameter> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<RefactoringMethodParameter> list = new ArrayList<RefactoringMethodParameter>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The unique identifier of the parameter. Clients may omit this field for the parameters they want
+   * to add.
+   */
+  public String getId() {
+    return id;
+  }
+
+  /**
+   * The kind of the parameter.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The name that should be given to the parameter.
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * The parameter list of the parameter's function type. If the parameter is not of a function type,
+   * this field will not be defined. If the function type has zero parameters, this field will have a
+   * value of "()".
+   */
+  public String getParameters() {
+    return parameters;
+  }
+
+  /**
+   * The type that should be given to the parameter, or the return type of the parameter's function
+   * type.
+   */
+  public String getType() {
+    return type;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(id);
+    builder.append(kind);
+    builder.append(type);
+    builder.append(name);
+    builder.append(parameters);
+    return builder.toHashCode();
+  }
+
+  /**
+   * The unique identifier of the parameter. Clients may omit this field for the parameters they want
+   * to add.
+   */
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  /**
+   * The kind of the parameter.
+   */
+  public void setKind(String kind) {
+    this.kind = kind;
+  }
+
+  /**
+   * The name that should be given to the parameter.
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * The parameter list of the parameter's function type. If the parameter is not of a function type,
+   * this field will not be defined. If the function type has zero parameters, this field will have a
+   * value of "()".
+   */
+  public void setParameters(String parameters) {
+    this.parameters = parameters;
+  }
+
+  /**
+   * The type that should be given to the parameter, or the return type of the parameter's function
+   * type.
+   */
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    if (id != null) {
+      jsonObject.addProperty("id", id);
+    }
+    jsonObject.addProperty("kind", kind);
+    jsonObject.addProperty("type", type);
+    jsonObject.addProperty("name", name);
+    if (parameters != null) {
+      jsonObject.addProperty("parameters", parameters);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("id=");
+    builder.append(id + ", ");
+    builder.append("kind=");
+    builder.append(kind + ", ");
+    builder.append("type=");
+    builder.append(type + ", ");
+    builder.append("name=");
+    builder.append(name + ", ");
+    builder.append("parameters=");
+    builder.append(parameters);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java
new file mode 100644
index 0000000..c7a059a
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of parameters.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class RefactoringMethodParameterKind {
+
+  public static final String REQUIRED = "REQUIRED";
+
+  public static final String POSITIONAL = "POSITIONAL";
+
+  public static final String NAMED = "NAMED";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java
new file mode 100644
index 0000000..05af2ff
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An abstract superclass of all refactoring options.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RefactoringOptions {
+
+  public static final RefactoringOptions[] EMPTY_ARRAY = new RefactoringOptions[0];
+
+  public static final List<RefactoringOptions> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * Constructor for {@link RefactoringOptions}.
+   */
+  public RefactoringOptions() {
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RefactoringOptions) {
+      RefactoringOptions other = (RefactoringOptions) obj;
+      return
+        true;
+    }
+    return false;
+  }
+
+  public static RefactoringOptions fromJson(JsonObject jsonObject) {
+    return new RefactoringOptions();
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java
new file mode 100644
index 0000000..da87988
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a problem related to a refactoring.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RefactoringProblem {
+
+  public static final RefactoringProblem[] EMPTY_ARRAY = new RefactoringProblem[0];
+
+  public static final List<RefactoringProblem> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The severity of the problem being represented.
+   */
+  private final String severity;
+
+  /**
+   * A human-readable description of the problem being represented.
+   */
+  private final String message;
+
+  /**
+   * The location of the problem being represented. This field is omitted unless there is a specific
+   * location associated with the problem (such as a location where an element being renamed will be
+   * shadowed).
+   */
+  private final Location location;
+
+  /**
+   * Constructor for {@link RefactoringProblem}.
+   */
+  public RefactoringProblem(String severity, String message, Location location) {
+    this.severity = severity;
+    this.message = message;
+    this.location = location;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RefactoringProblem) {
+      RefactoringProblem other = (RefactoringProblem) obj;
+      return
+        ObjectUtilities.equals(other.severity, severity) &&
+        ObjectUtilities.equals(other.message, message) &&
+        ObjectUtilities.equals(other.location, location);
+    }
+    return false;
+  }
+
+  public static RefactoringProblem fromJson(JsonObject jsonObject) {
+    String severity = jsonObject.get("severity").getAsString();
+    String message = jsonObject.get("message").getAsString();
+    Location location = jsonObject.get("location") == null ? null : Location.fromJson(jsonObject.get("location").getAsJsonObject());
+    return new RefactoringProblem(severity, message, location);
+  }
+
+  public static List<RefactoringProblem> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<RefactoringProblem> list = new ArrayList<RefactoringProblem>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The location of the problem being represented. This field is omitted unless there is a specific
+   * location associated with the problem (such as a location where an element being renamed will be
+   * shadowed).
+   */
+  public Location getLocation() {
+    return location;
+  }
+
+  /**
+   * A human-readable description of the problem being represented.
+   */
+  public String getMessage() {
+    return message;
+  }
+
+  /**
+   * The severity of the problem being represented.
+   */
+  public String getSeverity() {
+    return severity;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(severity);
+    builder.append(message);
+    builder.append(location);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("severity", severity);
+    jsonObject.addProperty("message", message);
+    if (location != null) {
+      jsonObject.add("location", location.toJson());
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("severity=");
+    builder.append(severity + ", ");
+    builder.append("message=");
+    builder.append(message + ", ");
+    builder.append("location=");
+    builder.append(location);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java
new file mode 100644
index 0000000..823eacc
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the severities of problems that can be returned by the refactoring requests.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class RefactoringProblemSeverity {
+
+  public static final String INFO = "INFO";
+
+  public static final String WARNING = "WARNING";
+
+  public static final String ERROR = "ERROR";
+
+  public static final String FATAL = "FATAL";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java b/pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java
new file mode 100644
index 0000000..fb284da
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A directive to remove an existing file content overlay. After processing this directive, the
+ * file contents will once again be read from the file system.
+ *
+ * If this directive is used on a file that doesn't currently have a content overlay, it has no
+ * effect.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RemoveContentOverlay {
+
+  public static final RemoveContentOverlay[] EMPTY_ARRAY = new RemoveContentOverlay[0];
+
+  public static final List<RemoveContentOverlay> EMPTY_LIST = Lists.newArrayList();
+
+  private final String type;
+
+  /**
+   * Constructor for {@link RemoveContentOverlay}.
+   */
+  public RemoveContentOverlay() {
+    this.type = "remove";
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RemoveContentOverlay) {
+      RemoveContentOverlay other = (RemoveContentOverlay) obj;
+      return
+        ObjectUtilities.equals(other.type, type);
+    }
+    return false;
+  }
+
+  public static RemoveContentOverlay fromJson(JsonObject jsonObject) {
+    String type = jsonObject.get("type").getAsString();
+    return new RemoveContentOverlay();
+  }
+
+  public static List<RemoveContentOverlay> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<RemoveContentOverlay> list = new ArrayList<RemoveContentOverlay>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(type);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("type", type);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("type=");
+    builder.append(type);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java
new file mode 100644
index 0000000..c94f2e6
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RenameFeedback extends RefactoringFeedback {
+
+  public static final RenameFeedback[] EMPTY_ARRAY = new RenameFeedback[0];
+
+  public static final List<RenameFeedback> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset to the beginning of the name selected to be renamed.
+   */
+  private final int offset;
+
+  /**
+   * The length of the name selected to be renamed.
+   */
+  private final int length;
+
+  /**
+   * The human-readable description of the kind of element being renamed (such as “class” or
+   * “function type alias”).
+   */
+  private final String elementKindName;
+
+  /**
+   * The old name of the element before the refactoring.
+   */
+  private final String oldName;
+
+  /**
+   * Constructor for {@link RenameFeedback}.
+   */
+  public RenameFeedback(int offset, int length, String elementKindName, String oldName) {
+    this.offset = offset;
+    this.length = length;
+    this.elementKindName = elementKindName;
+    this.oldName = oldName;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RenameFeedback) {
+      RenameFeedback other = (RenameFeedback) obj;
+      return
+        other.offset == offset &&
+        other.length == length &&
+        ObjectUtilities.equals(other.elementKindName, elementKindName) &&
+        ObjectUtilities.equals(other.oldName, oldName);
+    }
+    return false;
+  }
+
+  public static RenameFeedback fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    String elementKindName = jsonObject.get("elementKindName").getAsString();
+    String oldName = jsonObject.get("oldName").getAsString();
+    return new RenameFeedback(offset, length, elementKindName, oldName);
+  }
+
+  public static List<RenameFeedback> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<RenameFeedback> list = new ArrayList<RenameFeedback>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The human-readable description of the kind of element being renamed (such as “class” or
+   * “function type alias”).
+   */
+  public String getElementKindName() {
+    return elementKindName;
+  }
+
+  /**
+   * The length of the name selected to be renamed.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset to the beginning of the name selected to be renamed.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The old name of the element before the refactoring.
+   */
+  public String getOldName() {
+    return oldName;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    builder.append(elementKindName);
+    builder.append(oldName);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    jsonObject.addProperty("elementKindName", elementKindName);
+    jsonObject.addProperty("oldName", oldName);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("elementKindName=");
+    builder.append(elementKindName + ", ");
+    builder.append("oldName=");
+    builder.append(oldName);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java
new file mode 100644
index 0000000..e17d49e
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RenameOptions extends RefactoringOptions {
+
+  public static final RenameOptions[] EMPTY_ARRAY = new RenameOptions[0];
+
+  public static final List<RenameOptions> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The name that the element should have after the refactoring.
+   */
+  private String newName;
+
+  /**
+   * Constructor for {@link RenameOptions}.
+   */
+  public RenameOptions(String newName) {
+    this.newName = newName;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RenameOptions) {
+      RenameOptions other = (RenameOptions) obj;
+      return
+        ObjectUtilities.equals(other.newName, newName);
+    }
+    return false;
+  }
+
+  public static RenameOptions fromJson(JsonObject jsonObject) {
+    String newName = jsonObject.get("newName").getAsString();
+    return new RenameOptions(newName);
+  }
+
+  public static List<RenameOptions> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<RenameOptions> list = new ArrayList<RenameOptions>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The name that the element should have after the refactoring.
+   */
+  public String getNewName() {
+    return newName;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(newName);
+    return builder.toHashCode();
+  }
+
+  /**
+   * The name that the element should have after the refactoring.
+   */
+  public void setNewName(String newName) {
+    this.newName = newName;
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("newName", newName);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("newName=");
+    builder.append(newName);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RequestError.java b/pkg/analysis_server/tool/spec/generated/java/types/RequestError.java
new file mode 100644
index 0000000..20c9b3a
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RequestError.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An indication of a problem with the execution of the server, typically in response to a request.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class RequestError {
+
+  public static final RequestError[] EMPTY_ARRAY = new RequestError[0];
+
+  public static final List<RequestError> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * A code that uniquely identifies the error that occurred.
+   */
+  private final String code;
+
+  /**
+   * A short description of the error.
+   */
+  private final String message;
+
+  /**
+   * The stack trace associated with processing the request, used for debugging the server.
+   */
+  private final String stackTrace;
+
+  /**
+   * Constructor for {@link RequestError}.
+   */
+  public RequestError(String code, String message, String stackTrace) {
+    this.code = code;
+    this.message = message;
+    this.stackTrace = stackTrace;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof RequestError) {
+      RequestError other = (RequestError) obj;
+      return
+        ObjectUtilities.equals(other.code, code) &&
+        ObjectUtilities.equals(other.message, message) &&
+        ObjectUtilities.equals(other.stackTrace, stackTrace);
+    }
+    return false;
+  }
+
+  public static RequestError fromJson(JsonObject jsonObject) {
+    String code = jsonObject.get("code").getAsString();
+    String message = jsonObject.get("message").getAsString();
+    String stackTrace = jsonObject.get("stackTrace") == null ? null : jsonObject.get("stackTrace").getAsString();
+    return new RequestError(code, message, stackTrace);
+  }
+
+  public static List<RequestError> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<RequestError> list = new ArrayList<RequestError>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * A code that uniquely identifies the error that occurred.
+   */
+  public String getCode() {
+    return code;
+  }
+
+  /**
+   * A short description of the error.
+   */
+  public String getMessage() {
+    return message;
+  }
+
+  /**
+   * The stack trace associated with processing the request, used for debugging the server.
+   */
+  public String getStackTrace() {
+    return stackTrace;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(code);
+    builder.append(message);
+    builder.append(stackTrace);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("code", code);
+    jsonObject.addProperty("message", message);
+    if (stackTrace != null) {
+      jsonObject.addProperty("stackTrace", stackTrace);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("code=");
+    builder.append(code + ", ");
+    builder.append("message=");
+    builder.append(message + ", ");
+    builder.append("stackTrace=");
+    builder.append(stackTrace);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java b/pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java
new file mode 100644
index 0000000..99f418a
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the types of errors that can occur in the execution of the server.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class RequestErrorCode {
+
+  /**
+   * An "analysis.getErrors" or "analysis.getNavigation" request could not be satisfied because the
+   * content of the file changed before the requested results could be computed.
+   */
+  public static final String CONTENT_MODIFIED = "CONTENT_MODIFIED";
+
+  /**
+   * An "edit.format" request specified a FilePath which does not match a Dart file in an analysis
+   * root.
+   */
+  public static final String FORMAT_INVALID_FILE = "FORMAT_INVALID_FILE";
+
+  /**
+   * An "edit.format" request specified a file that contains syntax errors.
+   */
+  public static final String FORMAT_WITH_ERRORS = "FORMAT_WITH_ERRORS";
+
+  /**
+   * An "analysis.getErrors" request specified a FilePath which does not match a file currently
+   * subject to analysis.
+   */
+  public static final String GET_ERRORS_INVALID_FILE = "GET_ERRORS_INVALID_FILE";
+
+  /**
+   * A path passed as an argument to a request (such as analysis.reanalyze) is required to be an
+   * analysis root, but isn't.
+   */
+  public static final String INVALID_ANALYSIS_ROOT = "INVALID_ANALYSIS_ROOT";
+
+  /**
+   * The context root used to create an execution context does not exist.
+   */
+  public static final String INVALID_EXECUTION_CONTEXT = "INVALID_EXECUTION_CONTEXT";
+
+  /**
+   * An "analysis.updateContent" request contained a ChangeContentOverlay object which can't be
+   * applied, due to an edit having an offset or length that is out of range.
+   */
+  public static final String INVALID_OVERLAY_CHANGE = "INVALID_OVERLAY_CHANGE";
+
+  /**
+   * One of the method parameters was invalid.
+   */
+  public static final String INVALID_PARAMETER = "INVALID_PARAMETER";
+
+  /**
+   * A malformed request was received.
+   */
+  public static final String INVALID_REQUEST = "INVALID_REQUEST";
+
+  /**
+   * The "--no-index" flag was passed when the analysis server created, but this API call requires an
+   * index to have been generated.
+   */
+  public static final String NO_INDEX_GENERATED = "NO_INDEX_GENERATED";
+
+  /**
+   * Another refactoring request was received during processing of this one.
+   */
+  public static final String REFACTORING_REQUEST_CANCELLED = "REFACTORING_REQUEST_CANCELLED";
+
+  /**
+   * The analysis server has already been started (and hence won't accept new connections).
+   *
+   * This error is included for future expansion; at present the analysis server can only speak to
+   * one client at a time so this error will never occur.
+   */
+  public static final String SERVER_ALREADY_STARTED = "SERVER_ALREADY_STARTED";
+
+  /**
+   * An internal error occurred in the analysis server. Also see the server.error notification.
+   */
+  public static final String SERVER_ERROR = "SERVER_ERROR";
+
+  /**
+   * An "edit.sortMembers" request specified a FilePath which does not match a Dart file in an
+   * analysis root.
+   */
+  public static final String SORT_MEMBERS_INVALID_FILE = "SORT_MEMBERS_INVALID_FILE";
+
+  /**
+   * An "edit.sortMembers" request specified a Dart file that has scan or parse errors.
+   */
+  public static final String SORT_MEMBERS_PARSE_ERRORS = "SORT_MEMBERS_PARSE_ERRORS";
+
+  /**
+   * An "analysis.setPriorityFiles" request includes one or more files that are not being analyzed.
+   *
+   * This is a legacy error; it will be removed before the API reaches version 1.0.
+   */
+  public static final String UNANALYZED_PRIORITY_FILES = "UNANALYZED_PRIORITY_FILES";
+
+  /**
+   * A request was received which the analysis server does not recognize, or cannot handle in its
+   * current configuation.
+   */
+  public static final String UNKNOWN_REQUEST = "UNKNOWN_REQUEST";
+
+  /**
+   * The analysis server was requested to perform an action on a source that does not exist.
+   */
+  public static final String UNKNOWN_SOURCE = "UNKNOWN_SOURCE";
+
+  /**
+   * The analysis server was requested to perform an action which is not supported.
+   *
+   * This is a legacy error; it will be removed before the API reaches version 1.0.
+   */
+  public static final String UNSUPPORTED_FEATURE = "UNSUPPORTED_FEATURE";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java b/pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java
new file mode 100644
index 0000000..19f4eac
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A single result from a search request.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class SearchResult {
+
+  public static final SearchResult[] EMPTY_ARRAY = new SearchResult[0];
+
+  public static final List<SearchResult> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The location of the code that matched the search criteria.
+   */
+  private final Location location;
+
+  /**
+   * The kind of element that was found or the kind of reference that was found.
+   */
+  private final String kind;
+
+  /**
+   * True if the result is a potential match but cannot be confirmed to be a match. For example, if
+   * all references to a method m defined in some class were requested, and a reference to a method m
+   * from an unknown class were found, it would be marked as being a potential match.
+   */
+  private final boolean isPotential;
+
+  /**
+   * The elements that contain the result, starting with the most immediately enclosing ancestor and
+   * ending with the library.
+   */
+  private final List<Element> path;
+
+  /**
+   * Constructor for {@link SearchResult}.
+   */
+  public SearchResult(Location location, String kind, boolean isPotential, List<Element> path) {
+    this.location = location;
+    this.kind = kind;
+    this.isPotential = isPotential;
+    this.path = path;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof SearchResult) {
+      SearchResult other = (SearchResult) obj;
+      return
+        ObjectUtilities.equals(other.location, location) &&
+        ObjectUtilities.equals(other.kind, kind) &&
+        other.isPotential == isPotential &&
+        ObjectUtilities.equals(other.path, path);
+    }
+    return false;
+  }
+
+  public static SearchResult fromJson(JsonObject jsonObject) {
+    Location location = Location.fromJson(jsonObject.get("location").getAsJsonObject());
+    String kind = jsonObject.get("kind").getAsString();
+    boolean isPotential = jsonObject.get("isPotential").getAsBoolean();
+    List<Element> path = Element.fromJsonArray(jsonObject.get("path").getAsJsonArray());
+    return new SearchResult(location, kind, isPotential, path);
+  }
+
+  public static List<SearchResult> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<SearchResult> list = new ArrayList<SearchResult>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * True if the result is a potential match but cannot be confirmed to be a match. For example, if
+   * all references to a method m defined in some class were requested, and a reference to a method m
+   * from an unknown class were found, it would be marked as being a potential match.
+   */
+  public boolean isPotential() {
+    return isPotential;
+  }
+
+  /**
+   * The kind of element that was found or the kind of reference that was found.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The location of the code that matched the search criteria.
+   */
+  public Location getLocation() {
+    return location;
+  }
+
+  /**
+   * The elements that contain the result, starting with the most immediately enclosing ancestor and
+   * ending with the library.
+   */
+  public List<Element> getPath() {
+    return path;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(location);
+    builder.append(kind);
+    builder.append(isPotential);
+    builder.append(path);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.add("location", location.toJson());
+    jsonObject.addProperty("kind", kind);
+    jsonObject.addProperty("isPotential", isPotential);
+    JsonArray jsonArrayPath = new JsonArray();
+    for (Element elt : path) {
+      jsonArrayPath.add(elt.toJson());
+    }
+    jsonObject.add("path", jsonArrayPath);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("location=");
+    builder.append(location + ", ");
+    builder.append("kind=");
+    builder.append(kind + ", ");
+    builder.append("isPotential=");
+    builder.append(isPotential + ", ");
+    builder.append("path=");
+    builder.append(StringUtils.join(path, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java b/pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java
new file mode 100644
index 0000000..4cf530d
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the kinds of search results returned by the search domain.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class SearchResultKind {
+
+  /**
+   * The declaration of an element.
+   */
+  public static final String DECLARATION = "DECLARATION";
+
+  /**
+   * The invocation of a function or method.
+   */
+  public static final String INVOCATION = "INVOCATION";
+
+  /**
+   * A reference to a field, parameter or variable where it is being read.
+   */
+  public static final String READ = "READ";
+
+  /**
+   * A reference to a field, parameter or variable where it is being read and written.
+   */
+  public static final String READ_WRITE = "READ_WRITE";
+
+  /**
+   * A reference to an element.
+   */
+  public static final String REFERENCE = "REFERENCE";
+
+  /**
+   * Some other kind of search result.
+   */
+  public static final String UNKNOWN = "UNKNOWN";
+
+  /**
+   * A reference to a field, parameter or variable where it is being written.
+   */
+  public static final String WRITE = "WRITE";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java b/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
new file mode 100644
index 0000000..4878287
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+/**
+ * An enumeration of the services provided by the server domain.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class ServerService {
+
+  public static final String STATUS = "STATUS";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java b/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
new file mode 100644
index 0000000..7d39be9
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a set of edits that implement a single conceptual change.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class SourceChange {
+
+  public static final SourceChange[] EMPTY_ARRAY = new SourceChange[0];
+
+  public static final List<SourceChange> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * A human-readable description of the change to be applied.
+   */
+  private final String message;
+
+  /**
+   * A list of the edits used to effect the change, grouped by file.
+   */
+  private final List<SourceFileEdit> edits;
+
+  /**
+   * A list of the linked editing groups used to customize the changes that were made.
+   */
+  private final List<LinkedEditGroup> linkedEditGroups;
+
+  /**
+   * The position that should be selected after the edits have been applied.
+   */
+  private final Position selection;
+
+  /**
+   * Constructor for {@link SourceChange}.
+   */
+  public SourceChange(String message, List<SourceFileEdit> edits, List<LinkedEditGroup> linkedEditGroups, Position selection) {
+    this.message = message;
+    this.edits = edits;
+    this.linkedEditGroups = linkedEditGroups;
+    this.selection = selection;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof SourceChange) {
+      SourceChange other = (SourceChange) obj;
+      return
+        ObjectUtilities.equals(other.message, message) &&
+        ObjectUtilities.equals(other.edits, edits) &&
+        ObjectUtilities.equals(other.linkedEditGroups, linkedEditGroups) &&
+        ObjectUtilities.equals(other.selection, selection);
+    }
+    return false;
+  }
+
+  public static SourceChange fromJson(JsonObject jsonObject) {
+    String message = jsonObject.get("message").getAsString();
+    List<SourceFileEdit> edits = SourceFileEdit.fromJsonArray(jsonObject.get("edits").getAsJsonArray());
+    List<LinkedEditGroup> linkedEditGroups = LinkedEditGroup.fromJsonArray(jsonObject.get("linkedEditGroups").getAsJsonArray());
+    Position selection = jsonObject.get("selection") == null ? null : Position.fromJson(jsonObject.get("selection").getAsJsonObject());
+    return new SourceChange(message, edits, linkedEditGroups, selection);
+  }
+
+  public static List<SourceChange> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<SourceChange> list = new ArrayList<SourceChange>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * A list of the edits used to effect the change, grouped by file.
+   */
+  public List<SourceFileEdit> getEdits() {
+    return edits;
+  }
+
+  /**
+   * A list of the linked editing groups used to customize the changes that were made.
+   */
+  public List<LinkedEditGroup> getLinkedEditGroups() {
+    return linkedEditGroups;
+  }
+
+  /**
+   * A human-readable description of the change to be applied.
+   */
+  public String getMessage() {
+    return message;
+  }
+
+  /**
+   * The position that should be selected after the edits have been applied.
+   */
+  public Position getSelection() {
+    return selection;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(message);
+    builder.append(edits);
+    builder.append(linkedEditGroups);
+    builder.append(selection);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("message", message);
+    JsonArray jsonArrayEdits = new JsonArray();
+    for (SourceFileEdit elt : edits) {
+      jsonArrayEdits.add(elt.toJson());
+    }
+    jsonObject.add("edits", jsonArrayEdits);
+    JsonArray jsonArrayLinkedEditGroups = new JsonArray();
+    for (LinkedEditGroup elt : linkedEditGroups) {
+      jsonArrayLinkedEditGroups.add(elt.toJson());
+    }
+    jsonObject.add("linkedEditGroups", jsonArrayLinkedEditGroups);
+    if (selection != null) {
+      jsonObject.add("selection", selection.toJson());
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("message=");
+    builder.append(message + ", ");
+    builder.append("edits=");
+    builder.append(StringUtils.join(edits, ", ") + ", ");
+    builder.append("linkedEditGroups=");
+    builder.append(StringUtils.join(linkedEditGroups, ", ") + ", ");
+    builder.append("selection=");
+    builder.append(selection);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java b/pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java
new file mode 100644
index 0000000..adcf771
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a single change to a single file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class SourceEdit {
+
+  public static final SourceEdit[] EMPTY_ARRAY = new SourceEdit[0];
+
+  public static final List<SourceEdit> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset of the region to be modified.
+   */
+  private final int offset;
+
+  /**
+   * The length of the region to be modified.
+   */
+  private final int length;
+
+  /**
+   * The code that is to replace the specified region in the original code.
+   */
+  private final String replacement;
+
+  /**
+   * An identifier that uniquely identifies this source edit from other edits in the same response.
+   * This field is omitted unless a containing structure needs to be able to identify the edit for
+   * some reason.
+   *
+   * For example, some refactoring operations can produce edits that might not be appropriate
+   * (referred to as potential edits). Such edits will have an id so that they can be referenced.
+   * Edits in the same response that do not need to be referenced will not have an id.
+   */
+  private final String id;
+
+  /**
+   * Constructor for {@link SourceEdit}.
+   */
+  public SourceEdit(int offset, int length, String replacement, String id) {
+    this.offset = offset;
+    this.length = length;
+    this.replacement = replacement;
+    this.id = id;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof SourceEdit) {
+      SourceEdit other = (SourceEdit) obj;
+      return
+        other.offset == offset &&
+        other.length == length &&
+        ObjectUtilities.equals(other.replacement, replacement) &&
+        ObjectUtilities.equals(other.id, id);
+    }
+    return false;
+  }
+
+  public static SourceEdit fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    String replacement = jsonObject.get("replacement").getAsString();
+    String id = jsonObject.get("id") == null ? null : jsonObject.get("id").getAsString();
+    return new SourceEdit(offset, length, replacement, id);
+  }
+
+  public static List<SourceEdit> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<SourceEdit> list = new ArrayList<SourceEdit>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * An identifier that uniquely identifies this source edit from other edits in the same response.
+   * This field is omitted unless a containing structure needs to be able to identify the edit for
+   * some reason.
+   *
+   * For example, some refactoring operations can produce edits that might not be appropriate
+   * (referred to as potential edits). Such edits will have an id so that they can be referenced.
+   * Edits in the same response that do not need to be referenced will not have an id.
+   */
+  public String getId() {
+    return id;
+  }
+
+  /**
+   * The length of the region to be modified.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the region to be modified.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * The code that is to replace the specified region in the original code.
+   */
+  public String getReplacement() {
+    return replacement;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    builder.append(replacement);
+    builder.append(id);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    jsonObject.addProperty("replacement", replacement);
+    if (id != null) {
+      jsonObject.addProperty("id", id);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("replacement=");
+    builder.append(replacement + ", ");
+    builder.append("id=");
+    builder.append(id);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java b/pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java
new file mode 100644
index 0000000..d9d247d
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a set of changes to a single file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class SourceFileEdit {
+
+  public static final SourceFileEdit[] EMPTY_ARRAY = new SourceFileEdit[0];
+
+  public static final List<SourceFileEdit> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The file containing the code to be modified.
+   */
+  private final String file;
+
+  /**
+   * The modification stamp of the file at the moment when the change was created, in milliseconds
+   * since the "Unix epoch". Will be -1 if the file did not exist and should be created. The client
+   * may use this field to make sure that the file was not changed since then, so it is safe to apply
+   * the change.
+   */
+  private final long fileStamp;
+
+  /**
+   * A list of the edits used to effect the change.
+   */
+  private final List<SourceEdit> edits;
+
+  /**
+   * Constructor for {@link SourceFileEdit}.
+   */
+  public SourceFileEdit(String file, long fileStamp, List<SourceEdit> edits) {
+    this.file = file;
+    this.fileStamp = fileStamp;
+    this.edits = edits;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof SourceFileEdit) {
+      SourceFileEdit other = (SourceFileEdit) obj;
+      return
+        ObjectUtilities.equals(other.file, file) &&
+        other.fileStamp == fileStamp &&
+        ObjectUtilities.equals(other.edits, edits);
+    }
+    return false;
+  }
+
+  public static SourceFileEdit fromJson(JsonObject jsonObject) {
+    String file = jsonObject.get("file").getAsString();
+    long fileStamp = jsonObject.get("fileStamp").getAsLong();
+    List<SourceEdit> edits = SourceEdit.fromJsonArray(jsonObject.get("edits").getAsJsonArray());
+    return new SourceFileEdit(file, fileStamp, edits);
+  }
+
+  public static List<SourceFileEdit> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<SourceFileEdit> list = new ArrayList<SourceFileEdit>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * A list of the edits used to effect the change.
+   */
+  public List<SourceEdit> getEdits() {
+    return edits;
+  }
+
+  /**
+   * The file containing the code to be modified.
+   */
+  public String getFile() {
+    return file;
+  }
+
+  /**
+   * The modification stamp of the file at the moment when the change was created, in milliseconds
+   * since the "Unix epoch". Will be -1 if the file did not exist and should be created. The client
+   * may use this field to make sure that the file was not changed since then, so it is safe to apply
+   * the change.
+   */
+  public long getFileStamp() {
+    return fileStamp;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(file);
+    builder.append(fileStamp);
+    builder.append(edits);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("file", file);
+    jsonObject.addProperty("fileStamp", fileStamp);
+    JsonArray jsonArrayEdits = new JsonArray();
+    for (SourceEdit elt : edits) {
+      jsonArrayEdits.add(elt.toJson());
+    }
+    jsonObject.add("edits", jsonArrayEdits);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("file=");
+    builder.append(file + ", ");
+    builder.append("fileStamp=");
+    builder.append(fileStamp + ", ");
+    builder.append("edits=");
+    builder.append(StringUtils.join(edits, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.java b/pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.java
new file mode 100644
index 0000000..2c14939
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.java
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package com.google.dart.server.generated.types;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A representation of a class in a type hierarchy.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class TypeHierarchyItem {
+
+  public static final TypeHierarchyItem[] EMPTY_ARRAY = new TypeHierarchyItem[0];
+
+  public static final List<TypeHierarchyItem> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The class element represented by this item.
+   */
+  private final Element classElement;
+
+  /**
+   * The name to be displayed for the class. This field will be omitted if the display name is the
+   * same as the name of the element. The display name is different if there is additional type
+   * information to be displayed, such as type arguments.
+   */
+  private final String displayName;
+
+  /**
+   * The member in the class corresponding to the member on which the hierarchy was requested. This
+   * field will be omitted if the hierarchy was not requested for a member or if the class does not
+   * have a corresponding member.
+   */
+  private final Element memberElement;
+
+  /**
+   * The index of the item representing the superclass of this class. This field will be omitted if
+   * this item represents the class Object.
+   */
+  private final Integer superclass;
+
+  /**
+   * The indexes of the items representing the interfaces implemented by this class. The list will be
+   * empty if there are no implemented interfaces.
+   */
+  private final int[] interfaces;
+
+  /**
+   * The indexes of the items representing the mixins referenced by this class. The list will be
+   * empty if there are no classes mixed in to this class.
+   */
+  private final int[] mixins;
+
+  /**
+   * The indexes of the items representing the subtypes of this class. The list will be empty if
+   * there are no subtypes or if this item represents a supertype of the pivot type.
+   */
+  private final int[] subclasses;
+
+  /**
+   * Constructor for {@link TypeHierarchyItem}.
+   */
+  public TypeHierarchyItem(Element classElement, String displayName, Element memberElement, Integer superclass, int[] interfaces, int[] mixins, int[] subclasses) {
+    this.classElement = classElement;
+    this.displayName = displayName;
+    this.memberElement = memberElement;
+    this.superclass = superclass;
+    this.interfaces = interfaces;
+    this.mixins = mixins;
+    this.subclasses = subclasses;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof TypeHierarchyItem) {
+      TypeHierarchyItem other = (TypeHierarchyItem) obj;
+      return
+        ObjectUtilities.equals(other.classElement, classElement) &&
+        ObjectUtilities.equals(other.displayName, displayName) &&
+        ObjectUtilities.equals(other.memberElement, memberElement) &&
+        ObjectUtilities.equals(other.superclass, superclass) &&
+        Arrays.equals(other.interfaces, interfaces) &&
+        Arrays.equals(other.mixins, mixins) &&
+        Arrays.equals(other.subclasses, subclasses);
+    }
+    return false;
+  }
+
+  public static TypeHierarchyItem fromJson(JsonObject jsonObject) {
+    Element classElement = Element.fromJson(jsonObject.get("classElement").getAsJsonObject());
+    String displayName = jsonObject.get("displayName") == null ? null : jsonObject.get("displayName").getAsString();
+    Element memberElement = jsonObject.get("memberElement") == null ? null : Element.fromJson(jsonObject.get("memberElement").getAsJsonObject());
+    Integer superclass = jsonObject.get("superclass") == null ? null : jsonObject.get("superclass").getAsInt();
+    int[] interfaces = JsonUtilities.decodeIntArray(jsonObject.get("interfaces").getAsJsonArray());
+    int[] mixins = JsonUtilities.decodeIntArray(jsonObject.get("mixins").getAsJsonArray());
+    int[] subclasses = JsonUtilities.decodeIntArray(jsonObject.get("subclasses").getAsJsonArray());
+    return new TypeHierarchyItem(classElement, displayName, memberElement, superclass, interfaces, mixins, subclasses);
+  }
+
+  public static List<TypeHierarchyItem> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<TypeHierarchyItem> list = new ArrayList<TypeHierarchyItem>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  public String getBestName() {
+    if (displayName == null) {
+      return classElement.getName();
+    } else {
+      return displayName;
+    }
+  }
+
+  /**
+   * The class element represented by this item.
+   */
+  public Element getClassElement() {
+    return classElement;
+  }
+
+  /**
+   * The name to be displayed for the class. This field will be omitted if the display name is the
+   * same as the name of the element. The display name is different if there is additional type
+   * information to be displayed, such as type arguments.
+   */
+  public String getDisplayName() {
+    return displayName;
+  }
+
+  /**
+   * The indexes of the items representing the interfaces implemented by this class. The list will be
+   * empty if there are no implemented interfaces.
+   */
+  public int[] getInterfaces() {
+    return interfaces;
+  }
+
+  /**
+   * The member in the class corresponding to the member on which the hierarchy was requested. This
+   * field will be omitted if the hierarchy was not requested for a member or if the class does not
+   * have a corresponding member.
+   */
+  public Element getMemberElement() {
+    return memberElement;
+  }
+
+  /**
+   * The indexes of the items representing the mixins referenced by this class. The list will be
+   * empty if there are no classes mixed in to this class.
+   */
+  public int[] getMixins() {
+    return mixins;
+  }
+
+  /**
+   * The indexes of the items representing the subtypes of this class. The list will be empty if
+   * there are no subtypes or if this item represents a supertype of the pivot type.
+   */
+  public int[] getSubclasses() {
+    return subclasses;
+  }
+
+  /**
+   * The index of the item representing the superclass of this class. This field will be omitted if
+   * this item represents the class Object.
+   */
+  public Integer getSuperclass() {
+    return superclass;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(classElement);
+    builder.append(displayName);
+    builder.append(memberElement);
+    builder.append(superclass);
+    builder.append(interfaces);
+    builder.append(mixins);
+    builder.append(subclasses);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.add("classElement", classElement.toJson());
+    if (displayName != null) {
+      jsonObject.addProperty("displayName", displayName);
+    }
+    if (memberElement != null) {
+      jsonObject.add("memberElement", memberElement.toJson());
+    }
+    if (superclass != null) {
+      jsonObject.addProperty("superclass", superclass);
+    }
+    JsonArray jsonArrayInterfaces = new JsonArray();
+    for (int elt : interfaces) {
+      jsonArrayInterfaces.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("interfaces", jsonArrayInterfaces);
+    JsonArray jsonArrayMixins = new JsonArray();
+    for (int elt : mixins) {
+      jsonArrayMixins.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("mixins", jsonArrayMixins);
+    JsonArray jsonArraySubclasses = new JsonArray();
+    for (int elt : subclasses) {
+      jsonArraySubclasses.add(new JsonPrimitive(elt));
+    }
+    jsonObject.add("subclasses", jsonArraySubclasses);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("classElement=");
+    builder.append(classElement + ", ");
+    builder.append("displayName=");
+    builder.append(displayName + ", ");
+    builder.append("memberElement=");
+    builder.append(memberElement + ", ");
+    builder.append("superclass=");
+    builder.append(superclass + ", ");
+    builder.append("interfaces=");
+    builder.append(StringUtils.join(interfaces, ", ") + ", ");
+    builder.append("mixins=");
+    builder.append(StringUtils.join(mixins, ", ") + ", ");
+    builder.append("subclasses=");
+    builder.append(StringUtils.join(subclasses, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analyzer/example/resolver_driver.dart b/pkg/analyzer/example/resolver_driver.dart
index 44d9635..59e66e7 100755
--- a/pkg/analyzer/example/resolver_driver.dart
+++ b/pkg/analyzer/example/resolver_driver.dart
@@ -14,9 +14,6 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 
-const _usage =
-    'Usage: resolve_driver <path_to_sdk> <file_to_resolve> [<packages_root>]';
-
 void main(List<String> args) {
   print('working dir ${new File('.').resolveSymbolicLinksSync()}');
 
@@ -43,7 +40,7 @@
   AnalysisContext context = AnalysisEngine.instance.createAnalysisContext()
     ..sourceFactory = new SourceFactory(resolvers);
 
-  Source source = new FileBasedSource.con1(new JavaFile(args[1]));
+  Source source = new FileBasedSource(new JavaFile(args[1]));
   ChangeSet changeSet = new ChangeSet()..addedSource(source);
   context.applyChanges(changeSet);
   LibraryElement libElement = context.computeLibraryElement(source);
@@ -55,6 +52,9 @@
   resolvedUnit.accept(visitor);
 }
 
+const _usage =
+    'Usage: resolve_driver <path_to_sdk> <file_to_resolve> [<packages_root>]';
+
 class _ASTVisitor extends GeneralizingAstVisitor {
   visitNode(AstNode node) {
     var lines = <String>['${node.runtimeType} : <"$node">'];
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 2cd391a..139d67d 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -91,7 +91,7 @@
     if (uri == null) {
       uri = javaFile.toURI();
     }
-    return new FileBasedSource.con2(uri, javaFile);
+    return new FileBasedSource(javaFile, uri);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/context/cache.dart b/pkg/analyzer/lib/src/context/cache.dart
index 5ae41bd..4c4c46fd 100644
--- a/pkg/analyzer/lib/src/context/cache.dart
+++ b/pkg/analyzer/lib/src/context/cache.dart
@@ -6,10 +6,8 @@
 
 import 'dart:collection';
 
-import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/engine.dart'
     show AnalysisEngine, CacheState, InternalAnalysisContext, RetentionPriority;
-import 'package:analyzer/src/generated/html.dart';
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
@@ -17,6 +15,11 @@
 import 'package:analyzer/task/model.dart';
 
 /**
+ * Return `true` if the given [target] is a priority one.
+ */
+typedef bool IsPriorityAnalysisTarget(AnalysisTarget target);
+
+/**
  * An LRU cache of results produced by analysis.
  */
 class AnalysisCache {
@@ -39,12 +42,6 @@
    */
   AnalysisCache(this._partitions);
 
-  /**
-   * Return the number of entries in this cache that have an AST associated with
-   * them.
-   */
-  int get astSize => _partitions[_partitions.length - 1].astSize;
-
   // TODO(brianwilkerson) Implement or delete this.
 //  /**
 //   * Return information about each of the partitions in this cache.
@@ -63,29 +60,14 @@
 //  }
 
   /**
-   * Record that the AST associated with the given [target] was just read from
-   * the cache.
-   */
-  void accessedAst(AnalysisTarget target) {
-    // TODO(brianwilkerson) Extract this logic to a helper method (here and
-    // elsewhere)
-    int count = _partitions.length;
-    for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
-        _partitions[i].accessedAst(target);
-        return;
-      }
-    }
-  }
-
-  /**
    * Return the entry associated with the given [target].
    */
   CacheEntry get(AnalysisTarget target) {
     int count = _partitions.length;
     for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
-        return _partitions[i].get(target);
+      CachePartition partition = _partitions[i];
+      if (partition.isResponsibleFor(target)) {
+        return partition.get(target);
       }
     }
     //
@@ -102,8 +84,9 @@
   InternalAnalysisContext getContextFor(AnalysisTarget target) {
     int count = _partitions.length;
     for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
-        return _partitions[i].context;
+      CachePartition partition = _partitions[i];
+      if (partition.isResponsibleFor(target)) {
+        return partition.context;
       }
     }
     //
@@ -119,6 +102,34 @@
   }
 
   /**
+   * Return the state of the given [result] for the given [target].
+   *
+   * It does not update the cache, if the corresponding [CacheEntry] does not
+   * exist, then [CacheState.INVALID] is returned.
+   */
+  CacheState getState(AnalysisTarget target, ResultDescriptor result) {
+    CacheEntry entry = get(target);
+    if (entry == null) {
+      return CacheState.INVALID;
+    }
+    return entry.getState(result);
+  }
+
+  /**
+   * Return the value of the given [result] for the given [target].
+   *
+   * It does not update the cache, if the corresponding [CacheEntry] does not
+   * exist, then the default value is returned.
+   */
+  Object getValue(AnalysisTarget target, ResultDescriptor result) {
+    CacheEntry entry = get(target);
+    if (entry == null) {
+      return result.defaultValue;
+    }
+    return entry.getValue(result);
+  }
+
+  /**
    * Return an iterator returning all of the map entries mapping targets to
    * cache entries.
    */
@@ -132,17 +143,17 @@
   }
 
   /**
-   * Associate the given [entry] with the given [target].
+   * Puts the given [entry] into the cache.
    */
-  void put(AnalysisTarget target, CacheEntry entry) {
-    entry._cache = this;
-    entry._target = target;
+  void put(CacheEntry entry) {
+    AnalysisTarget target = entry.target;
     entry.fixExceptionState();
     int count = _partitions.length;
     for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
+      CachePartition partition = _partitions[i];
+      if (partition.isResponsibleFor(target)) {
         if (_TRACE_CHANGES) {
-          CacheEntry oldEntry = _partitions[i].get(target);
+          CacheEntry oldEntry = partition.get(target);
           if (oldEntry == null) {
             AnalysisEngine.instance.logger
                 .logInformation('Added a cache entry for $target.');
@@ -152,7 +163,7 @@
 //                'Diff = ${entry.getDiff(oldEntry)}');
           }
         }
-        _partitions[i].put(target, entry);
+        partition.put(entry);
         return;
       }
     }
@@ -166,26 +177,13 @@
   void remove(AnalysisTarget target) {
     int count = _partitions.length;
     for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
+      CachePartition partition = _partitions[i];
+      if (partition.isResponsibleFor(target)) {
         if (_TRACE_CHANGES) {
           AnalysisEngine.instance.logger
               .logInformation('Removed the cache entry for $target.');
         }
-        _partitions[i].remove(target);
-        return;
-      }
-    }
-  }
-
-  /**
-   * Record that the AST associated with the given [target] was just removed
-   * from the cache.
-   */
-  void removedAst(AnalysisTarget target) {
-    int count = _partitions.length;
-    for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
-        _partitions[i].removedAst(target);
+        partition.remove(target);
         return;
       }
     }
@@ -202,32 +200,6 @@
     }
     return size;
   }
-
-  /**
-   * Record that the AST associated with the given [target] was just stored to
-   * the cache.
-   */
-  void storedAst(AnalysisTarget target) {
-    int count = _partitions.length;
-    for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
-        _partitions[i].storedAst(target);
-        return;
-      }
-    }
-  }
-
-  ResultData _getDataFor(TargetedResult result) {
-    AnalysisTarget target = result.target;
-    int count = _partitions.length;
-    for (int i = 0; i < count; i++) {
-      if (_partitions[i].contains(target)) {
-        CacheEntry entry = _partitions[i].get(target);
-        return entry._getResultData(result.result);
-      }
-    }
-    return null;
-  }
 }
 
 /**
@@ -242,14 +214,14 @@
   static int _EXPLICITLY_ADDED_FLAG = 0;
 
   /**
-   * The cache that contains this entry.
-   */
-  AnalysisCache _cache;
-
-  /**
    * The target this entry is about.
    */
-  AnalysisTarget _target;
+  final AnalysisTarget target;
+
+  /**
+   * The partition that is responsible for this entry.
+   */
+  CachePartition _partition;
 
   /**
    * The most recent time at which the state of the target matched the state
@@ -274,6 +246,8 @@
   Map<ResultDescriptor, ResultData> _resultMap =
       new HashMap<ResultDescriptor, ResultData>();
 
+  CacheEntry(this.target);
+
   /**
    * The exception that caused one or more values to have a state of
    * [CacheState.ERROR].
@@ -296,19 +270,6 @@
   }
 
   /**
-   * Return `true` if this entry contains at least one result whose value is an
-   * AST structure.
-   */
-  bool get hasAstStructure {
-    for (ResultData data in _resultMap.values) {
-      if (data.value is AstNode || data.value is XmlNode) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
    * Fix the state of the [exception] to match the current state of the entry.
    */
   void fixExceptionState() {
@@ -318,30 +279,6 @@
   }
 
   /**
-   * Mark any AST structures associated with this cache entry as being flushed.
-   */
-  void flushAstStructures() {
-    _resultMap.forEach((ResultDescriptor descriptor, ResultData data) {
-      if (data.value is AstNode || data.value is XmlNode) {
-        _validateStateChange(descriptor, CacheState.FLUSHED);
-        data.state = CacheState.FLUSHED;
-        data.value = descriptor.defaultValue;
-      }
-    });
-  }
-
-  /**
-   * Return the memento of the result represented by the given [descriptor].
-   */
-  Object getMemento(ResultDescriptor descriptor) {
-    ResultData data = _resultMap[descriptor];
-    if (data == null) {
-      return null;
-    }
-    return data.memento;
-  }
-
-  /**
    * Return the state of the result represented by the given [descriptor].
    */
   CacheState getState(ResultDescriptor descriptor) {
@@ -361,6 +298,9 @@
     if (data == null) {
       return descriptor.defaultValue;
     }
+    if (_partition != null) {
+      _partition.resultAccessed(target, descriptor);
+    }
     return data.value;
   }
 
@@ -413,9 +353,7 @@
     }
     this._exception = exception;
     for (ResultDescriptor descriptor in descriptors) {
-      ResultData data = _getResultData(descriptor);
-      TargetedResult thisResult = new TargetedResult(_target, descriptor);
-      data.invalidate(_cache, thisResult, CacheState.ERROR);
+      _setErrorState(descriptor, exception);
     }
   }
 
@@ -434,8 +372,7 @@
     if (state == CacheState.INVALID) {
       ResultData data = _resultMap[descriptor];
       if (data != null) {
-        TargetedResult thisResult = new TargetedResult(_target, descriptor);
-        data.invalidate(_cache, thisResult, CacheState.INVALID);
+        _invalidate(descriptor, true);
       }
     } else {
       ResultData data = _getResultData(descriptor);
@@ -452,21 +389,20 @@
 
   /**
    * Set the value of the result represented by the given [descriptor] to the
-   * given [value]. The optional [memento] may help to recompute [value] more
-   * efficiently after invalidation.
+   * given [value].
    */
   /*<V>*/ void setValue(ResultDescriptor /*<V>*/ descriptor, dynamic /*V*/
-      value, List<TargetedResult> dependedOn, Object memento) {
+      value, List<TargetedResult> dependedOn) {
     _validateStateChange(descriptor, CacheState.VALID);
-    ResultData data = _getResultData(descriptor);
-    {
-      TargetedResult thisResult = new TargetedResult(_target, descriptor);
-      data.invalidate(_cache, thisResult, CacheState.INVALID);
-      data.setDependedOnResults(_cache, thisResult, dependedOn);
+    TargetedResult thisResult = new TargetedResult(target, descriptor);
+    if (_partition != null) {
+      _partition.resultStored(thisResult, value);
     }
+    _invalidate(descriptor, false);
+    ResultData data = _getResultData(descriptor);
+    _setDependedOnResults(data, thisResult, dependedOn);
     data.state = CacheState.VALID;
     data.value = value == null ? descriptor.defaultValue : value;
-    data.memento = memento;
   }
 
   @override
@@ -490,6 +426,81 @@
   }
 
   /**
+   * Invalidate the result represented by the given [descriptor] if
+   * [includeThis] is true. Propagate invalidation to other results that
+   * depend on it.
+   */
+  void _invalidate(ResultDescriptor descriptor, bool includeThis) {
+    ResultData thisData;
+    if (includeThis) {
+      thisData = _resultMap.remove(descriptor);
+    } else {
+      thisData = _resultMap[descriptor];
+    }
+    if (thisData == null) {
+      return;
+    }
+    // Stop depending on other results.
+    TargetedResult thisResult = new TargetedResult(target, descriptor);
+    thisData.dependedOnResults.forEach((TargetedResult dependedOnResult) {
+      ResultData data = _partition._getDataFor(dependedOnResult, orNull: true);
+      if (data != null) {
+        data.dependentResults.remove(thisResult);
+      }
+    });
+    // Invalidate results that depend on this result.
+    List<TargetedResult> dependentResults = thisData.dependentResults;
+    thisData.dependentResults = <TargetedResult>[];
+    dependentResults.forEach((TargetedResult dependentResult) {
+      CacheEntry entry = _partition.get(dependentResult.target);
+      entry._invalidate(dependentResult.result, true);
+    });
+    // If empty, remove the entry altogether.
+    if (_resultMap.isEmpty) {
+      _partition._targetMap.remove(target);
+    }
+  }
+
+  /**
+   * Invalidates all the results of this entry, with propagation.
+   */
+  void _invalidateAll() {
+    List<ResultDescriptor> results = _resultMap.keys.toList();
+    for (ResultDescriptor result in results) {
+      _invalidate(result, true);
+    }
+  }
+
+  /**
+   * Set the [dependedOn] on which this result depends.
+   */
+  void _setDependedOnResults(ResultData thisData, TargetedResult thisResult,
+      List<TargetedResult> dependedOn) {
+    thisData.dependedOnResults = dependedOn;
+    thisData.dependedOnResults.forEach((TargetedResult dependentResult) {
+      ResultData data = _partition._getDataFor(dependentResult);
+      data.dependentResults.add(thisResult);
+    });
+  }
+
+  /**
+   * Set states of the given and dependent results to [CacheState.ERROR] and
+   * their values to the corresponding default values
+   */
+  void _setErrorState(ResultDescriptor descriptor, CaughtException exception) {
+    ResultData thisData = _getResultData(descriptor);
+    // Set the error state.
+    _exception = exception;
+    thisData.state = CacheState.ERROR;
+    thisData.value = descriptor.defaultValue;
+    // Propagate the error state.
+    thisData.dependentResults.forEach((TargetedResult dependentResult) {
+      CacheEntry entry = _partition.get(dependentResult.target);
+      entry._setErrorState(dependentResult.result, exception);
+    });
+  }
+
+  /**
    * Set the value of the flag with the given [index] to the given [value].
    */
   void _setFlag(int index, bool value) {
@@ -540,6 +551,134 @@
 }
 
 /**
+ * An object that controls flushing of analysis results from the cache.
+ */
+class CacheFlushManager<T> {
+  final IsPriorityAnalysisTarget isPriorityAnalysisTarget;
+  final ResultCachingPolicy<T> policy;
+  final int maxActiveSize;
+  final int maxIdleSize;
+
+  /**
+   * A map of the stored [TargetedResult] to their sizes.
+   */
+  final HashMap<TargetedResult, int> resultSizeMap =
+      new HashMap<TargetedResult, int>();
+
+  /**
+   * A linked set containing the most recently accessed results with the most
+   * recently used at the end of the list. When more results are added than the
+   * maximum size allowed then the least recently used results will be flushed
+   * from the cache.
+   */
+  final LinkedHashSet<TargetedResult> recentlyUsed =
+      new LinkedHashSet<TargetedResult>();
+
+  /**
+   * The current size of stored results.
+   */
+  int currentSize = 0;
+
+  /**
+   * The current maximum cache size.
+   */
+  int maxSize;
+
+  CacheFlushManager(
+      ResultCachingPolicy<T> policy, this.isPriorityAnalysisTarget)
+      : policy = policy,
+        maxActiveSize = policy.maxActiveSize,
+        maxIdleSize = policy.maxIdleSize,
+        maxSize = policy.maxIdleSize;
+
+  /**
+   * If [currentSize] is already less than [maxSize], returns an empty list.
+   * Otherwise returns [TargetedResult]s to flush from the cache to make
+   * [currentSize] less or equal to [maxSize].
+   *
+   * Results for priority files are never flushed, so this method might leave
+   * [currentSize] greater than [maxSize].
+   */
+  List<TargetedResult> flushToSize() {
+    // If still under the cap, done.
+    if (maxSize == -1 || currentSize <= maxSize) {
+      return TargetedResult.EMPTY_LIST;
+    }
+    // Flush results until we are under the cap.
+    List<TargetedResult> resultsToFlush = <TargetedResult>[];
+    for (TargetedResult result in recentlyUsed) {
+      if (isPriorityAnalysisTarget(result.target)) {
+        continue;
+      }
+      resultsToFlush.add(result);
+      int size = resultSizeMap.remove(result);
+      assert(size != null);
+      currentSize -= size;
+      if (currentSize <= maxSize) {
+        break;
+      }
+    }
+    recentlyUsed.removeAll(resultsToFlush);
+    return resultsToFlush;
+  }
+
+  /**
+   * Notifies this manager that the corresponding analysis context is active.
+   */
+  void madeActive() {
+    maxSize = maxActiveSize;
+  }
+
+  /**
+   * Notifies this manager that the corresponding analysis context is idle.
+   * Returns [TargetedResult]s that should be flushed from the cache.
+   */
+  List<TargetedResult> madeIdle() {
+    maxSize = maxIdleSize;
+    return flushToSize();
+  }
+
+  /**
+   * Records that the given [result] was just read from the cache.
+   */
+  void resultAccessed(TargetedResult result) {
+    if (recentlyUsed.remove(result)) {
+      recentlyUsed.add(result);
+    }
+  }
+
+  /**
+   * Records that the given [newResult] and [newValue] were stored to the cache.
+   * Returns [TargetedResult]s that should be flushed from the cache.
+   */
+  List<TargetedResult> resultStored(TargetedResult newResult, T newValue) {
+    if (!recentlyUsed.remove(newResult)) {
+      int size = policy.measure(newValue);
+      resultSizeMap[newResult] = size;
+      currentSize += size;
+    }
+    recentlyUsed.add(newResult);
+    return flushToSize();
+  }
+
+  /**
+   * Records that the given [target] was just removed from to the cache.
+   */
+  void targetRemoved(AnalysisTarget target) {
+    List<TargetedResult> resultsToRemove = <TargetedResult>[];
+    for (TargetedResult result in recentlyUsed) {
+      if (result.target == target) {
+        resultsToRemove.add(result);
+        int size = resultSizeMap.remove(result);
+        assert(size != null);
+        currentSize -= size;
+      }
+    }
+    recentlyUsed.removeAll(resultsToRemove);
+  }
+}
+
+/**
  * A single partition in an LRU cache of information related to analysis.
  */
 abstract class CachePartition {
@@ -550,15 +689,10 @@
   final InternalAnalysisContext context;
 
   /**
-   * The maximum number of sources for which AST structures should be kept in
-   * the cache.
+   * A table mapping caching policies to the cache flush managers.
    */
-  int _maxCacheSize = 0;
-
-  /**
-   * The policy used to determine which results to remove from the cache.
-   */
-  final CacheRetentionPolicy _retentionPolicy;
+  final HashMap<ResultCachingPolicy, CacheFlushManager> _flushManagerMap =
+      new HashMap<ResultCachingPolicy, CacheFlushManager>();
 
   /**
    * A table mapping the targets belonging to this partition to the information
@@ -568,37 +702,10 @@
       new HashMap<AnalysisTarget, CacheEntry>();
 
   /**
-   * A list containing the most recently accessed targets with the most recently
-   * used at the end of the list. When more targets are added than the maximum
-   * allowed then the least recently used target will be removed and will have
-   * it's cached AST structure flushed.
-   */
-  List<AnalysisTarget> _recentlyUsed = <AnalysisTarget>[];
-
-  /**
    * Initialize a newly created cache partition, belonging to the given
-   * [context]. The partition will maintain at most [_maxCacheSize] AST
-   * structures in the cache, using the [_retentionPolicy] to determine which
-   * AST structures to flush.
+   * [context].
    */
-  CachePartition(this.context, this._maxCacheSize, this._retentionPolicy);
-
-  /**
-   * Return the number of entries in this partition that have an AST associated
-   * with them.
-   */
-  int get astSize {
-    int astSize = 0;
-    int count = _recentlyUsed.length;
-    for (int i = 0; i < count; i++) {
-      AnalysisTarget target = _recentlyUsed[i];
-      CacheEntry entry = _targetMap[target];
-      if (entry.hasAstStructure) {
-        astSize++;
-      }
-    }
-    return astSize;
-  }
+  CachePartition(this.context);
 
   /**
    * Return a table mapping the targets known to the context to the information
@@ -610,52 +717,16 @@
   Map<AnalysisTarget, CacheEntry> get map => _targetMap;
 
   /**
-   * Return the maximum size of the cache.
-   */
-  int get maxCacheSize => _maxCacheSize;
-
-  /**
-   * Set the maximum size of the cache to the given [size].
-   */
-  void set maxCacheSize(int size) {
-    _maxCacheSize = size;
-    while (_recentlyUsed.length > _maxCacheSize) {
-      if (!_flushAstFromCache()) {
-        break;
-      }
-    }
-  }
-
-  /**
-   * Record that the AST associated with the given [target] was just read from
-   * the cache.
-   */
-  void accessedAst(AnalysisTarget target) {
-    if (_recentlyUsed.remove(target)) {
-      _recentlyUsed.add(target);
-      return;
-    }
-    while (_recentlyUsed.length >= _maxCacheSize) {
-      if (!_flushAstFromCache()) {
-        break;
-      }
-    }
-    _recentlyUsed.add(target);
-  }
-
-  /**
-   * Return `true` if the given [target] is contained in this partition.
-   */
-  // TODO(brianwilkerson) Rename this to something more meaningful, such as
-  // isResponsibleFor.
-  bool contains(AnalysisTarget target);
-
-  /**
    * Return the entry associated with the given [target].
    */
   CacheEntry get(AnalysisTarget target) => _targetMap[target];
 
   /**
+   * Return `true` if this partition is responsible for the given [target].
+   */
+  bool isResponsibleFor(AnalysisTarget target);
+
+  /**
    * Return an iterator returning all of the map entries mapping targets to
    * cache entries.
    */
@@ -663,9 +734,15 @@
       new SingleMapIterator<AnalysisTarget, CacheEntry>(_targetMap);
 
   /**
-   * Associate the given [entry] with the given [target].
+   * Puts the given [entry] into the partition.
    */
-  void put(AnalysisTarget target, CacheEntry entry) {
+  void put(CacheEntry entry) {
+    AnalysisTarget target = entry.target;
+    if (entry._partition != null) {
+      throw new StateError(
+          'The entry for $target is already in ${entry._partition}');
+    }
+    entry._partition = this;
     entry.fixExceptionState();
     _targetMap[target] = entry;
   }
@@ -674,16 +751,41 @@
    * Remove all information related to the given [target] from this cache.
    */
   void remove(AnalysisTarget target) {
-    _recentlyUsed.remove(target);
-    _targetMap.remove(target);
+    for (CacheFlushManager flushManager in _flushManagerMap.values) {
+      flushManager.targetRemoved(target);
+    }
+    CacheEntry entry = _targetMap.remove(target);
+    if (entry != null) {
+      entry._invalidateAll();
+    }
   }
 
   /**
-   * Record that the AST associated with the given [target] was just removed
-   * from the cache.
+   * Records that a value of the result described by the given [descriptor]
+   * for the given [target] was just read from the cache.
    */
-  void removedAst(AnalysisTarget target) {
-    _recentlyUsed.remove(target);
+  void resultAccessed(AnalysisTarget target, ResultDescriptor descriptor) {
+    CacheFlushManager flushManager = _getFlushManager(descriptor);
+    TargetedResult result = new TargetedResult(target, descriptor);
+    flushManager.resultAccessed(result);
+  }
+
+  /**
+   * Records that the given [result] was just stored into the cache.
+   */
+  void resultStored(TargetedResult result, Object value) {
+    CacheFlushManager flushManager = _getFlushManager(result.result);
+    List<TargetedResult> resultsToFlush =
+        flushManager.resultStored(result, value);
+    for (TargetedResult result in resultsToFlush) {
+      CacheEntry entry = get(result.target);
+      if (entry != null) {
+        ResultData data = entry._resultMap[result.result];
+        if (data != null) {
+          data.flush();
+        }
+      }
+    }
   }
 
   /**
@@ -691,123 +793,26 @@
    */
   int size() => _targetMap.length;
 
-  /**
-   * Record that the AST associated with the given [target] was just stored to
-   * the cache.
-   */
-  void storedAst(AnalysisTarget target) {
-    if (_recentlyUsed.contains(target)) {
-      return;
+  ResultData _getDataFor(TargetedResult result, {bool orNull: false}) {
+    CacheEntry entry = context.analysisCache.get(result.target);
+    if (orNull) {
+      return entry != null ? entry._resultMap[result.result] : null;
+    } else {
+      return entry._getResultData(result.result);
     }
-    while (_recentlyUsed.length >= _maxCacheSize) {
-      if (!_flushAstFromCache()) {
-        break;
-      }
-    }
-    _recentlyUsed.add(target);
   }
 
   /**
-   * Attempt to flush one AST structure from the cache. Return `true` if a
-   * structure was flushed.
+   * Return the [CacheFlushManager] for the given [descriptor], not `null`.
    */
-  bool _flushAstFromCache() {
-    AnalysisTarget removedTarget = _removeAstToFlush();
-    if (removedTarget == null) {
-      return false;
-    }
-    CacheEntry entry = _targetMap[removedTarget];
-    entry.flushAstStructures();
-    return true;
+  CacheFlushManager _getFlushManager(ResultDescriptor descriptor) {
+    ResultCachingPolicy policy = descriptor.cachingPolicy;
+    return _flushManagerMap.putIfAbsent(
+        policy, () => new CacheFlushManager(policy, _isPriorityAnalysisTarget));
   }
 
-  /**
-   * Remove and return one target from the list of recently used targets whose
-   * AST structure can be flushed from the cache,  or `null` if none of the
-   * targets can be removed. The target that will be returned will be the target
-   * that has been unreferenced for the longest period of time but that is not a
-   * priority for analysis.
-   */
-  AnalysisTarget _removeAstToFlush() {
-    int targetToRemove = -1;
-    for (int i = 0; i < _recentlyUsed.length; i++) {
-      AnalysisTarget target = _recentlyUsed[i];
-      RetentionPriority priority =
-          _retentionPolicy.getAstPriority(target, _targetMap[target]);
-      if (priority == RetentionPriority.LOW) {
-        return _recentlyUsed.removeAt(i);
-      } else if (priority == RetentionPriority.MEDIUM && targetToRemove < 0) {
-        targetToRemove = i;
-      }
-    }
-    if (targetToRemove < 0) {
-      // This happens if the retention policy returns a priority of HIGH for all
-      // of the targets that have been recently used. This is the case, for
-      // example, when the list of priority sources is bigger than the current
-      // cache size.
-      return null;
-    }
-    return _recentlyUsed.removeAt(targetToRemove);
-  }
-}
-
-/**
- * A policy objecy that determines how important it is for data to be retained
- * in the analysis cache.
- */
-abstract class CacheRetentionPolicy {
-  /**
-   * Return the priority of retaining the AST structure for the given [target]
-   * in the given [entry].
-   */
-  // TODO(brianwilkerson) Find a more general mechanism, probably based on task
-  // descriptors, to determine which data is still needed for analysis and which
-  // can be removed from the cache. Ideally we could (a) remove the need for
-  // this class and (b) be able to flush all result data (not just AST's).
-  RetentionPriority getAstPriority(AnalysisTarget target, CacheEntry entry);
-}
-
-/**
- * A retention policy that will keep AST's in the cache if there is analysis
- * information that needs to be computed for a source, where the computation is
- * dependent on having the AST.
- */
-class DefaultRetentionPolicy implements CacheRetentionPolicy {
-  /**
-   * An instance of this class that can be shared.
-   */
-  static const DefaultRetentionPolicy POLICY = const DefaultRetentionPolicy();
-
-  /**
-   * Initialize a newly created instance of this class.
-   */
-  const DefaultRetentionPolicy();
-
-  // TODO(brianwilkerson) Implement or delete this.
-//  /**
-//   * Return `true` if there is analysis information in the given entry that needs to be
-//   * computed, where the computation is dependent on having the AST.
-//   *
-//   * @param dartEntry the entry being tested
-//   * @return `true` if there is analysis information that needs to be computed from the AST
-//   */
-//  bool astIsNeeded(DartEntry dartEntry) =>
-//      dartEntry.hasInvalidData(DartEntry.HINTS) ||
-//          dartEntry.hasInvalidData(DartEntry.LINTS) ||
-//          dartEntry.hasInvalidData(DartEntry.VERIFICATION_ERRORS) ||
-//          dartEntry.hasInvalidData(DartEntry.RESOLUTION_ERRORS);
-
-  @override
-  RetentionPriority getAstPriority(AnalysisTarget target, CacheEntry entry) {
-    // TODO(brianwilkerson) Implement or replace this.
-//    if (sourceEntry is DartEntry) {
-//      DartEntry dartEntry = sourceEntry;
-//      if (astIsNeeded(dartEntry)) {
-//        return RetentionPriority.MEDIUM;
-//      }
-//    }
-//    return RetentionPriority.LOW;
-    return RetentionPriority.MEDIUM;
+  bool _isPriorityAnalysisTarget(AnalysisTarget target) {
+    return context.priorityTargets.contains(target);
   }
 }
 
@@ -834,12 +839,6 @@
   Object value;
 
   /**
-   * The optional data that is remembered with [value] and, when [value] is
-   * invalidated, may help to recompute it more efficiently.
-   */
-  Object memento;
-
-  /**
    * A list of the results on which this result depends.
    */
   List<TargetedResult> dependedOnResults = <TargetedResult>[];
@@ -859,58 +858,11 @@
   }
 
   /**
-   * Add the given [result] to the list of dependent results.
+   * Flush this value.
    */
-  void addDependentResult(TargetedResult result) {
-    dependentResults.add(result);
-  }
-
-  /**
-   * Invalidate this [ResultData] that corresponds to [thisResult] and
-   * propagate invalidation to the results that depend on this one.
-   */
-  void invalidate(
-      AnalysisCache cache, TargetedResult thisResult, CacheState newState) {
-    // Invalidate this result.
-    state = newState;
+  void flush() {
+    state = CacheState.FLUSHED;
     value = descriptor.defaultValue;
-    // Stop depending on other results.
-    List<TargetedResult> dependedOnResults = this.dependedOnResults;
-    this.dependedOnResults = <TargetedResult>[];
-    dependedOnResults.forEach((TargetedResult dependedOnResult) {
-      ResultData data = cache._getDataFor(dependedOnResult);
-      data.removeDependentResult(thisResult);
-    });
-    // Invalidate results that depend on this result.
-    List<TargetedResult> dependentResults = this.dependentResults;
-    this.dependentResults = <TargetedResult>[];
-    dependentResults.forEach((TargetedResult dependentResult) {
-      ResultData data = cache._getDataFor(dependentResult);
-      data.invalidate(cache, dependentResult, newState);
-    });
-  }
-
-  /**
-   * Remove the given [result] from the list of dependent results.
-   */
-  void removeDependentResult(TargetedResult result) {
-    dependentResults.remove(result);
-  }
-
-  /**
-   * Set the [dependedOn] on which this result depends.
-   */
-  void setDependedOnResults(AnalysisCache cache, TargetedResult thisResult,
-      List<TargetedResult> dependedOn) {
-    dependedOnResults.forEach((TargetedResult dependedOnResult) {
-      ResultData data = cache._getDataFor(dependedOnResult);
-      data.removeDependentResult(thisResult);
-    });
-    dependedOnResults = dependedOn;
-    dependedOnResults.forEach((TargetedResult dependentResult) {
-      ResultData data = cache._getDataFor(dependentResult);
-      data.addDependentResult(thisResult);
-    });
   }
 }
 
@@ -920,14 +872,15 @@
 class SdkCachePartition extends CachePartition {
   /**
    * Initialize a newly created cache partition, belonging to the given
-   * [context]. The partition will maintain at most [maxCacheSize] AST
-   * structures in the cache.
+   * [context].
    */
-  SdkCachePartition(InternalAnalysisContext context, int maxCacheSize)
-      : super(context, maxCacheSize, DefaultRetentionPolicy.POLICY);
+  SdkCachePartition(InternalAnalysisContext context) : super(context);
 
   @override
-  bool contains(AnalysisTarget target) {
+  bool isResponsibleFor(AnalysisTarget target) {
+    if (target is AnalysisContextTarget) {
+      return true;
+    }
     Source source = target.source;
     return source != null && source.isInSystemLibrary;
   }
@@ -979,14 +932,10 @@
 class UniversalCachePartition extends CachePartition {
   /**
    * Initialize a newly created cache partition, belonging to the given
-   * [context]. The partition will maintain at most [maxCacheSize] AST
-   * structures in the cache, using the [retentionPolicy] to determine which
-   * AST structures to flush.
+   * [context].
    */
-  UniversalCachePartition(InternalAnalysisContext context, int maxCacheSize,
-      CacheRetentionPolicy retentionPolicy)
-      : super(context, maxCacheSize, retentionPolicy);
+  UniversalCachePartition(InternalAnalysisContext context) : super(context);
 
   @override
-  bool contains(AnalysisTarget target) => true;
+  bool isResponsibleFor(AnalysisTarget target) => true;
 }
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
index debb32e..bbf7128 100644
--- a/pkg/analyzer/lib/src/context/context.dart
+++ b/pkg/analyzer/lib/src/context/context.dart
@@ -8,11 +8,17 @@
 import 'dart:collection';
 
 import 'package:analyzer/src/cancelable_future.dart';
-import 'package:analyzer/src/context/cache.dart' as cache;
+import 'package:analyzer/src/context/cache.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/constant.dart';
 import 'package:analyzer/src/generated/element.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/engine.dart'
+    hide
+        AnalysisCache,
+        CachePartition,
+        SdkCachePartition,
+        UniversalCachePartition,
+        WorkManager;
 import 'package:analyzer/src/generated/error.dart';
 import 'package:analyzer/src/generated/html.dart' as ht;
 import 'package:analyzer/src/generated/java_core.dart';
@@ -23,6 +29,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
 import 'package:analyzer/src/task/dart.dart';
+import 'package:analyzer/src/task/dart_work_manager.dart';
 import 'package:analyzer/src/task/driver.dart';
 import 'package:analyzer/src/task/manager.dart';
 import 'package:analyzer/task/dart.dart';
@@ -42,7 +49,7 @@
  * it should be free of side effects so that it doesn't cause reentrant changes
  * to the analysis state.
  */
-typedef T PendingFutureComputer<T>(cache.CacheEntry entry);
+typedef T PendingFutureComputer<T>(CacheEntry entry);
 
 /**
  * An [AnalysisContext] in which analysis can be performed.
@@ -84,13 +91,13 @@
    * The partition that contains analysis results that are not shared with other
    * contexts.
    */
-  cache.CachePartition _privatePartition;
+  CachePartition _privatePartition;
 
   /**
    * The cache in which information about the results associated with targets
    * are stored.
    */
-  cache.AnalysisCache _cache;
+  AnalysisCache _cache;
 
   /**
    * The task manager used to manage the tasks used to analyze code.
@@ -98,9 +105,14 @@
   TaskManager _taskManager;
 
   /**
+   * The [DartWorkManager] instance that performs Dart specific scheduling.
+   */
+  DartWorkManager dartWorkManager;
+
+  /**
    * The analysis driver used to perform analysis.
    */
-  AnalysisDriver _driver;
+  AnalysisDriver driver;
 
   /**
    * A list containing sources for which data should not be flushed.
@@ -181,17 +193,21 @@
    * Initialize a newly created analysis context.
    */
   AnalysisContextImpl() {
-    _privatePartition = new cache.UniversalCachePartition(this,
-        AnalysisOptionsImpl.DEFAULT_CACHE_SIZE,
-        new ContextRetentionPolicy(this));
+    _privatePartition = new UniversalCachePartition(this);
     _cache = createCacheFromSourceFactory(null);
     _taskManager = AnalysisEngine.instance.taskManager;
-    _driver = new AnalysisDriver(_taskManager, this);
+    // TODO(scheglov) Get WorkManager(Factory)(s) from plugins.
+    dartWorkManager = new DartWorkManager(this);
+    driver =
+        new AnalysisDriver(_taskManager, <WorkManager>[dartWorkManager], this);
     _onSourcesChangedController =
         new StreamController<SourcesChangedEvent>.broadcast();
   }
 
   @override
+  AnalysisCache get analysisCache => _cache;
+
+  @override
   AnalysisOptions get analysisOptions => _options;
 
   @override
@@ -203,6 +219,7 @@
         this._options.generateSdkErrors != options.generateSdkErrors ||
         this._options.dart2jsHint != options.dart2jsHint ||
         (this._options.hint && !options.hint) ||
+        (this._options.lint && !options.lint) ||
         this._options.preserveComments != options.preserveComments ||
         this._options.enableNullAwareOperators !=
             options.enableNullAwareOperators ||
@@ -210,7 +227,6 @@
     int cacheSize = options.cacheSize;
     if (this._options.cacheSize != cacheSize) {
       this._options.cacheSize = cacheSize;
-      _privatePartition.maxCacheSize = cacheSize;
     }
     this._options.analyzeFunctionBodiesPredicate =
         options.analyzeFunctionBodiesPredicate;
@@ -233,17 +249,18 @@
   @override
   void set analysisPriorityOrder(List<Source> sources) {
     if (sources == null || sources.isEmpty) {
-      _priorityOrder = Source.EMPTY_ARRAY;
+      _priorityOrder = Source.EMPTY_LIST;
     } else {
       while (sources.remove(null)) {
         // Nothing else to do.
       }
       if (sources.isEmpty) {
-        _priorityOrder = Source.EMPTY_ARRAY;
+        _priorityOrder = Source.EMPTY_LIST;
       } else {
         _priorityOrder = sources;
       }
     }
+    dartWorkManager.applyPriorityTargets(_priorityOrder);
   }
 
   @override
@@ -257,7 +274,7 @@
   @override
   List<AnalysisTarget> get explicitTargets {
     List<AnalysisTarget> targets = <AnalysisTarget>[];
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       if (iterator.value.explicitlyAdded) {
         targets.add(iterator.key);
@@ -275,10 +292,10 @@
   @override
   List<Source> get launchableClientLibrarySources {
     List<Source> sources = new List<Source>();
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       AnalysisTarget target = iterator.key;
-      cache.CacheEntry entry = iterator.value;
+      CacheEntry entry = iterator.value;
       if (target is Source &&
           entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY &&
           !target.isInSystemLibrary &&
@@ -292,10 +309,10 @@
   @override
   List<Source> get launchableServerLibrarySources {
     List<Source> sources = new List<Source>();
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       AnalysisTarget target = iterator.key;
-      cache.CacheEntry entry = iterator.value;
+      CacheEntry entry = iterator.value;
       if (target is Source &&
           entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY &&
           !target.isInSystemLibrary &&
@@ -348,7 +365,7 @@
   @override
   List<Source> get sources {
     List<Source> sources = new List<Source>();
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       AnalysisTarget target = iterator.key;
       if (target is Source) {
@@ -369,7 +386,8 @@
     bool hintsEnabled = _options.hint;
     bool lintsEnabled = _options.lint;
 
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator =
+        _privatePartition.iterator();
     while (iterator.moveNext()) {
       AnalysisTarget target = iterator.key;
       if (target is Source) {
@@ -440,13 +458,6 @@
   }
 
   @override
-  void addSourceInfo(Source source, SourceEntry info) {
-    // TODO(brianwilkerson) This method needs to be replaced by something that
-    // will copy CacheEntry's.
-//    _cache.put(source, info);
-  }
-
-  @override
   void applyAnalysisDelta(AnalysisDelta delta) {
     ChangeSet changeSet = new ChangeSet();
     delta.analysisLevels.forEach((Source source, AnalysisLevel level) {
@@ -501,6 +512,8 @@
     for (Source source in removedSources) {
       _sourceRemoved(source);
     }
+    dartWorkManager.applyChange(
+        changeSet.addedSources, changeSet.changedSources, removedSources);
     _onSourcesChangedController.add(new SourcesChangedEvent(changeSet));
   }
 
@@ -517,7 +530,7 @@
     if (unit == null) {
       return null;
     }
-    NodeLocator locator = new NodeLocator.con1(element.nameOffset);
+    NodeLocator locator = new NodeLocator(element.nameOffset);
     AstNode nameNode = locator.searchWithin(unit);
     while (nameNode != null) {
       if (nameNode is AnnotatedNode) {
@@ -554,15 +567,24 @@
 
   @override
   List<Source> computeImportedLibraries(Source source) =>
-      _computeResult(source, IMPORTED_LIBRARIES);
+      _computeResult(source, EXPLICITLY_IMPORTED_LIBRARIES);
 
   @override
-  SourceKind computeKindOf(Source source) =>
-      _computeResult(source, SOURCE_KIND);
+  SourceKind computeKindOf(Source source) {
+    String name = source.shortName;
+    if (AnalysisEngine.isDartFileName(name)) {
+      return _computeResult(source, SOURCE_KIND);
+    } else if (AnalysisEngine.isHtmlFileName(name)) {
+      return SourceKind.HTML;
+    }
+    return SourceKind.UNKNOWN;
+  }
 
   @override
-  LibraryElement computeLibraryElement(Source source) => _computeResult(
-      source, LIBRARY_ELEMENT); //_computeResult(source, HtmlEntry.ELEMENT);
+  LibraryElement computeLibraryElement(Source source) {
+    //_computeResult(source, HtmlEntry.ELEMENT);
+    return _computeResult(source, LIBRARY_ELEMENT);
+  }
 
   @override
   LineInfo computeLineInfo(Source source) => _computeResult(source, LINE_INFO);
@@ -581,8 +603,7 @@
       return new CancelableFuture.error(new AnalysisNotScheduledError());
     }
     return new _AnalysisFutureHelper<CompilationUnit>(this).computeAsync(
-        new LibrarySpecificUnit(librarySource, unitSource),
-        (cache.CacheEntry entry) {
+        new LibrarySpecificUnit(librarySource, unitSource), (CacheEntry entry) {
       CacheState state = entry.getState(RESOLVED_UNIT);
       if (state == CacheState.ERROR) {
         throw entry.exception;
@@ -596,15 +617,15 @@
   /**
    * Create an analysis cache based on the given source [factory].
    */
-  cache.AnalysisCache createCacheFromSourceFactory(SourceFactory factory) {
+  AnalysisCache createCacheFromSourceFactory(SourceFactory factory) {
     if (factory == null) {
-      return new cache.AnalysisCache(<cache.CachePartition>[_privatePartition]);
+      return new AnalysisCache(<CachePartition>[_privatePartition]);
     }
     DartSdk sdk = factory.dartSdk;
     if (sdk == null) {
-      return new cache.AnalysisCache(<cache.CachePartition>[_privatePartition]);
+      return new AnalysisCache(<CachePartition>[_privatePartition]);
     }
-    return new cache.AnalysisCache(<cache.CachePartition>[
+    return new AnalysisCache(<CachePartition>[
       AnalysisEngine.instance.partitionManager_new.forSdk(sdk),
       _privatePartition
     ]);
@@ -623,41 +644,32 @@
 
   @override
   List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) {
-    // TODO(brianwilkerson) Implement this.
+    // Check every library.
+    List<CompilationUnit> units = <CompilationUnit>[];
+    List<Source> containingLibraries = getLibrariesContaining(unitSource);
+    for (Source librarySource in containingLibraries) {
+      LibrarySpecificUnit target =
+          new LibrarySpecificUnit(librarySource, unitSource);
+      CompilationUnit unit = _cache.getValue(target, RESOLVED_UNIT);
+      if (unit == null) {
+        units = null;
+        break;
+      }
+      units.add(unit);
+    }
+    // If we have results, then we're done.
+    if (units != null) {
+      return units;
+    }
+    // Schedule recomputing RESOLVED_UNIT results.
+    for (Source librarySource in containingLibraries) {
+      LibrarySpecificUnit target =
+          new LibrarySpecificUnit(librarySource, unitSource);
+      if (_cache.getState(target, RESOLVED_UNIT) == CacheState.FLUSHED) {
+        dartWorkManager.addPriorityResult(target, RESOLVED_UNIT);
+      }
+    }
     return null;
-//    cache.CacheEntry entry = _cache.get(unitSource);
-//    // Check every library.
-//    List<CompilationUnit> units = <CompilationUnit>[];
-//    List<Source> containingLibraries = entry.containingLibraries;
-//    for (Source librarySource in containingLibraries) {
-//      CompilationUnit unit =
-//          entry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
-//      if (unit == null) {
-//        units = null;
-//        break;
-//      }
-//      units.add(unit);
-//    }
-//    // Invalidate the flushed RESOLVED_UNIT to force it eventually.
-//    if (units == null) {
-//      bool shouldBeScheduled = false;
-//      for (Source librarySource in containingLibraries) {
-//        if (entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource) ==
-//            CacheState.FLUSHED) {
-//          entry.setStateInLibrary(
-//              DartEntry.RESOLVED_UNIT, librarySource, CacheState.INVALID);
-//          shouldBeScheduled = true;
-//        }
-//      }
-//      if (shouldBeScheduled) {
-//        _workManager.add(unitSource, SourcePriority.UNKNOWN);
-//      }
-//      // We cannot provide resolved units right now,
-//      // but the future analysis will.
-//      return null;
-//    }
-//    // done
-//    return units;
   }
 
   @override
@@ -671,35 +683,12 @@
     return source.exists();
   }
 
-  Element findElementById(int id) {
-    // TODO(brianwilkerson) Implement this.
-    return null;
-//    _ElementByIdFinder finder = new _ElementByIdFinder(id);
-//    try {
-//      MapIterator<AnalysisTarget, cache.CacheEntry> iterator =
-//          _cache.iterator();
-//      while (iterator.moveNext()) {
-//        cache.CacheEntry entry = iterator.value;
-//        if (entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY) {
-//          DartEntry dartEntry = entry;
-//          LibraryElement library = dartEntry.getValue(DartEntry.ELEMENT);
-//          if (library != null) {
-//            library.accept(finder);
-//          }
-//        }
-//      }
-//    } on _ElementByIdFinderException {
-//      return finder.result;
-//    }
-//    return null;
-  }
-
   @override
-  cache.CacheEntry getCacheEntry(AnalysisTarget target) {
-    cache.CacheEntry entry = _cache.get(target);
+  CacheEntry getCacheEntry(AnalysisTarget target) {
+    CacheEntry entry = _cache.get(target);
     if (entry == null) {
-      entry = new cache.CacheEntry();
-      _cache.put(target, entry);
+      entry = new CacheEntry(target);
+      _cache.put(entry);
     }
     return entry;
   }
@@ -708,7 +697,7 @@
   CompilationUnitElement getCompilationUnitElement(
       Source unitSource, Source librarySource) {
     AnalysisTarget target = new LibrarySpecificUnit(librarySource, unitSource);
-    return _getResult(target, COMPILATION_UNIT_ELEMENT);
+    return _cache.getValue(target, COMPILATION_UNIT_ELEMENT);
   }
 
   @override
@@ -757,9 +746,27 @@
 
   @override
   AnalysisErrorInfo getErrors(Source source) {
-    List<AnalysisError> errors = _getResult(source, DART_ERRORS);
-    LineInfo lineInfo = _getResult(source, LINE_INFO);
-    return new AnalysisErrorInfoImpl(errors, lineInfo);
+    // TODO(brianwilkerson) Figure out how to implement this cleanly. The
+    // problem is that _getResult doesn't know to go into the individual inputs
+    // for the task to get their values for tasks that are just merging other
+    // result values. Therefore, if some, but not all, of the error lists have
+    // been computed, no errors will be returned by it.
+    List<List<AnalysisError>> errorLists = <List<AnalysisError>>[];
+    errorLists.add(_cache.getValue(source, BUILD_DIRECTIVES_ERRORS));
+    errorLists.add(_cache.getValue(source, BUILD_LIBRARY_ERRORS));
+    errorLists.add(_cache.getValue(source, PARSE_ERRORS));
+    errorLists.add(_cache.getValue(source, SCAN_ERRORS));
+    for (Source library in getLibrariesContaining(source)) {
+      LibrarySpecificUnit unit = new LibrarySpecificUnit(library, source);
+      errorLists.add(_cache.getValue(unit, BUILD_FUNCTION_TYPE_ALIASES_ERRORS));
+      errorLists.add(_cache.getValue(unit, HINTS));
+      errorLists.add(_cache.getValue(unit, RESOLVE_REFERENCES_ERRORS));
+      errorLists.add(_cache.getValue(unit, RESOLVE_TYPE_NAMES_ERRORS));
+      errorLists.add(_cache.getValue(unit, VERIFY_ERRORS));
+    }
+    LineInfo lineInfo = _cache.getValue(source, LINE_INFO);
+    return new AnalysisErrorInfoImpl(
+        AnalysisError.mergeLists(errorLists), lineInfo);
   }
 
   @override
@@ -776,16 +783,15 @@
   List<Source> getHtmlFilesReferencing(Source source) {
     SourceKind sourceKind = getKindOf(source);
     if (sourceKind == null) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     List<Source> htmlSources = new List<Source>();
     while (true) {
       if (sourceKind == SourceKind.PART) {
         List<Source> librarySources = getLibrariesContaining(source);
-        MapIterator<AnalysisTarget, cache.CacheEntry> iterator =
-            _cache.iterator();
+        MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
         while (iterator.moveNext()) {
-          cache.CacheEntry entry = iterator.value;
+          CacheEntry entry = iterator.value;
           if (entry.getValue(SOURCE_KIND) == SourceKind.HTML) {
             List<Source> referencedLibraries =
                 (entry as HtmlEntry).getValue(HtmlEntry.REFERENCED_LIBRARIES);
@@ -795,10 +801,9 @@
           }
         }
       } else {
-        MapIterator<AnalysisTarget, cache.CacheEntry> iterator =
-            _cache.iterator();
+        MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
         while (iterator.moveNext()) {
-          cache.CacheEntry entry = iterator.value;
+          CacheEntry entry = iterator.value;
           if (entry.getValue(SOURCE_KIND) == SourceKind.HTML) {
             List<Source> referencedLibraries =
                 (entry as HtmlEntry).getValue(HtmlEntry.REFERENCED_LIBRARIES);
@@ -811,30 +816,52 @@
       break;
     }
     if (htmlSources.isEmpty) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     return htmlSources;
   }
 
   @override
-  SourceKind getKindOf(Source source) => _getResult(source, SOURCE_KIND);
+  SourceKind getKindOf(Source source) {
+    String name = source.shortName;
+    if (AnalysisEngine.isDartFileName(name)) {
+      return _cache.getValue(source, SOURCE_KIND);
+    } else if (AnalysisEngine.isHtmlFileName(name)) {
+      return SourceKind.HTML;
+    }
+    return SourceKind.UNKNOWN;
+  }
 
   @override
   List<Source> getLibrariesContaining(Source source) {
-    // TODO(brianwilkerson) Implement this.
-//    cache.CacheEntry sourceEntry = _cache.get(source);
-//    if (sourceEntry is DartEntry) {
-//      return sourceEntry.containingLibraries;
-//    }
+    SourceKind kind = getKindOf(source);
+    if (kind == SourceKind.LIBRARY) {
+      return <Source>[source];
+    } else if (kind == SourceKind.PART) {
+      List<Source> libraries = <Source>[];
+      MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
+      while (iterator.moveNext()) {
+        AnalysisTarget target = iterator.key;
+        if (target is Source && getKindOf(target) == SourceKind.LIBRARY) {
+          List<Source> parts = _cache.getValue(target, INCLUDED_PARTS);
+          if (parts.contains(source)) {
+            libraries.add(target);
+          }
+        }
+      }
+      if (libraries.isNotEmpty) {
+        return libraries;
+      }
+    }
     return Source.EMPTY_ARRAY;
   }
 
   @override
   List<Source> getLibrariesDependingOn(Source librarySource) {
     List<Source> dependentLibraries = new List<Source>();
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
-      cache.CacheEntry entry = iterator.value;
+      CacheEntry entry = iterator.value;
       if (entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY) {
         if (_contains(entry.getValue(EXPORTED_LIBRARIES), librarySource)) {
           dependentLibraries.add(iterator.key);
@@ -845,7 +872,7 @@
       }
     }
     if (dependentLibraries.isEmpty) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     return dependentLibraries;
   }
@@ -858,15 +885,15 @@
 //      HtmlEntry htmlEntry = entry;
 //      return htmlEntry.getValue(HtmlEntry.REFERENCED_LIBRARIES);
 //    }
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 
   @override
   LibraryElement getLibraryElement(Source source) =>
-      _getResult(source, LIBRARY_ELEMENT);
+      _cache.getValue(source, LIBRARY_ELEMENT);
 
   @override
-  LineInfo getLineInfo(Source source) => _getResult(source, LINE_INFO);
+  LineInfo getLineInfo(Source source) => _cache.getValue(source, LINE_INFO);
 
   @override
   int getModificationStamp(Source source) {
@@ -891,11 +918,11 @@
   }
 
   /**
-   * Return the cache entry associated with the given [source], or `null` if
-   * there is no entry associated with the source.
+   * Return the cache entry associated with the given [target], or `null` if
+   * there is no entry associated with the target.
    */
-  cache.CacheEntry getReadableSourceEntryOrNull(Source source) =>
-      _cache.get(source);
+  CacheEntry getReadableSourceEntryOrNull(AnalysisTarget target) =>
+      _cache.get(target);
 
   @override
   CompilationUnit getResolvedCompilationUnit(
@@ -914,7 +941,7 @@
         !AnalysisEngine.isDartFileName(librarySource.shortName)) {
       return null;
     }
-    return _getResult(
+    return _cache.getValue(
         new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT);
   }
 
@@ -932,7 +959,7 @@
   @override
   List<Source> getSourcesWithFullName(String path) {
     List<Source> sources = <Source>[];
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       AnalysisTarget target = iterator.key;
       if (target is Source && target.fullName == path) {
@@ -945,7 +972,7 @@
   @override
   bool handleContentsChanged(
       Source source, String originalContents, String newContents, bool notify) {
-    cache.CacheEntry entry = _cache.get(source);
+    CacheEntry entry = _cache.get(source);
     if (entry == null) {
       return false;
     }
@@ -959,8 +986,7 @@
           _sourceChanged(source);
         }
         entry.modificationTime = _contentCache.getModificationStamp(source);
-        entry.setValue(
-            CONTENT, newContents, cache.TargetedResult.EMPTY_LIST, null);
+        entry.setValue(CONTENT, newContents, TargetedResult.EMPTY_LIST);
       } else {
         entry.modificationTime = _contentCache.getModificationStamp(source);
       }
@@ -974,8 +1000,7 @@
         TimestampedData<String> fileContents = getContents(source);
         String fileContentsData = fileContents.data;
         if (fileContentsData == originalContents) {
-          entry.setValue(
-              CONTENT, fileContentsData, cache.TargetedResult.EMPTY_LIST, null);
+          entry.setValue(CONTENT, fileContentsData, TargetedResult.EMPTY_LIST);
           entry.modificationTime = fileContents.modificationTime;
           changed = false;
         }
@@ -993,34 +1018,15 @@
     return changed;
   }
 
-  /**
-   * Invalidates hints in the given [librarySource] and included parts.
-   */
-  void invalidateLibraryHints(Source librarySource) {
-    cache.CacheEntry entry = _cache.get(librarySource);
-    // Prepare sources to invalidate hints in.
-    List<Source> sources = <Source>[librarySource];
-    sources.addAll(entry.getValue(INCLUDED_PARTS));
-    // Invalidate hints.
-    for (Source source in sources) {
-      LibrarySpecificUnit unitTarget =
-          new LibrarySpecificUnit(librarySource, source);
-      cache.CacheEntry unitEntry = _cache.get(unitTarget);
-      if (unitEntry.getState(HINTS) == CacheState.VALID) {
-        unitEntry.setState(HINTS, CacheState.INVALID);
-      }
-    }
-  }
-
   @override
   bool isClientLibrary(Source librarySource) {
-    cache.CacheEntry entry = _cache.get(librarySource);
+    CacheEntry entry = _cache.get(librarySource);
     return entry.getValue(IS_CLIENT) && entry.getValue(IS_LAUNCHABLE);
   }
 
   @override
   bool isServerLibrary(Source librarySource) {
-    cache.CacheEntry entry = _cache.get(librarySource);
+    CacheEntry entry = _cache.get(librarySource);
     return !entry.getValue(IS_CLIENT) && entry.getValue(IS_LAUNCHABLE);
   }
 
@@ -1044,7 +1050,7 @@
   @override
   AnalysisResult performAnalysisTask() {
     return PerformanceStatistics.performAnaysis.makeCurrentWhile(() {
-      bool done = !_driver.performAnalysisTask();
+      bool done = !driver.performAnalysisTask();
       if (done) {
         done = !_validateCacheConsistency();
       }
@@ -1066,9 +1072,9 @@
       //
       // Cache the element in the library's info.
       //
-      cache.CacheEntry entry = getCacheEntry(librarySource);
+      CacheEntry entry = getCacheEntry(librarySource);
       setValue(ResultDescriptor result, value) {
-        entry.setValue(result, value, cache.TargetedResult.EMPTY_LIST, null);
+        entry.setValue(result, value, TargetedResult.EMPTY_LIST);
       }
       setValue(BUILD_DIRECTIVES_ERRORS, AnalysisError.NO_ERRORS);
       setValue(BUILD_FUNCTION_TYPE_ALIASES_ERRORS, AnalysisError.NO_ERRORS);
@@ -1078,11 +1084,11 @@
       // CONSTRUCTORS
       // CONSTRUCTORS_ERRORS
       entry.setState(CONTENT, CacheState.FLUSHED);
-      setValue(EXPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+      setValue(EXPORTED_LIBRARIES, Source.EMPTY_LIST);
       // EXPORT_SOURCE_CLOSURE
-      setValue(IMPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+      setValue(IMPORTED_LIBRARIES, Source.EMPTY_LIST);
       // IMPORT_SOURCE_CLOSURE
-      setValue(INCLUDED_PARTS, Source.EMPTY_ARRAY);
+      setValue(INCLUDED_PARTS, Source.EMPTY_LIST);
       setValue(IS_CLIENT, true);
       setValue(IS_LAUNCHABLE, false);
       setValue(LIBRARY_ELEMENT, library);
@@ -1117,9 +1123,8 @@
       setValue(VERIFY_ERRORS, AnalysisError.NO_ERRORS);
     });
 
-    cache.CacheEntry entry = getCacheEntry(AnalysisContextTarget.request);
-    entry.setValue(
-        TYPE_PROVIDER, typeProvider, cache.TargetedResult.EMPTY_LIST, null);
+    CacheEntry entry = getCacheEntry(AnalysisContextTarget.request);
+    entry.setValue(TYPE_PROVIDER, typeProvider, TargetedResult.EMPTY_LIST);
   }
 
   @override
@@ -1165,6 +1170,8 @@
   @override
   void setContents(Source source, String contents) {
     _contentsChanged(source, contents, true);
+    dartWorkManager.applyChange(
+        Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST);
   }
 
   @override
@@ -1244,7 +1251,7 @@
    * given list of [sources].
    */
   void _addSourcesInContainer(List<Source> sources, SourceContainer container) {
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       Source source = iterator.key;
       if (container.contains(source)) {
@@ -1268,35 +1275,12 @@
     }
   }
 
-  /**
-   * Return the priority that should be used when the source associated with
-   * the given [entry] is added to the work manager.
-   */
-  SourcePriority _computePriority(cache.CacheEntry entry) {
-    // Used in commented out code.
-    SourceKind kind = entry.getValue(SOURCE_KIND);
-    if (kind == SourceKind.LIBRARY) {
-      return SourcePriority.LIBRARY;
-    } else if (kind == SourceKind.PART) {
-      return SourcePriority.NORMAL_PART;
-    }
-    return SourcePriority.UNKNOWN;
-  }
-
   Object /*V*/ _computeResult(
       AnalysisTarget target, ResultDescriptor /*<V>*/ descriptor) {
-    cache.CacheEntry entry = getCacheEntry(target);
-    if (descriptor is CompositeResultDescriptor) {
-      List compositeResults = [];
-      for (ResultDescriptor descriptor in descriptor.contributors) {
-        List value = _computeResult(target, descriptor);
-        compositeResults.addAll(value);
-      }
-      return compositeResults;
-    }
+    CacheEntry entry = getCacheEntry(target);
     CacheState state = entry.getState(descriptor);
     if (state == CacheState.FLUSHED || state == CacheState.INVALID) {
-      _driver.computeResult(target, descriptor);
+      driver.computeResult(target, descriptor);
     }
     state = entry.getState(descriptor);
     if (state == CacheState.ERROR) {
@@ -1360,11 +1344,10 @@
 //        }
         _sourceChanged(source);
         changed = true;
-        cache.CacheEntry entry = _cache.get(source);
+        CacheEntry entry = _cache.get(source);
         if (entry != null) {
           entry.modificationTime = _contentCache.getModificationStamp(source);
-          entry.setValue(
-              CONTENT, contents, cache.TargetedResult.EMPTY_LIST, null);
+          entry.setValue(CONTENT, contents, TargetedResult.EMPTY_LIST);
         }
       }
     } else if (originalContents != null) {
@@ -1393,15 +1376,30 @@
    * added to this context if [explicitlyAdded] is `true`. Return the cache
    * entry that was created.
    */
-  cache.CacheEntry _createCacheEntry(Source source, bool explicitlyAdded) {
-    cache.CacheEntry entry = new cache.CacheEntry();
+  CacheEntry _createCacheEntry(Source source, bool explicitlyAdded) {
+    CacheEntry entry = new CacheEntry(source);
     entry.modificationTime = getModificationStamp(source);
     entry.explicitlyAdded = explicitlyAdded;
-    _cache.put(source, entry);
+    _cache.put(entry);
     return entry;
   }
 
   /**
+   * Return a list containing all of the cache entries for targets associated
+   * with the given [source].
+   */
+  List<CacheEntry> _entriesFor(Source source) {
+    List<CacheEntry> entries = <CacheEntry>[];
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
+    while (iterator.moveNext()) {
+      if (iterator.key.source == source) {
+        entries.add(iterator.value);
+      }
+    }
+    return entries;
+  }
+
+  /**
    * Return a list containing all of the change notices that are waiting to be
    * returned. If there are no notices, then return either `null` or an empty
    * list, depending on the value of [nullIfEmpty].
@@ -1411,7 +1409,7 @@
       if (nullIfEmpty) {
         return null;
       }
-      return ChangeNoticeImpl.EMPTY_ARRAY;
+      return ChangeNoticeImpl.EMPTY_LIST;
     }
     List<ChangeNotice> notices = new List.from(_pendingNotices.values);
     _pendingNotices.clear();
@@ -1432,32 +1430,13 @@
     return notice;
   }
 
-  Object _getResult(AnalysisTarget target, ResultDescriptor descriptor) {
-    cache.CacheEntry entry = _cache.get(target);
-    if (entry == null) {
-      return descriptor.defaultValue;
-    }
-    if (descriptor is CompositeResultDescriptor) {
-      List compositeResults = [];
-      for (ResultDescriptor descriptor in descriptor.contributors) {
-        List value = _getResult(target, descriptor);
-        compositeResults.addAll(value);
-      }
-      return compositeResults;
-    }
-    if (entry.isValid(descriptor)) {
-      return entry.getValue(descriptor);
-    }
-    return descriptor.defaultValue;
-  }
-
   /**
    * Return a list containing all of the sources known to this context that have
    * the given [kind].
    */
   List<Source> _getSources(SourceKind kind) {
     List<Source> sources = new List<Source>();
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       if (iterator.value.getValue(SOURCE_KIND) == kind &&
           iterator.key is Source) {
@@ -1472,7 +1451,7 @@
    * related to it. If so, add the source to the set of sources that need to be
    * processed. This method is intended to be used for testing purposes only.
    */
-  void _getSourcesNeedingProcessing(Source source, cache.CacheEntry entry,
+  void _getSourcesNeedingProcessing(Source source, CacheEntry entry,
       bool isPriority, bool hintsEnabled, bool lintsEnabled,
       HashSet<Source> sources) {
     CacheState state = entry.getState(CONTENT);
@@ -1516,7 +1495,7 @@
 //        }
 //      }
       for (Source librarySource in getLibrariesContaining(source)) {
-        cache.CacheEntry libraryEntry = _cache.get(librarySource);
+        CacheEntry libraryEntry = _cache.get(librarySource);
         state = libraryEntry.getState(LIBRARY_ELEMENT);
         if (state == CacheState.INVALID ||
             (isPriority && state == CacheState.FLUSHED)) {
@@ -1525,7 +1504,7 @@
         } else if (state == CacheState.ERROR) {
           return;
         }
-        cache.CacheEntry unitEntry =
+        CacheEntry unitEntry =
             _cache.get(new LibrarySpecificUnit(librarySource, source));
         state = unitEntry.getState(RESOLVED_UNIT);
         if (state == CacheState.INVALID ||
@@ -1614,35 +1593,6 @@
   }
 
   /**
-   * In response to a change to at least one of the compilation units in the
-   * library defined by the given [librarySource], invalidate any results that
-   * are dependent on the result of resolving that library.
-   *
-   * <b>Note:</b> Any cache entries that were accessed before this method was
-   * invoked must be re-accessed after this method returns.
-   */
-  void _invalidateLibraryResolution(Source librarySource) {
-    // TODO(brianwilkerson) Figure out whether we still need this.
-    // TODO(brianwilkerson) This could be optimized. There's no need to flush
-    // all of these entries if the public namespace hasn't changed, which will
-    // be a fairly common case. The question is whether we can afford the time
-    // to compute the namespace to look for differences.
-//    DartEntry libraryEntry = _getReadableDartEntry(librarySource);
-//    if (libraryEntry != null) {
-//      List<Source> includedParts =
-//          libraryEntry.getValue(DartEntry.INCLUDED_PARTS);
-//      libraryEntry.invalidateAllResolutionInformation(false);
-//      _workManager.add(librarySource, SourcePriority.LIBRARY);
-//      for (Source partSource in includedParts) {
-//        SourceEntry partEntry = _cache.get(partSource);
-//        if (partEntry is DartEntry) {
-//          partEntry.invalidateAllResolutionInformation(false);
-//        }
-//      }
-//    }
-  }
-
-  /**
    * Log the given debugging [message].
    */
   void _logInformation(String message) {
@@ -1704,7 +1654,7 @@
    * Return `true` if errors should be produced for the given [source]. The
    * [entry] associated with the source is passed in for efficiency.
    */
-  bool _shouldErrorsBeAnalyzed(Source source, cache.CacheEntry entry) {
+  bool _shouldErrorsBeAnalyzed(Source source, CacheEntry entry) {
     if (source.isInSystemLibrary) {
       return _options.generateSdkErrors;
     } else if (!entry.explicitlyAdded) {
@@ -1719,7 +1669,7 @@
    * that referenced the source before it existed.
    */
   void _sourceAvailable(Source source) {
-    cache.CacheEntry entry = _cache.get(source);
+    CacheEntry entry = _cache.get(source);
     if (entry == null) {
       _createCacheEntry(source, true);
     } else {
@@ -1733,7 +1683,7 @@
    * the source before it existed.
    */
   void _sourceChanged(Source source) {
-    cache.CacheEntry entry = _cache.get(source);
+    CacheEntry entry = _cache.get(source);
     // If the source is removed, we don't care about it.
     if (entry == null) {
       return;
@@ -1746,6 +1696,10 @@
       try {
         TimestampedData<String> fileContents = getContents(source);
         if (fileContents.data == sourceContent) {
+          int time = fileContents.modificationTime;
+          for (CacheEntry entry in _entriesFor(source)) {
+            entry.modificationTime = time;
+          }
           return;
         }
       } catch (e) {}
@@ -1790,20 +1744,6 @@
    * Record that the given [source] has been removed.
    */
   void _sourceRemoved(Source source) {
-    List<Source> containingLibraries = getLibrariesContaining(source);
-    if (containingLibraries != null && containingLibraries.isNotEmpty) {
-      HashSet<Source> libraries = new HashSet<Source>();
-      for (Source librarySource in containingLibraries) {
-        libraries.add(librarySource);
-        for (Source dependentLibrary
-            in getLibrariesDependingOn(librarySource)) {
-          libraries.add(dependentLibrary);
-        }
-      }
-      for (Source librarySource in libraries) {
-        _invalidateLibraryResolution(librarySource);
-      }
-    }
     _cache.remove(source);
     _removeFromPriorityOrder(source);
   }
@@ -1880,117 +1820,69 @@
    */
   bool _validateCacheConsistency() {
     int consistencyCheckStart = JavaSystem.nanoTime();
-    List<AnalysisTarget> changedTargets = new List<AnalysisTarget>();
-    List<AnalysisTarget> missingTargets = new List<AnalysisTarget>();
-    MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
+    HashSet<Source> changedSources = new HashSet<Source>();
+    HashSet<Source> missingSources = new HashSet<Source>();
+    MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator();
     while (iterator.moveNext()) {
       AnalysisTarget target = iterator.key;
-      cache.CacheEntry entry = iterator.value;
       if (target is Source) {
+        CacheEntry entry = iterator.value;
         int sourceTime = getModificationStamp(target);
         if (sourceTime != entry.modificationTime) {
-          changedTargets.add(target);
+          changedSources.add(target);
         }
-      }
-      if (entry.exception != null) {
-        if (!exists(target)) {
-          missingTargets.add(target);
+        if (entry.exception != null) {
+          if (!exists(target)) {
+            missingSources.add(target);
+          }
         }
       }
     }
-    int count = changedTargets.length;
-    for (int i = 0; i < count; i++) {
-      _sourceChanged(changedTargets[i]);
+    for (Source source in changedSources) {
+      _sourceChanged(source);
     }
     int removalCount = 0;
-    for (AnalysisTarget target in missingTargets) {
-      if (target is Source &&
-          getLibrariesContaining(target).isEmpty &&
-          getLibrariesDependingOn(target).isEmpty) {
-        _cache.remove(target);
+    for (Source source in missingSources) {
+      if (getLibrariesContaining(source).isEmpty &&
+          getLibrariesDependingOn(source).isEmpty) {
+        _cache.remove(source);
         removalCount++;
       }
     }
     int consistencyCheckEnd = JavaSystem.nanoTime();
-    if (changedTargets.length > 0 || missingTargets.length > 0) {
+    if (changedSources.length > 0 || missingSources.length > 0) {
       StringBuffer buffer = new StringBuffer();
       buffer.write("Consistency check took ");
       buffer.write((consistencyCheckEnd - consistencyCheckStart) / 1000000.0);
       buffer.writeln(" ms and found");
       buffer.write("  ");
-      buffer.write(changedTargets.length);
+      buffer.write(changedSources.length);
       buffer.writeln(" inconsistent entries");
       buffer.write("  ");
-      buffer.write(missingTargets.length);
+      buffer.write(missingSources.length);
       buffer.write(" missing sources (");
       buffer.write(removalCount);
       buffer.writeln(" removed");
-      for (Source source in missingTargets) {
+      for (Source source in missingSources) {
         buffer.write("    ");
         buffer.writeln(source.fullName);
       }
       _logInformation(buffer.toString());
     }
-    return changedTargets.length > 0;
+    return changedSources.length > 0;
   }
 }
 
 /**
- * A retention policy used by an analysis context.
- */
-class ContextRetentionPolicy implements cache.CacheRetentionPolicy {
-  /**
-   * The context associated with this policy.
-   */
-  final AnalysisContextImpl context;
-
-  /**
-   * Initialize a newly created policy to be associated with the given
-   * [context].
-   */
-  ContextRetentionPolicy(this.context);
-
-  @override
-  RetentionPriority getAstPriority(
-      AnalysisTarget target, cache.CacheEntry entry) {
-    int priorityCount = context._priorityOrder.length;
-    for (int i = 0; i < priorityCount; i++) {
-      if (target == context._priorityOrder[i]) {
-        return RetentionPriority.HIGH;
-      }
-    }
-    if (_astIsNeeded(entry)) {
-      return RetentionPriority.MEDIUM;
-    }
-    return RetentionPriority.LOW;
-  }
-
-  bool _astIsNeeded(cache.CacheEntry entry) =>
-      entry.isInvalid(BUILD_FUNCTION_TYPE_ALIASES_ERRORS) ||
-          entry.isInvalid(BUILD_LIBRARY_ERRORS) ||
-          entry.isInvalid(CONSTRUCTORS_ERRORS) ||
-          entry.isInvalid(HINTS) ||
-          //entry.isInvalid(LINTS) ||
-          entry.isInvalid(RESOLVE_REFERENCES_ERRORS) ||
-          entry.isInvalid(RESOLVE_TYPE_NAMES_ERRORS) ||
-          entry.isInvalid(VERIFY_ERRORS);
-}
-
-/**
  * An object that manages the partitions that can be shared between analysis
  * contexts.
  */
 class PartitionManager {
   /**
-   * The default cache size for a Dart SDK partition.
-   */
-  static int _DEFAULT_SDK_CACHE_SIZE = 256;
-
-  /**
    * A table mapping SDK's to the partitions used for those SDK's.
    */
-  HashMap<DartSdk, cache.SdkCachePartition> _sdkPartitions =
-      new HashMap<DartSdk, cache.SdkCachePartition>();
+  HashMap<DartSdk, SdkCachePartition> _sdkPartitions =
+      new HashMap<DartSdk, SdkCachePartition>();
 
   /**
    * Clear any cached data being maintained by this manager.
@@ -2003,7 +1895,7 @@
    * Return the partition being used for the given [sdk], creating the partition
    * if necessary.
    */
-  cache.SdkCachePartition forSdk(DartSdk sdk) {
+  SdkCachePartition forSdk(DartSdk sdk) {
     // Call sdk.context now, because when it creates a new
     // InternalAnalysisContext instance, it calls forSdk() again, so creates an
     // SdkCachePartition instance.
@@ -2011,10 +1903,9 @@
     // with two SdkCachePartition instances.
     InternalAnalysisContext sdkContext = sdk.context;
     // Check cache for an existing partition.
-    cache.SdkCachePartition partition = _sdkPartitions[sdk];
+    SdkCachePartition partition = _sdkPartitions[sdk];
     if (partition == null) {
-      partition =
-          new cache.SdkCachePartition(sdkContext, _DEFAULT_SDK_CACHE_SIZE);
+      partition = new SdkCachePartition(sdkContext);
       _sdkPartitions[sdk] = partition;
     }
     return partition;
@@ -2068,7 +1959,7 @@
    * in a microtask, so there is no danger of side effects occurring due to
    * client callbacks.
    */
-  bool evaluate(cache.CacheEntry entry) {
+  bool evaluate(CacheEntry entry) {
     assert(!_completer.isCompleted);
     try {
       T result = _computeValue(entry);
@@ -2128,13 +2019,13 @@
    * reentrant changes to the analysis state.
    */
   CancelableFuture<T> computeAsync(
-      AnalysisTarget target, T computeValue(cache.CacheEntry entry)) {
+      AnalysisTarget target, T computeValue(CacheEntry entry)) {
     if (_context.isDisposed) {
       // No further analysis is expected, so return a future that completes
       // immediately with AnalysisNotScheduledError.
       return new CancelableFuture.error(new AnalysisNotScheduledError());
     }
-    cache.CacheEntry entry = _context.getReadableSourceEntryOrNull(target);
+    CacheEntry entry = _context.getReadableSourceEntryOrNull(target);
     if (entry == null) {
       return new CancelableFuture.error(new AnalysisNotScheduledError());
     }
diff --git a/pkg/analyzer/lib/src/generated/ast.dart b/pkg/analyzer/lib/src/generated/ast.dart
index 384593e..ee68939 100644
--- a/pkg/analyzer/lib/src/generated/ast.dart
+++ b/pkg/analyzer/lib/src/generated/ast.dart
@@ -9,7 +9,6 @@
 
 import 'dart:collection';
 
-import 'constant.dart';
 import 'element.dart';
 import 'engine.dart' show AnalysisEngine;
 import 'java_core.dart';
@@ -595,8 +594,10 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_expression)..add(asOperator)..add(_type);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_expression)
+    ..add(asOperator)
+    ..add(_type);
 
   @override
   Token get endToken => _type.endToken;
@@ -1252,13 +1253,13 @@
   ForEachStatement visitForEachStatement(ForEachStatement node) {
     DeclaredIdentifier loopVariable = node.loopVariable;
     if (loopVariable == null) {
-      return new ForEachStatement.con2(cloneToken(node.awaitKeyword),
+      return new ForEachStatement.withReference(cloneToken(node.awaitKeyword),
           cloneToken(node.forKeyword), cloneToken(node.leftParenthesis),
           cloneNode(node.identifier), cloneToken(node.inKeyword),
           cloneNode(node.iterable), cloneToken(node.rightParenthesis),
           cloneNode(node.body));
     }
-    return new ForEachStatement.con1(cloneToken(node.awaitKeyword),
+    return new ForEachStatement.withDeclaration(cloneToken(node.awaitKeyword),
         cloneToken(node.forKeyword), cloneToken(node.leftParenthesis),
         cloneNode(loopVariable), cloneToken(node.inKeyword),
         cloneNode(node.iterable), cloneToken(node.rightParenthesis),
@@ -3191,8 +3192,9 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(awaitKeyword)..add(_expression);
+  Iterable get childEntities => new ChildEntities()
+    ..add(awaitKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken => _expression.endToken;
@@ -3286,8 +3288,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_leftOperand)..add(operator)..add(_rightOperand);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_leftOperand)
+    ..add(operator)
+    ..add(_rightOperand);
 
   @override
   Token get endToken => _rightOperand.endToken;
@@ -3492,8 +3496,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(keyword)..add(star)..add(_block);
+  Iterable get childEntities => new ChildEntities()
+    ..add(keyword)
+    ..add(star)
+    ..add(_block);
 
   @override
   Token get endToken => _block.endToken;
@@ -3659,8 +3665,10 @@
   Token get beginToken => breakKeyword;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(breakKeyword)..add(_label)..add(semicolon);
+  Iterable get childEntities => new ChildEntities()
+    ..add(breakKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -4567,8 +4575,9 @@
   Token get beginToken => _identifier.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(newKeyword)..add(_identifier);
+  Iterable get childEntities => new ChildEntities()
+    ..add(newKeyword)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -4709,7 +4718,9 @@
   Iterable get childEntities {
     ChildEntities result = new ChildEntities()..add(_scriptTag);
     if (_directivesAreBeforeDeclarations) {
-      result..addAll(_directives)..addAll(_declarations);
+      result
+        ..addAll(_directives)
+        ..addAll(_declarations);
     } else {
       result.addAll(sortedDirectivesAndDeclarations);
     }
@@ -5261,18 +5272,6 @@
 }
 
 /**
- * Object representing a "const" instance creation expression, and its
- * evaluation result.  This is used as the AnalysisTarget for constant
- * evaluation of instance creation expressions.
- */
-class ConstantInstanceCreationHandle {
-  /**
-   * The result of evaluating the constant.
-   */
-  EvaluationResultImpl evaluationResult;
-}
-
-/**
  * A constructor declaration.
  *
  * > constructorDeclaration ::=
@@ -5684,8 +5683,10 @@
   Token get beginToken => _type.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_type)..add(period)..add(_name);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_type)
+    ..add(period)
+    ..add(_name);
 
   @override
   Token get endToken {
@@ -5775,8 +5776,10 @@
   Token get beginToken => continueKeyword;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(continueKeyword)..add(_label)..add(semicolon);
+  Iterable get childEntities => new ChildEntities()
+    ..add(continueKeyword)
+    ..add(_label)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -5877,8 +5880,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(_identifier);
+  Iterable get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(_identifier);
 
   @override
   LocalVariableElement get element {
@@ -5999,8 +6004,10 @@
   Token get beginToken => _parameter.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_parameter)..add(separator)..add(_defaultValue);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_parameter)
+    ..add(separator)
+    ..add(_defaultValue);
 
   /**
    * Return the expression computing the default value for the parameter, or
@@ -6953,8 +6960,9 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_expression)..add(semicolon);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken {
@@ -7016,8 +7024,9 @@
   Token get beginToken => extendsKeyword;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(extendsKeyword)..add(_superclass);
+  Iterable get childEntities => new ChildEntities()
+    ..add(extendsKeyword)
+    ..add(_superclass);
 
   @override
   Token get endToken => _superclass.endToken;
@@ -7093,8 +7102,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(staticKeyword)..add(_fieldList)..add(semicolon);
+  Iterable get childEntities => super._childEntities
+    ..add(staticKeyword)
+    ..add(_fieldList)
+    ..add(semicolon);
 
   @override
   Element get element => null;
@@ -7339,6 +7350,7 @@
    * Initialize a newly created for-each statement. The [awaitKeyword] can be
    * `null` if this is not an asynchronous for loop.
    */
+  @deprecated // Use new ForEachStatement.withDeclaration(...)
   ForEachStatement.con1(this.awaitKeyword, this.forKeyword,
       this.leftParenthesis, DeclaredIdentifier loopVariable, this.inKeyword,
       Expression iterator, this.rightParenthesis, Statement body) {
@@ -7351,6 +7363,7 @@
    * Initialize a newly created for-each statement. The [awaitKeyword] can be
    * `null` if this is not an asynchronous for loop.
    */
+  @deprecated // Use new ForEachStatement.withReference(...)
   ForEachStatement.con2(this.awaitKeyword, this.forKeyword,
       this.leftParenthesis, SimpleIdentifier identifier, this.inKeyword,
       Expression iterator, this.rightParenthesis, Statement body) {
@@ -7359,6 +7372,32 @@
     _body = _becomeParentOf(body);
   }
 
+  /**
+   * Initialize a newly created for-each statement whose loop control variable
+   * is declared internally (in the for-loop part). The [awaitKeyword] can be
+   * `null` if this is not an asynchronous for loop.
+   */
+  ForEachStatement.withDeclaration(this.awaitKeyword, this.forKeyword,
+      this.leftParenthesis, DeclaredIdentifier loopVariable, this.inKeyword,
+      Expression iterator, this.rightParenthesis, Statement body) {
+    _loopVariable = _becomeParentOf(loopVariable);
+    _iterable = _becomeParentOf(iterator);
+    _body = _becomeParentOf(body);
+  }
+
+  /**
+   * Initialize a newly created for-each statement whose loop control variable
+   * is declared outside the for loop. The [awaitKeyword] can be `null` if this
+   * is not an asynchronous for loop.
+   */
+  ForEachStatement.withReference(this.awaitKeyword, this.forKeyword,
+      this.leftParenthesis, SimpleIdentifier identifier, this.inKeyword,
+      Expression iterator, this.rightParenthesis, Statement body) {
+    _identifier = _becomeParentOf(identifier);
+    _iterable = _becomeParentOf(iterator);
+    _body = _becomeParentOf(body);
+  }
+
   @override
   Token get beginToken => forKeyword;
 
@@ -7570,7 +7609,9 @@
       }
       result.add(parameter);
     }
-    return result..add(rightDelimiter)..add(rightParenthesis);
+    return result
+      ..add(rightDelimiter)
+      ..add(rightParenthesis);
   }
 
   @override
@@ -8047,8 +8088,9 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_parameters)..add(_body);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_parameters)
+    ..add(_body);
 
   @override
   Token get endToken {
@@ -8161,8 +8203,9 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_function)..add(_argumentList);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_function)
+    ..add(_argumentList);
 
   @override
   Token get endToken => _argumentList.endToken;
@@ -8345,8 +8388,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(_returnType)..add(identifier)..add(parameters);
+  Iterable get childEntities => super._childEntities
+    ..add(_returnType)
+    ..add(identifier)
+    ..add(parameters);
 
   @override
   Token get endToken => _parameters.endToken;
@@ -9642,13 +9687,13 @@
   ForEachStatement visitForEachStatement(ForEachStatement node) {
     DeclaredIdentifier loopVariable = node.loopVariable;
     if (loopVariable == null) {
-      return new ForEachStatement.con2(_mapToken(node.awaitKeyword),
+      return new ForEachStatement.withReference(_mapToken(node.awaitKeyword),
           _mapToken(node.forKeyword), _mapToken(node.leftParenthesis),
           _cloneNode(node.identifier), _mapToken(node.inKeyword),
           _cloneNode(node.iterable), _mapToken(node.rightParenthesis),
           _cloneNode(node.body));
     }
-    return new ForEachStatement.con1(_mapToken(node.awaitKeyword),
+    return new ForEachStatement.withDeclaration(_mapToken(node.awaitKeyword),
         _mapToken(node.forKeyword), _mapToken(node.leftParenthesis),
         _cloneNode(loopVariable), _mapToken(node.inKeyword),
         _cloneNode(node.iterable), _mapToken(node.rightParenthesis),
@@ -10519,12 +10564,6 @@
   ConstructorElement staticElement;
 
   /**
-   * The [ConstantInstanceCreationHandle] holding the result of evaluating this
-   * expression, if it is constant.
-   */
-  ConstantInstanceCreationHandle constantHandle;
-
-  /**
    * Initialize a newly created instance creation expression.
    */
   InstanceCreationExpression(this.keyword, ConstructorName constructorName,
@@ -10570,16 +10609,6 @@
   Token get endToken => _argumentList.endToken;
 
   /**
-   * The result of evaluating this expression, if it is constant.
-   */
-  EvaluationResultImpl get evaluationResult {
-    if (constantHandle != null) {
-      return constantHandle.evaluationResult;
-    }
-    return null;
-  }
-
-  /**
    * Return `true` if this creation expression is used to invoke a constant
    * constructor.
    */
@@ -10916,7 +10945,9 @@
   Token get beginToken => _label.beginToken;
 
   @override
-  Iterable get childEntities => new ChildEntities()..add(_label)..add(colon);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_label)
+    ..add(colon);
 
   @override
   Token get endToken => colon;
@@ -11048,8 +11079,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(libraryKeyword)..add(_name)..add(semicolon);
+  Iterable get childEntities => super._childEntities
+    ..add(libraryKeyword)
+    ..add(_name)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -11365,8 +11398,10 @@
   Token get beginToken => _key.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_key)..add(separator)..add(_value);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_key)
+    ..add(separator)
+    ..add(_value);
 
   @override
   Token get endToken => _value.endToken;
@@ -11728,10 +11763,8 @@
    * if there is no target. In an ordinary method invocation this will be a
    * period ('.'). In a cascade section this will be the cascade operator
    * ('..').
-   *
-   * Deprecated: use [operator] instead.
    */
-  @deprecated
+  @deprecated // Use this.operator
   Token get period => operator;
 
   /**
@@ -11739,10 +11772,8 @@
    * if there is no target. In an ordinary method invocation this will be a
    * period ('.'). In a cascade section this will be the cascade operator
    * ('..').
-   *
-   * Deprecated: use [operator] instead.
    */
-  @deprecated
+  @deprecated // Use this.operator
   void set period(Token value) {
     operator = value;
   }
@@ -11862,8 +11893,9 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_name)..add(_expression);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_name)
+    ..add(_expression);
 
   /**
    * Return the element representing the parameter being named by this
@@ -11997,8 +12029,9 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(nativeKeyword)..add(_name);
+  Iterable get childEntities => new ChildEntities()
+    ..add(nativeKeyword)
+    ..add(_name);
 
   @override
   Token get endToken => _name.endToken;
@@ -12278,16 +12311,27 @@
 
   /**
    * Initialize a newly created locator to locate an [AstNode] by locating the
+   * node within an AST structure that corresponds to the given range of
+   * characters (between the [startOffset] and [endOffset] in the source.
+   */
+  NodeLocator(int startOffset, [int endOffset])
+      : this._startOffset = startOffset,
+        this._endOffset = endOffset == null ? startOffset : endOffset;
+
+  /**
+   * Initialize a newly created locator to locate an [AstNode] by locating the
    * node within an AST structure that corresponds to the given [offset] in the
    * source.
    */
-  NodeLocator.con1(int offset) : this.con2(offset, offset);
+  @deprecated // Use new NodeLocator(offset)
+  NodeLocator.con1(int offset) : this(offset);
 
   /**
    * Initialize a newly created locator to locate an [AstNode] by locating the
    * node within an AST structure that corresponds to the given range of
    * characters (between the [startOffset] and [endOffset] in the source.
    */
+  @deprecated // Use new NodeLocator(startOffset, endOffset)
   NodeLocator.con2(this._startOffset, this._endOffset);
 
   /**
@@ -13788,8 +13832,10 @@
       : super(comment, metadata, partUri);
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(partKeyword)..add(_uri)..add(semicolon);
+  Iterable get childEntities => super._childEntities
+    ..add(partKeyword)
+    ..add(_uri)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -13985,8 +14031,9 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_operand)..add(operator);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_operand)
+    ..add(operator);
 
   @override
   Token get endToken => operator;
@@ -14116,8 +14163,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_prefix)..add(period)..add(_identifier);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_prefix)
+    ..add(period)
+    ..add(_identifier);
 
   @override
   Token get endToken => _identifier.endToken;
@@ -14258,8 +14307,9 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(operator)..add(_operand);
+  Iterable get childEntities => new ChildEntities()
+    ..add(operator)
+    ..add(_operand);
 
   @override
   Token get endToken => _operand.endToken;
@@ -14389,8 +14439,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_target)..add(operator)..add(_propertyName);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_target)
+    ..add(operator)
+    ..add(_propertyName);
 
   @override
   Token get endToken => _propertyName.endToken;
@@ -15316,8 +15368,10 @@
   Token get beginToken => returnKeyword;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(returnKeyword)..add(_expression)..add(semicolon);
+  Iterable get childEntities => new ChildEntities()
+    ..add(returnKeyword)
+    ..add(_expression)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
@@ -16001,8 +16055,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(keyword)..add(_type)..add(identifier);
+  Iterable get childEntities => super._childEntities
+    ..add(keyword)
+    ..add(_type)
+    ..add(identifier);
 
   @override
   Token get endToken => identifier.endToken;
@@ -17280,8 +17336,9 @@
   Token get beginToken => throwKeyword;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(throwKeyword)..add(_expression);
+  Iterable get childEntities => new ChildEntities()
+    ..add(throwKeyword)
+    ..add(_expression);
 
   @override
   Token get endToken {
@@ -17360,8 +17417,9 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(_variableList)..add(semicolon);
+  Iterable get childEntities => super._childEntities
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Element get element => null;
@@ -18773,8 +18831,9 @@
     _typeArguments = _becomeParentOf(typeArguments);
   }
 
-  ChildEntities get _childEntities =>
-      new ChildEntities()..add(constKeyword)..add(_typeArguments);
+  ChildEntities get _childEntities => new ChildEntities()
+    ..add(constKeyword)
+    ..add(_typeArguments);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -18818,8 +18877,9 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_name)..add(_typeArguments);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_name)
+    ..add(_typeArguments);
 
   @override
   Token get endToken {
@@ -18934,8 +18994,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(_name)..add(extendsKeyword)..add(_bound);
+  Iterable get childEntities => super._childEntities
+    ..add(_name)
+    ..add(extendsKeyword)
+    ..add(_bound);
 
   @override
   TypeParameterElement get element =>
@@ -19555,8 +19617,10 @@
   }
 
   @override
-  Iterable get childEntities =>
-      super._childEntities..add(_name)..add(equals)..add(_initializer);
+  Iterable get childEntities => super._childEntities
+    ..add(_name)
+    ..add(equals)
+    ..add(_initializer);
 
   /**
    * This overridden implementation of getDocumentationComment() looks in the
@@ -19786,8 +19850,9 @@
   Token get beginToken => _variableList.beginToken;
 
   @override
-  Iterable get childEntities =>
-      new ChildEntities()..add(_variableList)..add(semicolon);
+  Iterable get childEntities => new ChildEntities()
+    ..add(_variableList)
+    ..add(semicolon);
 
   @override
   Token get endToken => semicolon;
diff --git a/pkg/analyzer/lib/src/generated/constant.dart b/pkg/analyzer/lib/src/generated/constant.dart
index 6aafe29..1fb7b7f 100644
--- a/pkg/analyzer/lib/src/generated/constant.dart
+++ b/pkg/analyzer/lib/src/generated/constant.dart
@@ -9,7 +9,9 @@
 
 import 'dart:collection';
 
+import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
+import 'package:analyzer/src/task/dart.dart';
 
 import 'ast.dart';
 import 'element.dart';
@@ -23,6 +25,11 @@
 import 'utilities_dart.dart' show ParameterKind;
 
 /**
+ * Callback used by [ReferenceFinder] to report that a dependency was found.
+ */
+typedef void ReferenceFinderCallback(ConstantEvaluationTarget dependency);
+
+/**
  * The state of an object representing a boolean value.
  */
 class BoolState extends InstanceState {
@@ -155,7 +162,7 @@
       InstanceCreationExpression node) {
     InstanceCreationExpression expression =
         super.visitInstanceCreationExpression(node);
-    expression.constantHandle = node.constantHandle;
+    expression.staticElement = node.staticElement;
     return expression;
   }
 
@@ -186,6 +193,794 @@
 }
 
 /**
+ * Helper class encapsulating the methods for evaluating constants and
+ * constant instance creation expressions.
+ */
+class ConstantEvaluationEngine {
+  /**
+   * Parameter to "fromEnvironment" methods that denotes the default value.
+   */
+  static String _DEFAULT_VALUE_PARAM = "defaultValue";
+
+  /**
+   * Source of RegExp matching any public identifier.
+   * From sdk/lib/internal/symbol.dart.
+   */
+  static String _PUBLIC_IDENTIFIER_RE =
+      "(?!${ConstantValueComputer._RESERVED_WORD_RE}\\b(?!\\\$))[a-zA-Z\$][\\w\$]*";
+
+  /**
+   * RegExp that validates a non-empty non-private symbol.
+   * From sdk/lib/internal/symbol.dart.
+   */
+  static RegExp _PUBLIC_SYMBOL_PATTERN = new RegExp(
+      "^(?:${ConstantValueComputer._OPERATOR_RE}\$|$_PUBLIC_IDENTIFIER_RE(?:=?\$|[.](?!\$)))+?\$");
+
+  /**
+   * The type provider used to access the known types.
+   */
+  final TypeProvider typeProvider;
+
+  /**
+   * The set of variables declared on the command line using '-D'.
+   */
+  final DeclaredVariables _declaredVariables;
+
+  /**
+   * Validator used to verify correct dependency analysis when running unit
+   * tests.
+   */
+  final ConstantEvaluationValidator validator;
+
+  /**
+   * Initialize a newly created [ConstantEvaluationEngine].  The [typeProvider]
+   * is used to access known types.  [_declaredVariables] is the set of
+   * variables declared on the command line using '-D'.  The [validator], if
+   * given, is used to verify correct dependency analysis when running unit
+   * tests.
+   */
+  ConstantEvaluationEngine(this.typeProvider, this._declaredVariables,
+      {ConstantEvaluationValidator validator})
+      : validator = validator != null
+          ? validator
+          : new ConstantEvaluationValidator_ForProduction();
+
+  /**
+   * Check that the arguments to a call to fromEnvironment() are correct. The
+   * [arguments] are the AST nodes of the arguments. The [argumentValues] are
+   * the values of the unnamed arguments. The [namedArgumentValues] are the
+   * values of the named arguments. The [expectedDefaultValueType] is the
+   * allowed type of the "defaultValue" parameter (if present). Note:
+   * "defaultValue" is always allowed to be null. Return `true` if the arguments
+   * are correct, `false` if there is an error.
+   */
+  bool checkFromEnvironmentArguments(NodeList<Expression> arguments,
+      List<DartObjectImpl> argumentValues,
+      HashMap<String, DartObjectImpl> namedArgumentValues,
+      InterfaceType expectedDefaultValueType) {
+    int argumentCount = arguments.length;
+    if (argumentCount < 1 || argumentCount > 2) {
+      return false;
+    }
+    if (arguments[0] is NamedExpression) {
+      return false;
+    }
+    if (!identical(argumentValues[0].type, typeProvider.stringType)) {
+      return false;
+    }
+    if (argumentCount == 2) {
+      if (arguments[1] is! NamedExpression) {
+        return false;
+      }
+      if (!((arguments[1] as NamedExpression).name.label.name ==
+          _DEFAULT_VALUE_PARAM)) {
+        return false;
+      }
+      ParameterizedType defaultValueType =
+          namedArgumentValues[_DEFAULT_VALUE_PARAM].type;
+      if (!(identical(defaultValueType, expectedDefaultValueType) ||
+          identical(defaultValueType, typeProvider.nullType))) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Check that the arguments to a call to Symbol() are correct. The [arguments]
+   * are the AST nodes of the arguments. The [argumentValues] are the values of
+   * the unnamed arguments. The [namedArgumentValues] are the values of the
+   * named arguments. Return `true` if the arguments are correct, `false` if
+   * there is an error.
+   */
+  bool checkSymbolArguments(NodeList<Expression> arguments,
+      List<DartObjectImpl> argumentValues,
+      HashMap<String, DartObjectImpl> namedArgumentValues) {
+    if (arguments.length != 1) {
+      return false;
+    }
+    if (arguments[0] is NamedExpression) {
+      return false;
+    }
+    if (!identical(argumentValues[0].type, typeProvider.stringType)) {
+      return false;
+    }
+    String name = argumentValues[0].stringValue;
+    return isValidPublicSymbol(name);
+  }
+
+  /**
+   * Compute the constant value associated with the given [constant].
+   */
+  void computeConstantValue(ConstantEvaluationTarget constant) {
+    validator.beforeComputeValue(constant);
+    if (constant is ParameterElement) {
+      if (constant.initializer != null) {
+        Expression defaultValue =
+            (constant as PotentiallyConstVariableElement).constantInitializer;
+        if (defaultValue != null) {
+          RecordingErrorListener errorListener = new RecordingErrorListener();
+          ErrorReporter errorReporter =
+              new ErrorReporter(errorListener, constant.source);
+          DartObjectImpl dartObject =
+              defaultValue.accept(new ConstantVisitor(this, errorReporter));
+          (constant as ParameterElementImpl).evaluationResult =
+              new EvaluationResultImpl(dartObject, errorListener.errors);
+        }
+      }
+    } else if (constant is VariableElement) {
+      RecordingErrorListener errorListener = new RecordingErrorListener();
+      ErrorReporter errorReporter =
+          new ErrorReporter(errorListener, constant.source);
+      DartObjectImpl dartObject =
+          (constant as PotentiallyConstVariableElement).constantInitializer
+              .accept(new ConstantVisitor(this, errorReporter));
+      // Only check the type for truly const declarations (don't check final
+      // fields with initializers, since their types may be generic.  The type
+      // of the final field will be checked later, when the constructor is
+      // invoked).
+      if (dartObject != null && constant.isConst) {
+        if (!runtimeTypeMatch(dartObject, constant.type)) {
+          errorReporter.reportErrorForElement(
+              CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH, constant,
+              [dartObject.type, constant.type]);
+        }
+      }
+      (constant as VariableElementImpl).evaluationResult =
+          new EvaluationResultImpl(dartObject, errorListener.errors);
+    } else if (constant is ConstructorElement) {
+      // No evaluation needs to be done; constructor declarations are only in
+      // the dependency graph to ensure that any constants referred to in
+      // initializer lists and parameter defaults are evaluated before
+      // invocations of the constructor.  However we do need to annotate the
+      // element as being free of constant evaluation cycles so that later code
+      // will know that it is safe to evaluate.
+      (constant as ConstructorElementImpl).isCycleFree = true;
+    } else if (constant is ConstantEvaluationTarget_Annotation) {
+      Annotation constNode = constant.annotation;
+      ElementAnnotationImpl elementAnnotation = constNode.elementAnnotation;
+      // elementAnnotation is null if the annotation couldn't be resolved, in
+      // which case we skip it.
+      if (elementAnnotation != null) {
+        Element element = elementAnnotation.element;
+        if (element is PropertyAccessorElement &&
+            element.variable is VariableElementImpl) {
+          // The annotation is a reference to a compile-time constant variable.
+          // Just copy the evaluation result.
+          VariableElementImpl variableElement =
+              element.variable as VariableElementImpl;
+          elementAnnotation.evaluationResult = variableElement.evaluationResult;
+        } else if (element is ConstructorElementImpl &&
+            constNode.arguments != null) {
+          RecordingErrorListener errorListener = new RecordingErrorListener();
+          CompilationUnit sourceCompilationUnit =
+              constNode.getAncestor((node) => node is CompilationUnit);
+          ErrorReporter errorReporter = new ErrorReporter(
+              errorListener, sourceCompilationUnit.element.source);
+          ConstantVisitor constantVisitor =
+              new ConstantVisitor(this, errorReporter);
+          DartObjectImpl result = evaluateConstructorCall(constNode,
+              constNode.arguments.arguments, element, constantVisitor,
+              errorReporter);
+          elementAnnotation.evaluationResult =
+              new EvaluationResultImpl(result, errorListener.errors);
+        } else {
+          // This may happen for invalid code (e.g. failing to pass arguments
+          // to an annotation which references a const constructor).  The error
+          // is detected elsewhere, so just silently ignore it here.
+          elementAnnotation.evaluationResult = new EvaluationResultImpl(null);
+        }
+      }
+    } else {
+      // Should not happen.
+      assert(false);
+      AnalysisEngine.instance.logger.logError(
+          "Constant value computer trying to compute the value of a node of type ${constant.runtimeType}");
+      return;
+    }
+  }
+
+  /**
+   * Determine which constant elements need to have their values computed
+   * prior to computing the value of [constant], and report them using
+   * [callback].
+   */
+  void computeDependencies(
+      ConstantEvaluationTarget constant, ReferenceFinderCallback callback) {
+    ReferenceFinder referenceFinder = new ReferenceFinder(callback);
+    if (constant is ParameterElement) {
+      if (constant.initializer != null) {
+        Expression defaultValue =
+            (constant as ConstVariableElement).constantInitializer;
+        if (defaultValue != null) {
+          defaultValue.accept(referenceFinder);
+        }
+      }
+    } else if (constant is PotentiallyConstVariableElement) {
+      constant.constantInitializer.accept(referenceFinder);
+    } else if (constant is ConstructorElementImpl) {
+      constant.isCycleFree = false;
+      ConstructorElement redirectedConstructor =
+          getConstRedirectedConstructor(constant);
+      if (redirectedConstructor != null) {
+        ConstructorElement redirectedConstructorBase =
+            ConstantEvaluationEngine._getConstructorBase(redirectedConstructor);
+        callback(redirectedConstructorBase);
+        return;
+      }
+      bool superInvocationFound = false;
+      List<ConstructorInitializer> initializers = constant.constantInitializers;
+      for (ConstructorInitializer initializer in initializers) {
+        if (initializer is SuperConstructorInvocation) {
+          superInvocationFound = true;
+        }
+        initializer.accept(referenceFinder);
+      }
+      if (!superInvocationFound) {
+        // No explicit superconstructor invocation found, so we need to
+        // manually insert a reference to the implicit superconstructor.
+        InterfaceType superclass =
+            (constant.returnType as InterfaceType).superclass;
+        if (superclass != null && !superclass.isObject) {
+          ConstructorElement unnamedConstructor = ConstantEvaluationEngine
+              ._getConstructorBase(superclass.element.unnamedConstructor);
+          if (unnamedConstructor != null) {
+            callback(unnamedConstructor);
+          }
+        }
+      }
+      for (FieldElement field in constant.enclosingElement.fields) {
+        // Note: non-static const isn't allowed but we handle it anyway so that
+        // we won't be confused by incorrect code.
+        if ((field.isFinal || field.isConst) &&
+            !field.isStatic &&
+            field.initializer != null) {
+          callback(field);
+        }
+      }
+      for (ParameterElement parameterElement in constant.parameters) {
+        callback(parameterElement);
+      }
+    } else if (constant is ConstantEvaluationTarget_Annotation) {
+      Annotation constNode = constant.annotation;
+      ElementAnnotationImpl elementAnnotation = constNode.elementAnnotation;
+      // elementAnnotation is null if the annotation couldn't be resolved, in
+      // which case we skip it.
+      if (elementAnnotation != null) {
+        Element element = elementAnnotation.element;
+        if (element is PropertyAccessorElement &&
+            element.variable is VariableElementImpl) {
+          // The annotation is a reference to a compile-time constant variable,
+          // so it depends on the variable.
+          callback(element.variable);
+        } else if (element is ConstructorElementImpl && element.isConst) {
+          // The annotation is a constructor invocation, so it depends on the
+          // constructor.
+          // TODO(paulberry): make sure the right thing happens if the
+          // constructor is non-const.
+          callback(element);
+        } else {
+          // This could happen in the event of invalid code.  The error will be
+          // reported at constant evaluation time.
+        }
+      }
+      if (constNode.arguments != null) {
+        constNode.arguments.accept(referenceFinder);
+      }
+    } else {
+      // Should not happen.
+      assert(false);
+      AnalysisEngine.instance.logger.logError(
+          "Constant value computer trying to compute the value of a node of type ${constant.runtimeType}");
+    }
+  }
+
+  /**
+   * Evaluate a call to fromEnvironment() on the bool, int, or String class. The
+   * [environmentValue] is the value fetched from the environment. The
+   * [builtInDefaultValue] is the value that should be used as the default if no
+   * "defaultValue" argument appears in [namedArgumentValues]. The
+   * [namedArgumentValues] are the values of the named parameters passed to
+   * fromEnvironment(). Return a [DartObjectImpl] object corresponding to the
+   * evaluated result.
+   */
+  DartObjectImpl computeValueFromEnvironment(DartObject environmentValue,
+      DartObjectImpl builtInDefaultValue,
+      HashMap<String, DartObjectImpl> namedArgumentValues) {
+    DartObjectImpl value = environmentValue as DartObjectImpl;
+    if (value.isUnknown || value.isNull) {
+      // The name either doesn't exist in the environment or we couldn't parse
+      // the corresponding value.
+      // If the code supplied an explicit default, use it.
+      if (namedArgumentValues.containsKey(_DEFAULT_VALUE_PARAM)) {
+        value = namedArgumentValues[_DEFAULT_VALUE_PARAM];
+      } else if (value.isNull) {
+        // The code didn't supply an explicit default.
+        // The name exists in the environment but we couldn't parse the
+        // corresponding value.
+        // So use the built-in default value, because this is what the VM does.
+        value = builtInDefaultValue;
+      } else {
+        // The code didn't supply an explicit default.
+        // The name doesn't exist in the environment.
+        // The VM would use the built-in default value, but we don't want to do
+        // that for analysis because it's likely to lead to cascading errors.
+        // So just leave [value] in the unknown state.
+      }
+    }
+    return value;
+  }
+
+  DartObjectImpl evaluateConstructorCall(AstNode node,
+      NodeList<Expression> arguments, ConstructorElement constructor,
+      ConstantVisitor constantVisitor, ErrorReporter errorReporter) {
+    if (!_getConstructorBase(constructor).isCycleFree) {
+      // It's not safe to evaluate this constructor, so bail out.
+      // TODO(paulberry): ensure that a reasonable error message is produced
+      // in this case, as well as other cases involving constant expression
+      // circularities (e.g. "compile-time constant expression depends on
+      // itself")
+      return new DartObjectImpl.validWithUnknownValue(constructor.returnType);
+    }
+    int argumentCount = arguments.length;
+    List<DartObjectImpl> argumentValues =
+        new List<DartObjectImpl>(argumentCount);
+    List<Expression> argumentNodes = new List<Expression>(argumentCount);
+    HashMap<String, DartObjectImpl> namedArgumentValues =
+        new HashMap<String, DartObjectImpl>();
+    HashMap<String, NamedExpression> namedArgumentNodes =
+        new HashMap<String, NamedExpression>();
+    for (int i = 0; i < argumentCount; i++) {
+      Expression argument = arguments[i];
+      if (argument is NamedExpression) {
+        String name = argument.name.label.name;
+        namedArgumentValues[name] =
+            constantVisitor._valueOf(argument.expression);
+        namedArgumentNodes[name] = argument;
+        argumentValues[i] = typeProvider.nullObject;
+      } else {
+        argumentValues[i] = constantVisitor._valueOf(argument);
+        argumentNodes[i] = argument;
+      }
+    }
+    constructor = followConstantRedirectionChain(constructor);
+    InterfaceType definingClass = constructor.returnType as InterfaceType;
+    if (constructor.isFactory) {
+      // We couldn't find a non-factory constructor.
+      // See if it's because we reached an external const factory constructor
+      // that we can emulate.
+      if (constructor.name == "fromEnvironment") {
+        if (!checkFromEnvironmentArguments(
+            arguments, argumentValues, namedArgumentValues, definingClass)) {
+          errorReporter.reportErrorForNode(
+              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, node);
+          return null;
+        }
+        String variableName =
+            argumentCount < 1 ? null : argumentValues[0].stringValue;
+        if (identical(definingClass, typeProvider.boolType)) {
+          DartObject valueFromEnvironment;
+          valueFromEnvironment =
+              _declaredVariables.getBool(typeProvider, variableName);
+          return computeValueFromEnvironment(valueFromEnvironment,
+              new DartObjectImpl(typeProvider.boolType, BoolState.FALSE_STATE),
+              namedArgumentValues);
+        } else if (identical(definingClass, typeProvider.intType)) {
+          DartObject valueFromEnvironment;
+          valueFromEnvironment =
+              _declaredVariables.getInt(typeProvider, variableName);
+          return computeValueFromEnvironment(valueFromEnvironment,
+              new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
+              namedArgumentValues);
+        } else if (identical(definingClass, typeProvider.stringType)) {
+          DartObject valueFromEnvironment;
+          valueFromEnvironment =
+              _declaredVariables.getString(typeProvider, variableName);
+          return computeValueFromEnvironment(valueFromEnvironment,
+              new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
+              namedArgumentValues);
+        }
+      } else if (constructor.name == "" &&
+          identical(definingClass, typeProvider.symbolType) &&
+          argumentCount == 1) {
+        if (!checkSymbolArguments(
+            arguments, argumentValues, namedArgumentValues)) {
+          errorReporter.reportErrorForNode(
+              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, node);
+          return null;
+        }
+        String argumentValue = argumentValues[0].stringValue;
+        return new DartObjectImpl(
+            definingClass, new SymbolState(argumentValue));
+      }
+      // Either it's an external const factory constructor that we can't
+      // emulate, or an error occurred (a cycle, or a const constructor trying
+      // to delegate to a non-const constructor).
+      // In the former case, the best we can do is consider it an unknown value.
+      // In the latter case, the error has already been reported, so considering
+      // it an unknown value will suppress further errors.
+      return new DartObjectImpl.validWithUnknownValue(definingClass);
+    }
+    ConstructorElementImpl constructorBase = _getConstructorBase(constructor);
+    validator.beforeGetConstantInitializers(constructorBase);
+    List<ConstructorInitializer> initializers =
+        constructorBase.constantInitializers;
+    if (initializers == null) {
+      // This can happen in some cases where there are compile errors in the
+      // code being analyzed (for example if the code is trying to create a
+      // const instance using a non-const constructor, or the node we're
+      // visiting is involved in a cycle).  The error has already been reported,
+      // so consider it an unknown value to suppress further errors.
+      return new DartObjectImpl.validWithUnknownValue(definingClass);
+    }
+    HashMap<String, DartObjectImpl> fieldMap =
+        new HashMap<String, DartObjectImpl>();
+    // Start with final fields that are initialized at their declaration site.
+    for (FieldElement field in constructor.enclosingElement.fields) {
+      if ((field.isFinal || field.isConst) &&
+          !field.isStatic &&
+          field is ConstFieldElementImpl) {
+        validator.beforeGetFieldEvaluationResult(field);
+        EvaluationResultImpl evaluationResult = field.evaluationResult;
+        DartType fieldType =
+            FieldMember.from(field, constructor.returnType).type;
+        DartObjectImpl fieldValue = evaluationResult.value;
+        if (fieldValue != null && !runtimeTypeMatch(fieldValue, fieldType)) {
+          errorReporter.reportErrorForNode(
+              CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
+              node, [fieldValue.type, field.name, fieldType]);
+        }
+        fieldMap[field.name] = evaluationResult.value;
+      }
+    }
+    // Now evaluate the constructor declaration.
+    HashMap<String, DartObjectImpl> parameterMap =
+        new HashMap<String, DartObjectImpl>();
+    List<ParameterElement> parameters = constructor.parameters;
+    int parameterCount = parameters.length;
+    for (int i = 0; i < parameterCount; i++) {
+      ParameterElement parameter = parameters[i];
+      ParameterElement baseParameter = parameter;
+      while (baseParameter is ParameterMember) {
+        baseParameter = (baseParameter as ParameterMember).baseElement;
+      }
+      DartObjectImpl argumentValue = null;
+      AstNode errorTarget = null;
+      if (baseParameter.parameterKind == ParameterKind.NAMED) {
+        argumentValue = namedArgumentValues[baseParameter.name];
+        errorTarget = namedArgumentNodes[baseParameter.name];
+      } else if (i < argumentCount) {
+        argumentValue = argumentValues[i];
+        errorTarget = argumentNodes[i];
+      }
+      if (errorTarget == null) {
+        // No argument node that we can direct error messages to, because we
+        // are handling an optional parameter that wasn't specified.  So just
+        // direct error messages to the constructor call.
+        errorTarget = node;
+      }
+      if (argumentValue == null && baseParameter is ParameterElementImpl) {
+        // The parameter is an optional positional parameter for which no value
+        // was provided, so use the default value.
+        validator.beforeGetParameterDefault(baseParameter);
+        EvaluationResultImpl evaluationResult = baseParameter.evaluationResult;
+        if (evaluationResult == null) {
+          // No default was provided, so the default value is null.
+          argumentValue = typeProvider.nullObject;
+        } else if (evaluationResult.value != null) {
+          argumentValue = evaluationResult.value;
+        }
+      }
+      if (argumentValue != null) {
+        if (!runtimeTypeMatch(argumentValue, parameter.type)) {
+          errorReporter.reportErrorForNode(
+              CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+              errorTarget, [argumentValue.type, parameter.type]);
+        }
+        if (baseParameter.isInitializingFormal) {
+          FieldElement field = (parameter as FieldFormalParameterElement).field;
+          if (field != null) {
+            DartType fieldType = field.type;
+            if (fieldType != parameter.type) {
+              // We've already checked that the argument can be assigned to the
+              // parameter; we also need to check that it can be assigned to
+              // the field.
+              if (!runtimeTypeMatch(argumentValue, fieldType)) {
+                errorReporter.reportErrorForNode(
+                    CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
+                    errorTarget, [argumentValue.type, fieldType]);
+              }
+            }
+            String fieldName = field.name;
+            fieldMap[fieldName] = argumentValue;
+          }
+        } else {
+          String name = baseParameter.name;
+          parameterMap[name] = argumentValue;
+        }
+      }
+    }
+    ConstantVisitor initializerVisitor = new ConstantVisitor(
+        this, errorReporter, lexicalEnvironment: parameterMap);
+    String superName = null;
+    NodeList<Expression> superArguments = null;
+    for (ConstructorInitializer initializer in initializers) {
+      if (initializer is ConstructorFieldInitializer) {
+        ConstructorFieldInitializer constructorFieldInitializer = initializer;
+        Expression initializerExpression =
+            constructorFieldInitializer.expression;
+        DartObjectImpl evaluationResult =
+            initializerExpression.accept(initializerVisitor);
+        if (evaluationResult != null) {
+          String fieldName = constructorFieldInitializer.fieldName.name;
+          fieldMap[fieldName] = evaluationResult;
+          PropertyAccessorElement getter = definingClass.getGetter(fieldName);
+          if (getter != null) {
+            PropertyInducingElement field = getter.variable;
+            if (!runtimeTypeMatch(evaluationResult, field.type)) {
+              errorReporter.reportErrorForNode(
+                  CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
+                  node, [evaluationResult.type, fieldName, field.type]);
+            }
+          }
+        }
+      } else if (initializer is SuperConstructorInvocation) {
+        SuperConstructorInvocation superConstructorInvocation = initializer;
+        SimpleIdentifier name = superConstructorInvocation.constructorName;
+        if (name != null) {
+          superName = name.name;
+        }
+        superArguments = superConstructorInvocation.argumentList.arguments;
+      } else if (initializer is RedirectingConstructorInvocation) {
+        // This is a redirecting constructor, so just evaluate the constructor
+        // it redirects to.
+        ConstructorElement constructor = initializer.staticElement;
+        if (constructor != null && constructor.isConst) {
+          return evaluateConstructorCall(node,
+              initializer.argumentList.arguments, constructor,
+              initializerVisitor, errorReporter);
+        }
+      }
+    }
+    // Evaluate explicit or implicit call to super().
+    InterfaceType superclass = definingClass.superclass;
+    if (superclass != null && !superclass.isObject) {
+      ConstructorElement superConstructor =
+          superclass.lookUpConstructor(superName, constructor.library);
+      if (superConstructor != null) {
+        if (superArguments == null) {
+          superArguments = new NodeList<Expression>(null);
+        }
+        evaluateSuperConstructorCall(node, fieldMap, superConstructor,
+            superArguments, initializerVisitor, errorReporter);
+      }
+    }
+    return new DartObjectImpl(definingClass, new GenericState(fieldMap));
+  }
+
+  void evaluateSuperConstructorCall(AstNode node,
+      HashMap<String, DartObjectImpl> fieldMap,
+      ConstructorElement superConstructor, NodeList<Expression> superArguments,
+      ConstantVisitor initializerVisitor, ErrorReporter errorReporter) {
+    if (superConstructor != null && superConstructor.isConst) {
+      DartObjectImpl evaluationResult = evaluateConstructorCall(node,
+          superArguments, superConstructor, initializerVisitor, errorReporter);
+      if (evaluationResult != null) {
+        fieldMap[GenericState.SUPERCLASS_FIELD] = evaluationResult;
+      }
+    }
+  }
+
+  /**
+   * Attempt to follow the chain of factory redirections until a constructor is
+   * reached which is not a const factory constructor. Return the constant
+   * constructor which terminates the chain of factory redirections, if the
+   * chain terminates. If there is a problem (e.g. a redirection can't be found,
+   * or a cycle is encountered), the chain will be followed as far as possible
+   * and then a const factory constructor will be returned.
+   */
+  ConstructorElement followConstantRedirectionChain(
+      ConstructorElement constructor) {
+    HashSet<ConstructorElement> constructorsVisited =
+        new HashSet<ConstructorElement>();
+    while (true) {
+      ConstructorElement redirectedConstructor =
+          getConstRedirectedConstructor(constructor);
+      if (redirectedConstructor == null) {
+        break;
+      } else {
+        ConstructorElement constructorBase = _getConstructorBase(constructor);
+        constructorsVisited.add(constructorBase);
+        ConstructorElement redirectedConstructorBase =
+            _getConstructorBase(redirectedConstructor);
+        if (constructorsVisited.contains(redirectedConstructorBase)) {
+          // Cycle in redirecting factory constructors--this is not allowed
+          // and is checked elsewhere--see
+          // [ErrorVerifier.checkForRecursiveFactoryRedirect()]).
+          break;
+        }
+      }
+      constructor = redirectedConstructor;
+    }
+    return constructor;
+  }
+
+  /**
+   * If [constructor] redirects to another const constructor, return the
+   * const constructor it redirects to.  Otherwise return `null`.
+   */
+  ConstructorElement getConstRedirectedConstructor(
+      ConstructorElement constructor) {
+    if (!constructor.isFactory) {
+      return null;
+    }
+    if (identical(constructor.enclosingElement.type, typeProvider.symbolType)) {
+      // The dart:core.Symbol has a const factory constructor that redirects
+      // to dart:_internal.Symbol.  That in turn redirects to an external
+      // const constructor, which we won't be able to evaluate.
+      // So stop following the chain of redirections at dart:core.Symbol, and
+      // let [evaluateInstanceCreationExpression] handle it specially.
+      return null;
+    }
+    ConstructorElement redirectedConstructor =
+        constructor.redirectedConstructor;
+    if (redirectedConstructor == null) {
+      // This can happen if constructor is an external factory constructor.
+      return null;
+    }
+    if (!redirectedConstructor.isConst) {
+      // Delegating to a non-const constructor--this is not allowed (and
+      // is checked elsewhere--see
+      // [ErrorVerifier.checkForRedirectToNonConstConstructor()]).
+      return null;
+    }
+    return redirectedConstructor;
+  }
+
+  /**
+   * Check if the object [obj] matches the type [type] according to runtime type
+   * checking rules.
+   */
+  bool runtimeTypeMatch(DartObjectImpl obj, DartType type) {
+    if (obj.isNull) {
+      return true;
+    }
+    if (type.isUndefined) {
+      return false;
+    }
+    return obj.type.isSubtypeOf(type);
+  }
+
+  /**
+   * Determine whether the given string is a valid name for a public symbol
+   * (i.e. whether it is allowed for a call to the Symbol constructor).
+   */
+  static bool isValidPublicSymbol(String name) => name.isEmpty ||
+      name == "void" ||
+      new JavaPatternMatcher(_PUBLIC_SYMBOL_PATTERN, name).matches();
+
+  static ConstructorElementImpl _getConstructorBase(
+      ConstructorElement constructor) {
+    while (constructor is ConstructorMember) {
+      constructor = (constructor as ConstructorMember).baseElement;
+    }
+    return constructor;
+  }
+}
+
+/**
+ * Wrapper around an [Annotation] which can be used as a
+ * [ConstantEvaluationTarget].
+ */
+class ConstantEvaluationTarget_Annotation implements ConstantEvaluationTarget {
+  final AnalysisContext context;
+  final Source source;
+  final Source librarySource;
+  final Annotation annotation;
+
+  ConstantEvaluationTarget_Annotation(
+      this.context, this.source, this.librarySource, this.annotation);
+
+  @override
+  int get hashCode => JenkinsSmiHash.hash4(context.hashCode, source.hashCode,
+      librarySource.hashCode, annotation.hashCode);
+
+  @override
+  bool operator ==(other) {
+    if (other is ConstantEvaluationTarget_Annotation) {
+      return this.context == other.context &&
+          this.source == other.source &&
+          this.librarySource == other.librarySource &&
+          this.annotation == other.annotation;
+    } else {
+      return false;
+    }
+  }
+}
+
+/**
+ * Interface used by unit tests to verify correct dependency analysis during
+ * constant evaluation.
+ */
+abstract class ConstantEvaluationValidator {
+  /**
+   * This method is called just before computing the constant value associated
+   * with [constant]. Unit tests will override this method to introduce
+   * additional error checking.
+   */
+  void beforeComputeValue(ConstantEvaluationTarget constant);
+
+  /**
+   * This method is called just before getting the constant initializers
+   * associated with the [constructor]. Unit tests will override this method to
+   * introduce additional error checking.
+   */
+  void beforeGetConstantInitializers(ConstructorElement constructor);
+
+  /**
+   * This method is called just before retrieving an evaluation result from an
+   * element. Unit tests will override it to introduce additional error
+   * checking.
+   */
+  void beforeGetEvaluationResult(ConstantEvaluationTarget constant);
+
+  /**
+   * This method is called just before getting the constant value of a field
+   * with an initializer.  Unit tests will override this method to introduce
+   * additional error checking.
+   */
+  void beforeGetFieldEvaluationResult(FieldElementImpl field);
+
+  /**
+   * This method is called just before getting a parameter's default value. Unit
+   * tests will override this method to introduce additional error checking.
+   */
+  void beforeGetParameterDefault(ParameterElement parameter);
+}
+
+/**
+ * Implementation of [ConstantEvaluationValidator] used in production; does no
+ * validation.
+ */
+class ConstantEvaluationValidator_ForProduction
+    implements ConstantEvaluationValidator {
+  @override
+  void beforeComputeValue(ConstantEvaluationTarget constant) {}
+
+  @override
+  void beforeGetConstantInitializers(ConstructorElement constructor) {}
+
+  @override
+  void beforeGetEvaluationResult(ConstantEvaluationTarget constant) {}
+
+  @override
+  void beforeGetFieldEvaluationResult(FieldElementImpl field) {}
+
+  @override
+  void beforeGetParameterDefault(ParameterElement parameter) {}
+}
+
+/**
  * Instances of the class `ConstantEvaluator` evaluate constant expressions to
  * produce their compile-time value. According to the Dart Language
  * Specification:
@@ -262,8 +1057,9 @@
   EvaluationResult evaluate(Expression expression) {
     RecordingErrorListener errorListener = new RecordingErrorListener();
     ErrorReporter errorReporter = new ErrorReporter(errorListener, _source);
-    DartObjectImpl result = expression
-        .accept(new ConstantVisitor.con1(_typeProvider, errorReporter));
+    DartObjectImpl result = expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(_typeProvider, new DeclaredVariables()),
+        errorReporter));
     if (result != null) {
       return EvaluationResult.forValue(result);
     }
@@ -278,40 +1074,28 @@
  * those compilation units.
  */
 class ConstantFinder extends RecursiveAstVisitor<Object> {
-  /**
-   * A table mapping constant variable elements to the declarations of those
-   * variables.
-   */
-  final HashMap<PotentiallyConstVariableElement, VariableDeclaration> variableMap =
-      new HashMap<PotentiallyConstVariableElement, VariableDeclaration>();
+  final AnalysisContext context;
+  final Source source;
+  final Source librarySource;
 
   /**
-   * A table mapping constant constructors to the declarations of those
-   * constructors.
+   * The elements and AST nodes whose constant values need to be computed.
    */
-  final HashMap<ConstructorElement, ConstructorDeclaration> constructorMap =
-      new HashMap<ConstructorElement, ConstructorDeclaration>();
-
-  /**
-   * A collection of constant constructor invocations.
-   */
-  final List<InstanceCreationExpression> constructorInvocations =
-      new List<InstanceCreationExpression>();
-
-  /**
-   * A collection of annotations.
-   */
-  final List<Annotation> annotations = <Annotation>[];
+  HashSet<ConstantEvaluationTarget> constantsToCompute =
+      new HashSet<ConstantEvaluationTarget>();
 
   /**
    * True if instance variables marked as "final" should be treated as "const".
    */
   bool treatFinalInstanceVarAsConst = false;
 
+  ConstantFinder(this.context, this.source, this.librarySource);
+
   @override
   Object visitAnnotation(Annotation node) {
     super.visitAnnotation(node);
-    annotations.add(node);
+    constantsToCompute.add(new ConstantEvaluationTarget_Annotation(
+        context, source, librarySource, node));
     return null;
   }
 
@@ -337,22 +1121,14 @@
     if (node.constKeyword != null) {
       ConstructorElement element = node.element;
       if (element != null) {
-        constructorMap[element] = node;
+        constantsToCompute.add(element);
+        constantsToCompute.addAll(element.parameters);
       }
     }
     return null;
   }
 
   @override
-  Object visitInstanceCreationExpression(InstanceCreationExpression node) {
-    super.visitInstanceCreationExpression(node);
-    if (node.isConst) {
-      constructorInvocations.add(node);
-    }
-    return null;
-  }
-
-  @override
   Object visitVariableDeclaration(VariableDeclaration node) {
     super.visitVariableDeclaration(node);
     Expression initializer = node.initializer;
@@ -364,7 +1140,7 @@
                 node.isFinal &&
                 !element.isStatic)) {
       if (node.element != null) {
-        variableMap[node.element as PotentiallyConstVariableElement] = node;
+        constantsToCompute.add(node.element);
       }
     }
     return null;
@@ -381,11 +1157,6 @@
  */
 class ConstantValueComputer {
   /**
-   * Parameter to "fromEnvironment" methods that denotes the default value.
-   */
-  static String _DEFAULT_VALUE_PARAM = "defaultValue";
-
-  /**
    * Source of RegExp matching declarable operator names.
    * From sdk/lib/internal/symbol.dart.
    */
@@ -393,13 +1164,6 @@
       "(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)";
 
   /**
-   * Source of RegExp matching any public identifier.
-   * From sdk/lib/internal/symbol.dart.
-   */
-  static String _PUBLIC_IDENTIFIER_RE =
-      "(?!${ConstantValueComputer._RESERVED_WORD_RE}\\b(?!\\\$))[a-zA-Z\$][\\w\$]*";
-
-  /**
    * Source of RegExp matching Dart reserved words.
    * From sdk/lib/internal/symbol.dart.
    */
@@ -407,733 +1171,91 @@
       "(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|v(?:ar|oid)|w(?:hile|ith))";
 
   /**
-   * RegExp that validates a non-empty non-private symbol.
-   * From sdk/lib/internal/symbol.dart.
-   */
-  static RegExp _PUBLIC_SYMBOL_PATTERN = new RegExp(
-      "^(?:${ConstantValueComputer._OPERATOR_RE}\$|$_PUBLIC_IDENTIFIER_RE(?:=?\$|[.](?!\$)))+?\$");
-
-  /**
-   * The type provider used to access the known types.
-   */
-  TypeProvider typeProvider;
-
-  /**
-   * The object used to find constant variables and constant constructor
-   * invocations in the compilation units that were added.
-   */
-  ConstantFinder _constantFinder = new ConstantFinder();
-
-  /**
    * A graph in which the nodes are the constants, and the edges are from each
    * constant to the other constants that are referenced by it.
    */
-  DirectedGraph<AstNode> referenceGraph = new DirectedGraph<AstNode>();
+  DirectedGraph<ConstantEvaluationTarget> referenceGraph =
+      new DirectedGraph<ConstantEvaluationTarget>();
 
   /**
-   * A table mapping constant variables to the declarations of those variables.
+   * The elements whose constant values need to be computed.  Any elements
+   * which appear in [referenceGraph] but not in this set either belong to a
+   * different library cycle (and hence don't need to be recomputed) or were
+   * computed during a previous stage of resolution stage (e.g. constants
+   * associated with enums).
    */
-  HashMap<PotentiallyConstVariableElement, VariableDeclaration> _variableDeclarationMap;
+  HashSet<ConstantEvaluationTarget> _constantsToCompute =
+      new HashSet<ConstantEvaluationTarget>();
 
   /**
-   * A table mapping constant constructors to the declarations of those
-   * constructors.
+   * The evaluation engine that does the work of evaluating instance creation
+   * expressions.
    */
-  HashMap<ConstructorElement, ConstructorDeclaration> constructorDeclarationMap;
+  final ConstantEvaluationEngine evaluationEngine;
 
-  /**
-   * A collection of constant constructor invocations.
-   */
-  List<InstanceCreationExpression> _constructorInvocations;
-
-  /**
-   * A collection of annotations.
-   */
-  List<Annotation> _annotations;
-
-  /**
-   * The set of variables declared on the command line using '-D'.
-   */
-  final DeclaredVariables _declaredVariables;
+  final AnalysisContext _context;
 
   /**
    * Initialize a newly created constant value computer. The [typeProvider] is
    * the type provider used to access known types. The [declaredVariables] is
    * the set of variables declared on the command line using '-D'.
    */
-  ConstantValueComputer(TypeProvider typeProvider, this._declaredVariables) {
-    this.typeProvider = typeProvider;
-  }
+  ConstantValueComputer(this._context, TypeProvider typeProvider,
+      DeclaredVariables declaredVariables,
+      [ConstantEvaluationValidator validator])
+      : evaluationEngine = new ConstantEvaluationEngine(
+          typeProvider, declaredVariables, validator: validator);
 
   /**
    * Add the constants in the given compilation [unit] to the list of constants
    * whose value needs to be computed.
    */
-  void add(CompilationUnit unit) {
-    unit.accept(_constantFinder);
+  void add(CompilationUnit unit, Source source, Source librarySource) {
+    ConstantFinder constantFinder =
+        new ConstantFinder(_context, source, librarySource);
+    unit.accept(constantFinder);
+    _constantsToCompute.addAll(constantFinder.constantsToCompute);
   }
 
   /**
-   * This method is called just before computing the constant value associated
-   * with [constNode]. Unit tests will override this method to introduce
-   * additional error checking.
-   */
-  void beforeComputeValue(AstNode constNode) {}
-
-  /**
-   * This method is called just before getting the constant value of a field
-   * with an initializer.  Unit tests will override this method to introduce
-   * additional error checking.
-   */
-  void beforeGetFieldEvaluationResult(FieldElementImpl field) {}
-
-  /**
-   * This method is called just before getting the constant initializers
-   * associated with the [constructor]. Unit tests will override this method to
-   * introduce additional error checking.
-   */
-  void beforeGetConstantInitializers(ConstructorElement constructor) {}
-
-  /**
-   * This method is called just before getting a parameter's default value. Unit
-   * tests will override this method to introduce additional error checking.
-   */
-  void beforeGetParameterDefault(ParameterElement parameter) {}
-
-  /**
    * Compute values for all of the constants in the compilation units that were
    * added.
    */
   void computeValues() {
-    _variableDeclarationMap = _constantFinder.variableMap;
-    constructorDeclarationMap = _constantFinder.constructorMap;
-    _constructorInvocations = _constantFinder.constructorInvocations;
-    _annotations = _constantFinder.annotations;
-    _variableDeclarationMap.values.forEach((VariableDeclaration declaration) {
-      ReferenceFinder referenceFinder = new ReferenceFinder(declaration,
-          referenceGraph, _variableDeclarationMap, constructorDeclarationMap);
-      referenceGraph.addNode(declaration);
-      declaration.initializer.accept(referenceFinder);
-    });
-    constructorDeclarationMap.forEach((ConstructorElementImpl element,
-        ConstructorDeclaration declaration) {
-      element.isCycleFree = false;
-      ConstructorElement redirectedConstructor =
-          _getConstRedirectedConstructor(element);
-      if (redirectedConstructor != null) {
-        ConstructorElement redirectedConstructorBase =
-            _getConstructorBase(redirectedConstructor);
-        ConstructorDeclaration redirectedConstructorDeclaration =
-            findConstructorDeclaration(redirectedConstructorBase);
-        referenceGraph.addEdge(declaration, redirectedConstructorDeclaration);
-        return;
-      }
-      ReferenceFinder referenceFinder = new ReferenceFinder(declaration,
-          referenceGraph, _variableDeclarationMap, constructorDeclarationMap);
-      referenceGraph.addNode(declaration);
-      bool superInvocationFound = false;
-      NodeList<ConstructorInitializer> initializers = declaration.initializers;
-      for (ConstructorInitializer initializer in initializers) {
-        if (initializer is SuperConstructorInvocation) {
-          superInvocationFound = true;
-        }
-        initializer.accept(referenceFinder);
-      }
-      if (!superInvocationFound) {
-        // No explicit superconstructor invocation found, so we need to
-        // manually insert a reference to the implicit superconstructor.
-        InterfaceType superclass =
-            (element.returnType as InterfaceType).superclass;
-        if (superclass != null && !superclass.isObject) {
-          ConstructorElement unnamedConstructor =
-              superclass.element.unnamedConstructor;
-          ConstructorDeclaration superConstructorDeclaration =
-              findConstructorDeclaration(unnamedConstructor);
-          if (superConstructorDeclaration != null) {
-            referenceGraph.addEdge(declaration, superConstructorDeclaration);
-          }
-        }
-      }
-      for (FieldElement field in element.enclosingElement.fields) {
-        // Note: non-static const isn't allowed but we handle it anyway so that
-        // we won't be confused by incorrect code.
-        if ((field.isFinal || field.isConst) && !field.isStatic) {
-          VariableDeclaration fieldDeclaration = _variableDeclarationMap[field];
-          if (fieldDeclaration != null) {
-            referenceGraph.addEdge(declaration, fieldDeclaration);
-          }
-        }
-      }
-      for (FormalParameter parameter in declaration.parameters.parameters) {
-        referenceGraph.addNode(parameter);
-        referenceGraph.addEdge(declaration, parameter);
-        if (parameter is DefaultFormalParameter) {
-          Expression defaultValue = parameter.defaultValue;
-          if (defaultValue != null) {
-            ReferenceFinder parameterReferenceFinder = new ReferenceFinder(
-                parameter, referenceGraph, _variableDeclarationMap,
-                constructorDeclarationMap);
-            defaultValue.accept(parameterReferenceFinder);
-          }
-        }
-      }
-    });
-    for (InstanceCreationExpression expression in _constructorInvocations) {
-      referenceGraph.addNode(expression);
-      ConstructorElement constructor = expression.staticElement;
-      if (constructor == null) {
-        continue;
-      }
-      ConstructorDeclaration declaration =
-          findConstructorDeclaration(constructor);
-      // An instance creation expression depends both on the constructor and
-      // the arguments passed to it.
-      ReferenceFinder referenceFinder = new ReferenceFinder(expression,
-          referenceGraph, _variableDeclarationMap, constructorDeclarationMap);
-      if (declaration != null) {
-        referenceGraph.addEdge(expression, declaration);
-      }
-      expression.argumentList.accept(referenceFinder);
+    for (ConstantEvaluationTarget constant in _constantsToCompute) {
+      referenceGraph.addNode(constant);
+      evaluationEngine.computeDependencies(constant,
+          (ConstantEvaluationTarget dependency) {
+        referenceGraph.addEdge(constant, dependency);
+      });
     }
-    List<List<AstNode>> topologicalSort =
+    List<List<ConstantEvaluationTarget>> topologicalSort =
         referenceGraph.computeTopologicalSort();
-    for (List<AstNode> constantsInCycle in topologicalSort) {
+    for (List<ConstantEvaluationTarget> constantsInCycle in topologicalSort) {
       if (constantsInCycle.length == 1) {
         _computeValueFor(constantsInCycle[0]);
       } else {
-        for (AstNode constant in constantsInCycle) {
+        for (ConstantEvaluationTarget constant in constantsInCycle) {
           _generateCycleError(constantsInCycle, constant);
         }
       }
     }
-    // Since no constant can depend on an annotation, we don't waste time
-    // including them in the topological sort.  We just process all the
-    // annotations after all other constants are finished.
-    for (Annotation annotation in _annotations) {
-      _computeValueFor(annotation);
-    }
   }
 
   /**
-   * Create the ConstantVisitor used to evaluate constants. Unit tests will
-   * override this method to introduce additional error checking.
+   * Compute a value for the given [constant].
    */
-  ConstantVisitor createConstantVisitor(ErrorReporter errorReporter) =>
-      new ConstantVisitor.con1(typeProvider, errorReporter);
-
-  ConstructorDeclaration findConstructorDeclaration(
-          ConstructorElement constructor) =>
-      constructorDeclarationMap[_getConstructorBase(constructor)];
-
-  VariableDeclaration findVariableDeclaration(
-          PotentiallyConstVariableElement variable) =>
-      _variableDeclarationMap[variable];
-
-  /**
-   * Check that the arguments to a call to fromEnvironment() are correct. The
-   * [arguments] are the AST nodes of the arguments. The [argumentValues] are
-   * the values of the unnamed arguments. The [namedArgumentValues] are the
-   * values of the named arguments. The [expectedDefaultValueType] is the
-   * allowed type of the "defaultValue" parameter (if present). Note:
-   * "defaultValue" is always allowed to be null. Return `true` if the arguments
-   * are correct, `false` if there is an error.
-   */
-  bool _checkFromEnvironmentArguments(NodeList<Expression> arguments,
-      List<DartObjectImpl> argumentValues,
-      HashMap<String, DartObjectImpl> namedArgumentValues,
-      InterfaceType expectedDefaultValueType) {
-    int argumentCount = arguments.length;
-    if (argumentCount < 1 || argumentCount > 2) {
-      return false;
-    }
-    if (arguments[0] is NamedExpression) {
-      return false;
-    }
-    if (!identical(argumentValues[0].type, typeProvider.stringType)) {
-      return false;
-    }
-    if (argumentCount == 2) {
-      if (arguments[1] is! NamedExpression) {
-        return false;
-      }
-      if (!((arguments[1] as NamedExpression).name.label.name ==
-          _DEFAULT_VALUE_PARAM)) {
-        return false;
-      }
-      ParameterizedType defaultValueType =
-          namedArgumentValues[_DEFAULT_VALUE_PARAM].type;
-      if (!(identical(defaultValueType, expectedDefaultValueType) ||
-          identical(defaultValueType, typeProvider.nullType))) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Check that the arguments to a call to Symbol() are correct. The [arguments]
-   * are the AST nodes of the arguments. The [argumentValues] are the values of
-   * the unnamed arguments. The [namedArgumentValues] are the values of the
-   * named arguments. Return `true` if the arguments are correct, `false` if
-   * there is an error.
-   */
-  bool _checkSymbolArguments(NodeList<Expression> arguments,
-      List<DartObjectImpl> argumentValues,
-      HashMap<String, DartObjectImpl> namedArgumentValues) {
-    if (arguments.length != 1) {
-      return false;
-    }
-    if (arguments[0] is NamedExpression) {
-      return false;
-    }
-    if (!identical(argumentValues[0].type, typeProvider.stringType)) {
-      return false;
-    }
-    String name = argumentValues[0].stringValue;
-    return isValidPublicSymbol(name);
-  }
-
-  /**
-   * Compute a value for the given [constNode].
-   */
-  void _computeValueFor(AstNode constNode) {
-    beforeComputeValue(constNode);
-    if (constNode is VariableDeclaration) {
-      VariableElement element = constNode.element;
-      RecordingErrorListener errorListener = new RecordingErrorListener();
-      ErrorReporter errorReporter =
-          new ErrorReporter(errorListener, element.source);
-      DartObjectImpl dartObject =
-          (element as PotentiallyConstVariableElement).constantInitializer
-              .accept(createConstantVisitor(errorReporter));
-      if (dartObject != null) {
-        if (!_runtimeTypeMatch(dartObject, element.type)) {
-          errorReporter.reportErrorForElement(
-              CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH, element, [
-            dartObject.type,
-            element.type
-          ]);
-        }
-      }
-      (element as VariableElementImpl).evaluationResult =
-          new EvaluationResultImpl.con2(dartObject, errorListener.errors);
-    } else if (constNode is InstanceCreationExpression) {
-      InstanceCreationExpression expression = constNode;
-      ConstructorElement constructor = expression.staticElement;
-      if (constructor == null) {
-        // Couldn't resolve the constructor so we can't compute a value.
-        // No problem - the error has already been reported.
-        // But we still need to store an evaluation result.
-        expression.constantHandle.evaluationResult =
-            new EvaluationResultImpl.con1(null);
-        return;
-      }
-      RecordingErrorListener errorListener = new RecordingErrorListener();
-      CompilationUnit sourceCompilationUnit =
-          expression.getAncestor((node) => node is CompilationUnit);
-      ErrorReporter errorReporter = new ErrorReporter(
-          errorListener, sourceCompilationUnit.element.source);
-      ConstantVisitor constantVisitor = createConstantVisitor(errorReporter);
-      DartObjectImpl result = _evaluateConstructorCall(constNode,
-          expression.argumentList.arguments, constructor, constantVisitor,
-          errorReporter);
-      expression.constantHandle.evaluationResult =
-          new EvaluationResultImpl.con2(result, errorListener.errors);
-    } else if (constNode is ConstructorDeclaration) {
-      // No evaluation needs to be done; constructor declarations are only in
-      // the dependency graph to ensure that any constants referred to in
-      // initializer lists and parameter defaults are evaluated before
-      // invocations of the constructor.  However we do need to annotate the
-      // element as being free of constant evaluation cycles so that later code
-      // will know that it is safe to evaluate.
-      ConstructorElementImpl constructor = constNode.element;
-      constructor.isCycleFree = true;
-    } else if (constNode is FormalParameter) {
-      if (constNode is DefaultFormalParameter) {
-        DefaultFormalParameter parameter = constNode;
-        ParameterElement element = parameter.element;
-        Expression defaultValue = parameter.defaultValue;
-        if (defaultValue != null) {
-          RecordingErrorListener errorListener = new RecordingErrorListener();
-          ErrorReporter errorReporter =
-              new ErrorReporter(errorListener, element.source);
-          DartObjectImpl dartObject =
-              defaultValue.accept(createConstantVisitor(errorReporter));
-          (element as ParameterElementImpl).evaluationResult =
-              new EvaluationResultImpl.con2(dartObject, errorListener.errors);
-        }
-      }
-    } else if (constNode is Annotation) {
-      ElementAnnotationImpl elementAnnotation = constNode.elementAnnotation;
-      // elementAnnotation is null if the annotation couldn't be resolved, in
-      // which case we skip it.
-      if (elementAnnotation != null) {
-        Element element = elementAnnotation.element;
-        if (element is PropertyAccessorElement &&
-            element.variable is VariableElementImpl) {
-          // The annotation is a reference to a compile-time constant variable.
-          // Just copy the evaluation result.
-          VariableElementImpl variableElement =
-              element.variable as VariableElementImpl;
-          elementAnnotation.evaluationResult = variableElement.evaluationResult;
-        } else if (element is ConstructorElementImpl &&
-            constNode.arguments != null) {
-          RecordingErrorListener errorListener = new RecordingErrorListener();
-          CompilationUnit sourceCompilationUnit =
-              constNode.getAncestor((node) => node is CompilationUnit);
-          ErrorReporter errorReporter = new ErrorReporter(
-              errorListener, sourceCompilationUnit.element.source);
-          ConstantVisitor constantVisitor =
-              createConstantVisitor(errorReporter);
-          DartObjectImpl result = _evaluateConstructorCall(constNode,
-              constNode.arguments.arguments, element, constantVisitor,
-              errorReporter);
-          elementAnnotation.evaluationResult =
-              new EvaluationResultImpl.con2(result, errorListener.errors);
-        } else {
-          // This may happen for invalid code (e.g. failing to pass arguments
-          // to an annotation which references a const constructor).  The error
-          // is detected elsewhere, so just silently ignore it here.
-          elementAnnotation.evaluationResult =
-              new EvaluationResultImpl.con1(null);
-        }
-      }
-    } else {
-      // Should not happen.
-      AnalysisEngine.instance.logger.logError(
-          "Constant value computer trying to compute the value of a node which is not a VariableDeclaration, InstanceCreationExpression, FormalParameter, or ConstructorDeclaration");
+  void _computeValueFor(ConstantEvaluationTarget constant) {
+    if (!_constantsToCompute.contains(constant)) {
+      // Element is in the dependency graph but should have been computed by
+      // a previous stage of analysis.
+      // TODO(paulberry): once we have moved over to the new task model, this
+      // should only occur for constants associated with enum members.  Once
+      // that happens we should add an assertion to verify that it doesn't
+      // occur in any other cases.
       return;
     }
-  }
-
-  /**
-   * Evaluate a call to fromEnvironment() on the bool, int, or String class. The
-   * [environmentValue] is the value fetched from the environment. The
-   * [builtInDefaultValue] is the value that should be used as the default if no
-   * "defaultValue" argument appears in [namedArgumentValues]. The
-   * [namedArgumentValues] are the values of the named parameters passed to
-   * fromEnvironment(). Return a [DartObjectImpl] object corresponding to the
-   * evaluated result.
-   */
-  DartObjectImpl _computeValueFromEnvironment(DartObject environmentValue,
-      DartObjectImpl builtInDefaultValue,
-      HashMap<String, DartObjectImpl> namedArgumentValues) {
-    DartObjectImpl value = environmentValue as DartObjectImpl;
-    if (value.isUnknown || value.isNull) {
-      // The name either doesn't exist in the environment or we couldn't parse
-      // the corresponding value.
-      // If the code supplied an explicit default, use it.
-      if (namedArgumentValues.containsKey(_DEFAULT_VALUE_PARAM)) {
-        value = namedArgumentValues[_DEFAULT_VALUE_PARAM];
-      } else if (value.isNull) {
-        // The code didn't supply an explicit default.
-        // The name exists in the environment but we couldn't parse the
-        // corresponding value.
-        // So use the built-in default value, because this is what the VM does.
-        value = builtInDefaultValue;
-      } else {
-        // The code didn't supply an explicit default.
-        // The name doesn't exist in the environment.
-        // The VM would use the built-in default value, but we don't want to do
-        // that for analysis because it's likely to lead to cascading errors.
-        // So just leave [value] in the unknown state.
-      }
-    }
-    return value;
-  }
-
-  DartObjectImpl _evaluateConstructorCall(AstNode node,
-      NodeList<Expression> arguments, ConstructorElement constructor,
-      ConstantVisitor constantVisitor, ErrorReporter errorReporter) {
-    if (!_getConstructorBase(constructor).isCycleFree) {
-      // It's not safe to evaluate this constructor, so bail out.
-      // TODO(paulberry): ensure that a reasonable error message is produced
-      // in this case, as well as other cases involving constant expression
-      // circularities (e.g. "compile-time constant expression depends on
-      // itself")
-      return new DartObjectImpl.validWithUnknownValue(constructor.returnType);
-    }
-    int argumentCount = arguments.length;
-    List<DartObjectImpl> argumentValues =
-        new List<DartObjectImpl>(argumentCount);
-    List<Expression> argumentNodes = new List<Expression>(argumentCount);
-    HashMap<String, DartObjectImpl> namedArgumentValues =
-        new HashMap<String, DartObjectImpl>();
-    HashMap<String, NamedExpression> namedArgumentNodes =
-        new HashMap<String, NamedExpression>();
-    for (int i = 0; i < argumentCount; i++) {
-      Expression argument = arguments[i];
-      if (argument is NamedExpression) {
-        String name = argument.name.label.name;
-        namedArgumentValues[name] =
-            constantVisitor._valueOf(argument.expression);
-        namedArgumentNodes[name] = argument;
-        argumentValues[i] = typeProvider.nullObject;
-      } else {
-        argumentValues[i] = constantVisitor._valueOf(argument);
-        argumentNodes[i] = argument;
-      }
-    }
-    constructor = _followConstantRedirectionChain(constructor);
-    InterfaceType definingClass = constructor.returnType as InterfaceType;
-    if (constructor.isFactory) {
-      // We couldn't find a non-factory constructor.
-      // See if it's because we reached an external const factory constructor
-      // that we can emulate.
-      if (constructor.name == "fromEnvironment") {
-        if (!_checkFromEnvironmentArguments(
-            arguments, argumentValues, namedArgumentValues, definingClass)) {
-          errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, node);
-          return null;
-        }
-        String variableName =
-            argumentCount < 1 ? null : argumentValues[0].stringValue;
-        if (identical(definingClass, typeProvider.boolType)) {
-          DartObject valueFromEnvironment;
-          valueFromEnvironment =
-              _declaredVariables.getBool(typeProvider, variableName);
-          return _computeValueFromEnvironment(valueFromEnvironment,
-              new DartObjectImpl(typeProvider.boolType, BoolState.FALSE_STATE),
-              namedArgumentValues);
-        } else if (identical(definingClass, typeProvider.intType)) {
-          DartObject valueFromEnvironment;
-          valueFromEnvironment =
-              _declaredVariables.getInt(typeProvider, variableName);
-          return _computeValueFromEnvironment(valueFromEnvironment,
-              new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
-              namedArgumentValues);
-        } else if (identical(definingClass, typeProvider.stringType)) {
-          DartObject valueFromEnvironment;
-          valueFromEnvironment =
-              _declaredVariables.getString(typeProvider, variableName);
-          return _computeValueFromEnvironment(valueFromEnvironment,
-              new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
-              namedArgumentValues);
-        }
-      } else if (constructor.name == "" &&
-          identical(definingClass, typeProvider.symbolType) &&
-          argumentCount == 1) {
-        if (!_checkSymbolArguments(
-            arguments, argumentValues, namedArgumentValues)) {
-          errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, node);
-          return null;
-        }
-        String argumentValue = argumentValues[0].stringValue;
-        return new DartObjectImpl(
-            definingClass, new SymbolState(argumentValue));
-      }
-      // Either it's an external const factory constructor that we can't
-      // emulate, or an error occurred (a cycle, or a const constructor trying
-      // to delegate to a non-const constructor).
-      // In the former case, the best we can do is consider it an unknown value.
-      // In the latter case, the error has already been reported, so considering
-      // it an unknown value will suppress further errors.
-      return new DartObjectImpl.validWithUnknownValue(definingClass);
-    }
-    beforeGetConstantInitializers(constructor);
-    ConstructorElementImpl constructorBase = _getConstructorBase(constructor);
-    List<ConstructorInitializer> initializers =
-        constructorBase.constantInitializers;
-    if (initializers == null) {
-      // This can happen in some cases where there are compile errors in the
-      // code being analyzed (for example if the code is trying to create a
-      // const instance using a non-const constructor, or the node we're
-      // visiting is involved in a cycle).  The error has already been reported,
-      // so consider it an unknown value to suppress further errors.
-      return new DartObjectImpl.validWithUnknownValue(definingClass);
-    }
-    HashMap<String, DartObjectImpl> fieldMap =
-        new HashMap<String, DartObjectImpl>();
-    // Start with final fields that are initialized at their declaration site.
-    for (FieldElement field in constructor.enclosingElement.fields) {
-      if ((field.isFinal || field.isConst) &&
-          !field.isStatic &&
-          field is ConstFieldElementImpl) {
-        beforeGetFieldEvaluationResult(field);
-        EvaluationResultImpl evaluationResult = field.evaluationResult;
-        DartType fieldType =
-            FieldMember.from(field, constructor.returnType).type;
-        DartObjectImpl fieldValue = evaluationResult.value;
-        if (fieldValue != null && !_runtimeTypeMatch(fieldValue, fieldType)) {
-          errorReporter.reportErrorForNode(
-              CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
-              node, [fieldValue.type, field.name, fieldType]);
-        }
-        fieldMap[field.name] = evaluationResult.value;
-      }
-    }
-    // Now evaluate the constructor declaration.
-    HashMap<String, DartObjectImpl> parameterMap =
-        new HashMap<String, DartObjectImpl>();
-    List<ParameterElement> parameters = constructor.parameters;
-    int parameterCount = parameters.length;
-    for (int i = 0; i < parameterCount; i++) {
-      ParameterElement parameter = parameters[i];
-      ParameterElement baseParameter = parameter;
-      while (baseParameter is ParameterMember) {
-        baseParameter = (baseParameter as ParameterMember).baseElement;
-      }
-      DartObjectImpl argumentValue = null;
-      AstNode errorTarget = null;
-      if (baseParameter.parameterKind == ParameterKind.NAMED) {
-        argumentValue = namedArgumentValues[baseParameter.name];
-        errorTarget = namedArgumentNodes[baseParameter.name];
-      } else if (i < argumentCount) {
-        argumentValue = argumentValues[i];
-        errorTarget = argumentNodes[i];
-      }
-      if (errorTarget == null) {
-        // No argument node that we can direct error messages to, because we
-        // are handling an optional parameter that wasn't specified.  So just
-        // direct error messages to the constructor call.
-        errorTarget = node;
-      }
-      if (argumentValue == null && baseParameter is ParameterElementImpl) {
-        // The parameter is an optional positional parameter for which no value
-        // was provided, so use the default value.
-        beforeGetParameterDefault(baseParameter);
-        EvaluationResultImpl evaluationResult = baseParameter.evaluationResult;
-        if (evaluationResult == null) {
-          // No default was provided, so the default value is null.
-          argumentValue = typeProvider.nullObject;
-        } else if (evaluationResult.value != null) {
-          argumentValue = evaluationResult.value;
-        }
-      }
-      if (argumentValue != null) {
-        if (!_runtimeTypeMatch(argumentValue, parameter.type)) {
-          errorReporter.reportErrorForNode(
-              CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
-              errorTarget, [argumentValue.type, parameter.type]);
-        }
-        if (baseParameter.isInitializingFormal) {
-          FieldElement field = (parameter as FieldFormalParameterElement).field;
-          if (field != null) {
-            DartType fieldType = field.type;
-            if (fieldType != parameter.type) {
-              // We've already checked that the argument can be assigned to the
-              // parameter; we also need to check that it can be assigned to
-              // the field.
-              if (!_runtimeTypeMatch(argumentValue, fieldType)) {
-                errorReporter.reportErrorForNode(
-                    CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
-                    errorTarget, [argumentValue.type, fieldType]);
-              }
-            }
-            String fieldName = field.name;
-            fieldMap[fieldName] = argumentValue;
-          }
-        } else {
-          String name = baseParameter.name;
-          parameterMap[name] = argumentValue;
-        }
-      }
-    }
-    ConstantVisitor initializerVisitor =
-        new ConstantVisitor.con2(typeProvider, parameterMap, errorReporter);
-    String superName = null;
-    NodeList<Expression> superArguments = null;
-    for (ConstructorInitializer initializer in initializers) {
-      if (initializer is ConstructorFieldInitializer) {
-        ConstructorFieldInitializer constructorFieldInitializer = initializer;
-        Expression initializerExpression =
-            constructorFieldInitializer.expression;
-        DartObjectImpl evaluationResult =
-            initializerExpression.accept(initializerVisitor);
-        if (evaluationResult != null) {
-          String fieldName = constructorFieldInitializer.fieldName.name;
-          fieldMap[fieldName] = evaluationResult;
-          PropertyAccessorElement getter = definingClass.getGetter(fieldName);
-          if (getter != null) {
-            PropertyInducingElement field = getter.variable;
-            if (!_runtimeTypeMatch(evaluationResult, field.type)) {
-              errorReporter.reportErrorForNode(
-                  CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
-                  node, [evaluationResult.type, fieldName, field.type]);
-            }
-          }
-        }
-      } else if (initializer is SuperConstructorInvocation) {
-        SuperConstructorInvocation superConstructorInvocation = initializer;
-        SimpleIdentifier name = superConstructorInvocation.constructorName;
-        if (name != null) {
-          superName = name.name;
-        }
-        superArguments = superConstructorInvocation.argumentList.arguments;
-      } else if (initializer is RedirectingConstructorInvocation) {
-        // This is a redirecting constructor, so just evaluate the constructor
-        // it redirects to.
-        ConstructorElement constructor = initializer.staticElement;
-        if (constructor != null && constructor.isConst) {
-          return _evaluateConstructorCall(node,
-              initializer.argumentList.arguments, constructor,
-              initializerVisitor, errorReporter);
-        }
-      }
-    }
-    // Evaluate explicit or implicit call to super().
-    InterfaceType superclass = definingClass.superclass;
-    if (superclass != null && !superclass.isObject) {
-      ConstructorElement superConstructor =
-          superclass.lookUpConstructor(superName, constructor.library);
-      if (superConstructor != null) {
-        if (superArguments == null) {
-          superArguments = new NodeList<Expression>(null);
-        }
-        _evaluateSuperConstructorCall(node, fieldMap, superConstructor,
-            superArguments, initializerVisitor, errorReporter);
-      }
-    }
-    return new DartObjectImpl(definingClass, new GenericState(fieldMap));
-  }
-
-  void _evaluateSuperConstructorCall(AstNode node,
-      HashMap<String, DartObjectImpl> fieldMap,
-      ConstructorElement superConstructor, NodeList<Expression> superArguments,
-      ConstantVisitor initializerVisitor, ErrorReporter errorReporter) {
-    if (superConstructor != null && superConstructor.isConst) {
-      DartObjectImpl evaluationResult = _evaluateConstructorCall(node,
-          superArguments, superConstructor, initializerVisitor, errorReporter);
-      if (evaluationResult != null) {
-        fieldMap[GenericState.SUPERCLASS_FIELD] = evaluationResult;
-      }
-    }
-  }
-
-  /**
-   * Attempt to follow the chain of factory redirections until a constructor is
-   * reached which is not a const factory constructor. Return the constant
-   * constructor which terminates the chain of factory redirections, if the
-   * chain terminates. If there is a problem (e.g. a redirection can't be found,
-   * or a cycle is encountered), the chain will be followed as far as possible
-   * and then a const factory constructor will be returned.
-   */
-  ConstructorElement _followConstantRedirectionChain(
-      ConstructorElement constructor) {
-    HashSet<ConstructorElement> constructorsVisited =
-        new HashSet<ConstructorElement>();
-    while (true) {
-      ConstructorElement redirectedConstructor =
-          _getConstRedirectedConstructor(constructor);
-      if (redirectedConstructor == null) {
-        break;
-      } else {
-        ConstructorElement constructorBase = _getConstructorBase(constructor);
-        constructorsVisited.add(constructorBase);
-        ConstructorElement redirectedConstructorBase =
-            _getConstructorBase(redirectedConstructor);
-        if (constructorsVisited.contains(redirectedConstructorBase)) {
-          // Cycle in redirecting factory constructors--this is not allowed
-          // and is checked elsewhere--see
-          // [ErrorVerifier.checkForRecursiveFactoryRedirect()]).
-          break;
-        }
-      }
-      constructor = redirectedConstructor;
-    }
-    return constructor;
+    evaluationEngine.computeConstantValue(constant);
   }
 
   /**
@@ -1142,70 +1264,30 @@
    * in the given [cycle], each of which directly or indirectly references the
    * constant.
    */
-  void _generateCycleError(List<AstNode> cycle, AstNode constant) {
-    // TODO(brianwilkerson) Implement this.
+  void _generateCycleError(
+      List<ConstantEvaluationTarget> cycle, ConstantEvaluationTarget constant) {
+    if (constant is VariableElement) {
+      RecordingErrorListener errorListener = new RecordingErrorListener();
+      ErrorReporter errorReporter =
+          new ErrorReporter(errorListener, constant.source);
+      // TODO(paulberry): It would be really nice if we could extract enough
+      // information from the 'cycle' argument to provide the user with a
+      // description of the cycle.
+      errorReporter.reportErrorForElement(
+          CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, constant, []);
+      (constant as VariableElementImpl).evaluationResult =
+          new EvaluationResultImpl(null, errorListener.errors);
+    } else if (constant is ConstructorElement) {
+      // We don't report cycle errors on constructor declarations since there
+      // is nowhere to put the error information.
+    } else {
+      // Should not happen.  Formal parameter defaults and annotations should
+      // never appear as part of a cycle because they can't be referred to.
+      assert(false);
+      AnalysisEngine.instance.logger.logError(
+          "Constant value computer trying to report a cycle error for a node of type ${constant.runtimeType}");
+    }
   }
-
-  /**
-   * If [constructor] redirects to another const constructor, return the
-   * const constructor it redirects to.  Otherwise return `null`.
-   */
-  ConstructorElement _getConstRedirectedConstructor(
-      ConstructorElement constructor) {
-    if (!constructor.isFactory) {
-      return null;
-    }
-    if (identical(constructor.enclosingElement.type, typeProvider.symbolType)) {
-      // The dart:core.Symbol has a const factory constructor that redirects
-      // to dart:_internal.Symbol.  That in turn redirects to an external
-      // const constructor, which we won't be able to evaluate.
-      // So stop following the chain of redirections at dart:core.Symbol, and
-      // let [evaluateInstanceCreationExpression] handle it specially.
-      return null;
-    }
-    ConstructorElement redirectedConstructor =
-        constructor.redirectedConstructor;
-    if (redirectedConstructor == null) {
-      // This can happen if constructor is an external factory constructor.
-      return null;
-    }
-    if (!redirectedConstructor.isConst) {
-      // Delegating to a non-const constructor--this is not allowed (and
-      // is checked elsewhere--see
-      // [ErrorVerifier.checkForRedirectToNonConstConstructor()]).
-      return null;
-    }
-    return redirectedConstructor;
-  }
-
-  ConstructorElementImpl _getConstructorBase(ConstructorElement constructor) {
-    while (constructor is ConstructorMember) {
-      constructor = (constructor as ConstructorMember).baseElement;
-    }
-    return constructor;
-  }
-
-  /**
-   * Check if the object [obj] matches the type [type] according to runtime type
-   * checking rules.
-   */
-  bool _runtimeTypeMatch(DartObjectImpl obj, DartType type) {
-    if (obj.isNull) {
-      return true;
-    }
-    if (type.isUndefined) {
-      return false;
-    }
-    return obj.type.isSubtypeOf(type);
-  }
-
-  /**
-   * Determine whether the given string is a valid name for a public symbol
-   * (i.e. whether it is allowed for a call to the Symbol constructor).
-   */
-  static bool isValidPublicSymbol(String name) => name.isEmpty ||
-      name == "void" ||
-      new JavaPatternMatcher(_PUBLIC_SYMBOL_PATTERN, name).matches();
 }
 
 /**
@@ -1267,9 +1349,9 @@
   /**
    * The type provider used to access the known types.
    */
-  final TypeProvider _typeProvider;
+  final ConstantEvaluationEngine evaluationEngine;
 
-  HashMap<String, DartObjectImpl> _lexicalEnvironment;
+  final HashMap<String, DartObjectImpl> _lexicalEnvironment;
 
   /**
    * Error reporter that we use to report errors accumulated while computing the
@@ -1283,49 +1365,25 @@
   DartObjectComputer _dartObjectComputer;
 
   /**
-   * Initialize a newly created constant visitor. The [_typeProvider] is the
-   * type provider used to access known types. The [_errorReporter] is used to
-   * report errors found during evaluation.
+   * Initialize a newly created constant visitor. The [evaluationEngine] is
+   * used to evaluate instance creation expressions. The [lexicalEnvironment]
+   * is a map containing values which should override identifiers, or `null` if
+   * no overriding is necessary. The [_errorReporter] is used to report errors
+   * found during evaluation.  The [validator] is used by unit tests to verify
+   * correct dependency analysis.
    */
-  ConstantVisitor.con1(this._typeProvider, this._errorReporter) {
-    this._lexicalEnvironment = null;
+  ConstantVisitor(this.evaluationEngine, this._errorReporter,
+      {HashMap<String, DartObjectImpl> lexicalEnvironment})
+      : _lexicalEnvironment = lexicalEnvironment {
     this._dartObjectComputer =
-        new DartObjectComputer(_errorReporter, _typeProvider);
+        new DartObjectComputer(_errorReporter, evaluationEngine.typeProvider);
   }
 
   /**
-   * Initialize a newly created constant visitor. The [_typeProvider] is the
-   * type provider used to access known types. The [lexicalEnvironment] is a map
-   * containing values which should override identifiers, or `null` if no
-   * overriding is necessary. The [_errorReporter] is used to report errors
-   * found during evaluation.
+   * Convenience getter to gain access to the [evalationEngine]'s type
+   * provider.
    */
-  ConstantVisitor.con2(this._typeProvider,
-      HashMap<String, DartObjectImpl> lexicalEnvironment, this._errorReporter) {
-    this._lexicalEnvironment = lexicalEnvironment;
-    this._dartObjectComputer =
-        new DartObjectComputer(_errorReporter, _typeProvider);
-  }
-
-  /**
-   * This method is called just before retrieving an evaluation result from an
-   * AST node. Unit tests will override it to introduce additional error
-   * checking.
-   */
-  void beforeGetEvaluationResult(AstNode node) {}
-
-  /**
-   * Return `true` if the given [element] represents the `length` getter in
-   * class 'String'.
-   */
-  bool isStringLength(Element element) {
-    if (element is PropertyAccessorElement) {
-      if (element.isGetter && element.name == 'length') {
-        return element.enclosingElement == _typeProvider.stringType.element;
-      }
-    }
-    return false;
-  }
+  TypeProvider get _typeProvider => evaluationEngine.typeProvider;
 
   @override
   DartObjectImpl visitAdjacentStrings(AdjacentStrings node) {
@@ -1454,14 +1512,14 @@
       _error(node, null);
       return null;
     }
-    beforeGetEvaluationResult(node);
-    EvaluationResultImpl result = node.evaluationResult;
-    if (result != null) {
-      return result.value;
+    ConstructorElement constructor = node.staticElement;
+    if (constructor == null) {
+      // Couldn't resolve the constructor so we can't compute a value.  No
+      // problem - the error has already been reported.
+      return null;
     }
-    // TODO(brianwilkerson) Figure out which error to report.
-    _error(node, null);
-    return null;
+    return evaluationEngine.evaluateConstructorCall(
+        node, node.argumentList.arguments, constructor, this, _errorReporter);
   }
 
   @override
@@ -1600,17 +1658,16 @@
 
   @override
   DartObjectImpl visitPrefixedIdentifier(PrefixedIdentifier node) {
+    SimpleIdentifier prefixNode = node.prefix;
+    Element prefixElement = prefixNode.staticElement;
     // String.length
-    {
-      Element element = node.staticElement;
-      if (isStringLength(element)) {
-        DartObjectImpl prefixResult = node.prefix.accept(this);
+    if (prefixElement is! PrefixElement && prefixElement is! ClassElement) {
+      DartObjectImpl prefixResult = node.prefix.accept(this);
+      if (_isStringLength(prefixResult, node.identifier)) {
         return prefixResult.stringLength(_typeProvider);
       }
     }
     // importPrefix.CONST
-    SimpleIdentifier prefixNode = node.prefix;
-    Element prefixElement = prefixNode.staticElement;
     if (prefixElement is! PrefixElement) {
       DartObjectImpl prefixResult = prefixNode.accept(this);
       if (prefixResult == null) {
@@ -1647,12 +1704,13 @@
 
   @override
   DartObjectImpl visitPropertyAccess(PropertyAccess node) {
-    Element element = node.propertyName.staticElement;
-    if (isStringLength(element)) {
-      DartObjectImpl prefixResult = node.realTarget.accept(this);
-      return prefixResult.stringLength(_typeProvider);
+    if (node.target != null) {
+      DartObjectImpl prefixResult = node.target.accept(this);
+      if (_isStringLength(prefixResult, node.propertyName)) {
+        return prefixResult.stringLength(_typeProvider);
+      }
     }
-    return _getConstantValue(node, element);
+    return _getConstantValue(node, node.propertyName.staticElement);
   }
 
   @override
@@ -1718,7 +1776,7 @@
     }
     if (element is VariableElementImpl) {
       VariableElementImpl variableElementImpl = element;
-      beforeGetEvaluationResult(node);
+      evaluationEngine.validator.beforeGetEvaluationResult(element);
       EvaluationResultImpl value = variableElementImpl.evaluationResult;
       if (variableElementImpl.isConst && value != null) {
         return value.value;
@@ -1743,6 +1801,18 @@
   }
 
   /**
+   * Return `true` if the given [targetResult] represents a string and the
+   * [identifier] is "length".
+   */
+  bool _isStringLength(
+      DartObjectImpl targetResult, SimpleIdentifier identifier) {
+    if (targetResult == null || targetResult.type != _typeProvider.stringType) {
+      return false;
+    }
+    return identifier.name == 'length';
+  }
+
+  /**
    * Return the value of the given [expression], or a representation of 'null'
    * if the expression cannot be evaluated.
    */
@@ -2145,13 +2215,13 @@
       Expression node, EvaluationResultImpl evaluationResult) {
     if (evaluationResult.value != null) {
       try {
-        return new EvaluationResultImpl.con1(
+        return new EvaluationResultImpl(
             evaluationResult.value.stringLength(_typeProvider));
       } on EvaluationException catch (exception) {
         _errorReporter.reportErrorForNode(exception.errorCode, node);
       }
     }
-    return new EvaluationResultImpl.con1(null);
+    return new EvaluationResultImpl(null);
   }
 
   DartObjectImpl times(BinaryExpression node, DartObjectImpl leftOperand,
@@ -3388,10 +3458,16 @@
    */
   final DartObjectImpl value;
 
+  EvaluationResultImpl(this.value, [List<AnalysisError> errors]) {
+    this._errors = errors == null ? <AnalysisError>[] : errors;
+  }
+
+  @deprecated // Use new EvaluationResultImpl(value)
   EvaluationResultImpl.con1(this.value) {
     this._errors = new List<AnalysisError>(0);
   }
 
+  @deprecated // Use new EvaluationResultImpl(value, errors)
   EvaluationResultImpl.con2(this.value, List<AnalysisError> errors) {
     this._errors = errors;
   }
@@ -4859,60 +4935,38 @@
  */
 class ReferenceFinder extends RecursiveAstVisitor<Object> {
   /**
-   * The element representing the construct that will be visited.
+   * The callback which should be used to report any dependencies that were
+   * found.
    */
-  final AstNode _source;
-
-  /**
-   * A graph in which the nodes are the constant variables and the edges are
-   * from each variable to the other constant variables that are referenced in
-   * the head's initializer.
-   */
-  final DirectedGraph<AstNode> _referenceGraph;
-
-  /**
-   * A table mapping constant variables to the declarations of those variables.
-   */
-  final HashMap<PotentiallyConstVariableElement, VariableDeclaration> _variableDeclarationMap;
-
-  /**
-   * A table mapping constant constructors to the declarations of those
-   * constructors.
-   */
-  final HashMap<ConstructorElement, ConstructorDeclaration> _constructorDeclarationMap;
+  final ReferenceFinderCallback _callback;
 
   /**
    * Initialize a newly created reference finder to find references from a given
    * variable to other variables and to add those references to the given graph.
-   * The [source] is the element representing the variable whose initializer
-   * will be visited. The [referenceGraph] is a graph recording which variables
-   * (heads) reference which other variables (tails) in their initializers. The
-   * [variableDeclarationMap] is a table mapping constant variables to the
-   * declarations of those variables. The [constructorDeclarationMap] is a table
-   * mapping constant constructors to the declarations of those constructors.
+   * The [_callback] will be invoked for every dependency found.
    */
-  ReferenceFinder(this._source, this._referenceGraph,
-      this._variableDeclarationMap, this._constructorDeclarationMap);
+  ReferenceFinder(this._callback);
 
   @override
   Object visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (node.isConst) {
-      _referenceGraph.addEdge(_source, node);
+      ConstructorElement constructor =
+          ConstantEvaluationEngine._getConstructorBase(node.staticElement);
+      if (constructor != null) {
+        _callback(constructor);
+      }
     }
-    return null;
+    return super.visitInstanceCreationExpression(node);
   }
 
   @override
   Object visitRedirectingConstructorInvocation(
       RedirectingConstructorInvocation node) {
     super.visitRedirectingConstructorInvocation(node);
-    ConstructorElement target = node.staticElement;
+    ConstructorElement target =
+        ConstantEvaluationEngine._getConstructorBase(node.staticElement);
     if (target != null && target.isConst) {
-      ConstructorDeclaration targetDeclaration =
-          _constructorDeclarationMap[target];
-      if (targetDeclaration != null) {
-        _referenceGraph.addEdge(_source, targetDeclaration);
-      }
+      _callback(target);
     }
     return null;
   }
@@ -4925,16 +4979,7 @@
     }
     if (element is VariableElement) {
       if (element.isConst) {
-        VariableDeclaration variableDeclaration =
-            _variableDeclarationMap[element];
-        // The declaration will be null when the variable is not defined in the
-        // compilation units that were used to produce the
-        // variableDeclarationMap.  In such cases, the variable should already
-        // have a value associated with it, but we don't bother to check because
-        // there's nothing we can do about it at this point.
-        if (variableDeclaration != null) {
-          _referenceGraph.addEdge(_source, variableDeclaration);
-        }
+        _callback(element);
       }
     }
     return null;
@@ -4943,18 +4988,10 @@
   @override
   Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
     super.visitSuperConstructorInvocation(node);
-    ConstructorElement constructor = node.staticElement;
+    ConstructorElement constructor =
+        ConstantEvaluationEngine._getConstructorBase(node.staticElement);
     if (constructor != null && constructor.isConst) {
-      ConstructorDeclaration constructorDeclaration =
-          _constructorDeclarationMap[constructor];
-      // The declaration will be null when the constructor is not defined in the
-      // compilation units that were used to produce the
-      // constructorDeclarationMap.  In such cases, the constructor should
-      // already have its initializer AST's stored in it, but we don't bother
-      // to check because there's nothing we can do about it at this point.
-      if (constructorDeclaration != null) {
-        _referenceGraph.addEdge(_source, constructorDeclaration);
-      }
+      _callback(constructor);
     }
     return null;
   }
diff --git a/pkg/analyzer/lib/src/generated/element.dart b/pkg/analyzer/lib/src/generated/element.dart
index 46b6d03..f7278d4 100644
--- a/pkg/analyzer/lib/src/generated/element.dart
+++ b/pkg/analyzer/lib/src/generated/element.dart
@@ -10,7 +10,9 @@
 import 'dart:collection';
 
 import 'package:analyzer/src/generated/utilities_general.dart';
-import 'package:analyzer/task/model.dart' show AnalysisTarget;
+import 'package:analyzer/src/task/dart.dart';
+import 'package:analyzer/task/model.dart'
+    show AnalysisTarget, ConstantEvaluationTarget;
 
 import 'ast.dart';
 import 'constant.dart' show EvaluationResultImpl;
@@ -1276,6 +1278,15 @@
   Source source;
 
   /**
+   * The source of the library containing this compilation unit.
+   *
+   * This is the same as the source of the containing [LibraryElement],
+   * except that it does not require the containing [LibraryElement] to be
+   * computed.
+   */
+  Source librarySource;
+
+  /**
    * A list containing all of the top-level accessors (getters and setters)
    * contained in this compilation unit.
    */
@@ -1558,16 +1569,29 @@
   EvaluationResultImpl _result;
 
   /**
+   * Initialize a newly created synthetic field element to have the given
+   * [name] and [offset].
+   */
+  ConstFieldElementImpl(String name, int offset) : super(name, offset);
+
+  /**
    * Initialize a newly created field element to have the given [name].
    */
+  @deprecated // Use new ConstFieldElementImpl.forNode(name)
   ConstFieldElementImpl.con1(Identifier name) : super.forNode(name);
 
   /**
    * Initialize a newly created synthetic field element to have the given
    * [name] and [offset].
    */
+  @deprecated // Use new ConstFieldElementImpl(name, offset)
   ConstFieldElementImpl.con2(String name, int offset) : super(name, offset);
 
+  /**
+   * Initialize a newly created field element to have the given [name].
+   */
+  ConstFieldElementImpl.forNode(Identifier name) : super.forNode(name);
+
   @override
   EvaluationResultImpl get evaluationResult => _result;
 
@@ -1613,7 +1637,7 @@
  * class.
  */
 abstract class ConstructorElement
-    implements ClassMemberElement, ExecutableElement {
+    implements ClassMemberElement, ExecutableElement, ConstantEvaluationTarget {
   /**
    * An empty list of constructor elements.
    */
@@ -2065,7 +2089,7 @@
  * A [FieldFormalParameterElementImpl] for parameters that have an initializer.
  */
 class DefaultFieldFormalParameterElementImpl
-    extends FieldFormalParameterElementImpl {
+    extends FieldFormalParameterElementImpl with ConstVariableElement {
   /**
    * The result of evaluating this variable's initializer.
    */
@@ -2088,7 +2112,8 @@
 /**
  * A [ParameterElement] for parameters that have an initializer.
  */
-class DefaultParameterElementImpl extends ParameterElementImpl {
+class DefaultParameterElementImpl extends ParameterElementImpl
+    with ConstVariableElement {
   /**
    * The result of evaluating this variable's initializer.
    */
@@ -2840,7 +2865,7 @@
       return null;
     }
     int offset = nameOffset;
-    AstNode node = new NodeLocator.con1(offset).searchWithin(unit);
+    AstNode node = new NodeLocator(offset).searchWithin(unit);
     if (node == null) {
       return null;
     }
@@ -4569,16 +4594,31 @@
    * Initialize a newly created function type to be declared by the given
    * [element].
    */
+  FunctionTypeImpl(ExecutableElement element) : super(element, null);
+
+  /**
+   * Initialize a newly created function type to be declared by the given
+   * [element].
+   */
+  @deprecated // Use new FunctionTypeImpl(element)
   FunctionTypeImpl.con1(ExecutableElement element) : super(element, null);
 
   /**
    * Initialize a newly created function type to be declared by the given
    * [element].
    */
+  @deprecated // Use new FunctionTypeImpl.forTypedef(element)
   FunctionTypeImpl.con2(FunctionTypeAliasElement element)
       : super(element, element == null ? null : element.name);
 
   /**
+   * Initialize a newly created function type to be declared by the given
+   * [element].
+   */
+  FunctionTypeImpl.forTypedef(FunctionTypeAliasElement element)
+      : super(element, element == null ? null : element.name);
+
+  /**
    * Return the base parameter elements of this function element.
    */
   List<ParameterElement> get baseParameters {
@@ -5220,8 +5260,8 @@
     }
     Element element = this.element;
     FunctionTypeImpl newType = (element is ExecutableElement)
-        ? new FunctionTypeImpl.con1(element)
-        : new FunctionTypeImpl.con2(element as FunctionTypeAliasElement);
+        ? new FunctionTypeImpl(element)
+        : new FunctionTypeImpl.forTypedef(element as FunctionTypeAliasElement);
     newType.typeArguments =
         TypeImpl.substitute(typeArguments, argumentTypes, parameterTypes);
     return newType;
@@ -6035,7 +6075,7 @@
         lubArguments[i] = DynamicTypeImpl.instance;
       }
     }
-    InterfaceTypeImpl lub = new InterfaceTypeImpl.con1(firstElement);
+    InterfaceTypeImpl lub = new InterfaceTypeImpl(firstElement);
     lub.typeArguments = lubArguments;
     return lub;
   }
@@ -6053,6 +6093,12 @@
   /**
    * Initialize a newly created type to be declared by the given [element].
    */
+  InterfaceTypeImpl(ClassElement element) : super(element, element.displayName);
+
+  /**
+   * Initialize a newly created type to be declared by the given [element].
+   */
+  @deprecated // Use new InterfaceTypeImpl(element)
   InterfaceTypeImpl.con1(ClassElement element)
       : super(element, element.displayName);
 
@@ -6060,8 +6106,15 @@
    * Initialize a newly created type to have the given [name]. This constructor
    * should only be used in cases where there is no declaration of the type.
    */
+  @deprecated // Use new InterfaceTypeImpl.named(name)
   InterfaceTypeImpl.con2(String name) : super(null, name);
 
+  /**
+   * Initialize a newly created type to have the given [name]. This constructor
+   * should only be used in cases where there is no declaration of the type.
+   */
+  InterfaceTypeImpl.named(String name) : super(null, name);
+
   @override
   List<PropertyAccessorElement> get accessors {
     List<PropertyAccessorElement> accessors = element.accessors;
@@ -6610,7 +6663,7 @@
     if (JavaArrays.equals(newTypeArguments, typeArguments)) {
       return this;
     }
-    InterfaceTypeImpl newType = new InterfaceTypeImpl.con1(element);
+    InterfaceTypeImpl newType = new InterfaceTypeImpl(element);
     newType.typeArguments = newTypeArguments;
     return newType;
   }
@@ -7018,6 +7071,7 @@
    * [unit].
    */
   void set definingCompilationUnit(CompilationUnitElement unit) {
+    assert((unit as CompilationUnitElementImpl).librarySource == unit.source);
     (unit as CompilationUnitElementImpl).enclosingElement = this;
     this._definingCompilationUnit = unit;
   }
@@ -7160,7 +7214,7 @@
       function.synthetic = true;
       function.enclosingElement = this;
       function.returnType = loadLibraryReturnType;
-      function.type = new FunctionTypeImpl.con1(function);
+      function.type = new FunctionTypeImpl(function);
       _loadLibraryFunction = function;
     }
     return _loadLibraryFunction;
@@ -7209,6 +7263,8 @@
    */
   void set parts(List<CompilationUnitElement> parts) {
     for (CompilationUnitElement compilationUnit in parts) {
+      assert((compilationUnit as CompilationUnitElementImpl).librarySource ==
+          source);
       (compilationUnit as CompilationUnitElementImpl).enclosingElement = this;
     }
     this._parts = parts;
@@ -8307,7 +8363,8 @@
 /**
  * A parameter defined within an executable element.
  */
-abstract class ParameterElement implements LocalElement, VariableElement {
+abstract class ParameterElement
+    implements LocalElement, VariableElement, ConstantEvaluationTarget {
   /**
    * An empty list of parameter elements.
    */
@@ -8343,7 +8400,7 @@
  * A concrete implementation of a [ParameterElement].
  */
 class ParameterElementImpl extends VariableElementImpl
-    implements ParameterElement {
+    with PotentiallyConstVariableElement implements ParameterElement {
   /**
    * An empty list of parameter elements.
    */
@@ -8678,7 +8735,8 @@
  *
  * This class is not intended to be part of the public API for analyzer.
  */
-abstract class PotentiallyConstVariableElement {
+abstract class PotentiallyConstVariableElement
+    implements VariableElementImpl, ConstantEvaluationTarget {
   /**
    * If this element represents a constant variable, and it has an initializer,
    * a copy of the initializer for the constant.  Otherwise `null`.
@@ -10078,7 +10136,7 @@
 /**
  * A variable. There are concrete subclasses for different kinds of variables.
  */
-abstract class VariableElement implements Element {
+abstract class VariableElement implements Element, ConstantEvaluationTarget {
   /**
    * An empty list of variable elements.
    */
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 33d1617..4754e33 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -2009,8 +2009,8 @@
       // Class(args)
       if (element1 is ClassElement) {
         ClassElement classElement = element1;
-        constructor = new InterfaceTypeImpl.con1(classElement)
-            .lookUpConstructor(null, _definingLibrary);
+        constructor = new InterfaceTypeImpl(classElement).lookUpConstructor(
+            null, _definingLibrary);
       }
     }
     //
@@ -2038,8 +2038,8 @@
       // Class.constructor(args)
       if (element1 is ClassElement) {
         ClassElement classElement = element1;
-        constructor = new InterfaceTypeImpl.con1(classElement)
-            .lookUpConstructor(nameNode2.name, _definingLibrary);
+        constructor = new InterfaceTypeImpl(classElement).lookUpConstructor(
+            nameNode2.name, _definingLibrary);
         nameNode2.staticElement = constructor;
       }
     }
@@ -2062,8 +2062,8 @@
           return;
         }
         // prefix.Class.constructor(args)
-        constructor = new InterfaceTypeImpl.con1(classElement)
-            .lookUpConstructor(name3, _definingLibrary);
+        constructor = new InterfaceTypeImpl(classElement).lookUpConstructor(
+            name3, _definingLibrary);
         nameNode3.staticElement = constructor;
       }
     }
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 2d482d8..234e817 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -19,6 +19,7 @@
 import 'package:analyzer/src/services/lint.dart';
 import 'package:analyzer/src/task/manager.dart';
 import 'package:analyzer/src/task/task_dart.dart';
+import 'package:analyzer/task/dart.dart';
 import 'package:analyzer/task/model.dart';
 
 import '../../instrumentation/instrumentation.dart';
@@ -919,7 +920,7 @@
   /**
    * A list containing sources for which data should not be flushed.
    */
-  List<Source> _priorityOrder = Source.EMPTY_ARRAY;
+  List<Source> _priorityOrder = Source.EMPTY_LIST;
 
   /**
    * A map from all sources for which there are futures pending to a list of
@@ -1033,6 +1034,9 @@
   }
 
   @override
+  AnalysisCache get analysisCache => _cache;
+
+  @override
   AnalysisOptions get analysisOptions => _options;
 
   @override
@@ -1090,13 +1094,13 @@
   @override
   void set analysisPriorityOrder(List<Source> sources) {
     if (sources == null || sources.isEmpty) {
-      _priorityOrder = Source.EMPTY_ARRAY;
+      _priorityOrder = Source.EMPTY_LIST;
     } else {
       while (sources.remove(null)) {
         // Nothing else to do.
       }
       if (sources.isEmpty) {
-        _priorityOrder = Source.EMPTY_ARRAY;
+        _priorityOrder = Source.EMPTY_LIST;
       }
       //
       // Cap the size of the priority list to being less than the cache size.
@@ -1461,14 +1465,6 @@
   }
 
   @override
-  void addSourceInfo(Source source, SourceEntry info) {
-    // This implementation assumes that the access to the cache does not need to
-    // be synchronized because no other object can have access to this context
-    // while this method is being invoked.
-    _cache.put(source, info);
-  }
-
-  @override
   void applyAnalysisDelta(AnalysisDelta delta) {
     ChangeSet changeSet = new ChangeSet();
     delta.analysisLevels.forEach((Source source, AnalysisLevel level) {
@@ -1539,7 +1535,7 @@
     if (unit == null) {
       return null;
     }
-    NodeLocator locator = new NodeLocator.con1(element.nameOffset);
+    NodeLocator locator = new NodeLocator(element.nameOffset);
     AstNode nameNode = locator.searchWithin(unit);
     while (nameNode != null) {
       if (nameNode is AnnotatedNode) {
@@ -1639,7 +1635,7 @@
 
   @override
   List<Source> computeExportedLibraries(Source source) => _getDartParseData2(
-      source, DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+      source, DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_LIST);
 
   @override
   HtmlElement computeHtmlElement(Source source) =>
@@ -1647,7 +1643,7 @@
 
   @override
   List<Source> computeImportedLibraries(Source source) => _getDartParseData2(
-      source, DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_ARRAY);
+      source, DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_LIST);
 
   @override
   SourceKind computeKindOf(Source source) {
@@ -1801,26 +1797,6 @@
     return source.exists();
   }
 
-  Element findElementById(int id) {
-    _ElementByIdFinder finder = new _ElementByIdFinder(id);
-    try {
-      MapIterator<Source, SourceEntry> iterator = _cache.iterator();
-      while (iterator.moveNext()) {
-        SourceEntry sourceEntry = iterator.value;
-        if (sourceEntry.kind == SourceKind.LIBRARY) {
-          DartEntry dartEntry = sourceEntry;
-          LibraryElement library = dartEntry.getValue(DartEntry.ELEMENT);
-          if (library != null) {
-            library.accept(finder);
-          }
-        }
-      }
-    } on _ElementByIdFinderException {
-      return finder.result;
-    }
-    return null;
-  }
-
   @override
   cache.CacheEntry getCacheEntry(AnalysisTarget target) {
     return null;
@@ -1919,7 +1895,7 @@
   List<Source> getHtmlFilesReferencing(Source source) {
     SourceKind sourceKind = getKindOf(source);
     if (sourceKind == null) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     List<Source> htmlSources = new List<Source>();
     while (true) {
@@ -1952,7 +1928,7 @@
       break;
     }
     if (htmlSources.isEmpty) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     return htmlSources;
   }
@@ -1972,7 +1948,7 @@
     if (sourceEntry is DartEntry) {
       return sourceEntry.containingLibraries;
     }
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 
   @override
@@ -1995,7 +1971,7 @@
       }
     }
     if (dependentLibraries.isEmpty) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     return dependentLibraries;
   }
@@ -2007,7 +1983,7 @@
       HtmlEntry htmlEntry = sourceEntry;
       return htmlEntry.getValue(HtmlEntry.REFERENCED_LIBRARIES);
     }
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 
   @override
@@ -2301,9 +2277,9 @@
         dartEntry.setState(SourceEntry.CONTENT, CacheState.FLUSHED);
         dartEntry.setValue(SourceEntry.LINE_INFO, new LineInfo(<int>[0]));
         // DartEntry.ELEMENT - set in recordElementData
-        dartEntry.setValue(DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_ARRAY);
-        dartEntry.setValue(DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_ARRAY);
-        dartEntry.setValue(DartEntry.INCLUDED_PARTS, Source.EMPTY_ARRAY);
+        dartEntry.setValue(DartEntry.EXPORTED_LIBRARIES, Source.EMPTY_LIST);
+        dartEntry.setValue(DartEntry.IMPORTED_LIBRARIES, Source.EMPTY_LIST);
+        dartEntry.setValue(DartEntry.INCLUDED_PARTS, Source.EMPTY_LIST);
         // DartEntry.IS_CLIENT - set in recordElementData
         // DartEntry.IS_LAUNCHABLE - set in recordElementData
         dartEntry.setValue(DartEntry.PARSE_ERRORS, AnalysisError.NO_ERRORS);
@@ -3278,7 +3254,7 @@
       if (nullIfEmpty) {
         return null;
       }
-      return ChangeNoticeImpl.EMPTY_ARRAY;
+      return ChangeNoticeImpl.EMPTY_LIST;
     }
     List<ChangeNotice> notices = new List.from(_pendingNotices.values);
     _pendingNotices.clear();
@@ -4057,28 +4033,6 @@
     }
   }
 
-  /**
-   * Record the results produced by performing a [task] and return the cache
-   * entry associated with the results.
-   */
-  DartEntry _recordBuildUnitElementTask(BuildUnitElementTask task) {
-    Source source = task.source;
-    Source library = task.library;
-    DartEntry dartEntry = _cache.get(source);
-    CaughtException thrownException = task.exception;
-    if (thrownException != null) {
-      dartEntry.recordBuildElementErrorInLibrary(library, thrownException);
-      throw new AnalysisException('<rethrow>', thrownException);
-    }
-    dartEntry.setValueInLibrary(DartEntry.BUILT_UNIT, library, task.unit);
-    dartEntry.setValueInLibrary(
-        DartEntry.BUILT_ELEMENT, library, task.unitElement);
-    ChangeNoticeImpl notice = _getNotice(source);
-    LineInfo lineInfo = dartEntry.getValue(SourceEntry.LINE_INFO);
-    notice.setErrors(dartEntry.allErrors, lineInfo);
-    return dartEntry;
-  }
-
 //  /**
 //   * Notify all of the analysis listeners that the given source is no longer included in the set of
 //   * sources that are being analyzed.
@@ -4158,6 +4112,28 @@
 //  }
 
   /**
+   * Record the results produced by performing a [task] and return the cache
+   * entry associated with the results.
+   */
+  DartEntry _recordBuildUnitElementTask(BuildUnitElementTask task) {
+    Source source = task.source;
+    Source library = task.library;
+    DartEntry dartEntry = _cache.get(source);
+    CaughtException thrownException = task.exception;
+    if (thrownException != null) {
+      dartEntry.recordBuildElementErrorInLibrary(library, thrownException);
+      throw new AnalysisException('<rethrow>', thrownException);
+    }
+    dartEntry.setValueInLibrary(DartEntry.BUILT_UNIT, library, task.unit);
+    dartEntry.setValueInLibrary(
+        DartEntry.BUILT_ELEMENT, library, task.unitElement);
+    ChangeNoticeImpl notice = _getNotice(source);
+    LineInfo lineInfo = dartEntry.getValue(SourceEntry.LINE_INFO);
+    notice.setErrors(dartEntry.allErrors, lineInfo);
+    return dartEntry;
+  }
+
+  /**
    * Given a [dartEntry] and a [library] element, record the library element and
    * other information gleaned from the element in the cache entry.
    */
@@ -5347,17 +5323,17 @@
   List<Source> _getSources(Source source, DartEntry dartEntry,
       DataDescriptor<List<Source>> descriptor) {
     if (dartEntry == null) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     CacheState exportState = dartEntry.getState(descriptor);
     if (exportState == CacheState.ERROR) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     } else if (exportState != CacheState.VALID) {
       if (_taskData == null) {
         _taskData =
             AnalysisContextImpl_this._createParseDartTask(source, dartEntry);
       }
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     return dartEntry.getValue(descriptor);
   }
@@ -5798,6 +5774,9 @@
     if (_taskManager == null) {
       _taskManager = new TaskManager();
       _taskManager.addTaskDescriptors(enginePlugin.taskDescriptors);
+      // TODO(brianwilkerson) Create a way to associate different results with
+      // different file suffixes, then make this pluggable.
+      _taskManager.addGeneralResult(DART_ERRORS);
     }
     return _taskManager;
   }
@@ -6106,7 +6085,7 @@
    * The default value for enabling enum support.
    */
   @deprecated
-  static bool DEFAULT_ENABLE_ENUM = false;
+  static bool DEFAULT_ENABLE_ENUM = true;
 
   /**
    * A predicate indicating whether analysis is to parse and analyze function
@@ -6193,6 +6172,7 @@
    * Initialize a newly created set of analysis options to have the same values
    * as those in the given set of analysis [options].
    */
+  @deprecated // Use new AnalysisOptionsImpl.from(options)
   AnalysisOptionsImpl.con1(AnalysisOptions options) {
     analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate;
     cacheSize = options.cacheSize;
@@ -6209,6 +6189,26 @@
     preserveComments = options.preserveComments;
   }
 
+  /**
+   * Initialize a newly created set of analysis options to have the same values
+   * as those in the given set of analysis [options].
+   */
+  AnalysisOptionsImpl.from(AnalysisOptions options) {
+    analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate;
+    cacheSize = options.cacheSize;
+    dart2jsHint = options.dart2jsHint;
+    enableNullAwareOperators = options.enableNullAwareOperators;
+    enableStrictCallChecks = options.enableStrictCallChecks;
+    generateImplicitErrors = options.generateImplicitErrors;
+    generateSdkErrors = options.generateSdkErrors;
+    hint = options.hint;
+    incremental = options.incremental;
+    incrementalApi = options.incrementalApi;
+    incrementalValidation = options.incrementalValidation;
+    lint = options.lint;
+    preserveComments = options.preserveComments;
+  }
+
   bool get analyzeFunctionBodies {
     if (identical(analyzeFunctionBodiesPredicate, _analyzeAllFunctionBodies)) {
       return true;
@@ -6861,7 +6861,7 @@
   /**
    * An empty list of change notices.
    */
-  static const List<ChangeNoticeImpl> EMPTY_ARRAY = const <ChangeNoticeImpl>[];
+  static const List<ChangeNoticeImpl> EMPTY_LIST = const <ChangeNoticeImpl>[];
 
   /**
    * The source for which the result is being reported.
@@ -7252,7 +7252,7 @@
    */
   static final DataDescriptor<List<Source>> CONTAINING_LIBRARIES =
       new DataDescriptor<List<Source>>(
-          "DartEntry.CONTAINING_LIBRARIES", Source.EMPTY_ARRAY);
+          "DartEntry.CONTAINING_LIBRARIES", Source.EMPTY_LIST);
 
   /**
    * The data descriptor representing the library element for the library. This
@@ -7269,7 +7269,7 @@
    */
   static final DataDescriptor<List<Source>> EXPORTED_LIBRARIES =
       new DataDescriptor<List<Source>>(
-          "DartEntry.EXPORTED_LIBRARIES", Source.EMPTY_ARRAY);
+          "DartEntry.EXPORTED_LIBRARIES", Source.EMPTY_LIST);
 
   /**
    * The data descriptor representing the hints resulting from auditing the
@@ -7286,7 +7286,7 @@
    */
   static final DataDescriptor<List<Source>> IMPORTED_LIBRARIES =
       new DataDescriptor<List<Source>>(
-          "DartEntry.IMPORTED_LIBRARIES", Source.EMPTY_ARRAY);
+          "DartEntry.IMPORTED_LIBRARIES", Source.EMPTY_LIST);
 
   /**
    * The data descriptor representing the list of included parts. This data is
@@ -7295,7 +7295,7 @@
    */
   static final DataDescriptor<List<Source>> INCLUDED_PARTS =
       new DataDescriptor<List<Source>>(
-          "DartEntry.INCLUDED_PARTS", Source.EMPTY_ARRAY);
+          "DartEntry.INCLUDED_PARTS", Source.EMPTY_LIST);
 
   /**
    * The data descriptor representing the client flag. This data is only
@@ -8270,9 +8270,9 @@
       }
     }
     StringLiteral uriLiteral = directive.uri;
-    errorListener.onError(new AnalysisError.con2(librarySource,
-        uriLiteral.offset, uriLiteral.length,
-        CompileTimeErrorCode.URI_DOES_NOT_EXIST, [directive.uriContent]));
+    errorListener.onError(new AnalysisError(librarySource, uriLiteral.offset,
+        uriLiteral.length, CompileTimeErrorCode.URI_DOES_NOT_EXIST,
+        [directive.uriContent]));
   }
 }
 
@@ -8496,8 +8496,8 @@
       AnalysisEngine.instance.instrumentationService.logFileRead(
           source.fullName, _modificationTime, _content);
     } catch (exception, stackTrace) {
-      errors.add(new AnalysisError.con1(
-          source, ScannerErrorCode.UNABLE_GET_CONTENT, [exception]));
+      errors.add(new AnalysisError(
+          source, 0, 0, ScannerErrorCode.UNABLE_GET_CONTENT, [exception]));
       throw new AnalysisException("Could not get contents of $source",
           new CaughtException(exception, stackTrace));
     }
@@ -8547,7 +8547,7 @@
    */
   static final DataDescriptor<List<Source>> REFERENCED_LIBRARIES =
       new DataDescriptor<List<Source>>(
-          "HtmlEntry.REFERENCED_LIBRARIES", Source.EMPTY_ARRAY);
+          "HtmlEntry.REFERENCED_LIBRARIES", Source.EMPTY_LIST);
 
   /**
    * The data descriptor representing the errors resulting from resolving the
@@ -9019,6 +9019,14 @@
  */
 abstract class InternalAnalysisContext implements AnalysisContext {
   /**
+   * A table mapping the sources known to the context to the information known
+   * about the source.
+   *
+   * TODO(scheglov) add the type, once we have only one cache.
+   */
+  dynamic get analysisCache;
+
+  /**
    * Allow the client to supply its own content cache.  This will take the
    * place of the content cache created by default, allowing clients to share
    * the content cache between contexts.
@@ -9067,11 +9075,6 @@
   TypeResolverVisitorFactory get typeResolverVisitorFactory;
 
   /**
-   * Add the given [source] with the given [information] to this context.
-   */
-  void addSourceInfo(Source source, SourceEntry information);
-
-  /**
    * Return a list containing the sources of the libraries that are exported by
    * the library with the given [source]. The list will be empty if the given
    * source is invalid, if the given source does not represent a library, or if
@@ -9184,7 +9187,7 @@
    * Log the given [exception] as one representing an error. The [message] is an
    * explanation of why the error occurred or what it means.
    */
-  @deprecated
+  @deprecated // Use logError(message, exception)
   void logError2(String message, Object exception);
 
   /**
@@ -9198,7 +9201,7 @@
    * Log the given [exception] as one representing an informational message. The
    * [message] is an explanation of why the error occurred or what it means.
    */
-  @deprecated
+  @deprecated // Use logInformation(message, exception)
   void logInformation2(String message, Object exception);
 }
 
@@ -9427,7 +9430,7 @@
   List<Source> _toArray(HashSet<Source> sources) {
     int size = sources.length;
     if (size == 0) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     return new List.from(sources);
   }
@@ -9466,15 +9469,13 @@
       return null;
     }
     if (code == UriValidationCode.URI_WITH_INTERPOLATION) {
-      errorListener.onError(new AnalysisError.con2(librarySource,
-          uriLiteral.offset, uriLiteral.length,
-          CompileTimeErrorCode.URI_WITH_INTERPOLATION));
+      errorListener.onError(new AnalysisError(librarySource, uriLiteral.offset,
+          uriLiteral.length, CompileTimeErrorCode.URI_WITH_INTERPOLATION));
       return null;
     }
     if (code == UriValidationCode.INVALID_URI) {
-      errorListener.onError(new AnalysisError.con2(librarySource,
-          uriLiteral.offset, uriLiteral.length,
-          CompileTimeErrorCode.INVALID_URI, [uriContent]));
+      errorListener.onError(new AnalysisError(librarySource, uriLiteral.offset,
+          uriLiteral.length, CompileTimeErrorCode.INVALID_URI, [uriContent]));
       return null;
     }
     throw new RuntimeException(
@@ -9524,7 +9525,7 @@
   /**
    * A list containing the sources of the libraries that are referenced within the HTML.
    */
-  List<Source> _referencedLibraries = Source.EMPTY_ARRAY;
+  List<Source> _referencedLibraries = Source.EMPTY_LIST;
 
   /**
    * Initialize a newly created task to perform analysis within the given context.
@@ -9560,7 +9561,7 @@
     List<Source> libraries = new List<Source>();
     _unit.accept(new ParseHtmlTask_getLibrarySources(this, libraries));
     if (libraries.isEmpty) {
-      return Source.EMPTY_ARRAY;
+      return Source.EMPTY_LIST;
     }
     return libraries;
   }
@@ -11689,21 +11690,3 @@
     return pendingFuture.future;
   }
 }
-
-class _ElementByIdFinder extends GeneralizingElementVisitor {
-  final int _id;
-  Element result;
-
-  _ElementByIdFinder(this._id);
-
-  @override
-  visitElement(Element element) {
-    if (element.id == _id) {
-      result = element;
-      throw new _ElementByIdFinderException();
-    }
-    super.visitElement(element);
-  }
-}
-
-class _ElementByIdFinderException {}
diff --git a/pkg/analyzer/lib/src/generated/error.dart b/pkg/analyzer/lib/src/generated/error.dart
index 9a83ed4..13dd77c 100644
--- a/pkg/analyzer/lib/src/generated/error.dart
+++ b/pkg/analyzer/lib/src/generated/error.dart
@@ -89,21 +89,12 @@
   bool isStaticOnly = false;
 
   /**
-   * Initialize a newly created analysis error for the specified [source]. The
-   * error will have the given [errorCode] and the list of [arguments] will be
-   * used to complete the message. The error has no location information.
+   * Initialize a newly created analysis error. The error is associated with the
+   * given [source] and is located at the given [offset] with the given
+   * [length]. The error will have the given [errorCode] and the list of
+   * [arguments] will be used to complete the message.
    */
-  AnalysisError.con1(this.source, this.errorCode, [List<Object> arguments]) {
-    this._message = formatList(errorCode.message, arguments);
-  }
-
-  /**
-   * Initialize a newly created analysis error for the specified [source] at the
-   * given [offset] with the given [length]. The error will have the given
-   * [errorCode] and the list of [arguments] will be used to complete the
-   * message.
-   */
-  AnalysisError.con2(this.source, this.offset, int length, this.errorCode,
+  AnalysisError(this.source, this.offset, int length, this.errorCode,
       [List<Object> arguments]) {
     this._length = length;
     this._message = formatList(errorCode.message, arguments);
@@ -114,6 +105,27 @@
   }
 
   /**
+   * Initialize a newly created analysis error for the specified [source]. The
+   * error will have the given [errorCode] and the list of [arguments] will be
+   * used to complete the message. The error has no location information.
+   */
+  @deprecated // Use new AnalysisError(source, 0, 0, errorCode, arguments)
+  AnalysisError.con1(Source source, ErrorCode errorCode,
+      [List<Object> arguments])
+      : this(source, 0, 0, errorCode, arguments);
+
+  /**
+   * Initialize a newly created analysis error for the specified [source] at the
+   * given [offset] with the given [length]. The error will have the given
+   * [errorCode] and the list of [arguments] will be used to complete the
+   * message.
+   */
+  @deprecated // Use new AnalysisError(source, offset, length, errorCode, arguments)
+  AnalysisError.con2(Source source, int offset, int length, ErrorCode errorCode,
+      [List<Object> arguments])
+      : this(source, offset, length, errorCode, arguments);
+
+  /**
    * Return the template used to create the correction to be displayed for this
    * error, or `null` if there is no correction information for this error. The
    * correction should indicate how the user can fix the error.
@@ -191,6 +203,18 @@
     buffer.write(_message);
     return buffer.toString();
   }
+
+  /**
+   * Merge all of the errors in the lists in the given list of [errorLists] into
+   * a single list of errors.
+   */
+  static List<AnalysisError> mergeLists(List<List<AnalysisError>> errorLists) {
+    List<AnalysisError> errors = <AnalysisError>[];
+    for (List<AnalysisError> errorList in errorLists) {
+      errors.addAll(errorList);
+    }
+    return errors;
+  }
 }
 
 /**
@@ -232,13 +256,25 @@
       new HashMap<ErrorProperty, Object>();
 
   /**
+   * Initialize a newly created analysis error. The error is associated with the
+   * given [source] and is located at the given [offset] with the given
+   * [length]. The error will have the given [errorCode] and the list of
+   * [arguments] will be used to complete the message.
+   */
+  AnalysisErrorWithProperties(
+      Source source, int offset, int length, ErrorCode errorCode,
+      [List<Object> arguments])
+      : super(source, offset, length, errorCode, arguments);
+
+  /**
    * Initialize a newly created analysis error for the specified [source]. The
    * error will have the given [errorCode] and the list of [arguments] will be
    * used to complete the message. The error has no location information.
    */
+  @deprecated // Use new AnalysisErrorWithProperties(source, 0, 0, errorCode, arguments)
   AnalysisErrorWithProperties.con1(Source source, ErrorCode errorCode,
       [List<Object> arguments])
-      : super.con1(source, errorCode, arguments);
+      : this(source, 0, 0, errorCode, arguments);
 
   /**
    * Initialize a newly created analysis error for the specified [source] at the
@@ -246,10 +282,11 @@
    * [errorCode] and the list of [arguments] will be used to complete the
    * message.
    */
+  @deprecated // Use new AnalysisErrorWithProperties(source, offset, length, errorCode, arguments)
   AnalysisErrorWithProperties.con2(
       Source source, int offset, int length, ErrorCode errorCode,
       [List<Object> arguments])
-      : super.con2(source, offset, length, errorCode, arguments);
+      : this(source, offset, length, errorCode, arguments);
 
   @override
   Object getProperty(ErrorProperty property) => _propertyMap[property];
@@ -1924,7 +1961,8 @@
    * constant expression depends on itself.
    */
   static const CompileTimeErrorCode RECURSIVE_COMPILE_TIME_CONSTANT =
-      const CompileTimeErrorCode('RECURSIVE_COMPILE_TIME_CONSTANT', "");
+      const CompileTimeErrorCode('RECURSIVE_COMPILE_TIME_CONSTANT',
+          "Compile-time constant expression depends on itself");
 
   /**
    * 7.6.1 Generative Constructors: A generative constructor may be redirecting,
@@ -2458,7 +2496,7 @@
    */
   AnalysisErrorWithProperties newErrorWithProperties(
           ErrorCode errorCode, AstNode node, List<Object> arguments) =>
-      new AnalysisErrorWithProperties.con2(
+      new AnalysisErrorWithProperties(
           _source, node.offset, node.length, errorCode, arguments);
 
   /**
@@ -2506,7 +2544,7 @@
   void reportErrorForOffset(ErrorCode errorCode, int offset, int length,
       [List<Object> arguments]) {
     _errorListener.onError(
-        new AnalysisError.con2(_source, offset, length, errorCode, arguments));
+        new AnalysisError(_source, offset, length, errorCode, arguments));
   }
 
   /**
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolver.dart b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
index 531ac3b..789ab42 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -964,16 +964,16 @@
     // compute values
     {
       CompilationUnit unit = node.getAncestor((n) => n is CompilationUnit);
-      ConstantValueComputer computer =
-          new ConstantValueComputer(_typeProvider, _context.declaredVariables);
-      computer.add(unit);
+      ConstantValueComputer computer = new ConstantValueComputer(
+          _context, _typeProvider, _context.declaredVariables);
+      computer.add(unit, _source, _librarySource);
       computer.computeValues();
     }
     // validate
     {
       ErrorReporter errorReporter = new ErrorReporter(errorListener, _source);
-      ConstantVerifier constantVerifier =
-          new ConstantVerifier(errorReporter, _definingLibrary, _typeProvider);
+      ConstantVerifier constantVerifier = new ConstantVerifier(errorReporter,
+          _definingLibrary, _typeProvider, _context.declaredVariables);
       node.accept(constantVerifier);
     }
   }
@@ -1546,7 +1546,7 @@
   }
 
   static AstNode _findNodeCovering(AstNode root, int offset, int end) {
-    NodeLocator nodeLocator = new NodeLocator.con2(offset, end);
+    NodeLocator nodeLocator = new NodeLocator(offset, end);
     return nodeLocator.searchWithin(root);
   }
 
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index e040afd..2e5bca2 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -1681,10 +1681,9 @@
     // tokens.
     //
     if (originalEnd < originalStart) {
-      oldNode =
-          new NodeLocator.con1(originalStart).searchWithin(originalStructure);
+      oldNode = new NodeLocator(originalStart).searchWithin(originalStructure);
     } else {
-      oldNode = new NodeLocator.con2(originalStart, originalEnd)
+      oldNode = new NodeLocator(originalStart, originalEnd)
           .searchWithin(originalStructure);
     }
     //
@@ -5580,11 +5579,11 @@
           Token rightParenthesis = _expect(TokenType.CLOSE_PAREN);
           Statement body = parseStatement2();
           if (loopVariable == null) {
-            return new ForEachStatement.con2(awaitKeyword, forKeyword,
+            return new ForEachStatement.withReference(awaitKeyword, forKeyword,
                 leftParenthesis, identifier, inKeyword, iterator,
                 rightParenthesis, body);
           }
-          return new ForEachStatement.con1(awaitKeyword, forKeyword,
+          return new ForEachStatement.withDeclaration(awaitKeyword, forKeyword,
               leftParenthesis, loopVariable, inKeyword, iterator,
               rightParenthesis, body);
         }
@@ -7663,7 +7662,7 @@
    */
   void _reportErrorForNode(ParserErrorCode errorCode, AstNode node,
       [List<Object> arguments]) {
-    _reportError(new AnalysisError.con2(
+    _reportError(new AnalysisError(
         _source, node.offset, node.length, errorCode, arguments));
   }
 
@@ -7676,7 +7675,7 @@
     if (token.type == TokenType.EOF) {
       token = token.previous;
     }
-    _reportError(new AnalysisError.con2(_source, token.offset,
+    _reportError(new AnalysisError(_source, token.offset,
         math.max(token.length, 1), errorCode, arguments));
   }
 
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 29817fd..50f89a5 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -743,12 +743,12 @@
   AnalysisError getErrorForDuplicate(Element existing, Element duplicate) {
     if (existing is PropertyAccessorElement && duplicate is MethodElement) {
       if (existing.nameOffset < duplicate.nameOffset) {
-        return new AnalysisError.con2(duplicate.source, duplicate.nameOffset,
+        return new AnalysisError(duplicate.source, duplicate.nameOffset,
             duplicate.displayName.length,
             CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME,
             [existing.displayName]);
       } else {
-        return new AnalysisError.con2(existing.source, existing.nameOffset,
+        return new AnalysisError(existing.source, existing.nameOffset,
             existing.displayName.length,
             CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME,
             [existing.displayName]);
@@ -780,10 +780,11 @@
   /**
    * Build the compilation unit element for the given [source] based on the
    * compilation [unit] associated with the source. Throw an AnalysisException
-   * if the element could not be built.
+   * if the element could not be built.  [librarySource] is the source for the
+   * containing library.
    */
   CompilationUnitElementImpl buildCompilationUnit(
-      Source source, CompilationUnit unit) {
+      Source source, CompilationUnit unit, Source librarySource) {
     return PerformanceStatistics.resolve.makeCurrentWhile(() {
       if (unit == null) {
         return null;
@@ -797,6 +798,7 @@
       element.enums = holder.enums;
       element.functions = holder.functions;
       element.source = source;
+      element.librarySource = librarySource;
       element.typeAliases = holder.typeAliases;
       element.types = holder.types;
       element.topLevelVariables = holder.topLevelVariables;
@@ -824,6 +826,11 @@
   final TypeProvider _typeProvider;
 
   /**
+   * The set of variables declared using '-D' on the command line.
+   */
+  final DeclaredVariables declaredVariables;
+
+  /**
    * The type representing the type 'bool'.
    */
   InterfaceType _boolType;
@@ -853,8 +860,8 @@
    *
    * @param errorReporter the error reporter by which errors will be reported
    */
-  ConstantVerifier(
-      this._errorReporter, this._currentLibrary, this._typeProvider) {
+  ConstantVerifier(this._errorReporter, this._currentLibrary,
+      this._typeProvider, this.declaredVariables) {
     this._boolType = _typeProvider.boolType;
     this._intType = _typeProvider.intType;
     this._numType = _typeProvider.numType;
@@ -907,11 +914,17 @@
   @override
   Object visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (node.isConst) {
-      EvaluationResultImpl evaluationResult = node.evaluationResult;
-      // Note: evaluationResult might be null if there are circular references
-      // among constants.
-      if (evaluationResult != null) {
-        _reportErrors(evaluationResult.errors, null);
+      // We need to evaluate the constant to see if any errors occur during its
+      // evaluation.
+      ConstructorElement constructor = node.staticElement;
+      if (constructor != null) {
+        ConstantEvaluationEngine evaluationEngine =
+            new ConstantEvaluationEngine(_typeProvider, declaredVariables);
+        ConstantVisitor constantVisitor =
+            new ConstantVisitor(evaluationEngine, _errorReporter);
+        evaluationEngine.evaluateConstructorCall(node,
+            node.argumentList.arguments, constructor, constantVisitor,
+            _errorReporter);
       }
     }
     _validateInstanceCreationArguments(node);
@@ -975,8 +988,9 @@
             AnalysisErrorListener.NULL_LISTENER;
         ErrorReporter subErrorReporter =
             new ErrorReporter(errorListener, _errorReporter.source);
-        DartObjectImpl result = key
-            .accept(new ConstantVisitor.con1(_typeProvider, subErrorReporter));
+        DartObjectImpl result = key.accept(new ConstantVisitor(
+            new ConstantEvaluationEngine(_typeProvider, declaredVariables),
+            subErrorReporter));
         if (result != null) {
           if (keys.contains(result)) {
             invalidKeys.add(key);
@@ -1046,18 +1060,15 @@
   Object visitVariableDeclaration(VariableDeclaration node) {
     super.visitVariableDeclaration(node);
     Expression initializer = node.initializer;
-    if (initializer != null && node.isConst) {
+    if (initializer != null && (node.isConst || node.isFinal)) {
       VariableElementImpl element = node.element as VariableElementImpl;
       EvaluationResultImpl result = element.evaluationResult;
       if (result == null) {
-        //
-        // Normally we don't need to visit const variable declarations because
-        // we have already computed their values. But if we missed it for some
-        // reason, this gives us a second chance.
-        //
-        result = new EvaluationResultImpl.con1(_validate(initializer,
-            CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE));
-        element.evaluationResult = result;
+        // Variables marked "const" should have had their values computed by
+        // ConstantValueComputer.  Other variables will only have had their
+        // values computed if the value was needed (e.g. final variables in a
+        // class containing const constructors).
+        assert(!node.isConst);
         return null;
       }
       _reportErrors(result.errors,
@@ -1154,6 +1165,8 @@
           identical(dataErrorCode, CompileTimeErrorCode.CONST_EVAL_TYPE_INT) ||
           identical(dataErrorCode, CompileTimeErrorCode.CONST_EVAL_TYPE_NUM) ||
           identical(dataErrorCode,
+              CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT) ||
+          identical(dataErrorCode,
               CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH) ||
           identical(dataErrorCode,
               CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH) ||
@@ -1179,8 +1192,9 @@
     RecordingErrorListener errorListener = new RecordingErrorListener();
     ErrorReporter subErrorReporter =
         new ErrorReporter(errorListener, _errorReporter.source);
-    DartObjectImpl result = expression
-        .accept(new ConstantVisitor.con1(_typeProvider, subErrorReporter));
+    DartObjectImpl result = expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(_typeProvider, declaredVariables),
+        subErrorReporter));
     _reportErrors(errorListener.errors, errorCode);
     return result;
   }
@@ -1256,7 +1270,7 @@
           }
         }
         VariableElementImpl element = parameter.element as VariableElementImpl;
-        element.evaluationResult = new EvaluationResultImpl.con1(result);
+        element.evaluationResult = new EvaluationResultImpl(result);
       }
     }
   }
@@ -1286,8 +1300,9 @@
                   AnalysisErrorListener.NULL_LISTENER;
               ErrorReporter subErrorReporter =
                   new ErrorReporter(errorListener, _errorReporter.source);
-              DartObjectImpl result = initializer.accept(
-                  new ConstantVisitor.con1(_typeProvider, subErrorReporter));
+              DartObjectImpl result = initializer.accept(new ConstantVisitor(
+                  new ConstantEvaluationEngine(
+                      _typeProvider, declaredVariables), subErrorReporter));
               if (result == null) {
                 _errorReporter.reportErrorForNode(
                     CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
@@ -1313,8 +1328,8 @@
     ErrorReporter subErrorReporter =
         new ErrorReporter(errorListener, _errorReporter.source);
     DartObjectImpl result = expression.accept(
-        new _ConstantVerifier_validateInitializerExpression(
-            _typeProvider, subErrorReporter, this, parameterElements));
+        new _ConstantVerifier_validateInitializerExpression(_typeProvider,
+            subErrorReporter, this, parameterElements, declaredVariables));
     _reportErrors(errorListener.errors,
         CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER);
     if (result != null) {
@@ -1703,10 +1718,10 @@
   EvaluationResultImpl _getConstantBooleanValue(Expression expression) {
     if (expression is BooleanLiteral) {
       if (expression.value) {
-        return new EvaluationResultImpl.con1(
+        return new EvaluationResultImpl(
             new DartObjectImpl(null, BoolState.from(true)));
       } else {
-        return new EvaluationResultImpl.con1(
+        return new EvaluationResultImpl(
             new DartObjectImpl(null, BoolState.from(false)));
       }
     }
@@ -2437,7 +2452,7 @@
     ClassElementImpl element = new ClassElementImpl.forNode(className);
     List<TypeParameterElement> typeParameters = holder.typeParameters;
     List<DartType> typeArguments = _createTypeParameterTypes(typeParameters);
-    InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element);
+    InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element);
     interfaceType.typeArguments = typeArguments;
     element.type = interfaceType;
     List<ConstructorElement> constructors = holder.constructors;
@@ -2492,7 +2507,7 @@
     List<TypeParameterElement> typeParameters = holder.typeParameters;
     element.typeParameters = typeParameters;
     List<DartType> typeArguments = _createTypeParameterTypes(typeParameters);
-    InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element);
+    InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element);
     interfaceType.typeArguments = typeArguments;
     element.type = interfaceType;
     // set default constructor
@@ -2616,7 +2631,7 @@
     SimpleIdentifier enumName = node.name;
     ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName);
     enumElement.enum2 = true;
-    InterfaceTypeImpl enumType = new InterfaceTypeImpl.con1(enumElement);
+    InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement);
     enumElement.type = enumType;
     _currentHolder.addEnum(enumElement);
     enumName.staticElement = enumElement;
@@ -2800,7 +2815,7 @@
         element.setVisibleRange(functionEnd, blockEnd - functionEnd - 1);
       }
     }
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
+    FunctionTypeImpl type = new FunctionTypeImpl(element);
     if (_functionTypesToFix != null) {
       _functionTypesToFix.add(type);
     }
@@ -2822,7 +2837,7 @@
         new FunctionTypeAliasElementImpl.forNode(aliasName);
     element.parameters = parameters;
     element.typeParameters = typeParameters;
-    FunctionTypeImpl type = new FunctionTypeImpl.con2(element);
+    FunctionTypeImpl type = new FunctionTypeImpl.forTypedef(element);
     type.typeArguments = _createTypeParameterTypes(typeParameters);
     element.type = type;
     _currentHolder.addTypeAlias(element);
@@ -2854,14 +2869,6 @@
   }
 
   @override
-  Object visitInstanceCreationExpression(InstanceCreationExpression node) {
-    if (node.isConst) {
-      node.constantHandle = new ConstantInstanceCreationHandle();
-    }
-    return super.visitInstanceCreationExpression(node);
-  }
-
-  @override
   Object visitLabeledStatement(LabeledStatement node) {
     bool onSwitchStatement = node.statement is SwitchStatement;
     for (Label label in node.labels) {
@@ -3069,7 +3076,7 @@
       SimpleIdentifier fieldName = node.name;
       FieldElementImpl field;
       if ((isConst || isFinal) && hasInitializer) {
-        field = new ConstFieldElementImpl.con1(fieldName);
+        field = new ConstFieldElementImpl.forNode(fieldName);
       } else {
         field = new FieldElementImpl.forNode(fieldName);
       }
@@ -3176,7 +3183,7 @@
         new ConstructorElementImpl.forNode(null);
     constructor.synthetic = true;
     constructor.returnType = interfaceType;
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(constructor);
+    FunctionTypeImpl type = new FunctionTypeImpl(constructor);
     _functionTypesToFix.add(type);
     constructor.type = type;
     return <ConstructorElement>[constructor];
@@ -3745,8 +3752,7 @@
     indexField.type = intType;
     fields.add(indexField);
     getters.add(_createGetter(indexField));
-    ConstFieldElementImpl valuesField =
-        new ConstFieldElementImpl.con2("values", -1);
+    ConstFieldElementImpl valuesField = new ConstFieldElementImpl("values", -1);
     valuesField.static = true;
     valuesField.const3 = true;
     valuesField.synthetic = true;
@@ -3762,7 +3768,7 @@
     for (int i = 0; i < constantCount; i++) {
       SimpleIdentifier constantName = constants[i].name;
       FieldElementImpl constantField =
-          new ConstFieldElementImpl.con1(constantName);
+          new ConstFieldElementImpl.forNode(constantName);
       constantField.static = true;
       constantField.const3 = true;
       constantField.type = enumType;
@@ -3775,7 +3781,7 @@
       DartObjectImpl value =
           new DartObjectImpl(enumType, new GenericState(fieldMap));
       constantValues.add(value);
-      constantField.evaluationResult = new EvaluationResultImpl.con1(value);
+      constantField.evaluationResult = new EvaluationResultImpl(value);
       fields.add(constantField);
       getters.add(_createGetter(constantField));
       constantName.staticElement = constantField;
@@ -3783,7 +3789,7 @@
     //
     // Build the value of the 'values' field.
     //
-    valuesField.evaluationResult = new EvaluationResultImpl.con1(
+    valuesField.evaluationResult = new EvaluationResultImpl(
         new DartObjectImpl(valuesField.type, new ListState(constantValues)));
     //
     // Finish building the enum.
@@ -3806,7 +3812,7 @@
         new PropertyAccessorElementImpl.forVariable(field);
     getter.getter = true;
     getter.returnType = field.type;
-    getter.type = new FunctionTypeImpl.con1(getter);
+    getter.type = new FunctionTypeImpl(getter);
     field.getter = getter;
     return getter;
   }
@@ -5207,7 +5213,7 @@
       }
       implicitConstructor.parameters = implicitParameters;
     }
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(implicitConstructor);
+    FunctionTypeImpl type = new FunctionTypeImpl(implicitConstructor);
     type.typeArguments = classType.typeArguments;
     implicitConstructor.type = type;
     return implicitConstructor;
@@ -5290,7 +5296,7 @@
           if (_findForwardedConstructors(classElement, superType, callback) &&
               !constructorFound) {
             SourceRange withRange = classElement.withClauseRange;
-            errorListener.onError(new AnalysisError.con2(classElement.source,
+            errorListener.onError(new AnalysisError(classElement.source,
                 withRange.offset, withRange.length,
                 CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
                 [superElement.name]));
@@ -5965,7 +5971,7 @@
       if (!visitedClasses.contains(superclassElt)) {
         visitedClasses.add(superclassElt);
         try {
-          resultMap = new MemberMap.con2(
+          resultMap = new MemberMap.from(
               _computeClassChainLookupMap(superclassElt, visitedClasses));
           //
           // Substitute the super types down the hierarchy.
@@ -5998,7 +6004,7 @@
         if (!visitedClasses.contains(mixinElement)) {
           visitedClasses.add(mixinElement);
           try {
-            MemberMap map = new MemberMap.con2(
+            MemberMap map = new MemberMap.from(
                 _computeClassChainLookupMap(mixinElement, visitedClasses));
             //
             // Substitute the super types down the hierarchy.
@@ -6166,7 +6172,7 @@
           //
           MemberMap map =
               _computeInterfaceLookupMap(superclassElement, visitedInterfaces);
-          map = new MemberMap.con2(map);
+          map = new MemberMap.from(map);
           //
           // Substitute the super type down the hierarchy.
           //
@@ -6198,7 +6204,7 @@
             //
             MemberMap map =
                 _computeInterfaceLookupMap(mixinElement, visitedInterfaces);
-            map = new MemberMap.con2(map);
+            map = new MemberMap.from(map);
             //
             // Substitute the mixin type down the hierarchy.
             //
@@ -6230,7 +6236,7 @@
             //
             MemberMap map =
                 _computeInterfaceLookupMap(interfaceElement, visitedInterfaces);
-            map = new MemberMap.con2(map);
+            map = new MemberMap.from(map);
             //
             // Substitute the supertypes down the hierarchy
             //
@@ -6331,7 +6337,7 @@
       errorSet = new HashSet<AnalysisError>();
       _errorsInClassElement[classElt] = errorSet;
     }
-    errorSet.add(new AnalysisError.con2(
+    errorSet.add(new AnalysisError(
         classElt.source, offset, length, errorCode, arguments));
   }
 
@@ -6677,7 +6683,7 @@
     }
     executable.returnType = dynamicType;
     executable.parameters = parameters;
-    FunctionTypeImpl methodType = new FunctionTypeImpl.con1(executable);
+    FunctionTypeImpl methodType = new FunctionTypeImpl(executable);
     executable.type = methodType;
     return executable;
   }
@@ -7090,15 +7096,14 @@
       Source source =
           _analysisContext.sourceFactory.resolveUri(librarySource, uriContent);
       if (!_analysisContext.exists(source)) {
-        _errorListener.onError(new AnalysisError.con2(librarySource,
+        _errorListener.onError(new AnalysisError(librarySource,
             uriLiteral.offset, uriLiteral.length,
             CompileTimeErrorCode.URI_DOES_NOT_EXIST, [uriContent]));
       }
       return source;
     } on URISyntaxException {
-      _errorListener.onError(new AnalysisError.con2(librarySource,
-          uriLiteral.offset, uriLiteral.length,
-          CompileTimeErrorCode.INVALID_URI, [uriContent]));
+      _errorListener.onError(new AnalysisError(librarySource, uriLiteral.offset,
+          uriLiteral.length, CompileTimeErrorCode.INVALID_URI, [uriContent]));
     }
     return null;
   }
@@ -7155,8 +7160,9 @@
     CompilationUnitBuilder builder = new CompilationUnitBuilder();
     Source librarySource = library.librarySource;
     CompilationUnit definingCompilationUnit = library.definingCompilationUnit;
-    CompilationUnitElementImpl definingCompilationUnitElement =
-        builder.buildCompilationUnit(librarySource, definingCompilationUnit);
+    CompilationUnitElementImpl definingCompilationUnitElement = builder
+        .buildCompilationUnit(
+            librarySource, definingCompilationUnit, librarySource);
     NodeList<Directive> directives = definingCompilationUnit.directives;
     LibraryIdentifier libraryNameNode = null;
     bool hasPartDirective = false;
@@ -7186,7 +7192,7 @@
           hasPartDirective = true;
           CompilationUnit partUnit = library.getAST(partSource);
           CompilationUnitElementImpl part =
-              builder.buildCompilationUnit(partSource, partUnit);
+              builder.buildCompilationUnit(partSource, partUnit, librarySource);
           part.uriOffset = partUri.offset;
           part.uriEnd = partUri.end;
           part.uri = partDirective.uriContent;
@@ -7197,7 +7203,7 @@
           String partLibraryName =
               _getPartLibraryName(partSource, partUnit, directivesToResolve);
           if (partLibraryName == null) {
-            _errorListener.onError(new AnalysisError.con2(librarySource,
+            _errorListener.onError(new AnalysisError(librarySource,
                 partUri.offset, partUri.length,
                 CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()]));
           } else if (libraryNameNode == null) {
@@ -7206,7 +7212,7 @@
             // inferred name of the library and present it in a quick-fix.
             // partLibraryNames.add(partLibraryName);
           } else if (libraryNameNode.name != partLibraryName) {
-            _errorListener.onError(new AnalysisError.con2(librarySource,
+            _errorListener.onError(new AnalysisError(librarySource,
                 partUri.offset, partUri.length,
                 StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [
               libraryNameNode.name,
@@ -7222,7 +7228,7 @@
       }
     }
     if (hasPartDirective && libraryNameNode == null) {
-      _errorListener.onError(new AnalysisError.con1(librarySource,
+      _errorListener.onError(new AnalysisError(librarySource, 0, 0,
           ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART));
     }
     //
@@ -7257,8 +7263,9 @@
     CompilationUnitBuilder builder = new CompilationUnitBuilder();
     Source librarySource = library.librarySource;
     CompilationUnit definingCompilationUnit = library.definingCompilationUnit;
-    CompilationUnitElementImpl definingCompilationUnitElement =
-        builder.buildCompilationUnit(librarySource, definingCompilationUnit);
+    CompilationUnitElementImpl definingCompilationUnitElement = builder
+        .buildCompilationUnit(
+            librarySource, definingCompilationUnit, librarySource);
     NodeList<Directive> directives = definingCompilationUnit.directives;
     LibraryIdentifier libraryNameNode = null;
     bool hasPartDirective = false;
@@ -7288,8 +7295,8 @@
           hasPartDirective = true;
           CompilationUnit partUnit = library.getAST(partSource);
           if (partUnit != null) {
-            CompilationUnitElementImpl part =
-                builder.buildCompilationUnit(partSource, partUnit);
+            CompilationUnitElementImpl part = builder.buildCompilationUnit(
+                partSource, partUnit, librarySource);
             part.uriOffset = partUri.offset;
             part.uriEnd = partUri.end;
             part.uri = partDirective.uriContent;
@@ -7300,7 +7307,7 @@
             String partLibraryName =
                 _getPartLibraryName(partSource, partUnit, directivesToResolve);
             if (partLibraryName == null) {
-              _errorListener.onError(new AnalysisError.con2(librarySource,
+              _errorListener.onError(new AnalysisError(librarySource,
                   partUri.offset, partUri.length,
                   CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()]));
             } else if (libraryNameNode == null) {
@@ -7309,7 +7316,7 @@
               // inferred name of the library and present it in a quick-fix.
               // partLibraryNames.add(partLibraryName);
             } else if (libraryNameNode.name != partLibraryName) {
-              _errorListener.onError(new AnalysisError.con2(librarySource,
+              _errorListener.onError(new AnalysisError(librarySource,
                   partUri.offset, partUri.length,
                   StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [
                 libraryNameNode.name,
@@ -7326,7 +7333,7 @@
       }
     }
     if (hasPartDirective && libraryNameNode == null) {
-      _errorListener.onError(new AnalysisError.con1(librarySource,
+      _errorListener.onError(new AnalysisError(librarySource, 0, 0,
           ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART));
     }
     //
@@ -7519,7 +7526,7 @@
         libraryNames[i] = _getLibraryName(conflictingMembers[i]);
       }
       libraryNames.sort();
-      errorListener.onError(new AnalysisError.con2(getSource(identifier),
+      errorListener.onError(new AnalysisError(getSource(identifier),
           identifier.offset, identifier.length,
           StaticWarningCode.AMBIGUOUS_IMPORT, [
         foundEltName,
@@ -7621,7 +7628,7 @@
     if (sdkElement != null && nonSdkElements.length > 0) {
       String sdkLibName = _getLibraryName(sdkElement);
       String otherLibName = _getLibraryName(nonSdkElements[0]);
-      errorListener.onError(new AnalysisError.con2(getSource(identifier),
+      errorListener.onError(new AnalysisError(getSource(identifier),
           identifier.offset, identifier.length,
           StaticWarningCode.CONFLICTING_DART_IMPORT, [
         name,
@@ -8084,9 +8091,9 @@
                 ErrorCode errorCode = (importElement.isDeferred
                     ? StaticWarningCode.IMPORT_OF_NON_LIBRARY
                     : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY);
-                _errorListener.onError(new AnalysisError.con2(
-                    library.librarySource, uriLiteral.offset, uriLiteral.length,
-                    errorCode, [uriLiteral.toSource()]));
+                _errorListener.onError(new AnalysisError(library.librarySource,
+                    uriLiteral.offset, uriLiteral.length, errorCode,
+                    [uriLiteral.toSource()]));
               }
             }
           }
@@ -8114,8 +8121,8 @@
               exports.add(exportElement);
               if (analysisContext.computeKindOf(exportedSource) !=
                   SourceKind.LIBRARY) {
-                _errorListener.onError(new AnalysisError.con2(
-                    library.librarySource, uriLiteral.offset, uriLiteral.length,
+                _errorListener.onError(new AnalysisError(library.librarySource,
+                    uriLiteral.offset, uriLiteral.length,
                     CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
                     [uriLiteral.toSource()]));
               }
@@ -8446,13 +8453,13 @@
   void _performConstantEvaluation() {
     PerformanceStatistics.resolve.makeCurrentWhile(() {
       ConstantValueComputer computer = new ConstantValueComputer(
-          _typeProvider, analysisContext.declaredVariables);
+          analysisContext, _typeProvider, analysisContext.declaredVariables);
       for (Library library in _librariesInCycles) {
         for (Source source in library.compilationUnitSources) {
           try {
             CompilationUnit unit = library.getAST(source);
             if (unit != null) {
-              computer.add(unit);
+              computer.add(unit, source, library.librarySource);
             }
           } on AnalysisException catch (exception, stackTrace) {
             AnalysisEngine.instance.logger.logError(
@@ -8471,7 +8478,8 @@
             ErrorReporter errorReporter =
                 new ErrorReporter(_errorListener, source);
             ConstantVerifier constantVerifier = new ConstantVerifier(
-                errorReporter, library.libraryElement, _typeProvider);
+                errorReporter, library.libraryElement, _typeProvider,
+                analysisContext.declaredVariables);
             unit.accept(constantVerifier);
           } on AnalysisException catch (exception, stackTrace) {
             AnalysisEngine.instance.logger.logError(
@@ -8771,9 +8779,9 @@
                 ErrorCode errorCode = (importElement.isDeferred
                     ? StaticWarningCode.IMPORT_OF_NON_LIBRARY
                     : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY);
-                _errorListener.onError(new AnalysisError.con2(
-                    library.librarySource, uriLiteral.offset, uriLiteral.length,
-                    errorCode, [uriLiteral.toSource()]));
+                _errorListener.onError(new AnalysisError(library.librarySource,
+                    uriLiteral.offset, uriLiteral.length, errorCode,
+                    [uriLiteral.toSource()]));
               }
             }
           }
@@ -8804,8 +8812,8 @@
               exports.add(exportElement);
               if (analysisContext.computeKindOf(exportedSource) !=
                   SourceKind.LIBRARY) {
-                _errorListener.onError(new AnalysisError.con2(
-                    library.librarySource, uriLiteral.offset, uriLiteral.length,
+                _errorListener.onError(new AnalysisError(library.librarySource,
+                    uriLiteral.offset, uriLiteral.length,
                     CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
                     [uriLiteral.toSource()]));
               }
@@ -8975,13 +8983,13 @@
   void _performConstantEvaluation() {
     PerformanceStatistics.resolve.makeCurrentWhile(() {
       ConstantValueComputer computer = new ConstantValueComputer(
-          _typeProvider, analysisContext.declaredVariables);
+          analysisContext, _typeProvider, analysisContext.declaredVariables);
       for (ResolvableLibrary library in _librariesInCycle) {
         for (ResolvableCompilationUnit unit
             in library.resolvableCompilationUnits) {
           CompilationUnit ast = unit.compilationUnit;
           if (ast != null) {
-            computer.add(ast);
+            computer.add(ast, unit.source, library.librarySource);
           }
         }
       }
@@ -8995,7 +9003,8 @@
           ErrorReporter errorReporter =
               new ErrorReporter(_errorListener, unit.source);
           ConstantVerifier constantVerifier = new ConstantVerifier(
-              errorReporter, library.libraryElement, _typeProvider);
+              errorReporter, library.libraryElement, _typeProvider,
+              analysisContext.declaredVariables);
           ast.accept(constantVerifier);
         }
       }
@@ -9129,7 +9138,7 @@
           offset = accessor.variable.nameOffset;
         }
       }
-      return new AnalysisError.con2(duplicate.source, offset,
+      return new AnalysisError(duplicate.source, offset,
           duplicate.displayName.length,
           CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER,
           [existing.displayName]);
@@ -9181,8 +9190,8 @@
 }
 
 /**
- * This class is used to replace uses of `HashMap<String, ExecutableElement>` which are not as
- * performant as this class.
+ * This class is used to replace uses of `HashMap<String, ExecutableElement>`
+ * which are not as performant as this class.
  */
 class MemberMap {
   /**
@@ -9201,15 +9210,19 @@
   List<ExecutableElement> _values;
 
   /**
-   * Default constructor.
+   * Initialize a newly created member map to have the given [initialCapacity].
+   * The map will grow if needed.
    */
-  MemberMap() : this.con1(10);
+  MemberMap([int initialCapacity = 10]) {
+    _initArrays(initialCapacity);
+  }
 
   /**
    * This constructor takes an initial capacity of the map.
    *
    * @param initialCapacity the initial capacity
    */
+  @deprecated // Use new MemberMap(initialCapacity)
   MemberMap.con1(int initialCapacity) {
     _initArrays(initialCapacity);
   }
@@ -9217,6 +9230,7 @@
   /**
    * Copy constructor.
    */
+  @deprecated // Use new MemberMap.from(memberMap)
   MemberMap.con2(MemberMap memberMap) {
     _initArrays(memberMap._size + 5);
     for (int i = 0; i < memberMap._size; i++) {
@@ -9227,6 +9241,19 @@
   }
 
   /**
+   * Initialize a newly created member map to contain the same members as the
+   * given [memberMap].
+   */
+  MemberMap.from(MemberMap memberMap) {
+    _initArrays(memberMap._size + 5);
+    for (int i = 0; i < memberMap._size; i++) {
+      _keys[i] = memberMap._keys[i];
+      _values[i] = memberMap._values[i];
+    }
+    _size = memberMap._size;
+  }
+
+  /**
    * The size of the map.
    *
    * @return the size of the map.
@@ -10910,6 +10937,22 @@
   }
 
   @override
+  Object visitDefaultFormalParameter(DefaultFormalParameter node) {
+    super.visitDefaultFormalParameter(node);
+    FormalParameterList parent = node.parent;
+    AstNode grandparent = parent.parent;
+    if (grandparent is ConstructorDeclaration &&
+        grandparent.constKeyword != null) {
+      // For const constructors, we need to clone the ASTs for default formal
+      // parameters, so that we can use them during constant evaluation.
+      ParameterElement element = node.element;
+      (element as ConstVariableElement).constantInitializer =
+          new ConstantAstCloner().cloneNode(node.defaultValue);
+    }
+    return null;
+  }
+
+  @override
   Object visitDoStatement(DoStatement node) {
     _overrideManager.enterScope();
     try {
@@ -11830,7 +11873,7 @@
     // TODO(jwren) There are 4 error codes for duplicate, but only 1 is being
     // generated.
     Source source = duplicate.source;
-    return new AnalysisError.con2(source, duplicate.nameOffset,
+    return new AnalysisError(source, duplicate.nameOffset,
         duplicate.displayName.length, CompileTimeErrorCode.DUPLICATE_DEFINITION,
         [existing.displayName]);
   }
@@ -12076,7 +12119,7 @@
    */
   void reportErrorForNode(ErrorCode errorCode, AstNode node,
       [List<Object> arguments]) {
-    _errorListener.onError(new AnalysisError.con2(
+    _errorListener.onError(new AnalysisError(
         source, node.offset, node.length, errorCode, arguments));
   }
 
@@ -12091,7 +12134,7 @@
   void reportErrorForOffset(ErrorCode errorCode, int offset, int length,
       [List<Object> arguments]) {
     _errorListener.onError(
-        new AnalysisError.con2(source, offset, length, errorCode, arguments));
+        new AnalysisError(source, offset, length, errorCode, arguments));
   }
 
   /**
@@ -12103,7 +12146,7 @@
    */
   void reportErrorForToken(ErrorCode errorCode, sc.Token token,
       [List<Object> arguments]) {
-    _errorListener.onError(new AnalysisError.con2(
+    _errorListener.onError(new AnalysisError(
         source, token.offset, token.length, errorCode, arguments));
   }
 
@@ -13897,7 +13940,7 @@
     } else {
       ClassElement definingClass = element.enclosingElement as ClassElement;
       element.returnType = definingClass.type;
-      FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
+      FunctionTypeImpl type = new FunctionTypeImpl(element);
       type.typeArguments = definingClass.type.typeArguments;
       element.type = type;
     }
@@ -13966,7 +14009,7 @@
           new CaughtException(new AnalysisException(), null));
     }
     element.returnType = _computeReturnType(node.returnType);
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
+    FunctionTypeImpl type = new FunctionTypeImpl(element);
     ClassElement definingClass =
         element.getAncestor((element) => element is ClassElement);
     if (definingClass != null) {
@@ -14023,7 +14066,7 @@
           new CaughtException(new AnalysisException(), null));
     }
     element.returnType = _computeReturnType(node.returnType);
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(element);
+    FunctionTypeImpl type = new FunctionTypeImpl(element);
     ClassElement definingClass =
         element.getAncestor((element) => element is ClassElement);
     if (definingClass != null) {
@@ -14379,7 +14422,7 @@
         PropertyAccessorElementImpl getter =
             variableElement.getter as PropertyAccessorElementImpl;
         getter.returnType = declaredType;
-        FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter);
+        FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
         ClassElement definingClass =
             element.getAncestor((element) => element is ClassElement);
         if (definingClass != null) {
@@ -14394,7 +14437,7 @@
             (parameters[0] as ParameterElementImpl).type = declaredType;
           }
           setter.returnType = VoidTypeImpl.instance;
-          FunctionTypeImpl setterType = new FunctionTypeImpl.con1(setter);
+          FunctionTypeImpl setterType = new FunctionTypeImpl(setter);
           if (definingClass != null) {
             setterType.typeArguments = definingClass.type.typeArguments;
           }
@@ -14815,7 +14858,7 @@
     // compilation unit element.
     aliasElement.enclosingElement =
         element.getAncestor((element) => element is CompilationUnitElement);
-    FunctionTypeImpl type = new FunctionTypeImpl.con2(aliasElement);
+    FunctionTypeImpl type = new FunctionTypeImpl.forTypedef(aliasElement);
     ClassElement definingClass =
         element.getAncestor((element) => element is ClassElement);
     if (definingClass != null) {
@@ -15019,7 +15062,7 @@
   void _reportErrorForElement(
       ErrorCode errorCode, Element element, List<Object> arguments) {
     if (element != null) {
-      _errorListener.onError(new AnalysisError.con2(element.source,
+      _errorListener.onError(new AnalysisError(element.source,
           element.nameOffset, element.displayName.length, errorCode,
           arguments));
     }
@@ -15274,9 +15317,11 @@
 
   List<ParameterElement> parameterElements;
 
-  _ConstantVerifier_validateInitializerExpression(TypeProvider arg0,
-      ErrorReporter arg1, this.verifier, this.parameterElements)
-      : super.con1(arg0, arg1);
+  _ConstantVerifier_validateInitializerExpression(TypeProvider typeProvider,
+      ErrorReporter errorReporter, this.verifier, this.parameterElements,
+      DeclaredVariables declaredVariables)
+      : super(new ConstantEvaluationEngine(typeProvider, declaredVariables),
+          errorReporter);
 
   @override
   DartObjectImpl visitSimpleIdentifier(SimpleIdentifier node) {
diff --git a/pkg/analyzer/lib/src/generated/scanner.dart b/pkg/analyzer/lib/src/generated/scanner.dart
index d7bc236..f79401e 100644
--- a/pkg/analyzer/lib/src/generated/scanner.dart
+++ b/pkg/analyzer/lib/src/generated/scanner.dart
@@ -1163,8 +1163,8 @@
    * needed to complete the error message
    */
   void _reportError(ScannerErrorCode errorCode, [List<Object> arguments]) {
-    _errorListener.onError(new AnalysisError.con2(
-        source, _reader.offset, 1, errorCode, arguments));
+    _errorListener.onError(
+        new AnalysisError(source, _reader.offset, 1, errorCode, arguments));
   }
 
   int _select(int choice, TokenType yesType, TokenType noType) {
diff --git a/pkg/analyzer/lib/src/generated/sdk_io.dart b/pkg/analyzer/lib/src/generated/sdk_io.dart
index 3a9f239..cd9c959 100644
--- a/pkg/analyzer/lib/src/generated/sdk_io.dart
+++ b/pkg/analyzer/lib/src/generated/sdk_io.dart
@@ -397,7 +397,7 @@
       if (filePath.replaceAll('\\', '/') == libraryPath) {
         String path = library.shortName;
         try {
-          return new FileBasedSource.con2(parseUriWithException(path), file);
+          return new FileBasedSource(file, parseUriWithException(path));
         } on URISyntaxException catch (exception, stackTrace) {
           AnalysisEngine.instance.logger.logInformation(
               "Failed to create URI: $path",
@@ -410,7 +410,7 @@
         String path =
             "${library.shortName}/${filePath.substring(libraryPath.length + 1)}";
         try {
-          return new FileBasedSource.con2(parseUriWithException(path), file);
+          return new FileBasedSource(file, parseUriWithException(path));
         } on URISyntaxException catch (exception, stackTrace) {
           AnalysisEngine.instance.logger.logInformation(
               "Failed to create URI: $path",
@@ -494,7 +494,7 @@
         file = file.getParentFile();
         file = new JavaFile.relative(file, relativePath);
       }
-      return new FileBasedSource.con2(parseUriWithException(dartUri), file);
+      return new FileBasedSource(file, parseUriWithException(dartUri));
     } on URISyntaxException {
       return null;
     }
@@ -548,7 +548,7 @@
    * of the file is already known to be [libraryFileContents].
    */
   LibraryMap readFromFile(JavaFile file, String libraryFileContents) =>
-      readFromSource(new FileBasedSource.con1(file), libraryFileContents);
+      readFromSource(new FileBasedSource(file), libraryFileContents);
 
   /**
    * Return the library map read from the given [source], given that the content
diff --git a/pkg/analyzer/lib/src/generated/source.dart b/pkg/analyzer/lib/src/generated/source.dart
index d0b5dde..8e42379 100644
--- a/pkg/analyzer/lib/src/generated/source.dart
+++ b/pkg/analyzer/lib/src/generated/source.dart
@@ -99,6 +99,24 @@
   }
 }
 
+class CustomUriResolver extends UriResolver {
+  final Map<String, String> _urlMappings;
+
+  CustomUriResolver(this._urlMappings);
+
+  @override
+  Source resolveAbsolute(Uri uri) {
+    String mapping = _urlMappings[uri.toString()];
+    if (mapping == null) return null;
+
+    Uri fileUri = new Uri.file(mapping);
+    if (!fileUri.isAbsolute) return null;
+
+    JavaFile javaFile = new JavaFile.fromUri(fileUri);
+    return new FileBasedSource(javaFile);
+  }
+}
+
 /**
  * Instances of the class `DartUriResolver` resolve `dart` URI's.
  */
@@ -159,24 +177,6 @@
   static bool isDartUri(Uri uri) => DART_SCHEME == uri.scheme;
 }
 
-class CustomUriResolver extends UriResolver {
-  final Map<String, String> _urlMappings;
-
-  CustomUriResolver(this._urlMappings);
-
-  @override
-  Source resolveAbsolute(Uri uri) {
-    String mapping = _urlMappings[uri.toString()];
-    if (mapping == null) return null;
-
-    Uri fileUri = new Uri.file(mapping);
-    if (!fileUri.isAbsolute) return null;
-
-    JavaFile javaFile = new JavaFile.fromUri(fileUri);
-    return new FileBasedSource.con1(javaFile);
-  }
-}
-
 /**
  * Instances of the class `LineInfo` encapsulate information about line and column information
  * within a source file.
@@ -399,7 +399,13 @@
   /**
    * An empty list of sources.
    */
-  static const List<Source> EMPTY_ARRAY = const <Source>[];
+  @deprecated // Use Source.EMPTY_LIST
+  static const List<Source> EMPTY_ARRAY = EMPTY_LIST;
+
+  /**
+   * An empty list of sources.
+   */
+  static const List<Source> EMPTY_LIST = const <Source>[];
 
   /**
    * Get the contents and timestamp of this source.
@@ -422,9 +428,6 @@
    */
   String get encoding;
 
-  @override
-  Source get source => this;
-
   /**
    * Return the full (long) version of the name that can be displayed to the user to denote this
    * source. For example, for a source representing a file this would typically be the absolute path
@@ -472,6 +475,9 @@
    */
   String get shortName;
 
+  @override
+  Source get source => this;
+
   /**
    * Return the URI from which this source was originally derived.
    *
diff --git a/pkg/analyzer/lib/src/generated/source_io.dart b/pkg/analyzer/lib/src/generated/source_io.dart
index e885cd8f..1c60f5d 100644
--- a/pkg/analyzer/lib/src/generated/source_io.dart
+++ b/pkg/analyzer/lib/src/generated/source_io.dart
@@ -128,11 +128,24 @@
   String _encoding;
 
   /**
+   * Initialize a newly created source object to represent the given [file]. If
+   * a [uri] is given, then it will be used as the URI from which the source was
+   * derived, otherwise a `file:` URI will be created based on the [file].
+   */
+  FileBasedSource(JavaFile file, [Uri uri])
+      : this.uri = (uri == null ? file.toURI() : uri),
+        this.file = file,
+        id = _idTable.putIfAbsent(
+            '${uri == null ? file.toURI() : uri}@${file.getPath()}',
+            () => _idTable.length);
+
+  /**
    * Initialize a newly created source object.
    *
    * @param file the file represented by this source
    */
-  FileBasedSource.con1(JavaFile file) : this.con2(file.toURI(), file);
+  @deprecated // Use new FileBasedSource(file)
+  FileBasedSource.con1(JavaFile file) : this(file);
 
   /**
    * Initialize a newly created source object.
@@ -140,6 +153,7 @@
    * @param file the file represented by this source
    * @param uri the URI from which this source was originally derived
    */
+  @deprecated // Use new FileBasedSource(file, uri)
   FileBasedSource.con2(Uri uri, JavaFile file)
       : uri = uri,
         file = file,
@@ -266,7 +280,7 @@
     if (!isFileUri(uri)) {
       return null;
     }
-    return new FileBasedSource.con2(uri, new JavaFile.fromUri(uri));
+    return new FileBasedSource(new JavaFile.fromUri(uri), uri);
   }
 
   /**
@@ -437,11 +451,11 @@
         if (_isSelfReference(packagesDirectory, canonicalFile)) {
           uri = canonicalFile.toURI();
         }
-        return new FileBasedSource.con2(uri, canonicalFile);
+        return new FileBasedSource(canonicalFile, uri);
       }
     }
-    return new FileBasedSource.con2(
-        uri, getCanonicalFile(_packagesDirectories[0], pkgName, relPath));
+    return new FileBasedSource(
+        getCanonicalFile(_packagesDirectories[0], pkgName, relPath), uri);
   }
 
   @override
@@ -523,7 +537,7 @@
       for (JavaFile dir in _relativeDirectories) {
         JavaFile file = new JavaFile.relative(dir, filePath);
         if (file.exists()) {
-          return new FileBasedSource.con2(uri, file);
+          return new FileBasedSource(file, uri);
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index b853626..f69d2a4 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -622,8 +622,7 @@
                   newFutureType = returnType as InterfaceTypeImpl;
                 } else {
                   InterfaceType futureType = targetType as InterfaceType;
-                  newFutureType =
-                      new InterfaceTypeImpl.con1(futureType.element);
+                  newFutureType = new InterfaceTypeImpl(futureType.element);
                   newFutureType.typeArguments = <DartType>[returnType];
                 }
                 // set the 'then' invocation type
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
index 00ee216..6125a9c 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
@@ -368,15 +368,16 @@
       fieldFormalParameter(null, null, identifier);
 
   static ForEachStatement forEachStatement(DeclaredIdentifier loopVariable,
-      Expression iterator, Statement body) => new ForEachStatement.con1(null,
-      TokenFactory.tokenFromKeyword(Keyword.FOR),
-      TokenFactory.tokenFromType(TokenType.OPEN_PAREN), loopVariable,
-      TokenFactory.tokenFromKeyword(Keyword.IN), iterator,
-      TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
+          Expression iterator, Statement body) =>
+      new ForEachStatement.withDeclaration(null,
+          TokenFactory.tokenFromKeyword(Keyword.FOR),
+          TokenFactory.tokenFromType(TokenType.OPEN_PAREN), loopVariable,
+          TokenFactory.tokenFromKeyword(Keyword.IN), iterator,
+          TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
 
   static ForEachStatement forEachStatement2(
           SimpleIdentifier identifier, Expression iterator, Statement body) =>
-      new ForEachStatement.con2(null,
+      new ForEachStatement.withReference(null,
           TokenFactory.tokenFromKeyword(Keyword.FOR),
           TokenFactory.tokenFromType(TokenType.OPEN_PAREN), identifier,
           TokenFactory.tokenFromKeyword(Keyword.IN), iterator,
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index 497990c..29d6bbb 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -43,7 +43,7 @@
       [List<String> parameterNames]) {
     ClassElementImpl element = new ClassElementImpl(typeName, 0);
     element.supertype = superclassType;
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(element);
     element.type = type;
     if (parameterNames != null) {
       int count = parameterNames.length;
@@ -82,10 +82,15 @@
           [List<String> parameterNames]) =>
       classTypeAlias(typeName, objectType, parameterNames);
 
-  static CompilationUnitElementImpl compilationUnit(String fileName) {
+  static CompilationUnitElementImpl compilationUnit(String fileName,
+      [Source librarySource]) {
     Source source = new NonExistingSource(fileName, UriKind.FILE_URI);
     CompilationUnitElementImpl unit = new CompilationUnitElementImpl(fileName);
     unit.source = source;
+    if (librarySource == null) {
+      librarySource = source;
+    }
+    unit.librarySource = librarySource;
     return unit;
   }
 
@@ -114,7 +119,7 @@
       constructor.parameters = <ParameterElement>[];
     }
     constructor.returnType = type;
-    FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor);
+    FunctionTypeImpl constructorType = new FunctionTypeImpl(constructor);
     constructor.type = constructorType;
     return constructor;
   }
@@ -131,7 +136,7 @@
     // Build the enum.
     //
     ClassElementImpl enumElement = new ClassElementImpl(enumName, -1);
-    InterfaceTypeImpl enumType = new InterfaceTypeImpl.con1(enumElement);
+    InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement);
     enumElement.type = enumType;
     enumElement.supertype = objectType;
     enumElement.enum2 = true;
@@ -164,7 +169,7 @@
       for (int i = 0; i < constantCount; i++) {
         String constantName = constantNames[i];
         FieldElementImpl constantElement =
-            new ConstFieldElementImpl.con2(constantName, -1);
+            new ConstFieldElementImpl(constantName, -1);
         constantElement.static = true;
         constantElement.const3 = true;
         constantElement.type = enumType;
@@ -175,7 +180,7 @@
             new DartObjectImpl(stringType, new StringState(constantName));
         DartObjectImpl value =
             new DartObjectImpl(enumType, new GenericState(fieldMap));
-        constantElement.evaluationResult = new EvaluationResultImpl.con1(value);
+        constantElement.evaluationResult = new EvaluationResultImpl(value);
         fields.add(constantElement);
       }
     }
@@ -209,7 +214,7 @@
     getter.variable = field;
     getter.returnType = type;
     field.getter = getter;
-    FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter);
+    FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
     getter.type = getterType;
     if (!isConst && !isFinal) {
       PropertyAccessorElementImpl setter =
@@ -220,7 +225,7 @@
       setter.parameters =
           <ParameterElement>[requiredParameter2("_$name", type)];
       setter.returnType = VoidTypeImpl.instance;
-      setter.type = new FunctionTypeImpl.con1(setter);
+      setter.type = new FunctionTypeImpl(setter);
       field.setter = setter;
     }
     return field;
@@ -242,7 +247,7 @@
     // We don't create parameter elements because we don't have parameter names
     FunctionElementImpl functionElement =
         new FunctionElementImpl(functionName, 0);
-    FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
+    FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement);
     functionElement.type = functionType;
     // return type
     if (returnElement == null) {
@@ -277,7 +282,7 @@
       List<String> names, List<ClassElement> namedParameters) {
     FunctionElementImpl functionElement =
         new FunctionElementImpl(functionName, 0);
-    FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
+    FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement);
     functionElement.type = functionType;
     // parameters
     int normalCount = normalParameters == null ? 0 : normalParameters.length;
@@ -334,7 +339,7 @@
     functionElement.returnType =
         returnType == null ? VoidTypeImpl.instance : returnType;
     functionElement.parameters = parameters;
-    FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
+    FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement);
     functionElement.type = functionType;
     return functionElement;
   }
@@ -351,7 +356,7 @@
     getter.variable = field;
     getter.returnType = type;
     field.getter = getter;
-    FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter);
+    FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
     getter.type = getterType;
     return getter;
   }
@@ -406,7 +411,7 @@
       method.parameters = parameters;
     }
     method.returnType = returnType;
-    FunctionTypeImpl methodType = new FunctionTypeImpl.con1(method);
+    FunctionTypeImpl methodType = new FunctionTypeImpl(method);
     method.type = methodType;
     return method;
   }
@@ -417,7 +422,7 @@
     MethodElementImpl method = new MethodElementImpl(methodName, 0);
     method.parameters = parameters;
     method.returnType = returnType;
-    FunctionTypeImpl methodType = new FunctionTypeImpl.con1(method);
+    FunctionTypeImpl methodType = new FunctionTypeImpl(method);
     methodType.typeArguments = typeArguments;
     method.type = methodType;
     return method;
@@ -477,7 +482,7 @@
     getter.variable = field;
     getter.returnType = type;
     field.getter = getter;
-    FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter);
+    FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
     getter.type = getterType;
     ParameterElementImpl parameter = requiredParameter2("a", type);
     PropertyAccessorElementImpl setter =
@@ -487,7 +492,7 @@
     setter.variable = field;
     setter.parameters = <ParameterElement>[parameter];
     setter.returnType = VoidTypeImpl.instance;
-    setter.type = new FunctionTypeImpl.con1(setter);
+    setter.type = new FunctionTypeImpl(setter);
     field.setter = setter;
     return setter;
   }
@@ -512,7 +517,7 @@
     getter.variable = variable;
     getter.returnType = type;
     variable.getter = getter;
-    FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter);
+    FunctionTypeImpl getterType = new FunctionTypeImpl(getter);
     getter.type = getterType;
     if (!isConst && !isFinal) {
       PropertyAccessorElementImpl setter =
@@ -524,7 +529,7 @@
       setter.parameters =
           <ParameterElement>[requiredParameter2("_$name", type)];
       setter.returnType = VoidTypeImpl.instance;
-      setter.type = new FunctionTypeImpl.con1(setter);
+      setter.type = new FunctionTypeImpl(setter);
       variable.setter = setter;
     }
     return variable;
diff --git a/pkg/analyzer/lib/src/plugin/engine_plugin.dart b/pkg/analyzer/lib/src/plugin/engine_plugin.dart
index 9cd0577..bed1191 100644
--- a/pkg/analyzer/lib/src/plugin/engine_plugin.dart
+++ b/pkg/analyzer/lib/src/plugin/engine_plugin.dart
@@ -72,9 +72,16 @@
     registerExtension(taskId, BuildPublicNamespaceTask.DESCRIPTOR);
     registerExtension(taskId, BuildSourceClosuresTask.DESCRIPTOR);
     registerExtension(taskId, BuildTypeProviderTask.DESCRIPTOR);
+    registerExtension(taskId, ComputeConstantDependenciesTask.DESCRIPTOR);
+    registerExtension(taskId, ComputeConstantValueTask.DESCRIPTOR);
+    registerExtension(taskId, ContainingLibrariesTask.DESCRIPTOR);
+    registerExtension(taskId, DartErrorsTask.DESCRIPTOR);
+    registerExtension(taskId, EvaluateUnitConstantsTask.DESCRIPTOR);
     registerExtension(taskId, GatherUsedImportedElementsTask.DESCRIPTOR);
     registerExtension(taskId, GatherUsedLocalElementsTask.DESCRIPTOR);
     registerExtension(taskId, GenerateHintsTask.DESCRIPTOR);
+    registerExtension(taskId, LibraryErrorsReadyTask.DESCRIPTOR);
+    registerExtension(taskId, LibraryUnitErrorsTask.DESCRIPTOR);
     registerExtension(taskId, ParseDartTask.DESCRIPTOR);
     registerExtension(taskId, ResolveLibraryTypeNamesTask.DESCRIPTOR);
     registerExtension(taskId, ResolveReferencesTask.DESCRIPTOR);
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 14f0d95..62d68b5 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -8,6 +8,7 @@
 import 'dart:math' as math;
 
 import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/constant.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask;
 import 'package:analyzer/src/generated/error.dart';
@@ -19,66 +20,108 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/task/general.dart';
+import 'package:analyzer/src/task/model.dart';
 import 'package:analyzer/task/dart.dart';
 import 'package:analyzer/task/general.dart';
 import 'package:analyzer/task/model.dart';
 
 /**
+ * The [ResultCachingPolicy] for ASTs.
+ */
+const ResultCachingPolicy AST_CACHING_POLICY =
+    const SimpleResultCachingPolicy(256, 64);
+
+/**
  * The errors produced while resolving a library directives.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
-final ResultDescriptor<List<AnalysisError>> BUILD_DIRECTIVES_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'BUILD_DIRECTIVES_ERRORS', AnalysisError.NO_ERRORS,
-        contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> BUILD_DIRECTIVES_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'BUILD_DIRECTIVES_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * The errors produced while building function type aliases.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
-final ResultDescriptor<List<AnalysisError>> BUILD_FUNCTION_TYPE_ALIASES_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'BUILD_FUNCTION_TYPE_ALIASES_ERRORS', AnalysisError.NO_ERRORS,
-        contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> BUILD_FUNCTION_TYPE_ALIASES_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'BUILD_FUNCTION_TYPE_ALIASES_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * The errors produced while building a library element.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
-final ResultDescriptor<List<AnalysisError>> BUILD_LIBRARY_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'BUILD_LIBRARY_ERRORS', AnalysisError.NO_ERRORS,
-        contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> BUILD_LIBRARY_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'BUILD_LIBRARY_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
- * The [ClassElement]s of a [LibrarySpecificUnit].
+ * The [ClassElement]s of a [Source] representing a Dart library.
+ *
+ * The list contains the elements for all of the classes defined in the library,
+ * not just those in the defining compilation unit. The list will be empty if
+ * there are no classes, but will not be `null`.
  */
 final ListResultDescriptor<ClassElement> CLASS_ELEMENTS =
-    new ListResultDescriptor<ClassElement>('CLASS_ELEMENTS', null);
+    new ListResultDescriptor<ClassElement>('CLASS_ELEMENTS', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
+
+/**
+ * A list of the [ConstantEvaluationTarget]s defined in a unit.  This includes
+ * constants defined at top level, statically inside classes, and local to
+ * functions, as well as constant constructors, annotations, and default values
+ * of parameters to constant constructors.
+ */
+final ListResultDescriptor<ConstantEvaluationTarget> COMPILATION_UNIT_CONSTANTS =
+    new ListResultDescriptor<ConstantEvaluationTarget>(
+        'COMPILATION_UNIT_CONSTANTS', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The element model associated with a single compilation unit.
  *
- * The result is only available for targets representing a Dart compilation unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
 final ResultDescriptor<CompilationUnitElement> COMPILATION_UNIT_ELEMENT =
     new ResultDescriptor<CompilationUnitElement>(
-        'COMPILATION_UNIT_ELEMENT', null);
+        'COMPILATION_UNIT_ELEMENT', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
+
+/**
+ * The list of [ConstantEvaluationTarget]s on which the target constant element
+ * depends.
+ *
+ * The result is only available for targets representing a
+ * [ConstantEvaluationTarget] (i.e. a constant variable declaration, a constant
+ * constructor, or a parameter element with a default value).
+ */
+final ListResultDescriptor<ConstantEvaluationTarget> CONSTANT_DEPENDENCIES =
+    new ListResultDescriptor<ConstantEvaluationTarget>(
+        'CONSTANT_DEPENDENCIES', const <ConstantEvaluationTarget>[]);
+
+/**
+ * A [ConstantEvaluationTarget] that has been successfully constant-evaluated.
+ *
+ * TODO(paulberry): is ELEMENT_CACHING_POLICY the correct caching policy?
+ */
+final ResultDescriptor<ConstantEvaluationTarget> CONSTANT_VALUE =
+    new ResultDescriptor<ConstantEvaluationTarget>('CONSTANT_VALUE', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The [ConstructorElement]s of a [ClassElement].
  */
-final ResultDescriptor<List<ConstructorElement>> CONSTRUCTORS =
-    new ResultDescriptor<List<ConstructorElement>>('CONSTRUCTORS', null);
+final ListResultDescriptor<ConstructorElement> CONSTRUCTORS =
+    new ListResultDescriptor<ConstructorElement>('CONSTRUCTORS', null);
 
 /**
  * The errors produced while building a [ClassElement] constructors.
@@ -87,15 +130,29 @@
  *
  * The result is only available for targets representing a [ClassElement].
  */
-final ResultDescriptor<List<AnalysisError>> CONSTRUCTORS_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
+final ListResultDescriptor<AnalysisError> CONSTRUCTORS_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
         'CONSTRUCTORS_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
+ * The sources representing the libraries that include a given source as a part.
+ *
+ * The result is only available for [Source]s representing a compilation unit.
+ */
+final ListResultDescriptor<Source> CONTAINING_LIBRARIES =
+    new ListResultDescriptor<Source>('CONTAINING_LIBRARIES', Source.EMPTY_LIST);
+
+/**
+ * The [ResultCachingPolicy] for [Element]s.
+ */
+const ResultCachingPolicy ELEMENT_CACHING_POLICY =
+    const SimpleResultCachingPolicy(-1, -1);
+
+/**
  * The sources representing the export closure of a library.
  * The [Source]s include only library sources, not their units.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ListResultDescriptor<Source> EXPORT_SOURCE_CLOSURE =
     new ListResultDescriptor<Source>('EXPORT_SOURCE_CLOSURE', null);
@@ -105,17 +162,17 @@
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart compilation unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
-final ResultDescriptor<List<AnalysisError>> HINTS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'HINT_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> HINTS =
+    new ListResultDescriptor<AnalysisError>(
+        'HINT_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * The sources representing the import closure of a library.
  * The [Source]s include only library sources, not their units.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ListResultDescriptor<Source> IMPORT_SOURCE_CLOSURE =
     new ListResultDescriptor<Source>('IMPORT_SOURCE_CLOSURE', null);
@@ -126,10 +183,11 @@
  * The [LibraryElement] and its [CompilationUnitElement]s are attached to each
  * other. Directives 'library', 'part' and 'part of' are resolved.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT1 =
-    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT1', null);
+    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT1', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The partial [LibraryElement] associated with a library.
@@ -137,20 +195,22 @@
  * In addition to [LIBRARY_ELEMENT1] [LibraryElement.imports] and
  * [LibraryElement.exports] are set.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT2 =
-    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT2', null);
+    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT2', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The partial [LibraryElement] associated with a library.
  *
  * In addition to [LIBRARY_ELEMENT2] the [LibraryElement.publicNamespace] is set.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT3 =
-    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT3', null);
+    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT3', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The partial [LibraryElement] associated with a library.
@@ -161,119 +221,148 @@
  *
  * Also [LibraryElement.exportNamespace] is set.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT4 =
-    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT4', null);
+    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT4', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The partial [LibraryElement] associated with a library.
  *
  * [LIBRARY_ELEMENT4] plus [RESOLVED_UNIT4] for every unit.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT5 =
-    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT5', null);
+    new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT5', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
+
+/**
+ * The flag specifying whether all analysis errors are computed in a specific
+ * library.
+ *
+ * The result is only available for [Source]s representing a library.
+ */
+final ResultDescriptor<bool> LIBRARY_ERRORS_READY =
+    new ResultDescriptor<bool>('LIBRARY_ERRORS_READY', false);
+
+/**
+ * The analysis errors associated with a compilation unit in a specific library.
+ *
+ * The result is only available for [LibrarySpecificUnit]s.
+ */
+final ListResultDescriptor<AnalysisError> LIBRARY_UNIT_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'LIBRARY_UNIT_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * The errors produced while parsing a compilation unit.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart compilation unit.
+ * The result is only available for [Source]s representing a compilation unit.
  */
-final ResultDescriptor<List<AnalysisError>> PARSE_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'PARSE_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> PARSE_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'PARSE_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * The errors produced while resolving references.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
-final ResultDescriptor<List<AnalysisError>> RESOLVE_REFERENCES_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'RESOLVE_REFERENCES_ERRORS', AnalysisError.NO_ERRORS,
-        contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> RESOLVE_REFERENCES_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'RESOLVE_REFERENCES_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * The errors produced while resolving type names.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
-final ResultDescriptor<List<AnalysisError>> RESOLVE_TYPE_NAMES_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'RESOLVE_TYPE_NAMES_ERRORS', AnalysisError.NO_ERRORS,
-        contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> RESOLVE_TYPE_NAMES_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'RESOLVE_TYPE_NAMES_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * The partially resolved [CompilationUnit] associated with a unit.
  *
  * All declarations bound to the element defined by the declaration.
  *
- * The result is only available for targets representing a unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT1 =
-    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null);
+    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT1', null,
+        cachingPolicy: AST_CACHING_POLICY);
 
 /**
  * The partially resolved [CompilationUnit] associated with a unit.
  *
  * All the enum member elements are built.
  *
- * The result is only available for targets representing a unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT2 =
-    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT2', null);
+    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT2', null,
+        cachingPolicy: AST_CACHING_POLICY);
 
 /**
  * The partially resolved [CompilationUnit] associated with a unit.
  *
  * All the function type aliases are resolved.
  *
- * The result is only available for targets representing a unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT3 =
-    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT3', null);
+    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT3', null,
+        cachingPolicy: AST_CACHING_POLICY);
 
 /**
  * The partially resolved [CompilationUnit] associated with a unit.
  *
  * [RESOLVED_UNIT3] with resolved type names.
  *
- * The result is only available for targets representing a unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT4 =
-    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT4', null);
+    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT4', null,
+        cachingPolicy: AST_CACHING_POLICY);
 
 /**
  * The partially resolved [CompilationUnit] associated with a unit.
  *
  * [RESOLVED_UNIT4] plus resolved local variables and formal parameters.
  *
- * The result is only available for targets representing a unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT5 =
-    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT5', null);
+    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT5', null,
+        cachingPolicy: AST_CACHING_POLICY);
 
 /**
  * The errors produced while scanning a compilation unit.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart compilation unit.
+ * The result is only available for [Source]s representing a compilation unit.
  */
-final ResultDescriptor<List<AnalysisError>> SCAN_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'SCAN_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> SCAN_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'SCAN_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
- * The [TypeProvider] of the context.
+ * The [ResultCachingPolicy] for [TOKEN_STREAM].
+ */
+const ResultCachingPolicy TOKEN_STREAM_CACHING_POLICY =
+    const SimpleResultCachingPolicy(1, 1);
+
+/**
+ * The [TypeProvider] of the [AnalysisContext].
  */
 final ResultDescriptor<TypeProvider> TYPE_PROVIDER =
     new ResultDescriptor<TypeProvider>('TYPE_PROVIDER', null);
@@ -282,24 +371,26 @@
  * The [UsedImportedElements] of a [LibrarySpecificUnit].
  */
 final ResultDescriptor<UsedImportedElements> USED_IMPORTED_ELEMENTS =
-    new ResultDescriptor<UsedImportedElements>('USED_IMPORTED_ELEMENTS', null);
+    new ResultDescriptor<UsedImportedElements>('USED_IMPORTED_ELEMENTS', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The [UsedLocalElements] of a [LibrarySpecificUnit].
  */
 final ResultDescriptor<UsedLocalElements> USED_LOCAL_ELEMENTS =
-    new ResultDescriptor<UsedLocalElements>('USED_LOCAL_ELEMENTS', null);
+    new ResultDescriptor<UsedLocalElements>('USED_LOCAL_ELEMENTS', null,
+        cachingPolicy: ELEMENT_CACHING_POLICY);
 
 /**
  * The errors produced while verifying a compilation unit.
  *
  * The list will be empty if there were no errors, but will not be `null`.
  *
- * The result is only available for targets representing a Dart compilation unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
-final ResultDescriptor<List<AnalysisError>> VERIFY_ERRORS =
-    new ResultDescriptor<List<AnalysisError>>(
-        'VERIFY_ERRORS', AnalysisError.NO_ERRORS, contributesTo: DART_ERRORS);
+final ListResultDescriptor<AnalysisError> VERIFY_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'VERIFY_ERRORS', AnalysisError.NO_ERRORS);
 
 /**
  * A task that builds implicit constructors for a [ClassElement], or keeps
@@ -358,7 +449,7 @@
       }
       if (_findForwardedConstructors(classElement, superType, callback)) {
         if (implicitConstructors.isEmpty) {
-          errors.add(new AnalysisError.con2(classElement.source,
+          errors.add(new AnalysisError(classElement.source,
               classElement.nameOffset, classElement.name.length,
               CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
               [superType.element.name]));
@@ -381,7 +472,7 @@
       if (_findForwardedConstructors(classElement, superType, callback) &&
           !constructorFound) {
         SourceRange withRange = classElement.withClauseRange;
-        errors.add(new AnalysisError.con2(classElement.source, withRange.offset,
+        errors.add(new AnalysisError(classElement.source, withRange.offset,
             withRange.length, CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
             [superType.element.name]));
         classElement.mixinErrorsReported = true;
@@ -460,7 +551,7 @@
       }
       implicitConstructor.parameters = implicitParameters;
     }
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(implicitConstructor);
+    FunctionTypeImpl type = new FunctionTypeImpl(implicitConstructor);
     type.typeArguments = classType.typeArguments;
     implicitConstructor.type = type;
     return implicitConstructor;
@@ -531,12 +622,6 @@
  */
 class BuildCompilationUnitElementTask extends SourceBasedAnalysisTask {
   /**
-   * The name of the input whose value is the line information for the
-   * compilation unit.
-   */
-  static const String LINE_INFO_INPUT_NAME = 'LINE_INFO_INPUT_NAME';
-
-  /**
    * The name of the input whose value is the AST for the compilation unit.
    */
   static const String PARSED_UNIT_INPUT_NAME = 'PARSED_UNIT_INPUT_NAME';
@@ -547,9 +632,9 @@
   static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
       'BuildCompilationUnitElementTask', createTask, buildInputs,
       <ResultDescriptor>[
-    CLASS_ELEMENTS,
     COMPILATION_UNIT_ELEMENT,
-    RESOLVED_UNIT1
+    RESOLVED_UNIT1,
+    COMPILATION_UNIT_CONSTANTS
   ]);
 
   /**
@@ -568,6 +653,7 @@
     //
     // Prepare inputs.
     //
+    LibrarySpecificUnit librarySpecificUnit = target;
     Source source = getRequiredSource();
     CompilationUnit unit = getRequiredInput(PARSED_UNIT_INPUT_NAME);
     //
@@ -575,13 +661,20 @@
     //
     unit = AstCloner.clone(unit);
     CompilationUnitBuilder builder = new CompilationUnitBuilder();
-    CompilationUnitElement element = builder.buildCompilationUnit(source, unit);
+    CompilationUnitElement element =
+        builder.buildCompilationUnit(source, unit, librarySpecificUnit.library);
+    ConstantFinder constantFinder =
+        new ConstantFinder(context, source, librarySpecificUnit.library);
+    unit.accept(constantFinder);
+    List<ConstantEvaluationTarget> constants =
+        new List<ConstantEvaluationTarget>.from(
+            constantFinder.constantsToCompute);
     //
     // Record outputs.
     //
-    outputs[CLASS_ELEMENTS] = element.types;
     outputs[COMPILATION_UNIT_ELEMENT] = element;
     outputs[RESOLVED_UNIT1] = unit;
+    outputs[COMPILATION_UNIT_CONSTANTS] = constants;
   }
 
   /**
@@ -724,9 +817,8 @@
               ErrorCode errorCode = (importElement.isDeferred
                   ? StaticWarningCode.IMPORT_OF_NON_LIBRARY
                   : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY);
-              errors.add(new AnalysisError.con2(importedSource,
-                  uriLiteral.offset, uriLiteral.length, errorCode,
-                  [uriLiteral.toSource()]));
+              errors.add(new AnalysisError(importedSource, uriLiteral.offset,
+                  uriLiteral.length, errorCode, [uriLiteral.toSource()]));
             }
           }
         }
@@ -751,9 +843,8 @@
             directive.element = exportElement;
             exports.add(exportElement);
             if (exportSourceKindMap[exportedSource] != SourceKind.LIBRARY) {
-              errors.add(new AnalysisError.con2(exportedSource,
-                  uriLiteral.offset, uriLiteral.length,
-                  CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
+              errors.add(new AnalysisError(exportedSource, uriLiteral.offset,
+                  uriLiteral.length, CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
                   [uriLiteral.toSource()]));
             }
           }
@@ -1215,7 +1306,7 @@
           String partLibraryName =
               _getPartLibraryName(partSource, partUnit, directivesToResolve);
           if (partLibraryName == null) {
-            errors.add(new AnalysisError.con2(librarySource, partUri.offset,
+            errors.add(new AnalysisError(librarySource, partUri.offset,
                 partUri.length, CompileTimeErrorCode.PART_OF_NON_PART,
                 [partUri.toSource()]));
           } else if (libraryNameNode == null) {
@@ -1225,7 +1316,7 @@
               partsLibraryName = null;
             }
           } else if (libraryNameNode.name != partLibraryName) {
-            errors.add(new AnalysisError.con2(librarySource, partUri.offset,
+            errors.add(new AnalysisError(librarySource, partUri.offset,
                 partUri.length, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [
               libraryNameNode.name,
               partLibraryName
@@ -1243,11 +1334,11 @@
       AnalysisError error;
       if (partsLibraryName != _UNKNOWN_LIBRARY_NAME &&
           partsLibraryName != null) {
-        error = new AnalysisErrorWithProperties.con1(librarySource,
+        error = new AnalysisErrorWithProperties(librarySource, 0, 0,
             ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART)
           ..setProperty(ErrorProperty.PARTS_LIBRARY_NAME, partsLibraryName);
       } else {
-        error = new AnalysisError.con1(librarySource,
+        error = new AnalysisError(librarySource, 0, 0,
             ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART);
       }
       errors.add(error);
@@ -1571,6 +1662,381 @@
 }
 
 /**
+ * A task that computes [CONSTANT_DEPENDENCIES] for a constant.
+ */
+class ComputeConstantDependenciesTask extends ConstantEvaluationAnalysisTask {
+  /**
+   * The name of the [RESOLVED_UNIT] input.
+   */
+  static const String UNIT_INPUT = 'UNIT_INPUT';
+
+  static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+      'ComputeConstantDependenciesTask', createTask, buildInputs,
+      <ResultDescriptor>[CONSTANT_DEPENDENCIES]);
+
+  ComputeConstantDependenciesTask(
+      InternalAnalysisContext context, ConstantEvaluationTarget constant)
+      : super(context, constant);
+
+  @override
+  TaskDescriptor get descriptor => DESCRIPTOR;
+
+  @override
+  void internalPerform() {
+    //
+    // Prepare inputs.
+    //
+    // Note: UNIT_INPUT is not needed.  It is merely a bookkeeping dependency
+    // to ensure that resolution has occurred before we attempt to determine
+    // constant dependencies.
+    //
+    ConstantEvaluationTarget constant = target;
+    AnalysisContext context = constant.context;
+    TypeProvider typeProvider = context.typeProvider;
+    //
+    // Compute dependencies.
+    //
+    List<ConstantEvaluationTarget> dependencies = <ConstantEvaluationTarget>[];
+    new ConstantEvaluationEngine(typeProvider, context.declaredVariables)
+        .computeDependencies(constant, dependencies.add);
+    //
+    // Record outputs.
+    //
+    outputs[CONSTANT_DEPENDENCIES] = dependencies;
+  }
+
+  /**
+   * Return a map from the names of the inputs of this kind of task to the task
+   * input descriptors describing those inputs for a task with the
+   * given [target].
+   */
+  static Map<String, TaskInput> buildInputs(ConstantEvaluationTarget target) {
+    if (target is Element) {
+      CompilationUnitElementImpl unit = (target as Element)
+          .getAncestor((Element element) => element is CompilationUnitElement);
+      return <String, TaskInput>{
+        UNIT_INPUT: RESOLVED_UNIT
+            .of(new LibrarySpecificUnit(unit.librarySource, target.source))
+      };
+    } else if (target is ConstantEvaluationTarget_Annotation) {
+      return <String, TaskInput>{
+        UNIT_INPUT: RESOLVED_UNIT
+            .of(new LibrarySpecificUnit(target.librarySource, target.source))
+      };
+    } else {
+      // Should never happen.
+      assert(false);
+      return <String, TaskInput>{};
+    }
+  }
+
+  /**
+   * Create a [ResolveReferencesTask] based on the given [target] in
+   * the given [context].
+   */
+  static ComputeConstantDependenciesTask createTask(
+      AnalysisContext context, AnalysisTarget target) {
+    return new ComputeConstantDependenciesTask(context, target);
+  }
+}
+
+/**
+ * A task that computes the value of a constant ([CONSTANT_VALUE]) and
+ * stores it in the element model.
+ */
+class ComputeConstantValueTask extends ConstantEvaluationAnalysisTask {
+  /**
+   * The name of the input which ensures that dependent constants are evaluated
+   * before the target.
+   */
+  static const String DEPENDENCIES_INPUT = 'DEPENDENCIES_INPUT';
+
+  static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+      'ComputeConstantValueTask', createTask, buildInputs,
+      <ResultDescriptor>[CONSTANT_VALUE]);
+
+  ComputeConstantValueTask(
+      InternalAnalysisContext context, ConstantEvaluationTarget constant)
+      : super(context, constant);
+
+  @override
+  TaskDescriptor get descriptor => DESCRIPTOR;
+
+  @override
+  void internalPerform() {
+    //
+    // Prepare inputs.
+    //
+    // Note: DEPENDENCIES_INPUT is not needed.  It is merely a bookkeeping
+    // dependency to ensure that the constants that this constant depends on
+    // are computed first.
+    ConstantEvaluationTarget constant = target;
+    AnalysisContext context = constant.context;
+    TypeProvider typeProvider = context.typeProvider;
+    //
+    // Compute the value of the constant.
+    //
+    new ConstantEvaluationEngine(typeProvider, context.declaredVariables)
+        .computeConstantValue(constant);
+    //
+    // Record outputs.
+    //
+    outputs[CONSTANT_VALUE] = constant;
+  }
+
+  /**
+   * Return a map from the names of the inputs of this kind of task to the task
+   * input descriptors describing those inputs for a task with the given
+   * [target].
+   */
+  static Map<String, TaskInput> buildInputs(ConstantEvaluationTarget target) {
+    return <String, TaskInput>{
+      DEPENDENCIES_INPUT:
+          CONSTANT_DEPENDENCIES.of(target).toListOf(CONSTANT_VALUE)
+    };
+  }
+
+  /**
+   * Create a [ComputeConstantValueTask] based on the given [target] in the
+   * given [context].
+   */
+  static ComputeConstantValueTask createTask(
+      AnalysisContext context, AnalysisTarget target) {
+    return new ComputeConstantValueTask(context, target);
+  }
+}
+
+/**
+ * A base class for analysis tasks whose target is expected to be a
+ * [ConstantEvaluationTarget].
+ */
+abstract class ConstantEvaluationAnalysisTask extends AnalysisTask {
+  /**
+   * Initialize a newly created task to perform analysis within the given
+   * [context] in order to produce results for the given [constant].
+   */
+  ConstantEvaluationAnalysisTask(
+      AnalysisContext context, ConstantEvaluationTarget constant)
+      : super(context, constant);
+
+  @override
+  String get description {
+    Source source = target.source;
+    String sourceName = source == null ? '<unknown source>' : source.fullName;
+    return '${descriptor.name} for element $target in source $sourceName';
+  }
+}
+
+/**
+ * Interface for [AnalysisTarget]s for which constant evaluation can be
+ * performed.
+ */
+abstract class ConstantEvaluationTarget extends AnalysisTarget {
+  /**
+   * Return the [AnalysisContext] which should be used to evaluate this
+   * constant.
+   */
+  AnalysisContext get context;
+}
+
+/**
+ * A task that computes a list of the libraries containing the target source.
+ */
+class ContainingLibrariesTask extends SourceBasedAnalysisTask {
+  /**
+   * The task descriptor describing this kind of task.
+   */
+  static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+      'ContainingLibrariesTask', createTask, buildInputs,
+      <ResultDescriptor>[CONTAINING_LIBRARIES]);
+
+  ContainingLibrariesTask(
+      InternalAnalysisContext context, AnalysisTarget target)
+      : super(context, target);
+
+  @override
+  TaskDescriptor get descriptor => DESCRIPTOR;
+
+  @override
+  void internalPerform() {
+    // TODO(brianwilkerson) This value can change as new libraries are analyzed
+    // so we need some way of making sure that this result is removed from the
+    // cache appropriately.
+    Source source = getRequiredSource();
+    outputs[CONTAINING_LIBRARIES] = context.getLibrariesContaining(source);
+  }
+
+  /**
+   * Return a map from the names of the inputs of this kind of task to the task
+   * input descriptors describing those inputs for a task with the
+   * given [target].
+   */
+  static Map<String, TaskInput> buildInputs(Source target) {
+    return <String, TaskInput>{};
+  }
+
+  /**
+   * Create a [ContainingLibrariesTask] based on the given [target] in the given
+   * [context].
+   */
+  static ContainingLibrariesTask createTask(
+      AnalysisContext context, AnalysisTarget target) {
+    return new ContainingLibrariesTask(context, target);
+  }
+}
+
+/**
+ * A task that merges all of the errors for a single source into a single list
+ * of errors.
+ */
+class DartErrorsTask extends SourceBasedAnalysisTask {
+  /**
+   * The name of the [BUILD_DIRECTIVES_ERRORS] input.
+   */
+  static const String BUILD_DIRECTIVES_ERRORS_INPUT = 'BUILD_DIRECTIVES_ERRORS';
+
+  /**
+   * The name of the [BUILD_LIBRARY_ERRORS] input.
+   */
+  static const String BUILD_LIBRARY_ERRORS_INPUT = 'BUILD_LIBRARY_ERRORS';
+
+  /**
+   * The name of the [LIBRARY_UNIT_ERRORS] input.
+   */
+  static const String LIBRARY_UNIT_ERRORS_INPUT = 'LIBRARY_UNIT_ERRORS';
+
+  /**
+   * The name of the [PARSE_ERRORS] input.
+   */
+  static const String PARSE_ERRORS_INPUT = 'PARSE_ERRORS';
+
+  /**
+   * The name of the [SCAN_ERRORS] input.
+   */
+  static const String SCAN_ERRORS_INPUT = 'SCAN_ERRORS';
+
+  /**
+   * The task descriptor describing this kind of task.
+   */
+  static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('DartErrorsTask',
+      createTask, buildInputs, <ResultDescriptor>[DART_ERRORS]);
+
+  DartErrorsTask(InternalAnalysisContext context, AnalysisTarget target)
+      : super(context, target);
+
+  @override
+  TaskDescriptor get descriptor => DESCRIPTOR;
+
+  @override
+  void internalPerform() {
+    //
+    // Prepare inputs.
+    //
+    List<List<AnalysisError>> errorLists = <List<AnalysisError>>[];
+    errorLists.add(getRequiredInput(BUILD_DIRECTIVES_ERRORS_INPUT));
+    errorLists.add(getRequiredInput(BUILD_LIBRARY_ERRORS_INPUT));
+    errorLists.add(getRequiredInput(PARSE_ERRORS_INPUT));
+    errorLists.add(getRequiredInput(SCAN_ERRORS_INPUT));
+    Map<Source, List<AnalysisError>> unitErrors =
+        getRequiredInput(LIBRARY_UNIT_ERRORS_INPUT);
+    for (List<AnalysisError> errors in unitErrors.values) {
+      errorLists.add(errors);
+    }
+    //
+    // Record outputs.
+    //
+    outputs[DART_ERRORS] = AnalysisError.mergeLists(errorLists);
+  }
+
+  /**
+   * Return a map from the names of the inputs of this kind of task to the task
+   * input descriptors describing those inputs for a task with the
+   * given [target].
+   */
+  static Map<String, TaskInput> buildInputs(Source target) {
+    return <String, TaskInput>{
+      BUILD_DIRECTIVES_ERRORS_INPUT: BUILD_DIRECTIVES_ERRORS.of(target),
+      BUILD_LIBRARY_ERRORS_INPUT: BUILD_LIBRARY_ERRORS.of(target),
+      PARSE_ERRORS_INPUT: PARSE_ERRORS.of(target),
+      SCAN_ERRORS_INPUT: SCAN_ERRORS.of(target),
+      LIBRARY_UNIT_ERRORS_INPUT: CONTAINING_LIBRARIES
+          .of(target)
+          .toMap((Source library) {
+        LibrarySpecificUnit unit = new LibrarySpecificUnit(library, target);
+        return LIBRARY_UNIT_ERRORS.of(unit);
+      })
+    };
+  }
+
+  /**
+   * Create a [DartErrorsTask] based on the given [target] in the given
+   * [context].
+   */
+  static DartErrorsTask createTask(
+      AnalysisContext context, AnalysisTarget target) {
+    return new DartErrorsTask(context, target);
+  }
+}
+
+/**
+ * A task that builds [CONSTANT_RESOLVED_UNIT] for a unit.
+ */
+class EvaluateUnitConstantsTask extends SourceBasedAnalysisTask {
+  /**
+   * The name of the [RESOLVED_UNIT] input.
+   */
+  static const String UNIT_INPUT = 'UNIT_INPUT';
+
+  /**
+   * The name of the [CONSTANT_VALUE] input.
+   */
+  static const String CONSTANT_VALUES = 'CONSTANT_VALUES';
+
+  /**
+   * The task descriptor describing this kind of task.
+   */
+  static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+      'EvaluateUnitConstantsTask', createTask, buildInputs,
+      <ResultDescriptor>[CONSTANT_RESOLVED_UNIT]);
+
+  EvaluateUnitConstantsTask(AnalysisContext context, LibrarySpecificUnit target)
+      : super(context, target);
+
+  @override
+  TaskDescriptor get descriptor => DESCRIPTOR;
+
+  @override
+  void internalPerform() {
+    // No actual work needs to be performed; the task manager will ensure that
+    // all constants are evaluated before this method is called.
+    CompilationUnit unit = getRequiredInput(UNIT_INPUT);
+    outputs[CONSTANT_RESOLVED_UNIT] = unit;
+  }
+
+  /**
+   * Return a map from the names of the inputs of this kind of task to the task
+   * input descriptors describing those inputs for a task with the
+   * given [target].
+   */
+  static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) {
+    return <String, TaskInput>{
+      UNIT_INPUT: RESOLVED_UNIT.of(target),
+      CONSTANT_VALUES:
+          COMPILATION_UNIT_CONSTANTS.of(target).toListOf(CONSTANT_VALUE)
+    };
+  }
+
+  /**
+   * Create an [EvaluateUnitConstantsTask] based on the given [target] in
+   * the given [context].
+   */
+  static EvaluateUnitConstantsTask createTask(
+      AnalysisContext context, LibrarySpecificUnit target) {
+    return new EvaluateUnitConstantsTask(context, target);
+  }
+}
+
+/**
  * The helper for building the export [Namespace] of a [LibraryElement].
  */
 class ExportNamespaceBuilder {
@@ -1798,7 +2264,7 @@
   /**
    * The name of the [RESOLVED_UNIT] input.
    */
-  static const String UNIT_INPUT = 'UNIT_INPUT';
+  static const String RESOLVED_UNIT_INPUT = 'RESOLVED_UNIT';
 
   /**
    * The name of a list of [USED_LOCAL_ELEMENTS] for each library unit input.
@@ -1830,7 +2296,7 @@
     //
     // Prepare inputs.
     //
-    CompilationUnit unit = getRequiredInput(UNIT_INPUT);
+    CompilationUnit unit = getRequiredInput(RESOLVED_UNIT_INPUT);
     List<UsedImportedElements> usedImportedElementsList =
         getRequiredInput(USED_IMPORTED_ELEMENTS_INPUT);
     List<UsedLocalElements> usedLocalElementsList =
@@ -1883,7 +2349,7 @@
   static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) {
     Source libSource = target.library;
     return <String, TaskInput>{
-      UNIT_INPUT: RESOLVED_UNIT.of(target),
+      RESOLVED_UNIT_INPUT: RESOLVED_UNIT.of(target),
       USED_LOCAL_ELEMENTS_INPUT: UNITS.of(libSource).toList((unit) {
         LibrarySpecificUnit target = new LibrarySpecificUnit(libSource, unit);
         return USED_LOCAL_ELEMENTS.of(target);
@@ -1906,20 +2372,136 @@
 }
 
 /**
- * The memento for [ParseDartTask].
+ * A task computes all of the errors of all of the units for a single
+ * library source and sets the [LIBRARY_ERRORS_READY] flag.
  */
-class ParseDartMemento {
-  final Token inputTokenStream;
-  final List<Source> exportedLibraries;
-  final List<Source> importedLibraries;
-  final List<Source> includedParts;
-  final List<AnalysisError> parseErrors;
-  final CompilationUnit parsedUnit;
-  final SourceKind sourceKind;
-  final List<Source> units;
-  ParseDartMemento(this.inputTokenStream, this.exportedLibraries,
-      this.importedLibraries, this.includedParts, this.parseErrors,
-      this.parsedUnit, this.sourceKind, this.units);
+class LibraryErrorsReadyTask extends SourceBasedAnalysisTask {
+  /**
+   * The task descriptor describing this kind of task.
+   */
+  static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+      'LibraryErrorsReadyTask', createTask, buildInputs,
+      <ResultDescriptor>[LIBRARY_ERRORS_READY]);
+
+  LibraryErrorsReadyTask(InternalAnalysisContext context, AnalysisTarget target)
+      : super(context, target);
+
+  @override
+  TaskDescriptor get descriptor => DESCRIPTOR;
+
+  @override
+  void internalPerform() {
+    outputs[LIBRARY_ERRORS_READY] = true;
+  }
+
+  /**
+   * Return a map from the names of the inputs of this kind of task to the task
+   * input descriptors describing those inputs for a task with the
+   * given [library].
+   */
+  static Map<String, TaskInput> buildInputs(Source library) {
+    return <String, TaskInput>{
+      'allErrors': UNITS.of(library).toListOf(DART_ERRORS)
+    };
+  }
+
+  /**
+   * Create a [LibraryErrorsReadyTask] based on the given [target] in the given
+   * [context].
+   */
+  static LibraryErrorsReadyTask createTask(
+      AnalysisContext context, AnalysisTarget target) {
+    return new LibraryErrorsReadyTask(context, target);
+  }
+}
+
+/**
+ * A task that merges all of the errors for a single source into a single list
+ * of errors.
+ */
+class LibraryUnitErrorsTask extends SourceBasedAnalysisTask {
+  /**
+   * The name of the [BUILD_FUNCTION_TYPE_ALIASES_ERRORS] input.
+   */
+  static const String BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT =
+      'BUILD_FUNCTION_TYPE_ALIASES_ERRORS';
+
+  /**
+   * The name of the [HINTS] input.
+   */
+  static const String HINTS_INPUT = 'HINTS';
+
+  /**
+   * The name of the [RESOLVE_REFERENCES_ERRORS] input.
+   */
+  static const String RESOLVE_REFERENCES_ERRORS_INPUT =
+      'RESOLVE_REFERENCES_ERRORS';
+
+  /**
+   * The name of the [RESOLVE_TYPE_NAMES_ERRORS] input.
+   */
+  static const String RESOLVE_TYPE_NAMES_ERRORS_INPUT =
+      'RESOLVE_TYPE_NAMES_ERRORS';
+
+  /**
+   * The name of the [VERIFY_ERRORS] input.
+   */
+  static const String VERIFY_ERRORS_INPUT = 'VERIFY_ERRORS';
+
+  /**
+   * The task descriptor describing this kind of task.
+   */
+  static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+      'LibraryUnitErrorsTask', createTask, buildInputs,
+      <ResultDescriptor>[LIBRARY_UNIT_ERRORS]);
+
+  LibraryUnitErrorsTask(InternalAnalysisContext context, AnalysisTarget target)
+      : super(context, target);
+
+  @override
+  TaskDescriptor get descriptor => DESCRIPTOR;
+
+  @override
+  void internalPerform() {
+    //
+    // Prepare inputs.
+    //
+    List<List<AnalysisError>> errorLists = <List<AnalysisError>>[];
+    errorLists.add(getRequiredInput(BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT));
+    errorLists.add(getRequiredInput(HINTS_INPUT));
+    errorLists.add(getRequiredInput(RESOLVE_REFERENCES_ERRORS_INPUT));
+    errorLists.add(getRequiredInput(RESOLVE_TYPE_NAMES_ERRORS_INPUT));
+    errorLists.add(getRequiredInput(VERIFY_ERRORS_INPUT));
+    //
+    // Record outputs.
+    //
+    outputs[LIBRARY_UNIT_ERRORS] = AnalysisError.mergeLists(errorLists);
+  }
+
+  /**
+   * Return a map from the names of the inputs of this kind of task to the task
+   * input descriptors describing those inputs for a task with the
+   * given [unit].
+   */
+  static Map<String, TaskInput> buildInputs(LibrarySpecificUnit unit) {
+    return <String, TaskInput>{
+      BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT:
+          BUILD_FUNCTION_TYPE_ALIASES_ERRORS.of(unit),
+      HINTS_INPUT: HINTS.of(unit),
+      RESOLVE_REFERENCES_ERRORS_INPUT: RESOLVE_REFERENCES_ERRORS.of(unit),
+      RESOLVE_TYPE_NAMES_ERRORS_INPUT: RESOLVE_TYPE_NAMES_ERRORS.of(unit),
+      VERIFY_ERRORS_INPUT: VERIFY_ERRORS.of(unit)
+    };
+  }
+
+  /**
+   * Create a [LibraryUnitErrorsTask] based on the given [target] in the given
+   * [context].
+   */
+  static LibraryUnitErrorsTask createTask(
+      AnalysisContext context, AnalysisTarget target) {
+    return new LibraryUnitErrorsTask(context, target);
+  }
 }
 
 /**
@@ -1942,6 +2524,7 @@
    */
   static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('ParseDartTask',
       createTask, buildInputs, <ResultDescriptor>[
+    EXPLICITLY_IMPORTED_LIBRARIES,
     EXPORTED_LIBRARIES,
     IMPORTED_LIBRARIES,
     INCLUDED_PARTS,
@@ -1967,21 +2550,6 @@
     LineInfo lineInfo = getRequiredInput(LINE_INFO_INPUT_NAME);
     Token tokenStream = getRequiredInput(TOKEN_STREAM_INPUT_NAME);
 
-    if (inputMemento is ParseDartMemento) {
-      ParseDartMemento memento = inputMemento;
-      if (identical(memento.inputTokenStream, tokenStream)) {
-        outputMemento = memento;
-        outputs[EXPORTED_LIBRARIES] = memento.exportedLibraries;
-        outputs[IMPORTED_LIBRARIES] = memento.importedLibraries;
-        outputs[INCLUDED_PARTS] = memento.includedParts;
-        outputs[PARSE_ERRORS] = memento.parseErrors;
-        outputs[PARSED_UNIT] = memento.parsedUnit;
-        outputs[SOURCE_KIND] = memento.sourceKind;
-        outputs[UNITS] = memento.units;
-        return;
-      }
-    }
-
     RecordingErrorListener errorListener = new RecordingErrorListener();
     Parser parser = new Parser(source, errorListener);
     AnalysisOptions options = context.analysisOptions;
@@ -1991,8 +2559,8 @@
 
     bool hasNonPartOfDirective = false;
     bool hasPartOfDirective = false;
+    HashSet<Source> explicitlyImportedSourceSet = new HashSet<Source>();
     HashSet<Source> exportedSourceSet = new HashSet<Source>();
-    HashSet<Source> importedSourceSet = new HashSet<Source>();
     HashSet<Source> includedSourceSet = new HashSet<Source>();
     for (Directive directive in unit.directives) {
       if (directive is PartOfDirective) {
@@ -2006,7 +2574,7 @@
             if (directive is ExportDirective) {
               exportedSourceSet.add(referencedSource);
             } else if (directive is ImportDirective) {
-              importedSourceSet.add(referencedSource);
+              explicitlyImportedSourceSet.add(referencedSource);
             } else if (directive is PartDirective) {
               if (referencedSource != source) {
                 includedSourceSet.add(referencedSource);
@@ -2022,6 +2590,8 @@
     //
     // Always include "dart:core" source.
     //
+    HashSet<Source> importedSourceSet =
+        new HashSet.from(explicitlyImportedSourceSet);
     Source coreLibrarySource = context.sourceFactory.forUri(DartSdk.DART_CORE);
     importedSourceSet.add(coreLibrarySource);
     //
@@ -2034,11 +2604,14 @@
     //
     // Record outputs.
     //
+    List<Source> explicitlyImportedSources =
+        explicitlyImportedSourceSet.toList();
     List<Source> exportedSources = exportedSourceSet.toList();
     List<Source> importedSources = importedSourceSet.toList();
     List<Source> includedSources = includedSourceSet.toList();
     List<AnalysisError> parseErrors = errorListener.errors;
     List<Source> unitSources = <Source>[source]..addAll(includedSourceSet);
+    outputs[EXPLICITLY_IMPORTED_LIBRARIES] = explicitlyImportedSources;
     outputs[EXPORTED_LIBRARIES] = exportedSources;
     outputs[IMPORTED_LIBRARIES] = importedSources;
     outputs[INCLUDED_PARTS] = includedSources;
@@ -2046,9 +2619,6 @@
     outputs[PARSED_UNIT] = unit;
     outputs[SOURCE_KIND] = sourceKind;
     outputs[UNITS] = unitSources;
-    outputMemento = new ParseDartMemento(tokenStream, exportedSources,
-        importedSources, includedSources, parseErrors, unit, sourceKind,
-        unitSources);
   }
 
   /**
@@ -2099,15 +2669,13 @@
       return null;
     }
     if (code == UriValidationCode.URI_WITH_INTERPOLATION) {
-      errorListener.onError(new AnalysisError.con2(librarySource,
-          uriLiteral.offset, uriLiteral.length,
-          CompileTimeErrorCode.URI_WITH_INTERPOLATION));
+      errorListener.onError(new AnalysisError(librarySource, uriLiteral.offset,
+          uriLiteral.length, CompileTimeErrorCode.URI_WITH_INTERPOLATION));
       return null;
     }
     if (code == UriValidationCode.INVALID_URI) {
-      errorListener.onError(new AnalysisError.con2(librarySource,
-          uriLiteral.offset, uriLiteral.length,
-          CompileTimeErrorCode.INVALID_URI, [uriContent]));
+      errorListener.onError(new AnalysisError(librarySource, uriLiteral.offset,
+          uriLiteral.length, CompileTimeErrorCode.INVALID_URI, [uriContent]));
       return null;
     }
     throw new AnalysisException('Failed to handle validation code: $code');
@@ -2227,8 +2795,10 @@
    * The task descriptor describing this kind of task.
    */
   static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
-      'ResolveReferencesTask', createTask, buildInputs,
-      <ResultDescriptor>[RESOLVED_UNIT]);
+      'ResolveReferencesTask', createTask, buildInputs, <ResultDescriptor>[
+    RESOLVE_REFERENCES_ERRORS,
+    RESOLVED_UNIT
+  ]);
 
   ResolveReferencesTask(InternalAnalysisContext context, AnalysisTarget target)
       : super(context, target);
@@ -2423,17 +2993,6 @@
 }
 
 /**
- * The memento for [ScanDartTask].
- */
-class ScanDartMemento {
-  final String content;
-  final Token tokenStream;
-  final LineInfo lineInfo;
-  final List<AnalysisError> errors;
-  ScanDartMemento(this.content, this.tokenStream, this.lineInfo, this.errors);
-}
-
-/**
  * A task that scans the content of a file, producing a set of Dart tokens.
  */
 class ScanDartTask extends SourceBasedAnalysisTask {
@@ -2467,17 +3026,6 @@
     Source source = getRequiredSource();
     String content = getRequiredInput(CONTENT_INPUT_NAME);
 
-    if (inputMemento is ScanDartMemento) {
-      ScanDartMemento memento = inputMemento;
-      if (memento.content == content) {
-        outputMemento = memento;
-        outputs[TOKEN_STREAM] = memento.tokenStream;
-        outputs[LINE_INFO] = memento.lineInfo;
-        outputs[SCAN_ERRORS] = memento.errors;
-        return;
-      }
-    }
-
     RecordingErrorListener errorListener = new RecordingErrorListener();
     Scanner scanner =
         new Scanner(source, new CharSequenceReader(content), errorListener);
@@ -2491,7 +3039,6 @@
     outputs[TOKEN_STREAM] = tokenStream;
     outputs[LINE_INFO] = lineInfo;
     outputs[SCAN_ERRORS] = errors;
-    outputMemento = new ScanDartMemento(content, tokenStream, lineInfo, errors);
   }
 
   /**
diff --git a/pkg/analyzer/lib/src/task/dart_work_manager.dart b/pkg/analyzer/lib/src/task/dart_work_manager.dart
new file mode 100644
index 0000000..500422f
--- /dev/null
+++ b/pkg/analyzer/lib/src/task/dart_work_manager.dart
@@ -0,0 +1,194 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library analyzer.src.task.dart_work_manager;
+
+import 'dart:collection';
+
+import 'package:analyzer/src/context/cache.dart';
+import 'package:analyzer/src/generated/engine.dart'
+    show AnalysisEngine, CacheState, InternalAnalysisContext;
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_collection.dart';
+import 'package:analyzer/src/task/dart.dart';
+import 'package:analyzer/src/task/driver.dart';
+import 'package:analyzer/task/dart.dart';
+import 'package:analyzer/task/model.dart';
+
+/**
+ * The manager for Dart specific analysis.
+ */
+class DartWorkManager implements WorkManager {
+  final InternalAnalysisContext context;
+
+  /**
+   * The [TargetedResult]s that should be computed with priority.
+   */
+  final LinkedHashSet<TargetedResult> priorityResultQueue =
+      new LinkedHashSet<TargetedResult>();
+
+  /**
+   * The sources whose kind we don't know yet.
+   */
+  final LinkedHashSet<Source> unknownSourceQueue = new LinkedHashSet<Source>();
+
+  /**
+   * The queue of library sources to process.
+   */
+  final LinkedHashSet<Source> librarySourceQueue = new LinkedHashSet<Source>();
+
+  /**
+   * Initialize a newly created manager.
+   */
+  DartWorkManager(this.context);
+
+  /**
+   * Returns the correctly typed result of `context.analysisCache`.
+   */
+  AnalysisCache get analysisCache => context.analysisCache;
+
+  /**
+   * Specifies that the client want the given [result] of the given [target]
+   * to be computed with priority.
+   */
+  void addPriorityResult(AnalysisTarget target, ResultDescriptor result) {
+    priorityResultQueue.add(new TargetedResult(target, result));
+  }
+
+  /**
+   * Notifies the manager about changes in the explicit source list.
+   */
+  void applyChange(List<Source> addedSources, List<Source> changedSources,
+      List<Source> removedSources) {
+    addedSources = addedSources.where(_isDartSource).toList();
+    changedSources = changedSources.where(_isDartSource).toList();
+    removedSources = removedSources.where(_isDartSource).toList();
+    // unknown queue
+    unknownSourceQueue.addAll(addedSources);
+    unknownSourceQueue.addAll(changedSources);
+    unknownSourceQueue.removeAll(removedSources);
+    // library queue
+    librarySourceQueue.removeAll(changedSources);
+    librarySourceQueue.removeAll(removedSources);
+    // Some of the libraries might have been invalidated, reschedule them.
+    {
+      MapIterator<AnalysisTarget, CacheEntry> iterator =
+          analysisCache.iterator();
+      while (iterator.moveNext()) {
+        AnalysisTarget target = iterator.key;
+        if (_isDartSource(target)) {
+          CacheEntry entry = iterator.value;
+          if (entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY &&
+              entry.getValue(LIBRARY_ERRORS_READY) != true) {
+            librarySourceQueue.add(target);
+          }
+        }
+      }
+    }
+  }
+
+  @override
+  void applyPriorityTargets(List<AnalysisTarget> targets) {
+    // Unschedule the old targets.
+    List<TargetedResult> resultsToUnschedule = <TargetedResult>[];
+    for (TargetedResult result in priorityResultQueue) {
+      if (result.result == LIBRARY_ERRORS_READY) {
+        resultsToUnschedule.add(result);
+      }
+    }
+    priorityResultQueue.removeAll(resultsToUnschedule);
+    // Schedule new targets.
+    for (AnalysisTarget target in targets) {
+      if (_isDartSource(target)) {
+        SourceKind sourceKind = analysisCache.getValue(target, SOURCE_KIND);
+        if (sourceKind == SourceKind.LIBRARY) {
+          addPriorityResult(target, LIBRARY_ERRORS_READY);
+        } else if (sourceKind == SourceKind.PART) {
+          List<Source> libraries = context.getLibrariesContaining(target);
+          for (Source library in libraries) {
+            addPriorityResult(library, LIBRARY_ERRORS_READY);
+          }
+        }
+      }
+    }
+  }
+
+  @override
+  TargetedResult getNextResult() {
+    // Try to find a priority result to compute.
+    while (priorityResultQueue.isNotEmpty) {
+      TargetedResult result = priorityResultQueue.first;
+      if (!_needsComputing(result.target, result.result)) {
+        priorityResultQueue.remove(result);
+        continue;
+      }
+      return result;
+    }
+    // Try to find a new library to analyze.
+    while (librarySourceQueue.isNotEmpty) {
+      Source librarySource = librarySourceQueue.first;
+      // Maybe done with this library.
+      if (!_needsComputing(librarySource, LIBRARY_ERRORS_READY)) {
+        librarySourceQueue.remove(librarySource);
+        continue;
+      }
+      // Analyze this library.
+      return new TargetedResult(librarySource, LIBRARY_ERRORS_READY);
+    }
+    // No libraries in the queue, check whether there are sources to organize.
+    while (unknownSourceQueue.isNotEmpty) {
+      Source source = unknownSourceQueue.first;
+      // Maybe done with this source.
+      if (!_needsComputing(source, SOURCE_KIND)) {
+        unknownSourceQueue.remove(source);
+        continue;
+      }
+      // Compute the kind of this source.
+      return new TargetedResult(source, SOURCE_KIND);
+    }
+    // TODO(scheglov) Report errors for parts that remained in the queue after
+    // all libraries had been processed.
+    // No results to compute.
+    return null;
+  }
+
+  @override
+  WorkOrderPriority getNextResultPriority() {
+    if (priorityResultQueue.isNotEmpty) {
+      return WorkOrderPriority.PRIORITY;
+    }
+    if (unknownSourceQueue.isNotEmpty || librarySourceQueue.isNotEmpty) {
+      return WorkOrderPriority.NORMAL;
+    }
+    return WorkOrderPriority.NONE;
+  }
+
+  @override
+  void resultsComputed(
+      AnalysisTarget target, Map<ResultDescriptor, dynamic> outputs) {
+    // Organize sources.
+    if (_isDartSource(target)) {
+      SourceKind kind = outputs[SOURCE_KIND];
+      if (kind != null) {
+        unknownSourceQueue.remove(target);
+        if (kind == SourceKind.LIBRARY) {
+          librarySourceQueue.add(target);
+        }
+      }
+    }
+  }
+
+  bool _isDartSource(AnalysisTarget target) {
+    return target is Source && AnalysisEngine.isDartFileName(target.fullName);
+  }
+
+  /**
+   * Returns `true` if the given [result] of the given [target] needs
+   * computing, i.e. it is not in the valid and not in the error state.
+   */
+  bool _needsComputing(AnalysisTarget target, ResultDescriptor result) {
+    CacheState state = analysisCache.getState(target, result);
+    return state != CacheState.VALID && state != CacheState.ERROR;
+  }
+}
diff --git a/pkg/analyzer/lib/src/task/driver.dart b/pkg/analyzer/lib/src/task/driver.dart
index af608ad..ab8ab9d 100644
--- a/pkg/analyzer/lib/src/task/driver.dart
+++ b/pkg/analyzer/lib/src/task/driver.dart
@@ -26,6 +26,12 @@
   final TaskManager taskManager;
 
   /**
+   * The list of [WorkManager] used to figure out which analysis results to
+   * compute.
+   */
+  final List<WorkManager> workManagers;
+
+  /**
    * The context in which analysis is to be performed.
    */
   final InternalAnalysisContext context;
@@ -50,7 +56,7 @@
    * Initialize a newly created driver to use the tasks know to the given
    * [taskManager] to perform analysis in the given [context].
    */
-  AnalysisDriver(this.taskManager, this.context) {
+  AnalysisDriver(this.taskManager, this.workManagers, this.context) {
     _onTaskStartedController = new StreamController.broadcast();
     _onTaskCompletedController = new StreamController.broadcast();
   }
@@ -85,28 +91,31 @@
    * or `null` if there is currently no work to be done.
    */
   WorkOrder createNextWorkOrder() {
-    //
-    // TODO(brianwilkerson) This is an inefficient implementation. We need to
-    // port over the concept of the WorkManager to manage the list of sources
-    // for which some work needs to be performed so that we do not waste time
-    // repeatedly looking at the same completed sources to see whether there is
-    // work that needs to be done.
-    //
-    for (AnalysisTarget target in context.priorityTargets) {
-      WorkOrder workOrder = createWorkOrderForTarget(target, true);
-      if (workOrder != null) {
-        return workOrder;
+    while (true) {
+      // Find the WorkManager with the highest priority.
+      WorkOrderPriority highestPriority = null;
+      WorkManager highestManager = null;
+      for (WorkManager manager in workManagers) {
+        WorkOrderPriority priority = manager.getNextResultPriority();
+        if (highestPriority == null || highestPriority.index > priority.index) {
+          highestPriority = priority;
+          highestManager = manager;
+        }
+      }
+      // Nothing to do.
+      if (highestPriority == WorkOrderPriority.NONE) {
+        return null;
+      }
+      // Create a new WorkOrder.
+      TargetedResult request = highestManager.getNextResult();
+      if (request != null) {
+        WorkOrder workOrder =
+            createWorkOrderForResult(request.target, request.result);
+        if (workOrder != null) {
+          return workOrder;
+        }
       }
     }
-    // TODO(brianwilkerson) Add a third priority, corresponding to
-    // AnalysisContextImpl._pendingFutureSources to support code completion.
-    for (AnalysisTarget target in context.explicitTargets) {
-      WorkOrder workOrder = createWorkOrderForTarget(target, false);
-      if (workOrder != null) {
-        return workOrder;
-      }
-    }
-    return null;
   }
 
   /**
@@ -125,9 +134,7 @@
     }
     try {
       TaskDescriptor taskDescriptor = taskManager.findTask(target, result);
-      Object memento = entry.getMemento(result);
-      WorkItem workItem =
-          new WorkItem(context, target, taskDescriptor, memento);
+      WorkItem workItem = new WorkItem(context, target, taskDescriptor);
       return new WorkOrder(taskManager, workItem);
     } catch (exception, stackTrace) {
       throw new AnalysisException(
@@ -218,7 +225,10 @@
       for (ResultDescriptor result in task.descriptor.results) {
         // TODO(brianwilkerson) We could check here that a value was produced
         // and throw an exception if not (unless we want to allow null values).
-        entry.setValue(result, outputs[result], dependedOn, task.outputMemento);
+        entry.setValue(result, outputs[result], dependedOn);
+      }
+      for (WorkManager manager in workManagers) {
+        manager.resultsComputed(task.target, outputs);
       }
     } else {
       entry.setErrorState(task.caughtException, item.descriptor.results);
@@ -283,12 +293,6 @@
   final TaskDescriptor descriptor;
 
   /**
-   * The optional data that the task associated with [target] last time.
-   * This data may help to compute outputs more efficiently.
-   */
-  final Object inputMemento;
-
-  /**
    * An iterator used to iterate over the descriptors of the inputs to the task,
    * or `null` if all of the inputs have been collected and the task can be
    * created.
@@ -318,7 +322,7 @@
    * Initialize a newly created work item to compute the inputs for the task
    * described by the given descriptor.
    */
-  WorkItem(this.context, this.target, this.descriptor, this.inputMemento) {
+  WorkItem(this.context, this.target, this.descriptor) {
     AnalysisTarget actualTarget = identical(
             target, AnalysisContextTarget.request)
         ? new AnalysisContextTarget(context)
@@ -339,7 +343,7 @@
     if (builder != null) {
       throw new StateError("some inputs have not been computed");
     }
-    return descriptor.createTask(context, target, inputs, inputMemento);
+    return descriptor.createTask(context, target, inputs);
   }
 
   /**
@@ -384,8 +388,7 @@
         try {
           TaskDescriptor descriptor =
               taskManager.findTask(inputTarget, inputResult);
-          Object memento = inputEntry.getMemento(inputResult);
-          return new WorkItem(context, inputTarget, descriptor, memento);
+          return new WorkItem(context, inputTarget, descriptor);
         } on AnalysisException catch (exception, stackTrace) {
           this.exception = new CaughtException(exception, stackTrace);
           return null;
@@ -405,6 +408,67 @@
 }
 
 /**
+ * [AnalysisDriver] uses [WorkManager]s to select results to compute.
+ *
+ * They know specific of the targets and results they care about,
+ * so they can request analysis results in optimal order.
+ */
+abstract class WorkManager {
+  /**
+   * Notifies the managers that the given set of priority [targets] was set.
+   */
+  void applyPriorityTargets(List<AnalysisTarget> targets);
+
+  /**
+   * Return the next [TargetedResult] that this work manager wants to be
+   * computed, or `null` if this manager doesn't need any new results.
+   */
+  TargetedResult getNextResult();
+
+  /**
+   * Return the priority if the next work order this work manager want to be
+   * computed. The [AnalysisDriver] will perform the work order with
+   * the highest priority.
+   *
+   * Even if the returned value is [WorkOrderPriority.NONE], it still does not
+   * guarantee that [getNextResult] will return not `null`.
+   */
+  WorkOrderPriority getNextResultPriority();
+
+  /**
+   * Notifies the manager that the given [outputs] were produced for
+   * the given [target].
+   */
+  void resultsComputed(
+      AnalysisTarget target, Map<ResultDescriptor, dynamic> outputs);
+}
+
+/**
+ * The priorities of work orders returned by [WorkManager]s.
+ */
+enum WorkOrderPriority {
+  /**
+   * Responding to an user's action.
+   */
+  INTERACTIVE,
+
+  /**
+   * Computing information for priority sources.
+   */
+  PRIORITY,
+
+  /**
+   * A work should be done, but without any special urgency.
+   */
+  NORMAL,
+
+  /**
+   * Nothing to do.
+   */
+  NONE
+}
+
+/**
  * A description of the work to be done to compute a desired analysis result.
  * The class implements a lazy depth-first traversal of the work item's input.
  */
diff --git a/pkg/analyzer/lib/src/task/incremental_element_builder.dart b/pkg/analyzer/lib/src/task/incremental_element_builder.dart
new file mode 100644
index 0000000..a01122d
--- /dev/null
+++ b/pkg/analyzer/lib/src/task/incremental_element_builder.dart
@@ -0,0 +1,295 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library analyzer.src.task.incremental_element_builder;
+
+import 'dart:collection';
+
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/generated/scanner.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+/**
+ * Incrementally updates the existing [unitElement] and builds elements for
+ * the [newUnit].
+ */
+class IncrementalCompilationUnitElementBuilder {
+  final Source source;
+  final Source librarySource;
+  final CompilationUnit oldUnit;
+  final CompilationUnitElementImpl unitElement;
+  final CompilationUnit newUnit;
+  final ElementHolder holder = new ElementHolder();
+
+  IncrementalCompilationUnitElementBuilder(
+      CompilationUnit oldUnit, this.newUnit)
+      : oldUnit = oldUnit,
+        unitElement = oldUnit.element,
+        source = oldUnit.element.source,
+        librarySource = (oldUnit.element as CompilationUnitElementImpl).librarySource;
+
+  void build() {
+    new CompilationUnitBuilder().buildCompilationUnit(
+        source, newUnit, librarySource);
+    _processDirectives();
+    _processUnitMembers();
+    newUnit.element = unitElement;
+  }
+
+  void _addElementsToHolder(CompilationUnitMember node) {
+    List<Element> elements = _getElements(node);
+    elements.forEach(_addElementToHolder);
+  }
+
+  void _addElementToHolder(Element element) {
+    if (element is PropertyAccessorElement) {
+      holder.addAccessor(element);
+    } else if (element is ClassElement) {
+      if (element.isEnum) {
+        holder.addEnum(element);
+      } else {
+        holder.addType(element);
+      }
+    } else if (element is FunctionElement) {
+      holder.addFunction(element);
+    } else if (element is FunctionTypeAliasElement) {
+      holder.addTypeAlias(element);
+    } else if (element is TopLevelVariableElement) {
+      holder.addTopLevelVariable(element);
+    }
+  }
+
+  void _processDirectives() {
+    Map<String, Directive> oldDirectiveMap = new HashMap<String, Directive>();
+    for (Directive oldDirective in oldUnit.directives) {
+      String code = TokenUtils.getFullCode(oldDirective);
+      oldDirectiveMap[code] = oldDirective;
+    }
+    // Replace new nodes with the identical old nodes.
+    for (Directive newDirective in newUnit.directives) {
+      String code = TokenUtils.getFullCode(newDirective);
+      // Prepare an old directive.
+      Directive oldDirective = oldDirectiveMap[code];
+      if (oldDirective == null) {
+        continue;
+      }
+      // URI's must be resolved to the same sources.
+      if (newDirective is UriBasedDirective &&
+          oldDirective is UriBasedDirective) {
+        if (oldDirective.source != newDirective.source) {
+          continue;
+        }
+      }
+      // Do replacement.
+      _replaceNode(newDirective, oldDirective);
+    }
+  }
+
+  void _processUnitMembers() {
+    Map<String, CompilationUnitMember> oldNodeMap =
+        new HashMap<String, CompilationUnitMember>();
+    for (CompilationUnitMember oldNode in oldUnit.declarations) {
+      String code = TokenUtils.getFullCode(oldNode);
+      oldNodeMap[code] = oldNode;
+    }
+    // Replace new nodes with the identical old nodes.
+    for (CompilationUnitMember newNode in newUnit.declarations) {
+      String code = TokenUtils.getFullCode(newNode);
+      // Prepare an old node.
+      CompilationUnitMember oldNode = oldNodeMap[code];
+      if (oldNode == null) {
+        _addElementsToHolder(newNode);
+        continue;
+      }
+      // Do replacement.
+      _replaceNode(newNode, oldNode);
+      _addElementsToHolder(oldNode);
+    }
+    // Update CompilationUnitElement.
+    unitElement.accessors = holder.accessors;
+    unitElement.enums = holder.enums;
+    unitElement.functions = holder.functions;
+    unitElement.typeAliases = holder.typeAliases;
+    unitElement.types = holder.types;
+    unitElement.topLevelVariables = holder.topLevelVariables;
+    holder.validate();
+  }
+
+  /**
+   * Replaces [newNode] with [oldNode], updates tokens and elements.
+   * The nodes must have the same tokens, but offsets may be different.
+   */
+  void _replaceNode(AstNode newNode, AstNode oldNode) {
+    // Replace node.
+    NodeReplacer.replace(newNode, oldNode);
+    // Replace tokens.
+    {
+      Token oldBeginToken = TokenUtils.getBeginTokenNotComment(newNode);
+      Token newBeginToken = TokenUtils.getBeginTokenNotComment(oldNode);
+      oldBeginToken.previous.setNext(newBeginToken);
+      oldNode.endToken.setNext(newNode.endToken.next);
+    }
+    // Change tokens offsets.
+    Map<int, int> offsetMap = new HashMap<int, int>();
+    TokenUtils.copyTokenOffsets(offsetMap, oldNode.beginToken,
+        newNode.beginToken, oldNode.endToken, newNode.endToken, true);
+    // Change elements offsets.
+    {
+      var visitor = new _UpdateElementOffsetsVisitor(offsetMap);
+      List<Element> elements = _getElements(oldNode);
+      for (Element element in elements) {
+        element.accept(visitor);
+      }
+    }
+  }
+
+  /**
+   * Returns [Element]s that are declared directly by the given [node].
+   * This does not include any child elements - parameters, local variables.
+   *
+   * Usually just one [Element] is returned, but [VariableDeclarationList]
+   * nodes may declare more than one.
+   */
+  static List<Element> _getElements(AstNode node) {
+    List<Element> elements = <Element>[];
+    if (node is TopLevelVariableDeclaration) {
+      VariableDeclarationList variableList = node.variables;
+      if (variableList != null) {
+        for (VariableDeclaration variable in variableList.variables) {
+          TopLevelVariableElement element = variable.element;
+          elements.add(element);
+          elements.add(element.getter);
+          elements.add(element.setter);
+        }
+      }
+    } else if (node is PartDirective || node is PartOfDirective) {
+    } else if (node is Directive && node.element != null) {
+      elements.add(node.element);
+    } else if (node is Declaration && node.element != null) {
+      Element element = node.element;
+      elements.add(element);
+      if (element is PropertyAccessorElement) {
+        elements.add(element.variable);
+      }
+    }
+    return elements;
+  }
+}
+
+/**
+ * Utilities for [Token] manipulations.
+ */
+class TokenUtils {
+  static const String _SEPARATOR = "\uFFFF";
+
+  /**
+   * Copy offsets from [newToken]s to [oldToken]s.
+   */
+  static void copyTokenOffsets(Map<int, int> offsetMap, Token oldToken,
+      Token newToken, Token oldEndToken, Token newEndToken,
+      [bool goUpComment = false]) {
+    if (oldToken is CommentToken && newToken is CommentToken) {
+      if (goUpComment) {
+        copyTokenOffsets(offsetMap, (oldToken as CommentToken).parent,
+            (newToken as CommentToken).parent, oldEndToken, newEndToken);
+      }
+      while (oldToken != null) {
+        offsetMap[oldToken.offset] = newToken.offset;
+        oldToken.offset = newToken.offset;
+        oldToken = oldToken.next;
+        newToken = newToken.next;
+      }
+      assert(oldToken == null);
+      assert(newToken == null);
+      return;
+    }
+    while (true) {
+      if (oldToken.precedingComments != null) {
+        assert(newToken.precedingComments != null);
+        copyTokenOffsets(offsetMap, oldToken.precedingComments,
+            newToken.precedingComments, oldEndToken, newEndToken);
+      }
+      offsetMap[oldToken.offset] = newToken.offset;
+      oldToken.offset = newToken.offset;
+      if (oldToken == oldEndToken) {
+        assert(newToken == newEndToken);
+        break;
+      }
+      oldToken = oldToken.next;
+      newToken = newToken.next;
+    }
+  }
+
+  static Token getBeginTokenNotComment(AstNode node) {
+    Token oldBeginToken = node.beginToken;
+    if (oldBeginToken is CommentToken) {
+      oldBeginToken = (oldBeginToken as CommentToken).parent;
+    }
+    return oldBeginToken;
+  }
+
+  /**
+   * Return the token string of all the [node] tokens.
+   */
+  static String getFullCode(AstNode node) {
+    List<Token> tokens = getTokens(node);
+    return joinTokens(tokens);
+  }
+
+  /**
+   * Returns all tokends (including comments) of the given [node].
+   */
+  static List<Token> getTokens(AstNode node) {
+    List<Token> tokens = <Token>[];
+    Token token = getBeginTokenNotComment(node);
+    Token endToken = node.endToken;
+    while (true) {
+      // append comment tokens
+      for (Token commentToken = token.precedingComments;
+          commentToken != null;
+          commentToken = commentToken.next) {
+        tokens.add(commentToken);
+      }
+      // append token
+      tokens.add(token);
+      // next token
+      if (token == endToken) {
+        break;
+      }
+      token = token.next;
+    }
+    return tokens;
+  }
+
+  static String joinTokens(List<Token> tokens) {
+    return tokens.map((token) => token.lexeme).join(_SEPARATOR);
+  }
+}
+
+/**
+ * Updates name offsets of [Element]s according to the [map].
+ */
+class _UpdateElementOffsetsVisitor extends GeneralizingElementVisitor {
+  final Map<int, int> map;
+
+  _UpdateElementOffsetsVisitor(this.map);
+
+  void visitElement(Element element) {
+    if (element is CompilationUnitElement) {
+      return;
+    }
+    if (element.isSynthetic) {
+      return;
+    }
+    int oldOffset = element.nameOffset;
+    int newOffset = map[oldOffset];
+    assert(newOffset != null);
+    (element as ElementImpl).nameOffset = newOffset;
+    if (element is! LibraryElement) {
+      super.visitElement(element);
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/task/model.dart b/pkg/analyzer/lib/src/task/model.dart
index b8671bc..a48f85a 100644
--- a/pkg/analyzer/lib/src/task/model.dart
+++ b/pkg/analyzer/lib/src/task/model.dart
@@ -9,27 +9,10 @@
 import 'package:analyzer/task/model.dart';
 
 /**
- * A concrete implementation of a [CompositeResultDescriptor].
+ * The default [ResultCachingPolicy], results are never flushed.
  */
-class CompositeResultDescriptorImpl<V> extends ResultDescriptorImpl<V>
-    implements CompositeResultDescriptor<V> {
-  /**
-   * The results that contribute to this result.
-   */
-  final List<ResultDescriptor<V>> contributors = <ResultDescriptor<V>>[];
-
-  /**
-   * Initialize a newly created composite result to have the given [name].
-   */
-  CompositeResultDescriptorImpl(String name) : super(name, null);
-
-  /**
-   * Record that the given analysis [result] contibutes to this result.
-   */
-  void recordContributor(ResultDescriptor<V> result) {
-    contributors.add(result);
-  }
-}
+const ResultCachingPolicy DEFAULT_CACHING_POLICY =
+    const SimpleResultCachingPolicy(-1, -1);
 
 /**
  * A concrete implementation of a [ListResultDescriptor].
@@ -38,12 +21,12 @@
     implements ListResultDescriptor<E> {
   /**
    * Initialize a newly created analysis result to have the given [name] and
-   * [defaultValue]. If a composite result is specified, then this result will
-   * contribute to it.
+   * [defaultValue]. If a [cachingPolicy] is provided, it will control how long
+   * values associated with this result will remain in the cache.
    */
   ListResultDescriptorImpl(String name, List<E> defaultValue,
-      {CompositeResultDescriptor contributesTo})
-      : super(name, defaultValue, contributesTo: contributesTo);
+      {ResultCachingPolicy<List<E>> cachingPolicy: DEFAULT_CACHING_POLICY})
+      : super(name, defaultValue, cachingPolicy: cachingPolicy);
 
   @override
   ListTaskInput<E> of(AnalysisTarget target) =>
@@ -65,16 +48,17 @@
   final V defaultValue;
 
   /**
+   * The caching policy for results described by this descriptor.
+   */
+  final ResultCachingPolicy<V> cachingPolicy;
+
+  /**
    * Initialize a newly created analysis result to have the given [name] and
-   * [defaultValue]. If a composite result is specified, then this result will
-   * contribute to it.
+   * [defaultValue]. If a [cachingPolicy] is provided, it will control how long
+   * values associated with this result will remain in the cache.
    */
   ResultDescriptorImpl(this.name, this.defaultValue,
-      {CompositeResultDescriptor contributesTo}) {
-    if (contributesTo is CompositeResultDescriptorImpl) {
-      contributesTo.recordContributor(this);
-    }
-  }
+      {this.cachingPolicy: DEFAULT_CACHING_POLICY});
 
   @override
   TaskInput<V> of(AnalysisTarget target) =>
@@ -85,6 +69,23 @@
 }
 
 /**
+ * A simple [ResultCachingPolicy] implementation that consider all the objects
+ * to be of the size `1`.
+ */
+class SimpleResultCachingPolicy<T> implements ResultCachingPolicy<T> {
+  @override
+  final int maxActiveSize;
+
+  @override
+  final int maxIdleSize;
+
+  const SimpleResultCachingPolicy(this.maxActiveSize, this.maxIdleSize);
+
+  @override
+  int measure(T object) => 1;
+}
+
+/**
  * A concrete implementation of a [TaskDescriptor].
  */
 class TaskDescriptorImpl implements TaskDescriptor {
@@ -121,10 +122,9 @@
 
   @override
   AnalysisTask createTask(AnalysisContext context, AnalysisTarget target,
-      Map<String, dynamic> inputs, Object inputMemento) {
+      Map<String, dynamic> inputs) {
     AnalysisTask task = buildTask(context, target);
     task.inputs = inputs;
-    task.inputMemento = inputMemento;
     return task;
   }
 
diff --git a/pkg/analyzer/lib/src/task/task_dart.dart b/pkg/analyzer/lib/src/task/task_dart.dart
index 5a3491b..9192970 100644
--- a/pkg/analyzer/lib/src/task/task_dart.dart
+++ b/pkg/analyzer/lib/src/task/task_dart.dart
@@ -82,6 +82,6 @@
   @override
   void internalPerform() {
     CompilationUnitBuilder builder = new CompilationUnitBuilder();
-    unitElement = builder.buildCompilationUnit(source, unit);
+    unitElement = builder.buildCompilationUnit(source, unit, library);
   }
 }
diff --git a/pkg/analyzer/lib/task/dart.dart b/pkg/analyzer/lib/task/dart.dart
index a4ac9ee1..0a3915b 100644
--- a/pkg/analyzer/lib/task/dart.dart
+++ b/pkg/analyzer/lib/task/dart.dart
@@ -10,18 +10,38 @@
 import 'package:analyzer/src/generated/scanner.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
+import 'package:analyzer/src/task/dart.dart';
 import 'package:analyzer/task/model.dart';
 
 /**
- * The analysis errors associated with a target.
+ * The resolved [CompilationUnit] associated with a compilation unit, with
+ * constants resolved.
  *
- * The value combines errors represented by multiple other results.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
-// TODO(brianwilkerson) If we want to associate errors with targets smaller than
-// a file, we will need other contribution points to collect them. In which case
-// we might want to rename this and/or document that it applies to files.
-final CompositeResultDescriptor<List<AnalysisError>> DART_ERRORS =
-    new CompositeResultDescriptor<List<AnalysisError>>('DART_ERRORS');
+final ResultDescriptor<CompilationUnit> CONSTANT_RESOLVED_UNIT =
+    new ResultDescriptor<CompilationUnit>('CONSTANT_RESOLVED_UNIT', null,
+        cachingPolicy: AST_CACHING_POLICY);
+
+/**
+ * The analysis errors associated with a [Source] representing a compilation
+ * unit.
+ */
+final ListResultDescriptor<AnalysisError> DART_ERRORS =
+    new ListResultDescriptor<AnalysisError>(
+        'DART_ERRORS', AnalysisError.NO_ERRORS);
+
+/**
+ * The sources of the libraries that are explicitly imported into a library.
+ *
+ * The list will be empty if there are no explicit imports, but will not be
+ * `null`.
+ *
+ * The result is only available for [Source]s representing a library.
+ */
+final ListResultDescriptor<Source> EXPLICITLY_IMPORTED_LIBRARIES =
+    new ListResultDescriptor<Source>(
+        'EXPLICITLY_IMPORTED_LIBRARIES', Source.EMPTY_LIST);
 
 /**
  * The sources of the libraries that are exported from a library.
@@ -29,22 +49,22 @@
  * The list will be empty if there are no exported libraries, but will not be
  * `null`.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ListResultDescriptor<Source> EXPORTED_LIBRARIES =
-    new ListResultDescriptor<Source>('EXPORTED_LIBRARIES', Source.EMPTY_ARRAY);
+    new ListResultDescriptor<Source>('EXPORTED_LIBRARIES', Source.EMPTY_LIST);
 
 /**
- * The sources of the libraries that are imported into a library.
+ * The sources of the libraries that are implicitly or explicitly imported into
+ * a library.
  *
- * Not `null`.
- * The default value is empty.
- * When computed, this list will always contain at least `dart:core` source.
+ * The list will minimally contain the source for `dart:core` because it is
+ * implicitly imported into every library, and therefore will never be `null`.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ListResultDescriptor<Source> IMPORTED_LIBRARIES =
-    new ListResultDescriptor<Source>('IMPORTED_LIBRARIES', Source.EMPTY_ARRAY);
+    new ListResultDescriptor<Source>('IMPORTED_LIBRARIES', Source.EMPTY_LIST);
 
 /**
  * The sources of the parts that are included in a library.
@@ -52,16 +72,16 @@
  * The list will be empty if there are no parts, but will not be `null`. The
  * list does *not* include the source for the defining compilation unit.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ListResultDescriptor<Source> INCLUDED_PARTS =
-    new ListResultDescriptor<Source>('INCLUDED_PARTS', Source.EMPTY_ARRAY);
+    new ListResultDescriptor<Source>('INCLUDED_PARTS', Source.EMPTY_LIST);
 
 /**
  * A flag specifying whether a library is dependent on code that is only
  * available in a client.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<bool> IS_CLIENT =
     new ResultDescriptor<bool>('IS_CLIENT', false);
@@ -69,7 +89,7 @@
 /**
  * A flag specifying whether a library is launchable.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<bool> IS_LAUNCHABLE =
     new ResultDescriptor<bool>('IS_LAUNCHABLE', false);
@@ -77,7 +97,7 @@
 /**
  * The fully built [LibraryElement] associated with a library.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ResultDescriptor<LibraryElement> LIBRARY_ELEMENT =
     new ResultDescriptor<LibraryElement>('LIBRARY_ELEMENT', null);
@@ -87,18 +107,27 @@
  *
  * The AST structure will not have resolution information associated with it.
  *
- * The result is only available for targets representing a Dart compilation unit.
+ * The result is only available for [Source]s representing a compilation unit.
  */
 final ResultDescriptor<CompilationUnit> PARSED_UNIT =
-    new ResultDescriptor<CompilationUnit>('PARSED_UNIT', null);
+    new ResultDescriptor<CompilationUnit>('PARSED_UNIT', null,
+        cachingPolicy: AST_CACHING_POLICY);
 
 /**
- * The resolved [CompilationUnit] associated with a unit.
+ * The resolved [CompilationUnit] associated with a compilation unit, with
+ * constants not yet resolved.
  *
- * The result is only available for targets representing a unit.
+ * The result is only available for [LibrarySpecificUnit]s.
  */
 final ResultDescriptor<CompilationUnit> RESOLVED_UNIT =
-    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT', null);
+    new ResultDescriptor<CompilationUnit>('RESOLVED_UNIT', null,
+        cachingPolicy: AST_CACHING_POLICY);
+
+/**
+ * The kind of a [Source].
+ */
+final ResultDescriptor<SourceKind> SOURCE_KIND =
+    new ResultDescriptor<SourceKind>('SOURCE_KIND', SourceKind.UNKNOWN);
 
 /**
  * The token stream produced while scanning a compilation unit.
@@ -106,10 +135,10 @@
  * The value is the first token in the file, or the special end-of-file marker
  * at the end of the stream if the file does not contain any tokens.
  *
- * The result is only available for targets representing a Dart compilation unit.
+ * The result is only available for [Source]s representing a compilation unit.
  */
-final ResultDescriptor<Token> TOKEN_STREAM =
-    new ResultDescriptor<Token>('TOKEN_STREAM', null);
+final ResultDescriptor<Token> TOKEN_STREAM = new ResultDescriptor<Token>(
+    'TOKEN_STREAM', null, cachingPolicy: TOKEN_STREAM_CACHING_POLICY);
 
 /**
  * The sources of the Dart files that a library consists of.
@@ -117,10 +146,10 @@
  * The list will include the source of the defining unit and [INCLUDED_PARTS].
  * So, it is never empty or `null`.
  *
- * The result is only available for targets representing a Dart library.
+ * The result is only available for [Source]s representing a library.
  */
 final ListResultDescriptor<Source> UNITS =
-    new ListResultDescriptor<Source>('UNITS', Source.EMPTY_ARRAY);
+    new ListResultDescriptor<Source>('UNITS', Source.EMPTY_LIST);
 
 /**
  * A specific compilation unit in a specific library.
diff --git a/pkg/analyzer/lib/task/general.dart b/pkg/analyzer/lib/task/general.dart
index 7cf1b97..c40ff4c 100644
--- a/pkg/analyzer/lib/task/general.dart
+++ b/pkg/analyzer/lib/task/general.dart
@@ -8,25 +8,19 @@
 import 'package:analyzer/task/model.dart';
 
 /**
- * The contents of a single file.
+ * The content of a [Source].
  */
 final ResultDescriptor<String> CONTENT =
     new ResultDescriptor<String>('CONTENT', null);
 
 /**
- * The line information for a single file.
+ * The line information for a [Source].
  */
 final ResultDescriptor<LineInfo> LINE_INFO =
     new ResultDescriptor<LineInfo>('LINE_INFO', null);
 
 /**
- * The modification time of a file.
+ * The modification time of a [Source].
  */
 final ResultDescriptor<int> MODIFICATION_TIME =
     new ResultDescriptor<int>('MODIFICATION_TIME', -1);
-
-/**
- * The kind of a [Source].
- */
-final ResultDescriptor<SourceKind> SOURCE_KIND =
-    new ResultDescriptor<SourceKind>('SOURCE_KIND', SourceKind.UNKNOWN);
diff --git a/pkg/analyzer/lib/task/model.dart b/pkg/analyzer/lib/task/model.dart
index a648ced..8f65f8b 100644
--- a/pkg/analyzer/lib/task/model.dart
+++ b/pkg/analyzer/lib/task/model.dart
@@ -103,12 +103,6 @@
   Map<String, dynamic> inputs;
 
   /**
-   * The optional data that the task associated with [target] last time.
-   * This data may help to compute outputs more efficiently.
-   */
-  Object inputMemento;
-
-  /**
    * A table mapping result descriptors whose values are produced by this task
    * to the values that were produced.
    */
@@ -116,12 +110,6 @@
       new HashMap<ResultDescriptor, dynamic>();
 
   /**
-   * An optional data that the task wants to associate with [target].
-   * This data may help later to compute outputs more efficiently.
-   */
-  Object outputMemento;
-
-  /**
    * The exception that was thrown while performing this task, or `null` if the
    * task completed successfully.
    */
@@ -246,28 +234,6 @@
 }
 
 /**
- * A [ResultDescriptor] that denotes an analysis result that is a union of
- * one or more other results.
- *
- * Clients are not expected to subtype this class.
- */
-abstract class CompositeResultDescriptor<V> extends ResultDescriptor<V> {
-  /**
-   * Initialize a newly created composite result to have the given [name].
-   */
-  factory CompositeResultDescriptor(
-      String name) = CompositeResultDescriptorImpl;
-
-  /**
-   * Return a list containing the descriptors of the results that are unioned
-   * together to compose the value of this result.
-   *
-   * Clients must not modify the returned list.
-   */
-  List<ResultDescriptor<V>> get contributors;
-}
-
-/**
  * A description of a [List]-based analysis result that can be computed by an
  * [AnalysisTask].
  *
@@ -275,11 +241,12 @@
  */
 abstract class ListResultDescriptor<E> implements ResultDescriptor<List<E>> {
   /**
-   * Initialize a newly created analysis result to have the given [name]. If a
-   * composite result is specified, then this result will contribute to it.
+   * Initialize a newly created analysis result to have the given [name] and
+   * [defaultValue]. If a [cachingPolicy] is provided, it will control how long
+   * values associated with this result will remain in the cache.
    */
   factory ListResultDescriptor(String name, List<E> defaultValue,
-      {CompositeResultDescriptor<List<E>> contributesTo}) = ListResultDescriptorImpl<E>;
+      {ResultCachingPolicy<List<E>> cachingPolicy}) = ListResultDescriptorImpl<E>;
 
   @override
   ListTaskInput<E> of(AnalysisTarget target);
@@ -338,17 +305,52 @@
 }
 
 /**
+ * A policy object that can compute sizes of results and provide the maximum
+ * active and idle sizes that can be kept in the cache.
+ *
+ * All the [ResultDescriptor]s with the same [ResultCachingPolicy] instance
+ * share the same total size in a cache.
+ */
+abstract class ResultCachingPolicy<T> {
+  /**
+   * Return the maximum total size of results that can be kept in the cache
+   * while analysis is in progress.
+   */
+  int get maxActiveSize;
+
+  /**
+   * Return the maximum total size of results that can be kept in the cache
+   * while analysis is idle.
+   */
+  int get maxIdleSize;
+
+  /**
+   * Return the size of the given [object].
+   */
+  int measure(T object);
+}
+
+/**
  * A description of an analysis result that can be computed by an [AnalysisTask].
  *
  * Clients are not expected to subtype this class.
  */
 abstract class ResultDescriptor<V> {
   /**
-   * Initialize a newly created analysis result to have the given [name]. If a
-   * composite result is specified, then this result will contribute to it.
+   * Initialize a newly created analysis result to have the given [name] and
+   * [defaultValue].
+   *
+   * The given [cachingPolicy] is used to limit the total size of results
+   * described by this descriptor. If no policy is specified, the results are
+   * never evicted from the cache, and removed only when they are invalidated.
    */
   factory ResultDescriptor(String name, V defaultValue,
-      {CompositeResultDescriptor<V> contributesTo}) = ResultDescriptorImpl;
+      {ResultCachingPolicy<V> cachingPolicy}) = ResultDescriptorImpl;
+
+  /**
+   * Return the caching policy for results described by this descriptor.
+   */
+  ResultCachingPolicy<V> get cachingPolicy;
 
   /**
    * Return the default value for results described by this descriptor.
@@ -401,7 +403,7 @@
    * used to compute results based on the given [inputs].
    */
   AnalysisTask createTask(AnalysisContext context, AnalysisTarget target,
-      Map<String, dynamic> inputs, Object inputMemento);
+      Map<String, dynamic> inputs);
 }
 
 /**
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index e16bff6..d56a925 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -7,8 +7,6 @@
 
 library engine.all_the_rest_test;
 
-import 'dart:collection';
-
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
@@ -35,10 +33,12 @@
 import 'package:analyzer/src/generated/testing/test_type_provider.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:analyzer/src/task/dart.dart';
 import 'package:path/src/context.dart';
 import 'package:unittest/unittest.dart';
 
 import '../reflective_tests.dart';
+import 'engine_test.dart';
 import 'parser_test.dart';
 import 'resolver_test.dart';
 import 'test_support.dart';
@@ -466,6 +466,52 @@
   }
 }
 
+/**
+ * Implementation of [ConstantEvaluationValidator] used during unit tests;
+ * verifies that any nodes referenced during constant evaluation are present in
+ * the dependency graph.
+ */
+class ConstantEvaluationValidator_ForTest
+    implements ConstantEvaluationValidator {
+  ConstantValueComputer computer;
+
+  ConstantEvaluationTarget _nodeBeingEvaluated;
+
+  @override
+  void beforeComputeValue(ConstantEvaluationTarget constant) {
+    _nodeBeingEvaluated = constant;
+  }
+
+  @override
+  void beforeGetConstantInitializers(ConstructorElement constructor) {
+    // Make sure we properly recorded the dependency.
+    expect(
+        computer.referenceGraph.containsPath(_nodeBeingEvaluated, constructor),
+        isTrue);
+  }
+
+  @override
+  void beforeGetEvaluationResult(ConstantEvaluationTarget constant) {
+    // Make sure we properly recorded the dependency.
+    expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, constant),
+        isTrue);
+  }
+
+  @override
+  void beforeGetFieldEvaluationResult(FieldElementImpl field) {
+    // Make sure we properly recorded the dependency.
+    expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, field),
+        isTrue);
+  }
+
+  @override
+  void beforeGetParameterDefault(ParameterElement parameter) {
+    // Make sure we properly recorded the dependency.
+    expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, parameter),
+        isTrue);
+  }
+}
+
 @reflectiveTest
 class ConstantEvaluatorTest extends ResolverTestCase {
   void fail_constructor() {
@@ -850,12 +896,15 @@
 @reflectiveTest
 class ConstantFinderTest extends EngineTestCase {
   AstNode _node;
-
   TypeProvider _typeProvider;
+  AnalysisContext _context;
+  Source _source;
 
   void setUp() {
     super.setUp();
     _typeProvider = new TestTypeProvider();
+    _context = new TestAnalysisContext();
+    _source = new TestSource();
   }
 
   /**
@@ -879,118 +928,93 @@
 
   void test_visitConstructorDeclaration_const() {
     ConstructorElement element = _setupConstructorDeclaration("A", true);
-    expect(_findConstantDeclarations()[element], same(_node));
+    expect(_findConstants(), contains(element));
   }
 
   void test_visitConstructorDeclaration_nonConst() {
     _setupConstructorDeclaration("A", false);
-    expect(_findConstantDeclarations().isEmpty, isTrue);
-  }
-
-  void test_visitInstanceCreationExpression_const() {
-    _setupInstanceCreationExpression("A", true);
-    expect(_findConstructorInvocations().contains(_node), isTrue);
-  }
-
-  void test_visitInstanceCreationExpression_nonConst() {
-    _setupInstanceCreationExpression("A", false);
-    expect(_findConstructorInvocations().isEmpty, isTrue);
+    expect(_findConstants(), isEmpty);
   }
 
   void test_visitVariableDeclaration_const() {
     VariableElement element = _setupVariableDeclaration("v", true, true);
-    expect(_findVariableDeclarations()[element], same(_node));
+    expect(_findConstants(), contains(element));
   }
 
   void test_visitVariableDeclaration_final_inClass() {
     _setupFieldDeclaration('C', 'f', Keyword.FINAL);
-    expect(_findVariableDeclarations(), isEmpty);
+    expect(_findConstants(), isEmpty);
   }
 
   void test_visitVariableDeclaration_final_inClassWithConstConstructor() {
     VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.FINAL,
         hasConstConstructor: true);
-    expect(_findVariableDeclarations()[field.element], same(field));
+    expect(_findConstants(), contains(field.element));
   }
 
   void test_visitVariableDeclaration_final_outsideClass() {
     _setupVariableDeclaration('v', false, true, isFinal: true);
-    expect(_findVariableDeclarations(), isEmpty);
+    expect(_findConstants(), isEmpty);
   }
 
   void test_visitVariableDeclaration_noInitializer() {
     _setupVariableDeclaration("v", true, false);
-    expect(_findVariableDeclarations().isEmpty, isTrue);
+    expect(_findConstants(), isEmpty);
   }
 
   void test_visitVariableDeclaration_nonConst() {
     _setupVariableDeclaration("v", false, true);
-    expect(_findVariableDeclarations().isEmpty, isTrue);
+    expect(_findConstants(), isEmpty);
   }
 
   void test_visitVariableDeclaration_static_const_inClass() {
     VariableDeclaration field =
         _setupFieldDeclaration('C', 'f', Keyword.CONST, isStatic: true);
-    expect(_findVariableDeclarations()[field.element], same(field));
+    expect(_findConstants(), contains(field.element));
   }
 
   void test_visitVariableDeclaration_static_const_inClassWithConstConstructor() {
     VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.CONST,
         isStatic: true, hasConstConstructor: true);
-    expect(_findVariableDeclarations()[field.element], same(field));
+    expect(_findConstants(), contains(field.element));
   }
 
   void test_visitVariableDeclaration_static_final_inClassWithConstConstructor() {
-    _setupFieldDeclaration('C', 'f', Keyword.FINAL,
+    VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.FINAL,
         isStatic: true, hasConstConstructor: true);
-    expect(_findVariableDeclarations(), isEmpty);
+    expect(_findConstants(), isNot(contains(field.element)));
   }
 
   void test_visitVariableDeclaration_uninitialized_final_inClassWithConstConstructor() {
-    _setupFieldDeclaration('C', 'f', Keyword.FINAL,
+    VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.FINAL,
         isInitialized: false, hasConstConstructor: true);
-    expect(_findVariableDeclarations(), isEmpty);
+    expect(_findConstants(), isNot(contains(field.element)));
   }
 
   void test_visitVariableDeclaration_uninitialized_static_const_inClass() {
     _setupFieldDeclaration('C', 'f', Keyword.CONST,
         isStatic: true, isInitialized: false);
-    expect(_findVariableDeclarations(), isEmpty);
+    expect(_findConstants(), isEmpty);
   }
 
   List<Annotation> _findAnnotations() {
-    ConstantFinder finder = new ConstantFinder();
-    _node.accept(finder);
-    List<Annotation> annotations = finder.annotations;
-    expect(annotations, isNotNull);
-    return annotations;
+    Set<Annotation> annotations = new Set<Annotation>();
+    for (ConstantEvaluationTarget target in _findConstants()) {
+      if (target is ConstantEvaluationTarget_Annotation) {
+        expect(target.context, same(_context));
+        expect(target.source, same(_source));
+        annotations.add(target.annotation);
+      }
+    }
+    return new List<Annotation>.from(annotations);
   }
 
-  Map<ConstructorElement, ConstructorDeclaration> _findConstantDeclarations() {
-    ConstantFinder finder = new ConstantFinder();
+  Set<ConstantEvaluationTarget> _findConstants() {
+    ConstantFinder finder = new ConstantFinder(_context, _source, _source);
     _node.accept(finder);
-    Map<ConstructorElement, ConstructorDeclaration> constructorMap =
-        finder.constructorMap;
-    expect(constructorMap, isNotNull);
-    return constructorMap;
-  }
-
-  List<InstanceCreationExpression> _findConstructorInvocations() {
-    ConstantFinder finder = new ConstantFinder();
-    _node.accept(finder);
-    List<InstanceCreationExpression> constructorInvocations =
-        finder.constructorInvocations;
-    expect(constructorInvocations, isNotNull);
-    return constructorInvocations;
-  }
-
-  Map<PotentiallyConstVariableElement, VariableDeclaration> _findVariableDeclarations() {
-    ConstantFinder finder = new ConstantFinder();
-    _node.accept(finder);
-    Map<PotentiallyConstVariableElement, VariableDeclaration> variableMap =
-        finder.variableMap;
-    expect(variableMap, isNotNull);
-    return variableMap;
+    Set<ConstantEvaluationTarget> constants = finder.constantsToCompute;
+    expect(constants, isNotNull);
+    return constants;
   }
 
   ConstructorElement _setupConstructorDeclaration(String name, bool isConst) {
@@ -1042,12 +1066,6 @@
     return variableDeclaration;
   }
 
-  void _setupInstanceCreationExpression(String name, bool isConst) {
-    _node = AstFactory.instanceCreationExpression2(
-        isConst ? Keyword.CONST : null,
-        AstFactory.typeName3(AstFactory.identifier3(name)));
-  }
-
   VariableElement _setupVariableDeclaration(
       String name, bool isConst, bool isInitialized, {isFinal: false}) {
     VariableDeclaration variableDeclaration = isInitialized
@@ -1251,7 +1269,7 @@
     analysisContext.computeErrors(librarySource);
     expect(unit, isNotNull);
     ConstantValueComputer computer = _makeConstantValueComputer();
-    computer.add(unit);
+    computer.add(unit, librarySource, librarySource);
     computer.computeValues();
     NodeList<CompilationUnitMember> members = unit.declarations;
     expect(members, hasLength(3));
@@ -1269,7 +1287,7 @@
         analysisContext.resolveCompilationUnit(librarySource, libraryElement);
     expect(unit, isNotNull);
     ConstantValueComputer computer = _makeConstantValueComputer();
-    computer.add(unit);
+    computer.add(unit, librarySource, librarySource);
     computer.computeValues();
     NodeList<CompilationUnitMember> members = unit.declarations;
     expect(members, hasLength(2));
@@ -1300,8 +1318,8 @@
         analysisContext.resolveCompilationUnit(partSource, libraryElement);
     expect(partUnit, isNotNull);
     ConstantValueComputer computer = _makeConstantValueComputer();
-    computer.add(libraryUnit);
-    computer.add(partUnit);
+    computer.add(libraryUnit, librarySource, librarySource);
+    computer.add(partUnit, partSource, librarySource);
     computer.computeValues();
     NodeList<CompilationUnitMember> libraryMembers = libraryUnit.declarations;
     expect(libraryMembers, hasLength(2));
@@ -1322,13 +1340,30 @@
         analysisContext.resolveCompilationUnit(librarySource, libraryElement);
     expect(unit, isNotNull);
     ConstantValueComputer computer = _makeConstantValueComputer();
-    computer.add(unit);
+    computer.add(unit, librarySource, librarySource);
     computer.computeValues();
     NodeList<CompilationUnitMember> members = unit.declarations;
     expect(members, hasLength(1));
     _validate(true, (members[0] as TopLevelVariableDeclaration).variables);
   }
 
+  void test_computeValues_value_depends_on_enum() {
+    Source librarySource = addSource('''
+enum E { id0, id1 }
+const E e = E.id0;
+''');
+    LibraryElement libraryElement = resolve(librarySource);
+    CompilationUnit unit =
+        analysisContext.resolveCompilationUnit(librarySource, libraryElement);
+    expect(unit, isNotNull);
+    ConstantValueComputer computer = _makeConstantValueComputer();
+    computer.add(unit, librarySource, librarySource);
+    computer.computeValues();
+    TopLevelVariableDeclaration declaration = unit.declarations
+        .firstWhere((member) => member is TopLevelVariableDeclaration);
+    _validate(true, declaration.variables);
+  }
+
   void test_dependencyOnConstructor() {
     // x depends on "const A()"
     _assertProperDependencies(r'''
@@ -1433,6 +1468,17 @@
 const B b = const B();''');
   }
 
+  void test_dependencyOnInitializedFinal() {
+    // a depends on A() depends on A.x
+    _assertProperDependencies('''
+class A {
+  const A();
+  final int x = 1;
+}
+const A a = const A();
+''');
+  }
+
   void test_dependencyOnInitializedNonStaticConst() {
     // Even though non-static consts are not allowed by the language, we need
     // to handle them for error recovery purposes.
@@ -1446,17 +1492,6 @@
 ''', [CompileTimeErrorCode.CONST_INSTANCE_FIELD]);
   }
 
-  void test_dependencyOnInitializedFinal() {
-    // a depends on A() depends on A.x
-    _assertProperDependencies('''
-class A {
-  const A();
-  final int x = 1;
-}
-const A a = const A();
-''');
-  }
-
   void test_dependencyOnNonFactoryRedirect() {
     // a depends on A.foo() depends on A.bar()
     _assertProperDependencies(r'''
@@ -1552,25 +1587,7 @@
 const A a = const A();
 ''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, 'a');
-    Map<String, DartObjectImpl> fields = _assertType(result, "A");
-    expect(fields, hasLength(1));
-    _assertIntField(fields, "i", 123);
-  }
-
-  void test_non_static_const_initialized_at_declaration() {
-    // Even though non-static consts are not allowed by the language, we need
-    // to handle them for error recovery purposes.
-    CompilationUnit compilationUnit = resolveSource('''
-class A {
-  const int i = 123;
-  const A();
-}
-
-const A a = const A();
-''');
-    EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, 'a');
+        _evaluateTopLevelVariable(compilationUnit, 'a');
     Map<String, DartObjectImpl> fields = _assertType(result, "A");
     expect(fields, hasLength(1));
     _assertIntField(fields, "i", 123);
@@ -1679,7 +1696,7 @@
   final int k;
 }''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     Map<String, DartObjectImpl> fields = _assertType(result, "A");
     expect(fields, hasLength(1));
     _assertIntField(fields, "k", 13);
@@ -1713,7 +1730,7 @@
   final int k;
 }''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     Map<String, DartObjectImpl> fieldsOfA = _assertType(result, "A");
     expect(fieldsOfA, hasLength(1));
     Map<String, DartObjectImpl> fieldsOfB =
@@ -1733,7 +1750,7 @@
   static const bar = 4;
 }''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     Map<String, DartObjectImpl> fields = _assertType(result, "A");
     expect(fields, hasLength(1));
     _assertIntField(fields, "k", 7);
@@ -1748,7 +1765,7 @@
   final int k;
 }''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     Map<String, DartObjectImpl> fields = _assertType(result, "A");
     expect(fields, hasLength(1));
     _assertIntField(fields, "k", 7);
@@ -1766,7 +1783,7 @@
   final int y;
 }''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     Map<String, DartObjectImpl> fields = _assertType(result, "B");
     expect(fields, hasLength(2));
     _assertIntField(fields, "y", 5);
@@ -1784,7 +1801,7 @@
   const A(this.x)
 }''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     Map<String, DartObjectImpl> fields = _assertType(result, "A");
     expect(fields, hasLength(1));
     _assertIntField(fields, "x", 42);
@@ -1818,7 +1835,7 @@
   final int y;
 }''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     Map<String, DartObjectImpl> fields = _assertType(result, "B");
     expect(fields, hasLength(2));
     _assertIntField(fields, "y", 4);
@@ -1836,8 +1853,8 @@
   const A.a2() : x = 5;
   final int x;
 }''');
-    Map<String, DartObjectImpl> aFields = _assertType(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+    Map<String, DartObjectImpl> aFields =
+        _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
     _assertIntField(aFields, 'x', 5);
   }
 
@@ -1849,8 +1866,8 @@
   const A.a2(x) : y = x + 10;
   final int y;
 }''');
-    Map<String, DartObjectImpl> aFields = _assertType(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+    Map<String, DartObjectImpl> aFields =
+        _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
     _assertIntField(aFields, 'y', 111);
   }
 
@@ -1864,8 +1881,7 @@
   const A() : this.b();
   const A.b() : this();
 }''');
-    _assertValidUnknown(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"));
+    _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
   void test_instanceCreationExpression_nonFactoryRedirect_defaultArg() {
@@ -1876,8 +1892,8 @@
   const A.a2([x = 100]) : y = x + 10;
   final int y;
 }''');
-    Map<String, DartObjectImpl> aFields = _assertType(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+    Map<String, DartObjectImpl> aFields =
+        _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
     _assertIntField(aFields, 'y', 110);
   }
 
@@ -1890,8 +1906,7 @@
     // We don't care what value foo evaluates to (since there is a compile
     // error), but we shouldn't crash, and we should figure
     // out that it evaluates to an instance of class A.
-    _assertType(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+    _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
   }
 
   void test_instanceCreationExpression_nonFactoryRedirect_toNonConst() {
@@ -1904,8 +1919,7 @@
     // We don't care what value foo evaluates to (since there is a compile
     // error), but we shouldn't crash, and we should figure
     // out that it evaluates to an instance of class A.
-    _assertType(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+    _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
   }
 
   void test_instanceCreationExpression_nonFactoryRedirect_unnamed() {
@@ -1916,8 +1930,8 @@
   const A() : x = 5;
   final int x;
 }''');
-    Map<String, DartObjectImpl> aFields = _assertType(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"), "A");
+    Map<String, DartObjectImpl> aFields =
+        _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "A");
     _assertIntField(aFields, 'x', 5);
   }
 
@@ -1930,8 +1944,7 @@
 class B implements A {
   const B();
 }''');
-    _assertType(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"), "B");
+    _assertType(_evaluateTopLevelVariable(compilationUnit, "foo"), "B");
   }
 
   void test_instanceCreationExpression_redirect_cycle() {
@@ -1944,8 +1957,7 @@
   const factory A() = A.b;
   const factory A.b() = A;
 }''');
-    _assertValidUnknown(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"));
+    _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
   void test_instanceCreationExpression_redirect_extern() {
@@ -1954,8 +1966,7 @@
 class A {
   external const factory A();
 }''');
-    _assertValidUnknown(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"));
+    _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
   void test_instanceCreationExpression_redirect_nonConst() {
@@ -1968,8 +1979,7 @@
   const factory A() = A.b;
   A.b();
 }''');
-    _assertValidUnknown(
-        _evaluateInstanceCreationExpression(compilationUnit, "foo"));
+    _assertValidUnknown(_evaluateTopLevelVariable(compilationUnit, "foo"));
   }
 
   void test_instanceCreationExpression_redirectWithTypeParams() {
@@ -1985,7 +1995,7 @@
 
 const A a = const A(10);''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "a");
+        _evaluateTopLevelVariable(compilationUnit, "a");
     Map<String, DartObjectImpl> fields = _assertType(result, "B<int>");
     expect(fields, hasLength(1));
     _assertIntField(fields, "x", 10);
@@ -2007,7 +2017,7 @@
 
 const A<int> a = const A<int>(10);''');
     EvaluationResultImpl result =
-        _evaluateInstanceCreationExpression(compilationUnit, "a");
+        _evaluateTopLevelVariable(compilationUnit, "a");
     Map<String, DartObjectImpl> fields = _assertType(result, "B<int>");
     expect(fields, hasLength(1));
     _assertIntField(fields, "x", 10);
@@ -2017,7 +2027,7 @@
     CompilationUnit compilationUnit =
         resolveSource("const foo = const Symbol('a');");
     EvaluationResultImpl evaluationResult =
-        _evaluateInstanceCreationExpression(compilationUnit, "foo");
+        _evaluateTopLevelVariable(compilationUnit, "foo");
     expect(evaluationResult.value, isNotNull);
     DartObjectImpl value = evaluationResult.value;
     expect(value.type, typeProvider.symbolType);
@@ -2040,41 +2050,87 @@
 const c_int = const C<int>();
 const c_num = const C<num>();''');
     EvaluationResultImpl c_int =
-        _evaluateInstanceCreationExpression(compilationUnit, "c_int");
+        _evaluateTopLevelVariable(compilationUnit, "c_int");
     _assertType(c_int, "C<int>");
     DartObjectImpl c_int_value = c_int.value;
     EvaluationResultImpl c_num =
-        _evaluateInstanceCreationExpression(compilationUnit, "c_num");
+        _evaluateTopLevelVariable(compilationUnit, "c_num");
     _assertType(c_num, "C<num>");
     DartObjectImpl c_num_value = c_num.value;
     expect(c_int_value == c_num_value, isFalse);
   }
 
   void test_isValidSymbol() {
-    expect(ConstantValueComputer.isValidPublicSymbol(""), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo.bar"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo\$"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo\$bar"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("iff"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("gif"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("if\$"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("\$if"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo="), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo.bar="), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo.+"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("void"), isTrue);
-    expect(ConstantValueComputer.isValidPublicSymbol("_foo"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("_foo.bar"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo._bar"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("if"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("if.foo"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo.if"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo=.bar"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo."), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("+.foo"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("void.foo"), isFalse);
-    expect(ConstantValueComputer.isValidPublicSymbol("foo.void"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol(""), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo.bar"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo\$"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo\$bar"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("iff"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("gif"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("if\$"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("\$if"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo="), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo.bar="), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo.+"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("void"), isTrue);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("_foo"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("_foo.bar"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo._bar"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("if"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("if.foo"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo.if"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo=.bar"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo."), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("+.foo"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("void.foo"), isFalse);
+    expect(ConstantEvaluationEngine.isValidPublicSymbol("foo.void"), isFalse);
+  }
+
+  void test_length_of_improperly_typed_string_expression() {
+    // Since type annotations are ignored in unchecked mode, the improper
+    // types on s1 and s2 shouldn't prevent us from evaluating i to
+    // 'alpha'.length.
+    CompilationUnit compilationUnit = resolveSource('''
+const int s1 = 'alpha';
+const int s2 = 'beta';
+const int i = (true ? s1 : s2).length;
+''');
+    ConstTopLevelVariableElementImpl element =
+        findTopLevelDeclaration(compilationUnit, 'i').element;
+    EvaluationResultImpl result = element.evaluationResult;
+    expect(_assertValidInt(result), 5);
+  }
+
+  void test_length_of_improperly_typed_string_identifier() {
+    // Since type annotations are ignored in unchecked mode, the improper type
+    // on s shouldn't prevent us from evaluating i to 'alpha'.length.
+    CompilationUnit compilationUnit = resolveSource('''
+const int s = 'alpha';
+const int i = s.length;
+''');
+    ConstTopLevelVariableElementImpl element =
+        findTopLevelDeclaration(compilationUnit, 'i').element;
+    EvaluationResultImpl result = element.evaluationResult;
+    expect(_assertValidInt(result), 5);
+  }
+
+  void test_non_static_const_initialized_at_declaration() {
+    // Even though non-static consts are not allowed by the language, we need
+    // to handle them for error recovery purposes.
+    CompilationUnit compilationUnit = resolveSource('''
+class A {
+  const int i = 123;
+  const A();
+}
+
+const A a = const A();
+''');
+    EvaluationResultImpl result =
+        _evaluateTopLevelVariable(compilationUnit, 'a');
+    Map<String, DartObjectImpl> fields = _assertType(result, "A");
+    expect(fields, hasLength(1));
+    _assertIntField(fields, "i", 123);
   }
 
   void test_symbolLiteral_void() {
@@ -2117,7 +2173,7 @@
         analysisContext.resolveCompilationUnit(source, element);
     expect(unit, isNotNull);
     ConstantValueComputer computer = _makeConstantValueComputer();
-    computer.add(unit);
+    computer.add(unit, source, source);
     computer.computeValues();
     assertErrors(source, expectedErrorCodes);
   }
@@ -2176,7 +2232,7 @@
         defaultExpr == null ? "" : ", defaultValue: $defaultExpr";
     CompilationUnit compilationUnit = resolveSource(
         "const $varName = const bool.fromEnvironment('$envVarName'$defaultArg);");
-    return _evaluateInstanceCreationExpression(compilationUnit, varName);
+    return _evaluateTopLevelVariable(compilationUnit, varName);
   }
 
   EvaluationResultImpl _check_fromEnvironment_int(
@@ -2190,7 +2246,7 @@
         defaultExpr == null ? "" : ", defaultValue: $defaultExpr";
     CompilationUnit compilationUnit = resolveSource(
         "const $varName = const int.fromEnvironment('$envVarName'$defaultArg);");
-    return _evaluateInstanceCreationExpression(compilationUnit, varName);
+    return _evaluateTopLevelVariable(compilationUnit, varName);
   }
 
   EvaluationResultImpl _check_fromEnvironment_string(
@@ -2204,7 +2260,7 @@
         defaultExpr == null ? "" : ", defaultValue: $defaultExpr";
     CompilationUnit compilationUnit = resolveSource(
         "const $varName = const String.fromEnvironment('$envVarName'$defaultArg);");
-    return _evaluateInstanceCreationExpression(compilationUnit, varName);
+    return _evaluateTopLevelVariable(compilationUnit, varName);
   }
 
   void _checkInstanceCreation_withSupertypeParams(bool isExplicit) {
@@ -2222,12 +2278,12 @@
 const b_int_num = const B<int, num>();
 const c_int_num = const C<int, num>();""");
     EvaluationResultImpl b_int_num =
-        _evaluateInstanceCreationExpression(compilationUnit, "b_int_num");
+        _evaluateTopLevelVariable(compilationUnit, "b_int_num");
     Map<String, DartObjectImpl> b_int_num_fields =
         _assertType(b_int_num, "B<int, num>");
     _assertFieldType(b_int_num_fields, GenericState.SUPERCLASS_FIELD, "A<int>");
     EvaluationResultImpl c_int_num =
-        _evaluateInstanceCreationExpression(compilationUnit, "c_int_num");
+        _evaluateTopLevelVariable(compilationUnit, "c_int_num");
     Map<String, DartObjectImpl> c_int_num_fields =
         _assertType(c_int_num, "C<int, num>");
     _assertFieldType(c_int_num_fields, GenericState.SUPERCLASS_FIELD, "A<num>");
@@ -2246,8 +2302,7 @@
   const A(${isNamed ? "{$formalParam}" : "[$formalParam]"})${isFieldFormal ? "" : " : $fieldName = $paramName"};
   final int $fieldName;
 }""");
-    EvaluationResultImpl x =
-        _evaluateInstanceCreationExpression(compilationUnit, "x");
+    EvaluationResultImpl x = _evaluateTopLevelVariable(compilationUnit, "x");
     Map<String, DartObjectImpl> fieldsOfX = _assertType(x, "A");
     expect(fieldsOfX, hasLength(1));
     if (hasDefault) {
@@ -2255,8 +2310,7 @@
     } else {
       _assertNullField(fieldsOfX, fieldName);
     }
-    EvaluationResultImpl y =
-        _evaluateInstanceCreationExpression(compilationUnit, "y");
+    EvaluationResultImpl y = _evaluateTopLevelVariable(compilationUnit, "y");
     Map<String, DartObjectImpl> fieldsOfY = _assertType(y, "A");
     expect(fieldsOfY, hasLength(1));
     _assertIntField(fieldsOfY, fieldName, 10);
@@ -2286,16 +2340,21 @@
     return null;
   }
 
-  EvaluationResultImpl _evaluateInstanceCreationExpression(
+  EvaluationResultImpl _evaluateTopLevelVariable(
       CompilationUnit compilationUnit, String name) {
-    Expression expression =
-        findTopLevelConstantExpression(compilationUnit, name);
-    return (expression as InstanceCreationExpression).evaluationResult;
+    VariableDeclaration varDecl =
+        findTopLevelDeclaration(compilationUnit, name);
+    ConstTopLevelVariableElementImpl varElement = varDecl.element;
+    return varElement.evaluationResult;
   }
 
   ConstantValueComputer _makeConstantValueComputer() {
-    return new ValidatingConstantValueComputer(
-        analysisContext2.typeProvider, analysisContext2.declaredVariables);
+    ConstantEvaluationValidator_ForTest validator =
+        new ConstantEvaluationValidator_ForTest();
+    validator.computer = new ConstantValueComputer(analysisContext2,
+        analysisContext2.typeProvider, analysisContext2.declaredVariables,
+        validator);
+    return validator.computer;
   }
 
   void _validate(bool shouldBeValid, VariableDeclarationList declarationList) {
@@ -2312,27 +2371,6 @@
   }
 }
 
-class ConstantValueComputerTest_ValidatingConstantVisitor
-    extends ConstantVisitor {
-  final DirectedGraph<AstNode> _referenceGraph;
-  final AstNode _nodeBeingEvaluated;
-
-  ConstantValueComputerTest_ValidatingConstantVisitor(TypeProvider typeProvider,
-      this._referenceGraph, this._nodeBeingEvaluated,
-      ErrorReporter errorReporter)
-      : super.con1(typeProvider, errorReporter);
-
-  @override
-  void beforeGetEvaluationResult(AstNode node) {
-    super.beforeGetEvaluationResult(node);
-    // If we are getting the evaluation result for a node in the graph,
-    // make sure we properly recorded the dependency.
-    if (_referenceGraph.nodes.contains(node)) {
-      expect(_referenceGraph.containsPath(_nodeBeingEvaluated, node), isTrue);
-    }
-  }
-}
-
 @reflectiveTest
 class ConstantVisitorTest extends ResolverTestCase {
   void test_visitConditionalExpression_false() {
@@ -2343,34 +2381,12 @@
     GatheringErrorListener errorListener = new GatheringErrorListener();
     ErrorReporter errorReporter =
         new ErrorReporter(errorListener, _dummySource());
-    _assertValue(0, expression.accept(
-        new ConstantVisitor.con1(new TestTypeProvider(), errorReporter)));
+    _assertValue(0, expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(
+            new TestTypeProvider(), new DeclaredVariables()), errorReporter)));
     errorListener.assertNoErrors();
   }
 
-  void test_visitConditionalExpression_instanceCreation_invalidFieldInitializer() {
-    TestTypeProvider typeProvider = new TestTypeProvider();
-    LibraryElementImpl libraryElement = ElementFactory.library(null, "lib");
-    String className = "C";
-    ClassElementImpl classElement = ElementFactory.classElement2(className);
-    (libraryElement.definingCompilationUnit as CompilationUnitElementImpl).types =
-        <ClassElement>[classElement];
-    ConstructorElementImpl constructorElement = ElementFactory
-        .constructorElement(classElement, null, true, [typeProvider.intType]);
-    constructorElement.parameters[0] =
-        new FieldFormalParameterElementImpl(AstFactory.identifier3("x"));
-    InstanceCreationExpression expression = AstFactory
-        .instanceCreationExpression2(Keyword.CONST,
-            AstFactory.typeName4(className), [AstFactory.integer(0)]);
-    expression.staticElement = constructorElement;
-    GatheringErrorListener errorListener = new GatheringErrorListener();
-    ErrorReporter errorReporter =
-        new ErrorReporter(errorListener, _dummySource());
-    expression.accept(new ConstantVisitor.con1(typeProvider, errorReporter));
-    errorListener
-        .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
-  }
-
   void test_visitConditionalExpression_nonBooleanCondition() {
     Expression thenExpression = AstFactory.integer(1);
     Expression elseExpression = AstFactory.integer(0);
@@ -2380,8 +2396,9 @@
     GatheringErrorListener errorListener = new GatheringErrorListener();
     ErrorReporter errorReporter =
         new ErrorReporter(errorListener, _dummySource());
-    DartObjectImpl result = expression.accept(
-        new ConstantVisitor.con1(new TestTypeProvider(), errorReporter));
+    DartObjectImpl result = expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(
+            new TestTypeProvider(), new DeclaredVariables()), errorReporter));
     expect(result, isNull);
     errorListener
         .assertErrorsWithCodes([CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL]);
@@ -2395,8 +2412,9 @@
     GatheringErrorListener errorListener = new GatheringErrorListener();
     ErrorReporter errorReporter =
         new ErrorReporter(errorListener, _dummySource());
-    DartObjectImpl result = expression.accept(
-        new ConstantVisitor.con1(new TestTypeProvider(), errorReporter));
+    DartObjectImpl result = expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(
+            new TestTypeProvider(), new DeclaredVariables()), errorReporter));
     expect(result, isNull);
     errorListener
         .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
@@ -2410,8 +2428,9 @@
     GatheringErrorListener errorListener = new GatheringErrorListener();
     ErrorReporter errorReporter =
         new ErrorReporter(errorListener, _dummySource());
-    DartObjectImpl result = expression.accept(
-        new ConstantVisitor.con1(new TestTypeProvider(), errorReporter));
+    DartObjectImpl result = expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(
+            new TestTypeProvider(), new DeclaredVariables()), errorReporter));
     expect(result, isNull);
     errorListener
         .assertErrorsWithCodes([CompileTimeErrorCode.INVALID_CONSTANT]);
@@ -2425,8 +2444,9 @@
     GatheringErrorListener errorListener = new GatheringErrorListener();
     ErrorReporter errorReporter =
         new ErrorReporter(errorListener, _dummySource());
-    _assertValue(1, expression.accept(
-        new ConstantVisitor.con1(new TestTypeProvider(), errorReporter)));
+    _assertValue(1, expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(
+            new TestTypeProvider(), new DeclaredVariables()), errorReporter)));
     errorListener.assertNoErrors();
   }
 
@@ -2496,8 +2516,9 @@
         findTopLevelConstantExpression(compilationUnit, name);
     GatheringErrorListener errorListener = new GatheringErrorListener();
     ErrorReporter errorReporter = new ErrorReporter(errorListener, source);
-    DartObjectImpl result = expression.accept(new ConstantVisitor.con2(
-        typeProvider, lexicalEnvironment, errorReporter));
+    DartObjectImpl result = expression.accept(new ConstantVisitor(
+        new ConstantEvaluationEngine(typeProvider, new DeclaredVariables()),
+        errorReporter, lexicalEnvironment: lexicalEnvironment));
     errorListener.assertNoErrors();
     return result;
   }
@@ -4909,9 +4930,9 @@
     JavaFile file2 =
         FileUtilities2.createFile("/does/not/exist/folder/some2.dart");
     JavaFile file3 = FileUtilities2.createFile("/does/not/exist3/some3.dart");
-    FileBasedSource source1 = new FileBasedSource.con1(file1);
-    FileBasedSource source2 = new FileBasedSource.con1(file2);
-    FileBasedSource source3 = new FileBasedSource.con1(file3);
+    FileBasedSource source1 = new FileBasedSource(file1);
+    FileBasedSource source2 = new FileBasedSource(file2);
+    FileBasedSource source3 = new FileBasedSource(file3);
     DirectoryBasedSourceContainer container =
         new DirectoryBasedSourceContainer.con1(dir);
     expect(container.contains(source1), isTrue);
@@ -6334,7 +6355,7 @@
 }''';
     CompilationUnit cu = _resolveContents(code);
     int offset = code.indexOf('foo(0)');
-    AstNode node = new NodeLocator.con1(offset).searchWithin(cu);
+    AstNode node = new NodeLocator(offset).searchWithin(cu);
     MethodInvocation invocation =
         node.getAncestor((n) => n is MethodInvocation);
     Element element = ElementLocator.locate(invocation);
@@ -6444,7 +6465,7 @@
     CompilationUnit cu = _resolveContents(code);
     int start = _getOffsetOfMatch(code, nodePattern, index);
     int end = start + nodePattern.length;
-    return new NodeLocator.con2(start, end).searchWithin(cu);
+    return new NodeLocator(start, end).searchWithin(cu);
   }
 
   int _getOffsetOfMatch(String contents, String pattern, int matchIndex) {
@@ -7291,22 +7312,22 @@
   void test_equals_false_differentFiles() {
     JavaFile file1 = FileUtilities2.createFile("/does/not/exist1.dart");
     JavaFile file2 = FileUtilities2.createFile("/does/not/exist2.dart");
-    FileBasedSource source1 = new FileBasedSource.con1(file1);
-    FileBasedSource source2 = new FileBasedSource.con1(file2);
+    FileBasedSource source1 = new FileBasedSource(file1);
+    FileBasedSource source2 = new FileBasedSource(file2);
     expect(source1 == source2, isFalse);
   }
 
   void test_equals_false_null() {
     JavaFile file = FileUtilities2.createFile("/does/not/exist1.dart");
-    FileBasedSource source1 = new FileBasedSource.con1(file);
+    FileBasedSource source1 = new FileBasedSource(file);
     expect(source1 == null, isFalse);
   }
 
   void test_equals_true() {
     JavaFile file1 = FileUtilities2.createFile("/does/not/exist.dart");
     JavaFile file2 = FileUtilities2.createFile("/does/not/exist.dart");
-    FileBasedSource source1 = new FileBasedSource.con1(file1);
-    FileBasedSource source2 = new FileBasedSource.con1(file2);
+    FileBasedSource source1 = new FileBasedSource(file1);
+    FileBasedSource source2 = new FileBasedSource(file2);
     expect(source1 == source2, isTrue);
   }
 
@@ -7356,28 +7377,28 @@
     SourceFactory factory = new SourceFactory([new FileUriResolver()]);
     String fullPath = "/does/not/exist.dart";
     JavaFile file = FileUtilities2.createFile(fullPath);
-    FileBasedSource source = new FileBasedSource.con1(file);
+    FileBasedSource source = new FileBasedSource(file);
     expect(factory.fromEncoding(source.encoding), source);
   }
 
   void test_getFullName() {
     String fullPath = "/does/not/exist.dart";
     JavaFile file = FileUtilities2.createFile(fullPath);
-    FileBasedSource source = new FileBasedSource.con1(file);
+    FileBasedSource source = new FileBasedSource(file);
     expect(source.fullName, file.getAbsolutePath());
   }
 
   void test_getShortName() {
     JavaFile file = FileUtilities2.createFile("/does/not/exist.dart");
-    FileBasedSource source = new FileBasedSource.con1(file);
+    FileBasedSource source = new FileBasedSource(file);
     expect(source.shortName, "exist.dart");
   }
 
   void test_hashCode() {
     JavaFile file1 = FileUtilities2.createFile("/does/not/exist.dart");
     JavaFile file2 = FileUtilities2.createFile("/does/not/exist.dart");
-    FileBasedSource source1 = new FileBasedSource.con1(file1);
-    FileBasedSource source2 = new FileBasedSource.con1(file2);
+    FileBasedSource source1 = new FileBasedSource(file1);
+    FileBasedSource source2 = new FileBasedSource(file2);
     expect(source2.hashCode, source1.hashCode);
   }
 
@@ -7400,7 +7421,7 @@
 
   void test_isInSystemLibrary_false() {
     JavaFile file = FileUtilities2.createFile("/does/not/exist.dart");
-    FileBasedSource source = new FileBasedSource.con1(file);
+    FileBasedSource source = new FileBasedSource(file);
     expect(source, isNotNull);
     expect(source.fullName, file.getAbsolutePath());
     expect(source.isInSystemLibrary, isFalse);
@@ -7408,7 +7429,7 @@
 
   void test_issue14500() {
     // see https://code.google.com/p/dart/issues/detail?id=14500
-    FileBasedSource source = new FileBasedSource.con1(
+    FileBasedSource source = new FileBasedSource(
         FileUtilities2.createFile("/some/packages/foo:bar.dart"));
     expect(source, isNotNull);
     expect(source.exists(), isFalse);
@@ -7417,7 +7438,7 @@
   void test_resolveRelative_dart_fileName() {
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
     FileBasedSource source =
-        new FileBasedSource.con2(parseUriWithException("dart:test"), file);
+        new FileBasedSource(file, parseUriWithException("dart:test"));
     expect(source, isNotNull);
     Uri relative = source.resolveRelativeUri(parseUriWithException("lib.dart"));
     expect(relative, isNotNull);
@@ -7427,7 +7448,7 @@
   void test_resolveRelative_dart_filePath() {
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
     FileBasedSource source =
-        new FileBasedSource.con2(parseUriWithException("dart:test"), file);
+        new FileBasedSource(file, parseUriWithException("dart:test"));
     expect(source, isNotNull);
     Uri relative =
         source.resolveRelativeUri(parseUriWithException("c/lib.dart"));
@@ -7437,8 +7458,8 @@
 
   void test_resolveRelative_dart_filePathWithParent() {
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con2(
-        parseUriWithException("dart:test/b/test.dart"), file);
+    FileBasedSource source = new FileBasedSource(
+        file, parseUriWithException("dart:test/b/test.dart"));
     expect(source, isNotNull);
     Uri relative =
         source.resolveRelativeUri(parseUriWithException("../c/lib.dart"));
@@ -7454,7 +7475,7 @@
       return;
     }
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con1(file);
+    FileBasedSource source = new FileBasedSource(file);
     expect(source, isNotNull);
     Uri relative = source.resolveRelativeUri(parseUriWithException("lib.dart"));
     expect(relative, isNotNull);
@@ -7469,7 +7490,7 @@
       return;
     }
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con1(file);
+    FileBasedSource source = new FileBasedSource(file);
     expect(source, isNotNull);
     Uri relative =
         source.resolveRelativeUri(parseUriWithException("c/lib.dart"));
@@ -7484,7 +7505,7 @@
       return;
     }
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con1(file);
+    FileBasedSource source = new FileBasedSource(file);
     expect(source, isNotNull);
     Uri relative =
         source.resolveRelativeUri(parseUriWithException("../c/lib.dart"));
@@ -7494,8 +7515,8 @@
 
   void test_resolveRelative_package_fileName() {
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con2(
-        parseUriWithException("package:b/test.dart"), file);
+    FileBasedSource source =
+        new FileBasedSource(file, parseUriWithException("package:b/test.dart"));
     expect(source, isNotNull);
     Uri relative = source.resolveRelativeUri(parseUriWithException("lib.dart"));
     expect(relative, isNotNull);
@@ -7504,8 +7525,8 @@
 
   void test_resolveRelative_package_fileNameWithoutPackageName() {
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con2(
-        parseUriWithException("package:test.dart"), file);
+    FileBasedSource source =
+        new FileBasedSource(file, parseUriWithException("package:test.dart"));
     expect(source, isNotNull);
     Uri relative = source.resolveRelativeUri(parseUriWithException("lib.dart"));
     expect(relative, isNotNull);
@@ -7514,8 +7535,8 @@
 
   void test_resolveRelative_package_filePath() {
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con2(
-        parseUriWithException("package:b/test.dart"), file);
+    FileBasedSource source =
+        new FileBasedSource(file, parseUriWithException("package:b/test.dart"));
     expect(source, isNotNull);
     Uri relative =
         source.resolveRelativeUri(parseUriWithException("c/lib.dart"));
@@ -7525,8 +7546,8 @@
 
   void test_resolveRelative_package_filePathWithParent() {
     JavaFile file = FileUtilities2.createFile("/a/b/test.dart");
-    FileBasedSource source = new FileBasedSource.con2(
-        parseUriWithException("package:a/b/test.dart"), file);
+    FileBasedSource source = new FileBasedSource(
+        file, parseUriWithException("package:a/b/test.dart"));
     expect(source, isNotNull);
     Uri relative =
         source.resolveRelativeUri(parseUriWithException("../c/lib.dart"));
@@ -7537,7 +7558,7 @@
   void test_system() {
     JavaFile file = FileUtilities2.createFile("/does/not/exist.dart");
     FileBasedSource source =
-        new FileBasedSource.con2(parseUriWithException("dart:core"), file);
+        new FileBasedSource(file, parseUriWithException("dart:core"));
     expect(source, isNotNull);
     expect(source.fullName, file.getAbsolutePath());
     expect(source.isInSystemLibrary, isTrue);
@@ -8000,120 +8021,56 @@
 
 @reflectiveTest
 class ReferenceFinderTest extends EngineTestCase {
-  DirectedGraph<AstNode> _referenceGraph;
-  Map<PotentiallyConstVariableElement, VariableDeclaration> _variableDeclarationMap;
-  Map<ConstructorElement, ConstructorDeclaration> _constructorDeclarationMap;
-  VariableDeclaration _head;
-  AstNode _tail;
+  DirectedGraph<ConstantEvaluationTarget> _referenceGraph;
+  VariableElement _head;
+  Element _tail;
   @override
   void setUp() {
-    _referenceGraph = new DirectedGraph<AstNode>();
-    _variableDeclarationMap =
-        new HashMap<PotentiallyConstVariableElement, VariableDeclaration>();
-    _constructorDeclarationMap =
-        new HashMap<ConstructorElement, ConstructorDeclaration>();
-    _head = AstFactory.variableDeclaration("v1");
-  }
-  void test_visitInstanceCreationExpression_const() {
-    _visitNode(_makeTailConstructor("A", true, true, true));
-    _assertOneArc(_tail);
-  }
-  void test_visitInstanceCreationExpression_nonConstDeclaration() {
-    // In the source:
-    //   const x = const A();
-    // x depends on "const A()" even if the A constructor
-    // isn't declared as const.
-    _visitNode(_makeTailConstructor("A", false, true, true));
-    _assertOneArc(_tail);
-  }
-  void test_visitInstanceCreationExpression_nonConstUsage() {
-    _visitNode(_makeTailConstructor("A", true, false, true));
-    _assertNoArcs();
-  }
-  void test_visitInstanceCreationExpression_notInMap() {
-    // In the source:
-    //   const x = const A();
-    // x depends on "const A()" even if the AST for the A constructor
-    // isn't available.
-    _visitNode(_makeTailConstructor("A", true, true, false));
-    _assertOneArc(_tail);
+    _referenceGraph = new DirectedGraph<ConstantEvaluationTarget>();
+    _head = ElementFactory.topLevelVariableElement2("v1");
   }
   void test_visitSimpleIdentifier_const() {
-    _visitNode(_makeTailVariable("v2", true, true));
+    _visitNode(_makeTailVariable("v2", true));
     _assertOneArc(_tail);
   }
   void test_visitSimpleIdentifier_nonConst() {
-    _visitNode(_makeTailVariable("v2", false, true));
-    _assertNoArcs();
-  }
-  void test_visitSimpleIdentifier_notInMap() {
-    _visitNode(_makeTailVariable("v2", true, false));
+    _visitNode(_makeTailVariable("v2", false));
     _assertNoArcs();
   }
   void test_visitSuperConstructorInvocation_const() {
-    _visitNode(_makeTailSuperConstructorInvocation("A", true, true));
+    _visitNode(_makeTailSuperConstructorInvocation("A", true));
     _assertOneArc(_tail);
   }
   void test_visitSuperConstructorInvocation_nonConst() {
-    _visitNode(_makeTailSuperConstructorInvocation("A", false, true));
-    _assertNoArcs();
-  }
-  void test_visitSuperConstructorInvocation_notInMap() {
-    _visitNode(_makeTailSuperConstructorInvocation("A", true, false));
+    _visitNode(_makeTailSuperConstructorInvocation("A", false));
     _assertNoArcs();
   }
   void test_visitSuperConstructorInvocation_unresolved() {
     SuperConstructorInvocation superConstructorInvocation =
         AstFactory.superConstructorInvocation();
-    _tail = superConstructorInvocation;
     _visitNode(superConstructorInvocation);
     _assertNoArcs();
   }
   void _assertNoArcs() {
-    Set<AstNode> tails = _referenceGraph.getTails(_head);
+    Set<ConstantEvaluationTarget> tails = _referenceGraph.getTails(_head);
     expect(tails, hasLength(0));
   }
-  void _assertOneArc(AstNode tail) {
-    Set<AstNode> tails = _referenceGraph.getTails(_head);
+  void _assertOneArc(Element tail) {
+    Set<ConstantEvaluationTarget> tails = _referenceGraph.getTails(_head);
     expect(tails, hasLength(1));
     expect(tails.first, same(tail));
   }
-  ReferenceFinder _createReferenceFinder(AstNode source) => new ReferenceFinder(
-      source, _referenceGraph, _variableDeclarationMap,
-      _constructorDeclarationMap);
-  InstanceCreationExpression _makeTailConstructor(
-      String name, bool isConstDeclaration, bool isConstUsage, bool inMap) {
-    List<ConstructorInitializer> initializers =
-        new List<ConstructorInitializer>();
-    ConstructorDeclaration constructorDeclaration = AstFactory
-        .constructorDeclaration(AstFactory.identifier3(name), null,
-            AstFactory.formalParameterList(), initializers);
-    if (isConstDeclaration) {
-      constructorDeclaration.constKeyword = new KeywordToken(Keyword.CONST, 0);
-    }
-    ClassElementImpl classElement = ElementFactory.classElement2(name);
-    SimpleIdentifier identifier = AstFactory.identifier3(name);
-    TypeName type = AstFactory.typeName3(identifier);
-    InstanceCreationExpression instanceCreationExpression = AstFactory
-        .instanceCreationExpression2(
-            isConstUsage ? Keyword.CONST : Keyword.NEW, type);
-    _tail = instanceCreationExpression;
-    ConstructorElementImpl constructorElement = ElementFactory
-        .constructorElement(classElement, name, isConstDeclaration);
-    if (inMap) {
-      _constructorDeclarationMap[constructorElement] = constructorDeclaration;
-    }
-    instanceCreationExpression.staticElement = constructorElement;
-    return instanceCreationExpression;
-  }
+  ReferenceFinder _createReferenceFinder(ConstantEvaluationTarget source) =>
+      new ReferenceFinder((ConstantEvaluationTarget dependency) {
+    _referenceGraph.addEdge(source, dependency);
+  });
   SuperConstructorInvocation _makeTailSuperConstructorInvocation(
-      String name, bool isConst, bool inMap) {
+      String name, bool isConst) {
     List<ConstructorInitializer> initializers =
         new List<ConstructorInitializer>();
     ConstructorDeclaration constructorDeclaration = AstFactory
         .constructorDeclaration(AstFactory.identifier3(name), null,
             AstFactory.formalParameterList(), initializers);
-    _tail = constructorDeclaration;
     if (isConst) {
       constructorDeclaration.constKeyword = new KeywordToken(Keyword.CONST, 0);
     }
@@ -8122,24 +8079,19 @@
         AstFactory.superConstructorInvocation();
     ConstructorElementImpl constructorElement =
         ElementFactory.constructorElement(classElement, name, isConst);
-    if (inMap) {
-      _constructorDeclarationMap[constructorElement] = constructorDeclaration;
-    }
+    _tail = constructorElement;
     superConstructorInvocation.staticElement = constructorElement;
     return superConstructorInvocation;
   }
-  SimpleIdentifier _makeTailVariable(String name, bool isConst, bool inMap) {
+  SimpleIdentifier _makeTailVariable(String name, bool isConst) {
     VariableDeclaration variableDeclaration =
         AstFactory.variableDeclaration(name);
-    _tail = variableDeclaration;
     ConstLocalVariableElementImpl variableElement =
         ElementFactory.constLocalVariableElement(name);
+    _tail = variableElement;
     variableElement.const3 = isConst;
     AstFactory.variableDeclarationList2(
         isConst ? Keyword.CONST : Keyword.VAR, [variableDeclaration]);
-    if (inMap) {
-      _variableDeclarationMap[variableElement] = variableDeclaration;
-    }
     SimpleIdentifier identifier = AstFactory.identifier3(name);
     identifier.staticElement = variableElement;
     return identifier;
@@ -8255,8 +8207,8 @@
     SourceFactory factory =
         new SourceFactory([new UriResolver_nonAbsolute_absolute()]);
     String absolutePath = "/does/not/matter.dart";
-    Source containingSource = new FileBasedSource.con1(
-        FileUtilities2.createFile("/does/not/exist.dart"));
+    Source containingSource =
+        new FileBasedSource(FileUtilities2.createFile("/does/not/exist.dart"));
     Source result = factory.resolveUri(containingSource, absolutePath);
     expect(result.fullName,
         FileUtilities2.createFile(absolutePath).getAbsolutePath());
@@ -8264,8 +8216,8 @@
   void test_resolveUri_nonAbsolute_relative() {
     SourceFactory factory =
         new SourceFactory([new UriResolver_nonAbsolute_relative()]);
-    Source containingSource = new FileBasedSource.con1(
-        FileUtilities2.createFile("/does/not/have.dart"));
+    Source containingSource =
+        new FileBasedSource(FileUtilities2.createFile("/does/not/have.dart"));
     Source result = factory.resolveUri(containingSource, "exist.dart");
     expect(result.fullName,
         FileUtilities2.createFile("/does/not/exist.dart").getAbsolutePath());
@@ -8302,8 +8254,8 @@
   void test_restoreUri() {
     JavaFile file1 = FileUtilities2.createFile("/some/file1.dart");
     JavaFile file2 = FileUtilities2.createFile("/some/file2.dart");
-    Source source1 = new FileBasedSource.con1(file1);
-    Source source2 = new FileBasedSource.con1(file2);
+    Source source1 = new FileBasedSource(file1);
+    Source source2 = new FileBasedSource(file2);
     Uri expected1 = parseUriWithException("file:///my_file.dart");
     SourceFactory factory =
         new SourceFactory([new UriResolver_restoreUri(source1, expected1)]);
@@ -8403,14 +8355,14 @@
 class UriResolver_nonAbsolute_absolute extends UriResolver {
   @override
   Source resolveAbsolute(Uri uri) {
-    return new FileBasedSource.con2(uri, new JavaFile.fromUri(uri));
+    return new FileBasedSource(new JavaFile.fromUri(uri), uri);
   }
 }
 
 class UriResolver_nonAbsolute_relative extends UriResolver {
   @override
   Source resolveAbsolute(Uri uri) {
-    return new FileBasedSource.con2(uri, new JavaFile.fromUri(uri));
+    return new FileBasedSource(new JavaFile.fromUri(uri), uri);
   }
 }
 
@@ -8448,76 +8400,6 @@
   }
 }
 
-class ValidatingConstantValueComputer extends ConstantValueComputer {
-  AstNode _nodeBeingEvaluated;
-  ValidatingConstantValueComputer(
-      TypeProvider typeProvider, DeclaredVariables declaredVariables)
-      : super(typeProvider, declaredVariables);
-
-  @override
-  void beforeComputeValue(AstNode constNode) {
-    super.beforeComputeValue(constNode);
-    _nodeBeingEvaluated = constNode;
-  }
-
-  @override
-  void beforeGetFieldEvaluationResult(FieldElementImpl field) {
-    super.beforeGetFieldEvaluationResult(field);
-    // If we are getting the constant value for a node in the graph, make sure
-    // we properly recorded the dependency.
-    VariableDeclaration node = findVariableDeclaration(field);
-    if (node != null && referenceGraph.nodes.contains(node)) {
-      expect(referenceGraph.containsPath(_nodeBeingEvaluated, node), isTrue);
-    }
-  }
-
-  @override
-  void beforeGetConstantInitializers(ConstructorElement constructor) {
-    super.beforeGetConstantInitializers(constructor);
-    // If we are getting the constant initializers for a node in the graph,
-    // make sure we properly recorded the dependency.
-    ConstructorDeclaration node = findConstructorDeclaration(constructor);
-    if (node != null && referenceGraph.nodes.contains(node)) {
-      expect(referenceGraph.containsPath(_nodeBeingEvaluated, node), isTrue);
-    }
-  }
-
-  @override
-  void beforeGetParameterDefault(ParameterElement parameter) {
-    super.beforeGetParameterDefault(parameter);
-    // Find the ConstructorElement and figure out which
-    // parameter we're talking about.
-    ConstructorElement constructor =
-        parameter.getAncestor((element) => element is ConstructorElement);
-    int parameterIndex;
-    List<ParameterElement> parameters = constructor.parameters;
-    int numParameters = parameters.length;
-    for (parameterIndex = 0; parameterIndex < numParameters; parameterIndex++) {
-      if (identical(parameters[parameterIndex], parameter)) {
-        break;
-      }
-    }
-    expect(parameterIndex < numParameters, isTrue);
-    // If we are getting the default parameter for a constructor in the graph,
-    // make sure we properly recorded the dependency on the parameter.
-    ConstructorDeclaration constructorNode =
-        constructorDeclarationMap[constructor];
-    if (constructorNode != null) {
-      FormalParameter parameterNode =
-          constructorNode.parameters.parameters[parameterIndex];
-      expect(referenceGraph.nodes.contains(parameterNode), isTrue);
-      expect(referenceGraph.containsPath(_nodeBeingEvaluated, parameterNode),
-          isTrue);
-    }
-  }
-
-  @override
-  ConstantVisitor createConstantVisitor(ErrorReporter errorReporter) {
-    return new ConstantValueComputerTest_ValidatingConstantVisitor(
-        typeProvider, referenceGraph, _nodeBeingEvaluated, errorReporter);
-  }
-}
-
 /**
  * Instances of `XmlValidator` traverse an [XmlNode] structure and validate the node
  * hierarchy.
diff --git a/pkg/analyzer/test/generated/ast_test.dart b/pkg/analyzer/test/generated/ast_test.dart
index 64ead75..e285058 100644
--- a/pkg/analyzer/test/generated/ast_test.dart
+++ b/pkg/analyzer/test/generated/ast_test.dart
@@ -922,7 +922,7 @@
   }
 
   void test_searchWithin_null() {
-    NodeLocator locator = new NodeLocator.con2(0, 0);
+    NodeLocator locator = new NodeLocator(0, 0);
     expect(locator.searchWithin(null), isNull);
   }
 
@@ -937,7 +937,7 @@
     CompilationUnit unit = ParserTestCase.parseCompilationUnit(r'''
 class A {}
 class B {}''');
-    NodeLocator locator = new NodeLocator.con2(1024, 1024);
+    NodeLocator locator = new NodeLocator(1024, 1024);
     AstNode node = locator.searchWithin(unit.declarations[0]);
     expect(node, isNull);
   }
@@ -946,14 +946,14 @@
     CompilationUnit unit = ParserTestCase.parseCompilationUnit(r'''
 class A {}
 class B {}''');
-    NodeLocator locator = new NodeLocator.con2(0, 0);
+    NodeLocator locator = new NodeLocator(0, 0);
     AstNode node = locator.searchWithin(unit.declarations[1]);
     expect(node, isNull);
   }
 
   void _assertLocate(CompilationUnit unit, int start, int end,
       Predicate<AstNode> predicate, Type expectedClass) {
-    NodeLocator locator = new NodeLocator.con2(start, end);
+    NodeLocator locator = new NodeLocator(start, end);
     AstNode node = locator.searchWithin(unit);
     expect(node, isNotNull);
     expect(locator.foundNode, same(node));
@@ -2154,7 +2154,7 @@
   }
 
   void test_visitForEachStatement_variable() {
-    _assertSource("for (a in b) {}", new ForEachStatement.con2(null,
+    _assertSource("for (a in b) {}", new ForEachStatement.withReference(null,
         TokenFactory.tokenFromKeyword(Keyword.FOR),
         TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
         AstFactory.identifier3("a"), TokenFactory.tokenFromKeyword(Keyword.IN),
@@ -2163,7 +2163,7 @@
   }
 
   void test_visitForEachStatement_variable_await() {
-    _assertSource("await for (a in b) {}", new ForEachStatement.con2(
+    _assertSource("await for (a in b) {}", new ForEachStatement.withReference(
         TokenFactory.tokenFromString("await"),
         TokenFactory.tokenFromKeyword(Keyword.FOR),
         TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index da69804..3f6b77c 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -135,28 +135,6 @@
     verify([source]);
   }
 
-  void fail_recursiveCompileTimeConstant() {
-    Source source = addSource(r'''
-class A {
-  const A();
-  final m = const A();
-}''');
-    resolve(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
-    verify([source]);
-  }
-
-  void fail_recursiveCompileTimeConstant_cycle() {
-    Source source = addSource(r'''
-const x = y + 1;
-const y = x + 1;''');
-    resolve(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
-    verify([source]);
-  }
-
   void fail_superInitializerInObject() {
     Source source = addSource(r'''
 ''');
@@ -857,8 +835,11 @@
   return 3;
 }''');
     resolve(source);
+    // TODO(paulberry): the error CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE is
+    // redundant and ought to be suppressed.
     assertErrors(source, [
-      CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST
+      CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
+      CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
     ]);
     verify([source]);
   }
@@ -1368,8 +1349,12 @@
 }
 f(p) { return const A(p); }''');
     resolve(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
+    // TODO(paulberry): the error INVALID_CONSTAT is redundant and ought to be
+    // suppressed.
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT,
+      CompileTimeErrorCode.INVALID_CONSTANT
+    ]);
     verify([source]);
   }
 
@@ -3251,6 +3236,19 @@
     // We cannot verify resolution with undefined labels
   }
 
+  void test_length_of_erroneous_constant() {
+    // Attempting to compute the length of constant that couldn't be evaluated
+    // (due to an error) should not crash the analyzer (see dartbug.com/23383)
+    Source source = addSource("const int i = (1 ? 'alpha' : 'beta').length;");
+    resolve(source);
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
+      CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+      StaticTypeWarningCode.NON_BOOL_CONDITION
+    ]);
+    verify([source]);
+  }
+
   void test_memberWithClassName_field() {
     Source source = addSource(r'''
 class A {
@@ -4367,8 +4365,12 @@
 }
 var b = const B();''');
     resolve(source);
-    assertErrors(
-        source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
+    // TODO(paulberry): the error INVALID_CONSTAT is redundant and ought to be
+    // suppressed.
+    assertErrors(source, [
+      CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER,
+      CompileTimeErrorCode.INVALID_CONSTANT
+    ]);
     verify([source]);
   }
 
@@ -4645,6 +4647,44 @@
     verify([source]);
   }
 
+  void test_recursiveCompileTimeConstant() {
+    Source source = addSource(r'''
+class A {
+  const A();
+  final m = const A();
+}''');
+    resolve(source);
+    assertErrors(
+        source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
+    verify([source]);
+  }
+
+  void test_recursiveCompileTimeConstant_cycle() {
+    Source source = addSource(r'''
+const x = y + 1;
+const y = x + 1;''');
+    resolve(source);
+    assertErrors(source, [
+      CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
+      CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT
+    ]);
+    verify([source]);
+  }
+
+  void test_recursiveCompileTimeConstant_initializer_after_toplevel_var() {
+    Source source = addSource('''
+const y = const C();
+class C {
+  const C() : x = y;
+  final x;
+}
+''');
+    resolve(source);
+    assertErrors(
+        source, [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT]);
+    verify([source]);
+  }
+
   void test_recursiveConstructorRedirect() {
     Source source = addSource(r'''
 class A {
diff --git a/pkg/analyzer/test/generated/element_test.dart b/pkg/analyzer/test/generated/element_test.dart
index 4e8041d..7c03148 100644
--- a/pkg/analyzer/test/generated/element_test.dart
+++ b/pkg/analyzer/test/generated/element_test.dart
@@ -1253,7 +1253,7 @@
 @reflectiveTest
 class FunctionTypeImplTest extends EngineTestCase {
   void test_creation() {
-    expect(new FunctionTypeImpl.con1(
+    expect(new FunctionTypeImpl(
             new FunctionElementImpl.forNode(AstFactory.identifier3("f"))),
         isNotNull);
   }
@@ -1261,19 +1261,19 @@
   void test_getElement() {
     FunctionElementImpl typeElement =
         new FunctionElementImpl.forNode(AstFactory.identifier3("f"));
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(typeElement);
+    FunctionTypeImpl type = new FunctionTypeImpl(typeElement);
     expect(type.element, typeElement);
   }
 
   void test_getNamedParameterTypes() {
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(
+    FunctionTypeImpl type = new FunctionTypeImpl(
         new FunctionElementImpl.forNode(AstFactory.identifier3("f")));
     Map<String, DartType> types = type.namedParameterTypes;
     expect(types, hasLength(0));
   }
 
   void test_getNormalParameterTypes() {
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(
+    FunctionTypeImpl type = new FunctionTypeImpl(
         new FunctionElementImpl.forNode(AstFactory.identifier3("f")));
     List<DartType> types = type.normalParameterTypes;
     expect(types, hasLength(0));
@@ -1284,26 +1284,26 @@
     FunctionElementImpl functionElement =
         new FunctionElementImpl.forNode(AstFactory.identifier3("f"));
     functionElement.returnType = expectedReturnType;
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(functionElement);
+    FunctionTypeImpl type = new FunctionTypeImpl(functionElement);
     DartType returnType = type.returnType;
     expect(returnType, expectedReturnType);
   }
 
   void test_getTypeArguments() {
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(
+    FunctionTypeImpl type = new FunctionTypeImpl(
         new FunctionElementImpl.forNode(AstFactory.identifier3("f")));
     List<DartType> types = type.typeArguments;
     expect(types, hasLength(0));
   }
 
   void test_hashCode_element() {
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(
+    FunctionTypeImpl type = new FunctionTypeImpl(
         new FunctionElementImpl.forNode(AstFactory.identifier3("f")));
     type.hashCode;
   }
 
   void test_hashCode_noElement() {
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(null);
+    FunctionTypeImpl type = new FunctionTypeImpl(null);
     type.hashCode;
   }
 
@@ -1653,7 +1653,7 @@
     ];
     functionAliasElement.returnType = stringType;
     FunctionTypeImpl functionAliasType =
-        new FunctionTypeImpl.con1(functionAliasElement);
+        new FunctionTypeImpl(functionAliasElement);
     functionAliasElement.type = functionAliasType;
     FunctionElementImpl functionElement =
         new FunctionElementImpl.forNode(AstFactory.identifier3("f"));
@@ -1662,7 +1662,7 @@
       ElementFactory.positionalParameter2("d", stringType)
     ];
     functionElement.returnType = provider.dynamicType;
-    FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
+    FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement);
     functionElement.type = functionType;
     expect(functionType.isAssignableTo(functionAliasType), isTrue);
   }
@@ -1696,7 +1696,7 @@
     MethodElementImpl methodElement =
         new MethodElementImpl.forNode(AstFactory.identifier3("m"));
     enclosingClass.methods = <MethodElement>[methodElement];
-    FunctionTypeImpl type = new FunctionTypeImpl.con1(methodElement);
+    FunctionTypeImpl type = new FunctionTypeImpl(methodElement);
     DartType expectedType = enclosingClass.typeParameters[0].type;
     type.typeArguments = <DartType>[expectedType];
     List<DartType> arguments = type.typeArguments;
@@ -1717,9 +1717,9 @@
     ];
     functionElement.returnType = parameterType;
     definingClass.methods = <MethodElement>[functionElement];
-    FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
+    FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement);
     functionType.typeArguments = <DartType>[parameterType];
-    InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(
+    InterfaceTypeImpl argumentType = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("D")));
     FunctionType result = functionType.substitute2(
         <DartType>[argumentType], <DartType>[parameterType]);
@@ -1736,13 +1736,13 @@
   }
 
   void test_substitute2_notEqual() {
-    DartType returnType = new InterfaceTypeImpl.con1(
+    DartType returnType = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("R")));
-    DartType normalParameterType = new InterfaceTypeImpl.con1(
+    DartType normalParameterType = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("A")));
-    DartType optionalParameterType = new InterfaceTypeImpl.con1(
+    DartType optionalParameterType = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("B")));
-    DartType namedParameterType = new InterfaceTypeImpl.con1(
+    DartType namedParameterType = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("C")));
     FunctionElementImpl functionElement =
         new FunctionElementImpl.forNode(AstFactory.identifier3("f"));
@@ -1753,8 +1753,8 @@
       ElementFactory.namedParameter2(namedParameterName, namedParameterType)
     ];
     functionElement.returnType = returnType;
-    FunctionTypeImpl functionType = new FunctionTypeImpl.con1(functionElement);
-    InterfaceTypeImpl argumentType = new InterfaceTypeImpl.con1(
+    FunctionTypeImpl functionType = new FunctionTypeImpl(functionElement);
+    InterfaceTypeImpl argumentType = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("D")));
     TypeParameterTypeImpl parameterType = new TypeParameterTypeImpl(
         new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")));
@@ -1958,7 +1958,7 @@
     ClassElement classD = ElementFactory.classElement2("D");
     InterfaceType typeA = classA.type;
     classB.interfaces = <InterfaceType>[typeA];
-    InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBT = new InterfaceTypeImpl(classB);
     DartType typeT = classC.type.typeArguments[0];
     typeBT.typeArguments = <DartType>[typeT];
     classC.interfaces = <InterfaceType>[typeBT];
@@ -1969,7 +1969,7 @@
     InterfaceType typeObject = ElementFactory.object.type;
     expect(superinterfacesOfA.contains(typeObject), isTrue);
     // B<D>
-    InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBD = new InterfaceTypeImpl(classB);
     typeBD.typeArguments = <DartType>[classD.type];
     Set<InterfaceType> superinterfacesOfBD =
         InterfaceTypeImpl.computeSuperinterfaceSet(typeBD);
@@ -1977,7 +1977,7 @@
     expect(superinterfacesOfBD.contains(typeObject), isTrue);
     expect(superinterfacesOfBD.contains(typeA), isTrue);
     // C<D>
-    InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC);
+    InterfaceTypeImpl typeCD = new InterfaceTypeImpl(classC);
     typeCD.typeArguments = <DartType>[classD.type];
     Set<InterfaceType> superinterfacesOfCD =
         InterfaceTypeImpl.computeSuperinterfaceSet(typeCD);
@@ -2001,7 +2001,7 @@
     InterfaceType typeA = classA.type;
     ClassElement classB = ElementFactory.classElement("B", typeA, ["T"]);
     ClassElementImpl classC = ElementFactory.classElement2("C", ["T"]);
-    InterfaceTypeImpl typeBT = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBT = new InterfaceTypeImpl(classB);
     DartType typeT = classC.type.typeArguments[0];
     typeBT.typeArguments = <DartType>[typeT];
     classC.supertype = typeBT;
@@ -2013,7 +2013,7 @@
     InterfaceType typeObject = ElementFactory.object.type;
     expect(superinterfacesOfA.contains(typeObject), isTrue);
     // B<D>
-    InterfaceTypeImpl typeBD = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBD = new InterfaceTypeImpl(classB);
     typeBD.typeArguments = <DartType>[classD.type];
     Set<InterfaceType> superinterfacesOfBD =
         InterfaceTypeImpl.computeSuperinterfaceSet(typeBD);
@@ -2021,7 +2021,7 @@
     expect(superinterfacesOfBD.contains(typeObject), isTrue);
     expect(superinterfacesOfBD.contains(typeA), isTrue);
     // C<D>
-    InterfaceTypeImpl typeCD = new InterfaceTypeImpl.con1(classC);
+    InterfaceTypeImpl typeCD = new InterfaceTypeImpl(classC);
     typeCD.typeArguments = <DartType>[classD.type];
     Set<InterfaceType> superinterfacesOfCD =
         InterfaceTypeImpl.computeSuperinterfaceSet(typeCD);
@@ -2151,8 +2151,7 @@
   }
 
   void test_creation() {
-    expect(new InterfaceTypeImpl.con1(ElementFactory.classElement2("A")),
-        isNotNull);
+    expect(new InterfaceTypeImpl(ElementFactory.classElement2("A")), isNotNull);
   }
 
   void test_getAccessors() {
@@ -2162,19 +2161,19 @@
     PropertyAccessorElement getterH =
         ElementFactory.getterElement("h", false, null);
     typeElement.accessors = <PropertyAccessorElement>[getterG, getterH];
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(typeElement);
     expect(type.accessors.length, 2);
   }
 
   void test_getAccessors_empty() {
     ClassElementImpl typeElement = ElementFactory.classElement2("A");
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(typeElement);
     expect(type.accessors.length, 0);
   }
 
   void test_getElement() {
     ClassElementImpl typeElement = ElementFactory.classElement2("A");
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(typeElement);
     expect(type.element, typeElement);
   }
 
@@ -2207,7 +2206,7 @@
     // A<I>
     //
     InterfaceType typeI = ElementFactory.classElement2("I").type;
-    InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAI = new InterfaceTypeImpl(classA);
     typeAI.typeArguments = <DartType>[typeI];
     PropertyAccessorElement getter = typeAI.getGetter(getterName);
     expect(getter, isNotNull);
@@ -2252,14 +2251,14 @@
     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
     InterfaceType typeB = classB.type;
-    InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAF = new InterfaceTypeImpl(classA);
     typeAF.typeArguments = <DartType>[typeB.typeArguments[0]];
     classB.interfaces = <InterfaceType>[typeAF];
     //
     // B<I>
     //
     InterfaceType typeI = ElementFactory.classElement2("I").type;
-    InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBI = new InterfaceTypeImpl(classB);
     typeBI.typeArguments = <DartType>[typeI];
     List<InterfaceType> interfaces = typeBI.interfaces;
     expect(interfaces, hasLength(1));
@@ -2303,7 +2302,7 @@
 
   void test_getLeastUpperBound_functionType() {
     DartType interfaceType = ElementFactory.classElement2("A").type;
-    FunctionTypeImpl functionType = new FunctionTypeImpl.con1(
+    FunctionTypeImpl functionType = new FunctionTypeImpl(
         new FunctionElementImpl.forNode(AstFactory.identifier3("f")));
     expect(interfaceType.getLeastUpperBound(functionType), isNull);
   }
@@ -2531,7 +2530,7 @@
     // A<I>
     //
     InterfaceType typeI = ElementFactory.classElement2("I").type;
-    InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAI = new InterfaceTypeImpl(classA);
     typeAI.typeArguments = <DartType>[typeI];
     MethodElement method = typeAI.getMethod(methodName);
     expect(method, isNotNull);
@@ -2556,13 +2555,13 @@
     MethodElementImpl methodOne = ElementFactory.methodElement("one", null);
     MethodElementImpl methodTwo = ElementFactory.methodElement("two", null);
     typeElement.methods = <MethodElement>[methodOne, methodTwo];
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(typeElement);
     expect(type.methods.length, 2);
   }
 
   void test_getMethods_empty() {
     ClassElementImpl typeElement = ElementFactory.classElement2("A");
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(typeElement);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(typeElement);
     expect(type.methods.length, 0);
   }
 
@@ -2594,14 +2593,14 @@
     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
     InterfaceType typeB = classB.type;
-    InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAF = new InterfaceTypeImpl(classA);
     typeAF.typeArguments = <DartType>[typeB.typeArguments[0]];
     classB.mixins = <InterfaceType>[typeAF];
     //
     // B<I>
     //
     InterfaceType typeI = ElementFactory.classElement2("I").type;
-    InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBI = new InterfaceTypeImpl(classB);
     typeBI.typeArguments = <DartType>[typeI];
     List<InterfaceType> interfaces = typeBI.mixins;
     expect(interfaces, hasLength(1));
@@ -2639,7 +2638,7 @@
     // A<I>
     //
     InterfaceType typeI = ElementFactory.classElement2("I").type;
-    InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAI = new InterfaceTypeImpl(classA);
     typeAI.typeArguments = <DartType>[typeI];
     PropertyAccessorElement setter = typeAI.getSetter(setterName);
     expect(setter, isNotNull);
@@ -2677,14 +2676,14 @@
     ClassElementImpl classA = ElementFactory.classElement2("A", ["E"]);
     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
     InterfaceType typeB = classB.type;
-    InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAF = new InterfaceTypeImpl(classA);
     typeAF.typeArguments = <DartType>[typeB.typeArguments[0]];
     classB.supertype = typeAF;
     //
     // B<I>
     //
     InterfaceType typeI = ElementFactory.classElement2("I").type;
-    InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBI = new InterfaceTypeImpl(classB);
     typeBI.typeArguments = <DartType>[typeI];
     InterfaceType superclass = typeBI.superclass;
     expect(superclass.element, same(classA));
@@ -2714,9 +2713,9 @@
     //
     ClassElement classA = ElementFactory.classElement2("A", ["E"]);
     ClassElement classB = ElementFactory.classElement2("B", ["F", "G"]);
-    InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAF = new InterfaceTypeImpl(classA);
     typeAF.typeArguments = <DartType>[classB.typeParameters[0].type];
-    InterfaceTypeImpl typeAG = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAG = new InterfaceTypeImpl(classA);
     typeAG.typeArguments = <DartType>[classB.typeParameters[1].type];
     expect(typeAG.isAssignableTo(typeAF), isFalse);
   }
@@ -2770,8 +2769,8 @@
     ClassElement classA = ElementFactory.classElement2("A", ["E"]);
     ClassElement classI = ElementFactory.classElement2("I");
     ClassElement classJ = ElementFactory.classElement("J", classI.type);
-    InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
-    InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAI = new InterfaceTypeImpl(classA);
+    InterfaceTypeImpl typeAJ = new InterfaceTypeImpl(classA);
     typeAI.typeArguments = <DartType>[classI.type];
     typeAJ.typeArguments = <DartType>[classJ.type];
     expect(typeAJ.isMoreSpecificThan(typeAI), isTrue);
@@ -3024,9 +3023,9 @@
     ClassElement classK = ElementFactory.classElement2("K");
     InterfaceType typeA = classA.type;
     InterfaceType typeA_dynamic = typeA.substitute4(<DartType>[dynamicType]);
-    InterfaceTypeImpl typeAI = new InterfaceTypeImpl.con1(classA);
-    InterfaceTypeImpl typeAJ = new InterfaceTypeImpl.con1(classA);
-    InterfaceTypeImpl typeAK = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAI = new InterfaceTypeImpl(classA);
+    InterfaceTypeImpl typeAJ = new InterfaceTypeImpl(classA);
+    InterfaceTypeImpl typeAK = new InterfaceTypeImpl(classA);
     typeAI.typeArguments = <DartType>[classI.type];
     typeAJ.typeArguments = <DartType>[classJ.type];
     typeAK.typeArguments = <DartType>[classK.type];
@@ -3299,7 +3298,7 @@
         classA.type.typeArguments;
     ClassElementImpl classB = ElementFactory.classElement2("B", ["F"]);
     InterfaceType typeB = classB.type;
-    InterfaceTypeImpl typeAF = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl typeAF = new InterfaceTypeImpl(classA);
     typeAF.typeArguments = <DartType>[typeB.typeArguments[0]];
     classB.supertype = typeAF;
     LibraryElementImpl library =
@@ -3310,7 +3309,7 @@
     // B<I>
     //
     InterfaceType typeI = ElementFactory.classElement2("I").type;
-    InterfaceTypeImpl typeBI = new InterfaceTypeImpl.con1(classB);
+    InterfaceTypeImpl typeBI = new InterfaceTypeImpl(classB);
     typeBI.typeArguments = <DartType>[typeI];
     MethodElement method = typeBI.lookUpMethod(methodName, library);
     expect(method, isNotNull);
@@ -3469,7 +3468,7 @@
   void test_substitute_exception() {
     try {
       ClassElementImpl classA = ElementFactory.classElement2("A");
-      InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA);
+      InterfaceTypeImpl type = new InterfaceTypeImpl(classA);
       InterfaceType argumentType = ElementFactory.classElement2("B").type;
       type.substitute2(<DartType>[argumentType], <DartType>[]);
       fail(
@@ -3485,7 +3484,7 @@
     ClassElementImpl classA = ElementFactory.classElement2("A");
     TypeParameterElementImpl parameterElement =
         new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"));
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(classA);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(classA);
     TypeParameterTypeImpl parameter =
         new TypeParameterTypeImpl(parameterElement);
     type.typeArguments = <DartType>[parameter];
@@ -3563,9 +3562,9 @@
     LibraryElementImpl library = ElementFactory.library(context, "test");
     CompilationUnitElement unitLib = library.definingCompilationUnit;
     CompilationUnitElementImpl unitA =
-        ElementFactory.compilationUnit("unit_a.dart");
+        ElementFactory.compilationUnit("unit_a.dart", unitLib.source);
     CompilationUnitElementImpl unitB =
-        ElementFactory.compilationUnit("unit_b.dart");
+        ElementFactory.compilationUnit("unit_b.dart", unitLib.source);
     library.parts = <CompilationUnitElement>[unitA, unitB];
     expect(library.units,
         unorderedEquals(<CompilationUnitElement>[unitLib, unitA, unitB]));
@@ -3902,7 +3901,7 @@
     TypeParameterElementImpl element =
         new TypeParameterElementImpl.forNode(AstFactory.identifier3("E"));
     TypeParameterTypeImpl type = new TypeParameterTypeImpl(element);
-    InterfaceTypeImpl argument = new InterfaceTypeImpl.con1(
+    InterfaceTypeImpl argument = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("A")));
     TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(element);
     expect(type.substitute2(<DartType>[argument], <DartType>[parameter]),
@@ -3912,7 +3911,7 @@
   void test_substitute_notEqual() {
     TypeParameterTypeImpl type = new TypeParameterTypeImpl(
         new TypeParameterElementImpl.forNode(AstFactory.identifier3("E")));
-    InterfaceTypeImpl argument = new InterfaceTypeImpl.con1(
+    InterfaceTypeImpl argument = new InterfaceTypeImpl(
         new ClassElementImpl.forNode(AstFactory.identifier3("A")));
     TypeParameterTypeImpl parameter = new TypeParameterTypeImpl(
         new TypeParameterElementImpl.forNode(AstFactory.identifier3("F")));
@@ -3962,7 +3961,7 @@
 class _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction
     extends InterfaceTypeImpl {
   _FunctionTypeImplTest_isSubtypeOf_baseCase_classFunction(ClassElement arg0)
-      : super.con1(arg0);
+      : super(arg0);
 
   @override
   bool get isDartCoreFunction => true;
diff --git a/pkg/analyzer/test/generated/engine_test.dart b/pkg/analyzer/test/generated/engine_test.dart
index 06cafa0..7809218 100644
--- a/pkg/analyzer/test/generated/engine_test.dart
+++ b/pkg/analyzer/test/generated/engine_test.dart
@@ -107,11 +107,11 @@
         new UniversalCachePartition(null, 8, new DefaultRetentionPolicy());
     AnalysisCache cache = new AnalysisCache(<CachePartition>[partition]);
     JavaFile file = new JavaFile('baz.dart');
-    Source source1 = new FileBasedSource.con1(file);
+    Source source1 = new FileBasedSource(file);
     Source source2 =
-        new FileBasedSource.con2(Uri.parse('package:foo/baz.dart'), file);
+        new FileBasedSource(file, Uri.parse('package:foo/baz.dart'));
     Source source3 =
-        new FileBasedSource.con2(Uri.parse('package:bar/baz.dart'), file);
+        new FileBasedSource(file, Uri.parse('package:bar/baz.dart'));
     DartEntry entry1 = new DartEntry();
     DartEntry entry2 = new DartEntry();
     DartEntry entry3 = new DartEntry();
@@ -235,7 +235,7 @@
     ]);
     _context.sourceFactory = _sourceFactory;
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
+        new AnalysisOptionsImpl.from(_context.analysisOptions);
     options.cacheSize = 256;
     _context.analysisOptions = options;
   }
@@ -252,7 +252,7 @@
     _context.onSourcesChanged.listen(listener.onData);
     expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     ChangeSet changeSet = new ChangeSet();
     changeSet.addedSource(source);
     _context.applyChanges(changeSet);
@@ -268,13 +268,13 @@
     _context.onSourcesChanged.listen(listener.onData);
     expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     ChangeSet changeSet1 = new ChangeSet();
     changeSet1.addedSource(source);
     _context.applyChanges(changeSet1);
     expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
     Source source2 =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test2.dart"));
     ChangeSet changeSet2 = new ChangeSet();
     changeSet2.addedSource(source2);
     changeSet2.changedSource(source);
@@ -291,13 +291,13 @@
     _context.onSourcesChanged.listen(listener.onData);
     expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     ChangeSet changeSet1 = new ChangeSet();
     changeSet1.addedSource(source);
     _context.applyChanges(changeSet1);
     expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
     Source source2 =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test2.dart"));
     ChangeSet changeSet2 = new ChangeSet();
     changeSet2.addedSource(source2);
     changeSet2.changedContent(source, 'library test;');
@@ -376,13 +376,13 @@
     _context.onSourcesChanged.listen(listener.onData);
     expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     ChangeSet changeSet1 = new ChangeSet();
     changeSet1.addedSource(source);
     _context.applyChanges(changeSet1);
     expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
     Source source2 =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test2.dart"));
     ChangeSet changeSet2 = new ChangeSet();
     changeSet2.addedSource(source2);
     changeSet2.changedRange(source, 'library test;', 0, 0, 13);
@@ -1370,7 +1370,7 @@
 
   void test_parseCompilationUnit_nonExistentSource() {
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     try {
       _context.parseCompilationUnit(source);
       fail("Expected AnalysisException because file does not exist");
@@ -1828,7 +1828,7 @@
 
   void test_setAnalysisOptions_reduceAnalysisPriorityOrder() {
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
+        new AnalysisOptionsImpl.from(_context.analysisOptions);
     List<Source> sources = new List<Source>();
     for (int index = 0; index < options.cacheSize; index++) {
       sources.add(_addSource("/lib.dart$index", ""));
@@ -1908,7 +1908,7 @@
   void test_setChangedContents_notResolved() {
     _context = AnalysisContextFactory.contextWithCore();
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
+        new AnalysisOptionsImpl.from(_context.analysisOptions);
     options.incremental = true;
     _context.analysisOptions = options;
     _sourceFactory = _context.sourceFactory;
@@ -2025,7 +2025,7 @@
   void test_updateAnalysis() {
     expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     AnalysisDelta delta = new AnalysisDelta();
     delta.setAnalysisLevel(source, AnalysisLevel.ALL);
     _context.applyAnalysisDelta(delta);
@@ -2039,7 +2039,7 @@
   void xtest_performAnalysisTask_stress() {
     int maxCacheSize = 4;
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
+        new AnalysisOptionsImpl.from(_context.analysisOptions);
     options.cacheSize = maxCacheSize;
     _context.analysisOptions = options;
     int sourceCount = maxCacheSize + 2;
@@ -2067,8 +2067,7 @@
   }
 
   Source _addSource(String fileName, String contents) {
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile(fileName));
+    Source source = new FileBasedSource(FileUtilities2.createFile(fileName));
     ChangeSet changeSet = new ChangeSet();
     changeSet.addedSource(source);
     _context.applyChanges(changeSet);
@@ -2215,7 +2214,7 @@
       options.hint = booleanValue;
       options.incremental = booleanValue;
       options.preserveComments = booleanValue;
-      AnalysisOptionsImpl copy = new AnalysisOptionsImpl.con1(options);
+      AnalysisOptionsImpl copy = new AnalysisOptionsImpl.from(options);
       expect(copy.analyzeFunctionBodies, options.analyzeFunctionBodies);
       expect(copy.cacheSize, options.cacheSize);
       expect(copy.dart2jsHint, options.dart2jsHint);
@@ -2324,28 +2323,28 @@
     DartEntry entry = new DartEntry();
     expect(entry.allErrors, hasLength(0));
     entry.setValue(SourceEntry.CONTENT_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(
-          source, ScannerErrorCode.UNABLE_GET_CONTENT, ['exception details'])
+      new AnalysisError(source, 0, 0, ScannerErrorCode.UNABLE_GET_CONTENT,
+          ['exception details'])
     ]);
     entry.setValue(DartEntry.SCAN_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(
-          source, ScannerErrorCode.UNTERMINATED_STRING_LITERAL)
+      new AnalysisError(
+          source, 0, 0, ScannerErrorCode.UNTERMINATED_STRING_LITERAL)
     ]);
     entry.setValue(DartEntry.PARSE_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(source, ParserErrorCode.ABSTRACT_CLASS_MEMBER)
+      new AnalysisError(source, 0, 0, ParserErrorCode.ABSTRACT_CLASS_MEMBER)
     ]);
     entry.setValueInLibrary(DartEntry.RESOLUTION_ERRORS, source,
         <AnalysisError>[
-      new AnalysisError.con1(
-          source, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)
+      new AnalysisError(
+          source, 0, 0, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)
     ]);
     entry.setValueInLibrary(DartEntry.VERIFICATION_ERRORS, source,
         <AnalysisError>[
-      new AnalysisError.con1(
-          source, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)
+      new AnalysisError(
+          source, 0, 0, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)
     ]);
     entry.setValueInLibrary(DartEntry.HINTS, source,
-        <AnalysisError>[new AnalysisError.con1(source, HintCode.DEAD_CODE)]);
+        <AnalysisError>[new AnalysisError(source, 0, 0, HintCode.DEAD_CODE)]);
     expect(entry.allErrors, hasLength(6));
   }
 
@@ -3386,7 +3385,7 @@
 
   void test_setValue_hints() {
     _setValueInLibrary(DartEntry.HINTS,
-        <AnalysisError>[new AnalysisError.con1(null, HintCode.DEAD_CODE)]);
+        <AnalysisError>[new AnalysisError(null, 0, 0, HintCode.DEAD_CODE)]);
   }
 
   void test_setValue_importedLibraries() {
@@ -3415,7 +3414,7 @@
 
   void test_setValue_parseErrors() {
     _setValue(DartEntry.PARSE_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(null, ParserErrorCode.ABSTRACT_CLASS_MEMBER)
+      new AnalysisError(null, 0, 0, ParserErrorCode.ABSTRACT_CLASS_MEMBER)
     ]);
   }
 
@@ -3426,8 +3425,8 @@
 
   void test_setValue_resolutionErrors() {
     _setValueInLibrary(DartEntry.RESOLUTION_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(
-          null, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)
+      new AnalysisError(
+          null, 0, 0, CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION)
     ]);
   }
 
@@ -3437,8 +3436,8 @@
 
   void test_setValue_scanErrors() {
     _setValue(DartEntry.SCAN_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(
-          null, ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT)
+      new AnalysisError(
+          null, 0, 0, ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT)
     ]);
   }
 
@@ -3452,7 +3451,7 @@
 
   void test_setValue_verificationErrors() {
     _setValueInLibrary(DartEntry.VERIFICATION_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(null, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)
+      new AnalysisError(null, 0, 0, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED)
     ]);
   }
 
@@ -3609,7 +3608,7 @@
 
   void test_getSource() {
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     GenerateDartErrorsTask task =
         new GenerateDartErrorsTask(null, source, null, null);
     expect(task.source, same(source));
@@ -3618,7 +3617,7 @@
   void test_perform() {
     InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     ChangeSet changeSet = new ChangeSet();
     changeSet.addedSource(source);
     context.applyChanges(changeSet);
@@ -3639,7 +3638,7 @@
   void test_perform_validateDirectives() {
     InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
     Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     ChangeSet changeSet = new ChangeSet();
     changeSet.addedSource(source);
     context.applyChanges(changeSet);
@@ -3733,13 +3732,13 @@
     InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
     ChangeSet changeSet = new ChangeSet();
     Source librarySource =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     changeSet.addedSource(librarySource);
     Source unusedSource =
-        new FileBasedSource.con1(FileUtilities2.createFile("/unused.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/unused.dart"));
     changeSet.addedSource(unusedSource);
     Source partSource =
-        new FileBasedSource.con1(FileUtilities2.createFile("/part.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/part.dart"));
     changeSet.addedSource(partSource);
     context.applyChanges(changeSet);
     context.setContents(librarySource, r'''
@@ -3812,7 +3811,7 @@
     InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
     ChangeSet changeSet = new ChangeSet();
     Source librarySource =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     changeSet.addedSource(librarySource);
     context.applyChanges(changeSet);
     context.setContents(librarySource, r'''
@@ -3939,13 +3938,13 @@
     HtmlEntry entry = new HtmlEntry();
     expect(entry.allErrors, hasLength(0));
     entry.setValue(HtmlEntry.PARSE_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(source, ParserErrorCode.EXPECTED_TOKEN, [";"])
+      new AnalysisError(source, 0, 0, ParserErrorCode.EXPECTED_TOKEN, [";"])
     ]);
     entry.setValue(HtmlEntry.RESOLUTION_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(source, HtmlWarningCode.INVALID_URI, ["-"])
+      new AnalysisError(source, 0, 0, HtmlWarningCode.INVALID_URI, ["-"])
     ]);
     entry.setValue(HtmlEntry.HINTS,
-        <AnalysisError>[new AnalysisError.con1(source, HintCode.DEAD_CODE)]);
+        <AnalysisError>[new AnalysisError(source, 0, 0, HintCode.DEAD_CODE)]);
     expect(entry.allErrors, hasLength(3));
   }
 
@@ -4011,7 +4010,7 @@
 
   void test_setValue_hints() {
     _setValue(HtmlEntry.HINTS,
-        <AnalysisError>[new AnalysisError.con1(null, HintCode.DEAD_CODE)]);
+        <AnalysisError>[new AnalysisError(null, 0, 0, HintCode.DEAD_CODE)]);
   }
 
   void test_setValue_illegal() {
@@ -4032,7 +4031,7 @@
 
   void test_setValue_parseErrors() {
     _setValue(HtmlEntry.PARSE_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])
+      new AnalysisError(null, 0, 0, HtmlWarningCode.INVALID_URI, ["-"])
     ]);
   }
 
@@ -4042,7 +4041,7 @@
 
   void test_setValue_resolutionErrors() {
     _setValue(HtmlEntry.RESOLUTION_ERRORS, <AnalysisError>[
-      new AnalysisError.con1(null, HtmlWarningCode.INVALID_URI, ["-"])
+      new AnalysisError(null, 0, 0, HtmlWarningCode.INVALID_URI, ["-"])
     ]);
   }
 
@@ -4453,7 +4452,7 @@
     InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
     ChangeSet changeSet = new ChangeSet();
     Source librarySource =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     changeSet.addedSource(librarySource);
     context.applyChanges(changeSet);
     context.setContents(librarySource, r'''
@@ -4480,7 +4479,7 @@
     InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
     ChangeSet changeSet = new ChangeSet();
     Source librarySource =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     changeSet.addedSource(librarySource);
     context.applyChanges(changeSet);
     context.setContents(librarySource, r'''
@@ -5371,7 +5370,7 @@
 
   static void assertEvent(SourcesChangedEvent event,
       {bool wereSourcesAdded: false,
-      List<Source> changedSources: Source.EMPTY_ARRAY,
+      List<Source> changedSources: Source.EMPTY_LIST,
       bool wereSourcesRemovedOrDeleted: false}) {
     expect(event.wereSourcesAdded, wereSourcesAdded);
     expect(event.changedSources, changedSources);
@@ -5383,7 +5382,7 @@
   List<SourcesChangedEvent> actualEvents = [];
 
   void assertEvent({bool wereSourcesAdded: false,
-      List<Source> changedSources: Source.EMPTY_ARRAY,
+      List<Source> changedSources: Source.EMPTY_LIST,
       bool wereSourcesRemovedOrDeleted: false}) {
     if (actualEvents.isEmpty) {
       fail('Expected event but found none');
@@ -5410,6 +5409,11 @@
  */
 class TestAnalysisContext implements InternalAnalysisContext {
   @override
+  AnalysisCache get analysisCache {
+    fail("Unexpected invocation of analysisCache");
+    return null;
+  }
+  @override
   AnalysisOptions get analysisOptions {
     fail("Unexpected invocation of getAnalysisOptions");
     return null;
@@ -5485,6 +5489,7 @@
     fail("Unexpected invocation of getPrioritySources");
     return null;
   }
+
   @override
   List<AnalysisTarget> get priorityTargets {
     fail("Unexpected invocation of visitCacheItems");
@@ -5502,7 +5507,6 @@
     fail("Unexpected invocation of getSourceFactory");
     return null;
   }
-
   @override
   void set sourceFactory(SourceFactory factory) {
     fail("Unexpected invocation of setSourceFactory");
@@ -5536,10 +5540,6 @@
     fail("Unexpected invocation of addListener");
   }
   @override
-  void addSourceInfo(Source source, SourceEntry info) {
-    fail("Unexpected invocation of addSourceInfo");
-  }
-  @override
   void applyAnalysisDelta(AnalysisDelta delta) {
     fail("Unexpected invocation of applyAnalysisDelta");
   }
@@ -5750,6 +5750,7 @@
   void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
     fail("Unexpected invocation of recordLibraryElements");
   }
+
   @override
   void removeListener(AnalysisListener listener) {
     fail("Unexpected invocation of removeListener");
@@ -5793,15 +5794,6 @@
   }
 }
 
-class TestAnalysisContext_test_addSourceInfo extends TestAnalysisContext {
-  bool invoked = false;
-  TestAnalysisContext_test_addSourceInfo();
-  @override
-  void addSourceInfo(Source source, SourceEntry info) {
-    invoked = true;
-  }
-}
-
 class TestAnalysisContext_test_applyChanges extends TestAnalysisContext {
   bool invoked = false;
   TestAnalysisContext_test_applyChanges();
@@ -5994,7 +5986,7 @@
   @override
   List<Source> getHtmlFilesReferencing(Source source) {
     invoked = true;
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 }
 
@@ -6004,7 +5996,7 @@
   @override
   List<Source> get htmlSources {
     invoked = true;
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 }
 
@@ -6025,7 +6017,7 @@
   @override
   List<Source> get launchableClientLibrarySources {
     invoked = true;
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 }
 
@@ -6036,7 +6028,7 @@
   @override
   List<Source> get launchableServerLibrarySources {
     invoked = true;
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 }
 
@@ -6047,7 +6039,7 @@
   @override
   List<Source> getLibrariesContaining(Source source) {
     invoked = true;
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 }
 
@@ -6058,7 +6050,7 @@
   @override
   List<Source> getLibrariesDependingOn(Source librarySource) {
     invoked = true;
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 }
 
@@ -6089,7 +6081,7 @@
   @override
   List<Source> get librarySources {
     invoked = true;
-    return Source.EMPTY_ARRAY;
+    return Source.EMPTY_LIST;
   }
 }
 
diff --git a/pkg/analyzer/test/generated/incremental_resolver_test.dart b/pkg/analyzer/test/generated/incremental_resolver_test.dart
index 0d4c7ee..9d8ccce 100644
--- a/pkg/analyzer/test/generated/incremental_resolver_test.dart
+++ b/pkg/analyzer/test/generated/incremental_resolver_test.dart
@@ -2800,7 +2800,7 @@
 
   static AstNode _findNodeAt(
       CompilationUnit oldUnit, int offset, Predicate<AstNode> predicate) {
-    NodeLocator locator = new NodeLocator.con1(offset);
+    NodeLocator locator = new NodeLocator(offset);
     AstNode node = locator.searchWithin(oldUnit);
     return node.getAncestor(predicate);
   }
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 023c9fa..89de72c 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -953,9 +953,8 @@
 
   void test_expectedExecutable_topLevel_eof() {
     parse2("parseCompilationUnitMember", <Object>[emptyCommentAndMetadata()],
-        "x", [
-      new AnalysisError.con2(null, 0, 1, ParserErrorCode.EXPECTED_EXECUTABLE)
-    ]);
+        "x",
+        [new AnalysisError(null, 0, 1, ParserErrorCode.EXPECTED_EXECUTABLE)]);
   }
 
   void test_expectedInterpolationIdentifier() {
@@ -967,9 +966,8 @@
     // The scanner inserts an empty string token between the two $'s; we need to
     // make sure that the MISSING_IDENTIFIER error that is generated has a
     // nonzero width so that it will show up in the editor UI.
-    parse2("parseStringLiteral", <Object>[], "'\$\$foo'", [
-      new AnalysisError.con2(null, 2, 1, ParserErrorCode.MISSING_IDENTIFIER)
-    ]);
+    parse2("parseStringLiteral", <Object>[], "'\$\$foo'",
+        [new AnalysisError(null, 2, 1, ParserErrorCode.MISSING_IDENTIFIER)]);
   }
 
   void test_expectedStringLiteral() {
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 7382916..8a43d18 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -118,7 +118,7 @@
         new CompilationUnitElementImpl("core.dart");
     Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE);
     coreContext.setContents(coreSource, "");
-    coreUnit.source = coreSource;
+    coreUnit.librarySource = coreUnit.source = coreSource;
     ClassElementImpl proxyClassElement = ElementFactory.classElement2("_Proxy");
     coreUnit.types = <ClassElement>[
       provider.boolType.element,
@@ -171,7 +171,7 @@
         new CompilationUnitElementImpl("async.dart");
     Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC);
     coreContext.setContents(asyncSource, "");
-    asyncUnit.source = asyncSource;
+    asyncUnit.librarySource = asyncUnit.source = asyncSource;
     // Future
     ClassElementImpl futureElement =
         ElementFactory.classElement2("Future", ["T"]);
@@ -197,7 +197,7 @@
     aliasElement.parameters = parameters;
     aliasElement.returnType = provider.dynamicType;
     aliasElement.enclosingElement = asyncUnit;
-    FunctionTypeImpl aliasType = new FunctionTypeImpl.con2(aliasElement);
+    FunctionTypeImpl aliasType = new FunctionTypeImpl.forTypedef(aliasElement);
     aliasElement.shareTypeParameters(futureElement.typeParameters);
     aliasType.typeArguments = futureElement.type.typeArguments;
     MethodElement thenMethod = ElementFactory.methodElementWithParameters(
@@ -229,7 +229,7 @@
         new CompilationUnitElementImpl("html_dartium.dart");
     Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML);
     coreContext.setContents(htmlSource, "");
-    htmlUnit.source = htmlSource;
+    htmlUnit.librarySource = htmlUnit.source = htmlSource;
     ClassElementImpl elementElement = ElementFactory.classElement2("Element");
     InterfaceType elementType = elementElement.type;
     ClassElementImpl canvasElement =
@@ -290,7 +290,7 @@
         new CompilationUnitElementImpl("math.dart");
     Source mathSource = sourceFactory.forUri(_DART_MATH);
     coreContext.setContents(mathSource, "");
-    mathUnit.source = mathSource;
+    mathUnit.librarySource = mathUnit.source = mathSource;
     FunctionElement cosElement = ElementFactory.functionElement3("cos",
         provider.doubleType.element, <ClassElement>[provider.numType.element],
         ClassElement.EMPTY_LIST);
@@ -417,13 +417,13 @@
   AnalysisContextHelper() {
     context = AnalysisContextFactory.contextWithCore();
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(context.analysisOptions);
+        new AnalysisOptionsImpl.from(context.analysisOptions);
     options.cacheSize = 256;
     context.analysisOptions = options;
   }
 
   Source addSource(String path, String code) {
-    Source source = new FileBasedSource.con1(FileUtilities2.createFile(path));
+    Source source = new FileBasedSource(FileUtilities2.createFile(path));
     if (path.endsWith(".dart") || path.endsWith(".html")) {
       ChangeSet changeSet = new ChangeSet();
       changeSet.addedSource(source);
@@ -1893,10 +1893,11 @@
         [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
     context.sourceFactory = sourceFactory;
     FileBasedSource source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     CompilationUnitElementImpl definingCompilationUnit =
         new CompilationUnitElementImpl("test.dart");
-    definingCompilationUnit.source = source;
+    definingCompilationUnit.librarySource =
+        definingCompilationUnit.source = source;
     _definingLibrary = ElementFactory.library(context, "test");
     _definingLibrary.definingCompilationUnit = definingCompilationUnit;
     Library library = new Library(context, _listener, source);
@@ -5710,10 +5711,11 @@
   InheritanceManager _createInheritanceManager() {
     AnalysisContextImpl context = AnalysisContextFactory.contextWithCore();
     FileBasedSource source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     CompilationUnitElementImpl definingCompilationUnit =
         new CompilationUnitElementImpl("test.dart");
-    definingCompilationUnit.source = source;
+    definingCompilationUnit.librarySource =
+        definingCompilationUnit.source = source;
     _definingLibrary = ElementFactory.library(context, "test");
     _definingLibrary.definingCompilationUnit = definingCompilationUnit;
     return new InheritanceManager(_definingLibrary);
@@ -5735,8 +5737,7 @@
    * @return the source object representing the added file
    */
   Source addSource(String filePath, String contents) {
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile(filePath));
+    Source source = new FileBasedSource(FileUtilities2.createFile(filePath));
     _context.setContents(source, contents);
     return source;
   }
@@ -6330,7 +6331,7 @@
   }
 
   Library _createLibrary(String definingCompilationUnitPath) => new Library(
-      _analysisContext, _errorListener, new FileBasedSource.con1(
+      _analysisContext, _errorListener, new FileBasedSource(
           FileUtilities2.createFile(definingCompilationUnitPath)));
 }
 
@@ -6353,7 +6354,7 @@
     map.put(m1.name, m1);
     map.put(m2.name, m2);
     map.put(m3.name, m3);
-    MemberMap copy = new MemberMap.con2(map);
+    MemberMap copy = new MemberMap.from(map);
     expect(copy.size, map.size);
     expect(copy.get(m1.name), m1);
     expect(copy.get(m2.name), m2);
@@ -7379,13 +7380,13 @@
 }
 
 /**
- * Instances of the class `ResolutionVerifier` verify that all of the nodes in an AST
- * structure that should have been resolved were resolved.
+ * An AST visitor used to verify that all of the nodes in an AST structure that
+ * should have been resolved were resolved.
  */
 class ResolutionVerifier extends RecursiveAstVisitor<Object> {
   /**
-   * A set containing nodes that are known to not be resolvable and should therefore not cause the
-   * test to fail.
+   * A set containing nodes that are known to not be resolvable and should
+   * therefore not cause the test to fail.
    */
   final Set<AstNode> _knownExceptions;
 
@@ -7395,26 +7396,19 @@
   List<AstNode> _unresolvedNodes = new List<AstNode>();
 
   /**
-   * A list containing all of the AST nodes that were resolved to an element of the wrong type.
+   * A list containing all of the AST nodes that were resolved to an element of
+   * the wrong type.
    */
   List<AstNode> _wrongTypedNodes = new List<AstNode>();
 
   /**
-   * Initialize a newly created verifier to verify that all of the nodes in the visited AST
-   * structures that are expected to have been resolved have an element associated with them.
+   * Initialize a newly created verifier to verify that all of the identifiers
+   * in the visited AST structures that are expected to have been resolved have
+   * an element associated with them. Nodes in the set of [_knownExceptions] are
+   * not expected to have been resolved, even if they normally would have been
+   * expected to have been resolved.
    */
-  ResolutionVerifier() : this.con1(null);
-
-  /**
-   * Initialize a newly created verifier to verify that all of the identifiers in the visited AST
-   * structures that are expected to have been resolved have an element associated with them. Nodes
-   * in the set of known exceptions are not expected to have been resolved, even if they normally
-   * would have been expected to have been resolved.
-   *
-   * @param knownExceptions a set containing nodes that are known to not be resolvable and should
-   *          therefore not cause the test to fail
-   **/
-  ResolutionVerifier.con1(this._knownExceptions);
+  ResolutionVerifier([this._knownExceptions]);
 
   /**
    * Assert that all of the visited identifiers were resolved.
@@ -7755,8 +7749,7 @@
    * @return the source object representing the cached file
    */
   Source cacheSource(String filePath, String contents) {
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile(filePath));
+    Source source = new FileBasedSource(FileUtilities2.createFile(filePath));
     analysisContext2.setContents(source, contents);
     return source;
   }
@@ -7779,6 +7772,9 @@
    */
   LibraryElementImpl createTestLibrary(
       AnalysisContext context, String libraryName, [List<String> typeNames]) {
+    String fileName = "$libraryName.dart";
+    FileBasedSource definingCompilationUnitSource =
+        _createNamedSource(fileName);
     List<CompilationUnitElement> sourcedCompilationUnits;
     if (typeNames == null) {
       sourcedCompilationUnits = CompilationUnitElement.EMPTY_LIST;
@@ -7793,14 +7789,15 @@
         CompilationUnitElementImpl compilationUnit =
             new CompilationUnitElementImpl(fileName);
         compilationUnit.source = _createNamedSource(fileName);
+        compilationUnit.librarySource = definingCompilationUnitSource;
         compilationUnit.types = <ClassElement>[type];
         sourcedCompilationUnits[i] = compilationUnit;
       }
     }
-    String fileName = "$libraryName.dart";
     CompilationUnitElementImpl compilationUnit =
         new CompilationUnitElementImpl(fileName);
-    compilationUnit.source = _createNamedSource(fileName);
+    compilationUnit.librarySource =
+        compilationUnit.source = definingCompilationUnitSource;
     LibraryElementImpl library = new LibraryElementImpl.forNode(
         context, AstFactory.libraryIdentifier2([libraryName]));
     library.definingCompilationUnit = compilationUnit;
@@ -7952,7 +7949,7 @@
    */
   FileBasedSource _createNamedSource(String fileName) {
     FileBasedSource source =
-        new FileBasedSource.con1(FileUtilities2.createFile(fileName));
+        new FileBasedSource(FileUtilities2.createFile(fileName));
     analysisContext2.setContents(source, "");
     return source;
   }
@@ -10488,7 +10485,7 @@
     ConstructorElementImpl constructor =
         ElementFactory.constructorElement2(classElement, constructorName);
     constructor.returnType = classElement.type;
-    FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor);
+    FunctionTypeImpl constructorType = new FunctionTypeImpl(constructor);
     constructor.type = constructorType;
     classElement.constructors = <ConstructorElement>[constructor];
     InstanceCreationExpression node = AstFactory.instanceCreationExpression2(
@@ -10507,7 +10504,7 @@
         ElementFactory.constructorElement2(elementC, null);
     elementC.constructors = <ConstructorElement>[constructor];
     constructor.returnType = elementC.type;
-    FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor);
+    FunctionTypeImpl constructorType = new FunctionTypeImpl(constructor);
     constructor.type = constructorType;
     TypeName typeName =
         AstFactory.typeName(elementC, [AstFactory.typeName(elementI)]);
@@ -10528,7 +10525,7 @@
     ConstructorElementImpl constructor =
         ElementFactory.constructorElement2(classElement, null);
     constructor.returnType = classElement.type;
-    FunctionTypeImpl constructorType = new FunctionTypeImpl.con1(constructor);
+    FunctionTypeImpl constructorType = new FunctionTypeImpl(constructor);
     constructor.type = constructorType;
     classElement.constructors = <ConstructorElement>[constructor];
     InstanceCreationExpression node = AstFactory.instanceCreationExpression2(
@@ -10992,10 +10989,11 @@
         [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
     context.sourceFactory = sourceFactory;
     FileBasedSource source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/lib.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/lib.dart"));
     CompilationUnitElementImpl definingCompilationUnit =
         new CompilationUnitElementImpl("lib.dart");
-    definingCompilationUnit.source = source;
+    definingCompilationUnit.librarySource =
+        definingCompilationUnit.source = source;
     LibraryElementImpl definingLibrary =
         new LibraryElementImpl.forNode(context, null);
     definingLibrary.definingCompilationUnit = definingCompilationUnit;
@@ -11050,7 +11048,7 @@
     FunctionExpression node = AstFactory.functionExpression2(parameters, body);
     FunctionElementImpl element = new FunctionElementImpl.forNode(null);
     element.parameters = parameterElements;
-    element.type = new FunctionTypeImpl.con1(element);
+    element.type = new FunctionTypeImpl(element);
     node.element = element;
     return node;
   }
@@ -11496,9 +11494,10 @@
     super.setUp();
     AnalysisContextImpl context = AnalysisContextFactory.contextWithCore();
     FileBasedSource source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/test.dart"));
     _definingCompilationUnit = new CompilationUnitElementImpl("test.dart");
-    _definingCompilationUnit.source = source;
+    _definingCompilationUnit.librarySource =
+        _definingCompilationUnit.source = source;
     LibraryElementImpl definingLibrary =
         ElementFactory.library(context, "test");
     definingLibrary.definingCompilationUnit = _definingCompilationUnit;
@@ -13219,7 +13218,7 @@
     ClassElementImpl element =
         new ClassElementImpl.forNode(AstFactory.identifier3(typeName));
     element.supertype = superclassType;
-    InterfaceTypeImpl type = new InterfaceTypeImpl.con1(element);
+    InterfaceTypeImpl type = new InterfaceTypeImpl(element);
     element.type = type;
     if (parameterNames != null) {
       int count = parameterNames.length;
@@ -13314,7 +13313,7 @@
     AnalysisContextImpl context = new AnalysisContextImpl();
     context.sourceFactory = factory;
     Source librarySource =
-        new FileBasedSource.con1(FileUtilities2.createFile("/lib.dart"));
+        new FileBasedSource(FileUtilities2.createFile("/lib.dart"));
     _library = new Library(context, _listener, librarySource);
     LibraryElementImpl element = new LibraryElementImpl.forNode(
         context, AstFactory.libraryIdentifier2(["lib"]));
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 3531847..24ca20e 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -1074,7 +1074,7 @@
     GatheringErrorListener listener = new GatheringErrorListener();
     _scanWithListener(source, listener);
     listener.assertErrors([
-      new AnalysisError.con2(null, expectedOffset, 1, expectedError,
+      new AnalysisError(null, expectedOffset, 1, expectedError,
           [source.codeUnitAt(expectedOffset)])
     ]);
   }
@@ -1093,7 +1093,7 @@
     GatheringErrorListener listener = new GatheringErrorListener();
     Token token = _scanWithListener(source, listener);
     listener.assertErrors([
-      new AnalysisError.con2(null, expectedOffset, 1, expectedError,
+      new AnalysisError(null, expectedOffset, 1, expectedError,
           [source.codeUnitAt(expectedOffset)])
     ]);
     _checkTokens(token, expectedTokens);
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index e5a05d0..7d83198 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -124,7 +124,7 @@
     if (offset == -1) {
       throw new IllegalArgumentException("Not found '$prefix'.");
     }
-    AstNode node = new NodeLocator.con1(offset).searchWithin(root);
+    AstNode node = new NodeLocator(offset).searchWithin(root);
     return node.getAncestor(predicate);
   }
 }
@@ -594,6 +594,8 @@
   UriKind get uriKind {
     throw new UnsupportedOperationException();
   }
+  @override
+  String toString() => '$_name';
   bool operator ==(Object other) {
     if (other is TestSource) {
       return other._name == _name;
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index a95a6d7..24d1d96 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -611,7 +611,7 @@
   }
 
   void test_visitForEachStatement_variable() {
-    _assertClone(new ForEachStatement.con2(null,
+    _assertClone(new ForEachStatement.withReference(null,
         TokenFactory.tokenFromKeyword(Keyword.FOR),
         TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
         AstFactory.identifier3("a"), TokenFactory.tokenFromKeyword(Keyword.IN),
@@ -620,7 +620,7 @@
   }
 
   void test_visitForEachStatement_variable_await() {
-    _assertClone(new ForEachStatement.con2(
+    _assertClone(new ForEachStatement.withReference(
         TokenFactory.tokenFromString("await"),
         TokenFactory.tokenFromKeyword(Keyword.FOR),
         TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
diff --git a/pkg/analyzer/test/src/context/abstract_context.dart b/pkg/analyzer/test/src/context/abstract_context.dart
index 45925cd..ed198ff 100644
--- a/pkg/analyzer/test/src/context/abstract_context.dart
+++ b/pkg/analyzer/test/src/context/abstract_context.dart
@@ -13,12 +13,11 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/plugin/engine_plugin.dart';
-import 'package:analyzer/src/task/driver.dart';
-import 'package:analyzer/src/task/manager.dart';
 import 'package:plugin/manager.dart';
 import 'package:unittest/unittest.dart';
 
 import 'mock_sdk.dart';
+import 'package:analyzer/src/task/driver.dart';
 
 class AbstractContextTest {
   MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
@@ -26,11 +25,19 @@
   ExtensionManager extensionManager = new ExtensionManager();
 
   DartSdk sdk = new MockSdk();
+  SourceFactory sourceFactory;
   AnalysisContextImpl context;
-
-  TaskManager taskManager = new TaskManager();
   AnalysisDriver analysisDriver;
 
+  Source addSource(String path, String contents) {
+    Source source = newSource(path, contents);
+    ChangeSet changeSet = new ChangeSet();
+    changeSet.addedSource(source);
+    context.applyChanges(changeSet);
+    context.setContents(source, contents);
+    return source;
+  }
+
   /**
    * Assert that the given [elements] has the same number of items as the number
    * of specified [names], and that for each specified name, a corresponding
@@ -82,17 +89,18 @@
     // configure TaskManager
     {
       EnginePlugin plugin = AnalysisEngine.instance.enginePlugin;
-      extensionManager.processPlugins([plugin]);
-      taskManager.addTaskDescriptors(plugin.taskDescriptors);
+      if (plugin.taskExtensionPoint == null) {
+        extensionManager.processPlugins([plugin]);
+      }
     }
     // prepare AnalysisContext
-    context = createAnalysisContext();
-    context.sourceFactory = new SourceFactory(<UriResolver>[
+    sourceFactory = new SourceFactory(<UriResolver>[
       new DartUriResolver(sdk),
       new ResourceUriResolver(resourceProvider)
     ]);
-    // prepare AnalysisDriver
-    analysisDriver = new AnalysisDriver(taskManager, context);
+    context = createAnalysisContext();
+    context.sourceFactory = sourceFactory;
+    analysisDriver = context.driver;
   }
 
   void tearDown() {}
diff --git a/pkg/analyzer/test/src/context/cache_test.dart b/pkg/analyzer/test/src/context/cache_test.dart
index b417269..57eca5c 100644
--- a/pkg/analyzer/test/src/context/cache_test.dart
+++ b/pkg/analyzer/test/src/context/cache_test.dart
@@ -5,17 +5,21 @@
 library test.src.task.driver_test;
 
 import 'package:analyzer/src/context/cache.dart';
-import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/engine.dart'
-    show AnalysisContext, CacheState, RetentionPriority;
+    show
+        AnalysisContext,
+        CacheState,
+        InternalAnalysisContext,
+        RetentionPriority;
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/sdk_io.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
+import 'package:analyzer/src/task/model.dart';
 import 'package:analyzer/task/model.dart';
+import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart';
 
-import '../../generated/engine_test.dart';
 import '../../generated/test_support.dart';
 import '../../reflective_tests.dart';
 
@@ -23,6 +27,7 @@
   groupSep = ' | ';
   runReflectiveTests(AnalysisCacheTest);
   runReflectiveTests(CacheEntryTest);
+  runReflectiveTests(CacheFlushManagerTest);
   runReflectiveTests(SdkCachePartitionTest);
   runReflectiveTests(UniversalCachePartitionTest);
   runReflectiveTests(ResultDataTest);
@@ -30,57 +35,81 @@
 
 AnalysisCache createCache({AnalysisContext context,
     RetentionPriority policy: RetentionPriority.LOW}) {
-  CachePartition partition = new UniversalCachePartition(
-      context, 8, new TestCacheRetentionPolicy(policy));
+  CachePartition partition = new UniversalCachePartition(context);
   return new AnalysisCache(<CachePartition>[partition]);
 }
 
+class AbstractCacheTest {
+  InternalAnalysisContext context;
+  AnalysisCache cache;
+
+  void setUp() {
+    context = new _InternalAnalysisContextMock();
+    when(context.priorityTargets).thenReturn([]);
+    cache = createCache(context: context);
+    when(context.analysisCache).thenReturn(cache);
+  }
+}
+
 @reflectiveTest
-class AnalysisCacheTest extends EngineTestCase {
-  void test_astSize_empty() {
-    AnalysisCache cache = createCache();
-    expect(cache.astSize, 0);
-  }
-
-  void test_astSize_nonEmpty() {
-    ResultDescriptor result = new ResultDescriptor('test', null);
-    AstNode node = new NullLiteral(null);
-    AnalysisCache cache = createCache();
-    AnalysisTarget target1 = new TestSource('/test1.dart');
-    CacheEntry entry1 = new CacheEntry();
-    entry1.setValue(result, node, TargetedResult.EMPTY_LIST, null);
-    AnalysisTarget target2 = new TestSource('/test2.dart');
-    CacheEntry entry2 = new CacheEntry();
-    entry2.setValue(result, node, TargetedResult.EMPTY_LIST, null);
-    cache.put(target1, entry1);
-    cache.accessedAst(target1);
-    cache.put(target2, entry2);
-    cache.accessedAst(target2);
-    expect(cache.astSize, 2);
-  }
-
+class AnalysisCacheTest extends AbstractCacheTest {
   void test_creation() {
-    expect(createCache(), isNotNull);
+    expect(cache, isNotNull);
   }
 
   void test_get() {
-    AnalysisCache cache = createCache();
     AnalysisTarget target = new TestSource();
     expect(cache.get(target), isNull);
   }
 
   void test_getContextFor() {
-    AnalysisContext context = new TestAnalysisContext();
-    AnalysisCache cache = createCache(context: context);
     AnalysisTarget target = new TestSource();
     expect(cache.getContextFor(target), context);
   }
 
-  void test_iterator() {
-    AnalysisCache cache = createCache();
+  void test_getState_hasEntry_flushed() {
+    ResultDescriptor result = new ResultDescriptor('result', -1);
     AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
-    cache.put(target, entry);
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
+    entry.setState(result, CacheState.FLUSHED);
+    expect(cache.getState(target, result), CacheState.FLUSHED);
+  }
+
+  void test_getState_hasEntry_valid() {
+    ResultDescriptor result = new ResultDescriptor('result', -1);
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
+    entry.setValue(result, '', []);
+    expect(cache.getState(target, result), CacheState.VALID);
+  }
+
+  void test_getState_noEntry() {
+    ResultDescriptor result = new ResultDescriptor('result', -1);
+    AnalysisTarget target = new TestSource();
+    expect(cache.getState(target, result), CacheState.INVALID);
+  }
+
+  void test_getValue_hasEntry_valid() {
+    ResultDescriptor result = new ResultDescriptor('result', -1);
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
+    entry.setValue(result, 111, []);
+    expect(cache.getValue(target, result), 111);
+  }
+
+  void test_getValue_noEntry() {
+    ResultDescriptor result = new ResultDescriptor('result', -1);
+    AnalysisTarget target = new TestSource();
+    expect(cache.getValue(target, result), -1);
+  }
+
+  void test_iterator() {
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
     MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator();
     expect(iterator.moveNext(), isTrue);
     expect(iterator.key, same(target));
@@ -89,76 +118,69 @@
   }
 
   void test_put() {
-    AnalysisCache cache = createCache();
     AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     expect(cache.get(target), isNull);
-    cache.put(target, entry);
+    cache.put(entry);
     expect(cache.get(target), entry);
   }
 
   void test_remove() {
-    AnalysisCache cache = createCache();
-    AnalysisTarget target = new TestSource();
-    cache.remove(target);
-  }
-
-  void test_setMaxCacheSize() {
-    CachePartition partition = new UniversalCachePartition(
-        null, 8, new TestCacheRetentionPolicy(RetentionPriority.MEDIUM));
-    AnalysisCache cache = new AnalysisCache(<CachePartition>[partition]);
-    ResultDescriptor result = new ResultDescriptor('test', null);
-    AstNode node = new NullLiteral(null);
-    int size = 6;
-    for (int i = 0; i < size; i++) {
-      AnalysisTarget target = new TestSource("/test$i.dart");
-      CacheEntry entry = new CacheEntry();
-      entry.setValue(result, node, TargetedResult.EMPTY_LIST, null);
-      cache.put(target, entry);
-      cache.accessedAst(target);
-    }
-
-    void _assertNonFlushedCount(int expectedCount, AnalysisCache cache) {
-      int nonFlushedCount = 0;
-      MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator();
-      while (iterator.moveNext()) {
-        if (iterator.value.getState(result) != CacheState.FLUSHED) {
-          nonFlushedCount++;
-        }
-      }
-      expect(nonFlushedCount, expectedCount);
-    }
-
-    _assertNonFlushedCount(size, cache);
-    int newSize = size - 2;
-    partition.maxCacheSize = newSize;
-    _assertNonFlushedCount(newSize, cache);
+    AnalysisTarget target1 = new TestSource('/a.dart');
+    AnalysisTarget target2 = new TestSource('/b.dart');
+    AnalysisTarget target3 = new TestSource('/c.dart');
+    CacheEntry entry1 = new CacheEntry(target1);
+    CacheEntry entry2 = new CacheEntry(target2);
+    CacheEntry entry3 = new CacheEntry(target3);
+    cache.put(entry1);
+    cache.put(entry2);
+    cache.put(entry3);
+    ResultDescriptor result1 = new ResultDescriptor('result1', -1);
+    ResultDescriptor result2 = new ResultDescriptor('result2', -2);
+    ResultDescriptor result3 = new ResultDescriptor('result3', -3);
+    // set results, all of them are VALID
+    entry1.setValue(result1, 111, TargetedResult.EMPTY_LIST);
+    entry2.setValue(result2, 222, [new TargetedResult(target1, result1)]);
+    entry3.setValue(result3, 333, []);
+    expect(entry1.getState(result1), CacheState.VALID);
+    expect(entry2.getState(result2), CacheState.VALID);
+    expect(entry3.getState(result3), CacheState.VALID);
+    expect(entry1.getValue(result1), 111);
+    expect(entry2.getValue(result2), 222);
+    expect(entry3.getValue(result3), 333);
+    // remove entry1, invalidate result2 and remove empty entry2
+    cache.remove(target1);
+    expect(cache.get(target1), isNull);
+    expect(cache.get(target2), isNull);
+    expect(cache.get(target3), entry3);
+    expect(entry3.getState(result3), CacheState.VALID);
   }
 
   void test_size() {
-    AnalysisCache cache = createCache();
     int size = 4;
     for (int i = 0; i < size; i++) {
       AnalysisTarget target = new TestSource("/test$i.dart");
-      cache.put(target, new CacheEntry());
+      cache.put(new CacheEntry(target));
     }
     expect(cache.size(), size);
   }
 }
 
 @reflectiveTest
-class CacheEntryTest extends EngineTestCase {
+class CacheEntryTest extends AbstractCacheTest {
   test_explicitlyAdded() {
-    CacheEntry entry = new CacheEntry();
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
     expect(entry.explicitlyAdded, false);
     entry.explicitlyAdded = true;
     expect(entry.explicitlyAdded, true);
   }
 
   test_fixExceptionState_error_exception() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
     CaughtException exception = new CaughtException(null, null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     entry.setErrorState(exception, <ResultDescriptor>[result]);
     entry.fixExceptionState();
     expect(entry.getState(result), CacheState.ERROR);
@@ -166,100 +188,109 @@
   }
 
   test_fixExceptionState_noError_exception() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
     // set one result to ERROR
     CaughtException exception = new CaughtException(null, null);
     entry.setErrorState(exception, <ResultDescriptor>[result]);
     // set the same result to VALID
-    entry.setValue(result, 1, TargetedResult.EMPTY_LIST, null);
+    entry.setValue(result, 1, TargetedResult.EMPTY_LIST);
     // fix the exception state
     entry.fixExceptionState();
     expect(entry.exception, isNull);
   }
 
   test_fixExceptionState_noError_noException() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     entry.fixExceptionState();
     expect(entry.getState(result), CacheState.INVALID);
     expect(entry.exception, isNull);
   }
 
-  test_flushAstStructures() {
-    ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
-    entry.setValue(
-        result, new NullLiteral(null), TargetedResult.EMPTY_LIST, null);
-    expect(entry.hasAstStructure, true);
-    entry.flushAstStructures();
-    expect(entry.hasAstStructure, false);
-  }
-
   test_getState() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     expect(entry.getState(result), CacheState.INVALID);
   }
 
-  test_getValue() {
+  test_getValue_default() {
+    AnalysisTarget target = new TestSource();
     String defaultValue = 'value';
     ResultDescriptor result = new ResultDescriptor('test', defaultValue);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     expect(entry.getValue(result), defaultValue);
   }
 
-  test_getMemento_noResult() {
-    String defaultValue = 'value';
-    ResultDescriptor result = new ResultDescriptor('test', defaultValue);
-    CacheEntry entry = new CacheEntry();
-    expect(entry.getMemento(result), null);
-  }
-
-  test_hasAstStructure_false() {
-    CacheEntry entry = new CacheEntry();
-    expect(entry.hasAstStructure, false);
-  }
-
-  test_hasAstStructure_true() {
-    ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
-    entry.setValue(
-        result, new NullLiteral(null), TargetedResult.EMPTY_LIST, null);
-    expect(entry.hasAstStructure, true);
+  test_getValue_flushResults() {
+    ResultCachingPolicy cachingPolicy = new SimpleResultCachingPolicy(2, 2);
+    ResultDescriptor descriptor1 =
+        new ResultDescriptor('result1', null, cachingPolicy: cachingPolicy);
+    ResultDescriptor descriptor2 =
+        new ResultDescriptor('result2', null, cachingPolicy: cachingPolicy);
+    ResultDescriptor descriptor3 =
+        new ResultDescriptor('result3', null, cachingPolicy: cachingPolicy);
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
+    {
+      entry.setValue(descriptor1, 1, TargetedResult.EMPTY_LIST);
+      expect(entry.getState(descriptor1), CacheState.VALID);
+    }
+    {
+      entry.setValue(descriptor2, 2, TargetedResult.EMPTY_LIST);
+      expect(entry.getState(descriptor1), CacheState.VALID);
+      expect(entry.getState(descriptor2), CacheState.VALID);
+    }
+    // get descriptor1, so that descriptor2 will be flushed
+    entry.getValue(descriptor1);
+    {
+      entry.setValue(descriptor3, 3, TargetedResult.EMPTY_LIST);
+      expect(entry.getState(descriptor1), CacheState.VALID);
+      expect(entry.getState(descriptor2), CacheState.FLUSHED);
+      expect(entry.getState(descriptor3), CacheState.VALID);
+    }
   }
 
   test_hasErrorState_false() {
-    CacheEntry entry = new CacheEntry();
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
     expect(entry.hasErrorState(), false);
   }
 
   test_hasErrorState_true() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
     CaughtException exception = new CaughtException(null, null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     entry.setErrorState(exception, <ResultDescriptor>[result]);
     expect(entry.hasErrorState(), true);
   }
 
   test_invalidateAllInformation() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
-    entry.setValue(result, 'value', TargetedResult.EMPTY_LIST, null);
+    CacheEntry entry = new CacheEntry(target);
+    entry.setValue(result, 'value', TargetedResult.EMPTY_LIST);
     entry.invalidateAllInformation();
     expect(entry.getState(result), CacheState.INVALID);
     expect(entry.getValue(result), isNull);
   }
 
   test_setErrorState() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result1 = new ResultDescriptor('res1', 1);
     ResultDescriptor result2 = new ResultDescriptor('res2', 2);
     ResultDescriptor result3 = new ResultDescriptor('res3', 3);
     // prepare some good state
-    CacheEntry entry = new CacheEntry();
-    entry.setValue(result1, 10, TargetedResult.EMPTY_LIST, null);
-    entry.setValue(result2, 20, TargetedResult.EMPTY_LIST, null);
-    entry.setValue(result3, 30, TargetedResult.EMPTY_LIST, null);
+    CacheEntry entry = new CacheEntry(target);
+    entry.setValue(result1, 10, TargetedResult.EMPTY_LIST);
+    entry.setValue(result2, 20, TargetedResult.EMPTY_LIST);
+    entry.setValue(result3, 30, TargetedResult.EMPTY_LIST);
     // set error state
     CaughtException exception = new CaughtException(null, null);
     entry.setErrorState(exception, <ResultDescriptor>[result1, result2]);
@@ -274,69 +305,77 @@
   }
 
   test_setErrorState_invalidateDependent() {
-    AnalysisCache cache = createCache();
-    AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
-    cache.put(target, entry);
+    AnalysisTarget target1 = new TestSource('/a.dart');
+    AnalysisTarget target2 = new TestSource('/b.dart');
+    CacheEntry entry1 = new CacheEntry(target1);
+    CacheEntry entry2 = new CacheEntry(target2);
+    cache.put(entry1);
+    cache.put(entry2);
     ResultDescriptor result1 = new ResultDescriptor('result1', -1);
     ResultDescriptor result2 = new ResultDescriptor('result2', -2);
     ResultDescriptor result3 = new ResultDescriptor('result3', -3);
     ResultDescriptor result4 = new ResultDescriptor('result4', -4);
     // set results, all of them are VALID
-    entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null);
-    entry.setValue(result2, 222, [new TargetedResult(target, result1)], null);
-    entry.setValue(result3, 333, [new TargetedResult(target, result2)], null);
-    entry.setValue(result4, 444, [], null);
-    expect(entry.getState(result1), CacheState.VALID);
-    expect(entry.getState(result2), CacheState.VALID);
-    expect(entry.getState(result3), CacheState.VALID);
-    expect(entry.getState(result4), CacheState.VALID);
-    expect(entry.getValue(result1), 111);
-    expect(entry.getValue(result2), 222);
-    expect(entry.getValue(result3), 333);
-    expect(entry.getValue(result4), 444);
+    entry1.setValue(result1, 111, TargetedResult.EMPTY_LIST);
+    entry2.setValue(result2, 222, [new TargetedResult(target1, result1)]);
+    entry2.setValue(result3, 333, [new TargetedResult(target2, result2)]);
+    entry2.setValue(result4, 444, []);
+    expect(entry1.getState(result1), CacheState.VALID);
+    expect(entry2.getState(result2), CacheState.VALID);
+    expect(entry2.getState(result3), CacheState.VALID);
+    expect(entry2.getState(result4), CacheState.VALID);
+    expect(entry1.getValue(result1), 111);
+    expect(entry2.getValue(result2), 222);
+    expect(entry2.getValue(result3), 333);
+    expect(entry2.getValue(result4), 444);
     // set error state
     CaughtException exception = new CaughtException(null, null);
-    entry.setErrorState(exception, <ResultDescriptor>[result1]);
+    entry1.setErrorState(exception, <ResultDescriptor>[result1]);
     // result2 and result3 are invalidated, result4 is intact
-    expect(entry.getState(result1), CacheState.ERROR);
-    expect(entry.getState(result2), CacheState.ERROR);
-    expect(entry.getState(result3), CacheState.ERROR);
-    expect(entry.getState(result4), CacheState.VALID);
-    expect(entry.getValue(result1), -1);
-    expect(entry.getValue(result2), -2);
-    expect(entry.getValue(result3), -3);
-    expect(entry.getValue(result4), 444);
+    expect(entry1.getState(result1), CacheState.ERROR);
+    expect(entry2.getState(result2), CacheState.ERROR);
+    expect(entry2.getState(result3), CacheState.ERROR);
+    expect(entry2.getState(result4), CacheState.VALID);
+    expect(entry1.getValue(result1), -1);
+    expect(entry2.getValue(result2), -2);
+    expect(entry2.getValue(result3), -3);
+    expect(entry2.getValue(result4), 444);
+    expect(entry1.exception, exception);
+    expect(entry2.exception, exception);
   }
 
   test_setErrorState_noDescriptors() {
+    AnalysisTarget target = new TestSource();
     CaughtException exception = new CaughtException(null, null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     expect(() {
       entry.setErrorState(exception, <ResultDescriptor>[]);
     }, throwsArgumentError);
   }
 
   test_setErrorState_noException() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     expect(() {
       entry.setErrorState(null, <ResultDescriptor>[result]);
     }, throwsArgumentError);
   }
 
   test_setErrorState_nullDescriptors() {
+    AnalysisTarget target = new TestSource();
     CaughtException exception = new CaughtException(null, null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     expect(() {
       entry.setErrorState(exception, null);
     }, throwsArgumentError);
   }
 
   test_setState_error() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
-    entry.setValue(result, 42, TargetedResult.EMPTY_LIST, null);
+    CacheEntry entry = new CacheEntry(target);
+    entry.setValue(result, 42, TargetedResult.EMPTY_LIST);
     // an invalid state change
     expect(() {
       entry.setState(result, CacheState.ERROR);
@@ -347,10 +386,11 @@
   }
 
   test_setState_flushed() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', 1);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     // set VALID
-    entry.setValue(result, 10, TargetedResult.EMPTY_LIST, null);
+    entry.setValue(result, 10, TargetedResult.EMPTY_LIST);
     expect(entry.getState(result), CacheState.VALID);
     expect(entry.getValue(result), 10);
     // set FLUSHED
@@ -360,10 +400,11 @@
   }
 
   test_setState_inProcess() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', 1);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     // set VALID
-    entry.setValue(result, 10, TargetedResult.EMPTY_LIST, null);
+    entry.setValue(result, 10, TargetedResult.EMPTY_LIST);
     expect(entry.getState(result), CacheState.VALID);
     expect(entry.getValue(result), 10);
     // set IN_PROCESS
@@ -373,34 +414,33 @@
   }
 
   test_setState_invalid() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', 1);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
     // set VALID
-    String memento = 'main() {}';
-    entry.setValue(result, 10, TargetedResult.EMPTY_LIST, memento);
+    entry.setValue(result, 10, TargetedResult.EMPTY_LIST);
     expect(entry.getState(result), CacheState.VALID);
     expect(entry.getValue(result), 10);
     // set INVALID
     entry.setState(result, CacheState.INVALID);
     expect(entry.getState(result), CacheState.INVALID);
     expect(entry.getValue(result), 1);
-    expect(entry.getMemento(result), memento);
   }
 
   test_setState_invalid_invalidateDependent() {
-    AnalysisCache cache = createCache();
     AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
-    cache.put(target, entry);
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
     ResultDescriptor result1 = new ResultDescriptor('result1', -1);
     ResultDescriptor result2 = new ResultDescriptor('result2', -2);
     ResultDescriptor result3 = new ResultDescriptor('result3', -3);
     ResultDescriptor result4 = new ResultDescriptor('result4', -4);
     // set results, all of them are VALID
-    entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null);
-    entry.setValue(result2, 222, [new TargetedResult(target, result1)], null);
-    entry.setValue(result3, 333, [new TargetedResult(target, result2)], null);
-    entry.setValue(result4, 444, [], null);
+    entry.setValue(result1, 111, TargetedResult.EMPTY_LIST);
+    entry.setValue(result2, 222, [new TargetedResult(target, result1)]);
+    entry.setValue(result3, 333, [new TargetedResult(target, result2)]);
+    entry.setValue(result4, 444, []);
     expect(entry.getState(result1), CacheState.VALID);
     expect(entry.getState(result2), CacheState.VALID);
     expect(entry.getState(result3), CacheState.VALID);
@@ -419,39 +459,94 @@
     expect(entry.getValue(result2), -2);
     expect(entry.getValue(result3), -3);
     expect(entry.getValue(result4), 444);
+    // result4 is still valid, so the entry is still in the cache
+    expect(cache.get(target), entry);
+  }
+
+  test_setState_invalid_removeEmptyEntry() {
+    AnalysisTarget target1 = new TestSource('/a.dart');
+    AnalysisTarget target2 = new TestSource('/b.dart');
+    CacheEntry entry1 = new CacheEntry(target1);
+    CacheEntry entry2 = new CacheEntry(target2);
+    cache.put(entry1);
+    cache.put(entry2);
+    ResultDescriptor result1 = new ResultDescriptor('result1', -1);
+    ResultDescriptor result2 = new ResultDescriptor('result2', -2);
+    ResultDescriptor result3 = new ResultDescriptor('result3', -3);
+    // set results, all of them are VALID
+    entry1.setValue(result1, 111, TargetedResult.EMPTY_LIST);
+    entry2.setValue(result2, 222, [new TargetedResult(target1, result1)]);
+    entry2.setValue(result3, 333, [new TargetedResult(target2, result2)]);
+    expect(entry1.getState(result1), CacheState.VALID);
+    expect(entry2.getState(result2), CacheState.VALID);
+    expect(entry2.getState(result3), CacheState.VALID);
+    expect(entry1.getValue(result1), 111);
+    expect(entry2.getValue(result2), 222);
+    expect(entry2.getValue(result3), 333);
+    // invalidate result1, remove entry1 & entry2
+    entry1.setState(result1, CacheState.INVALID);
+    expect(cache.get(target1), isNull);
+    expect(cache.get(target2), isNull);
   }
 
   test_setState_valid() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
+    CacheEntry entry = new CacheEntry(target);
     expect(() => entry.setState(result, CacheState.VALID), throwsArgumentError);
   }
 
   test_setValue() {
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
     String value = 'value';
-    String memento = 'main() {}';
-    CacheEntry entry = new CacheEntry();
-    entry.setValue(result, value, TargetedResult.EMPTY_LIST, memento);
+    CacheEntry entry = new CacheEntry(target);
+    entry.setValue(result, value, TargetedResult.EMPTY_LIST);
     expect(entry.getState(result), CacheState.VALID);
     expect(entry.getValue(result), value);
-    expect(entry.getMemento(result), memento);
+  }
+
+  test_setValue_flushResults() {
+    ResultCachingPolicy cachingPolicy = new SimpleResultCachingPolicy(2, 2);
+    ResultDescriptor descriptor1 =
+        new ResultDescriptor('result1', null, cachingPolicy: cachingPolicy);
+    ResultDescriptor descriptor2 =
+        new ResultDescriptor('result2', null, cachingPolicy: cachingPolicy);
+    ResultDescriptor descriptor3 =
+        new ResultDescriptor('result3', null, cachingPolicy: cachingPolicy);
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
+    {
+      entry.setValue(descriptor1, 1, TargetedResult.EMPTY_LIST);
+      expect(entry.getState(descriptor1), CacheState.VALID);
+    }
+    {
+      entry.setValue(descriptor2, 2, TargetedResult.EMPTY_LIST);
+      expect(entry.getState(descriptor1), CacheState.VALID);
+      expect(entry.getState(descriptor2), CacheState.VALID);
+    }
+    {
+      entry.setValue(descriptor3, 3, TargetedResult.EMPTY_LIST);
+      expect(entry.getState(descriptor1), CacheState.FLUSHED);
+      expect(entry.getState(descriptor2), CacheState.VALID);
+      expect(entry.getState(descriptor3), CacheState.VALID);
+    }
   }
 
   test_setValue_invalidateDependent() {
-    AnalysisCache cache = createCache();
     AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
-    cache.put(target, entry);
+    CacheEntry entry = new CacheEntry(target);
+    cache.put(entry);
     ResultDescriptor result1 = new ResultDescriptor('result1', -1);
     ResultDescriptor result2 = new ResultDescriptor('result2', -2);
     ResultDescriptor result3 = new ResultDescriptor('result3', -3);
     ResultDescriptor result4 = new ResultDescriptor('result4', -4);
     // set results, all of them are VALID
-    entry.setValue(result1, 111, TargetedResult.EMPTY_LIST, null);
-    entry.setValue(result2, 222, [new TargetedResult(target, result1)], null);
-    entry.setValue(result3, 333, [new TargetedResult(target, result2)], null);
-    entry.setValue(result4, 444, [], null);
+    entry.setValue(result1, 111, TargetedResult.EMPTY_LIST);
+    entry.setValue(result2, 222, [new TargetedResult(target, result1)]);
+    entry.setValue(result3, 333, [new TargetedResult(target, result2)]);
+    entry.setValue(result4, 444, []);
     expect(entry.getState(result1), CacheState.VALID);
     expect(entry.getState(result2), CacheState.VALID);
     expect(entry.getState(result3), CacheState.VALID);
@@ -461,7 +556,7 @@
     expect(entry.getValue(result3), 333);
     expect(entry.getValue(result4), 444);
     // set result1, invalidates result2 and result3, result4 is intact
-    entry.setValue(result1, 1111, TargetedResult.EMPTY_LIST, null);
+    entry.setValue(result1, 1111, TargetedResult.EMPTY_LIST);
     expect(entry.getState(result1), CacheState.VALID);
     expect(entry.getState(result2), CacheState.INVALID);
     expect(entry.getState(result3), CacheState.INVALID);
@@ -473,20 +568,19 @@
   }
 
   test_setValue_invalidateDependent2() {
-    AnalysisCache cache = createCache();
     AnalysisTarget target1 = new TestSource('a');
     AnalysisTarget target2 = new TestSource('b');
-    CacheEntry entry1 = new CacheEntry();
-    CacheEntry entry2 = new CacheEntry();
-    cache.put(target1, entry1);
-    cache.put(target2, entry2);
+    CacheEntry entry1 = new CacheEntry(target1);
+    CacheEntry entry2 = new CacheEntry(target2);
+    cache.put(entry1);
+    cache.put(entry2);
     ResultDescriptor result1 = new ResultDescriptor('result1', -1);
     ResultDescriptor result2 = new ResultDescriptor('result2', -2);
     ResultDescriptor result3 = new ResultDescriptor('result3', -3);
     // set results, all of them are VALID
-    entry1.setValue(result1, 111, TargetedResult.EMPTY_LIST, null);
-    entry1.setValue(result2, 222, [new TargetedResult(target1, result1)], null);
-    entry2.setValue(result3, 333, [new TargetedResult(target1, result2)], null);
+    entry1.setValue(result1, 111, TargetedResult.EMPTY_LIST);
+    entry1.setValue(result2, 222, [new TargetedResult(target1, result1)]);
+    entry2.setValue(result3, 333, [new TargetedResult(target1, result2)]);
     expect(entry1.getState(result1), CacheState.VALID);
     expect(entry1.getState(result2), CacheState.VALID);
     expect(entry2.getState(result3), CacheState.VALID);
@@ -494,7 +588,7 @@
     expect(entry1.getValue(result2), 222);
     expect(entry2.getValue(result3), 333);
     // set result1, invalidates result2 and result3
-    entry1.setValue(result1, 1111, TargetedResult.EMPTY_LIST, null);
+    entry1.setValue(result1, 1111, TargetedResult.EMPTY_LIST);
     expect(entry1.getState(result1), CacheState.VALID);
     expect(entry1.getState(result2), CacheState.INVALID);
     expect(entry2.getState(result3), CacheState.INVALID);
@@ -503,22 +597,186 @@
     expect(entry2.getValue(result3), -3);
   }
 
+  test_setValue_keepEntry() {
+    AnalysisTarget target1 = new TestSource('/a.dart');
+    AnalysisTarget target2 = new TestSource('/b.dart');
+    CacheEntry entry1 = new CacheEntry(target1);
+    CacheEntry entry2 = new CacheEntry(target2);
+    cache.put(entry1);
+    cache.put(entry2);
+    ResultDescriptor result1 = new ResultDescriptor('result1', -1);
+    ResultDescriptor result2 = new ResultDescriptor('result2', -2);
+    // set results, all of them are VALID
+    entry1.setValue(result1, 111, TargetedResult.EMPTY_LIST);
+    entry2.setValue(result2, 222, [new TargetedResult(target1, result1)]);
+    expect(entry1.getState(result1), CacheState.VALID);
+    expect(entry2.getState(result2), CacheState.VALID);
+    expect(entry1.getValue(result1), 111);
+    expect(entry2.getValue(result2), 222);
+    // set result2, entry2 is still in the cache
+    entry2.setValue(result2, 2222, []);
+    expect(cache.get(target1), entry1);
+    expect(cache.get(target2), entry2);
+  }
+
   test_toString_empty() {
-    CacheEntry entry = new CacheEntry();
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
     expect(entry.toString(), isNotNull);
   }
 
   test_toString_nonEmpty() {
-    String value = 'value';
+    AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('test', null);
-    CacheEntry entry = new CacheEntry();
-    entry.setValue(result, value, TargetedResult.EMPTY_LIST, null);
+    CacheEntry entry = new CacheEntry(target);
+    entry.setValue(result, 42, TargetedResult.EMPTY_LIST);
     expect(entry.toString(), isNotNull);
   }
 }
 
+@reflectiveTest
+class CacheFlushManagerTest {
+  CacheFlushManager manager = new CacheFlushManager(
+      new SimpleResultCachingPolicy(15, 3), (AnalysisTarget target) => false);
+
+  test_madeActive() {
+    manager.madeActive();
+    expect(manager.maxSize, 15);
+  }
+
+  test_madeIdle() {
+    manager.madeActive();
+    AnalysisTarget target = new TestSource();
+    // prepare TargetedResult(s)
+    List<TargetedResult> results = <TargetedResult>[];
+    for (int i = 0; i < 15; i++) {
+      ResultDescriptor descriptor = new ResultDescriptor('result$i', null);
+      results.add(new TargetedResult(target, descriptor));
+    }
+    // notify about storing TargetedResult(s)
+    for (TargetedResult result in results) {
+      manager.resultStored(result, null);
+    }
+    expect(manager.recentlyUsed, results);
+    expect(manager.currentSize, 15);
+    // make idle
+    List<TargetedResult> resultsToFlush = manager.madeIdle();
+    expect(manager.maxSize, 3);
+    expect(manager.recentlyUsed, results.skip(15 - 3));
+    expect(resultsToFlush, results.take(15 - 3));
+  }
+
+  test_new() {
+    expect(manager.maxActiveSize, 15);
+    expect(manager.maxIdleSize, 3);
+    expect(manager.maxSize, 3);
+    expect(manager.currentSize, 0);
+    expect(manager.recentlyUsed, isEmpty);
+  }
+
+  test_resultAccessed() {
+    ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
+    ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
+    ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
+    AnalysisTarget target = new TestSource();
+    TargetedResult result1 = new TargetedResult(target, descriptor1);
+    TargetedResult result2 = new TargetedResult(target, descriptor2);
+    TargetedResult result3 = new TargetedResult(target, descriptor3);
+    manager.resultStored(result1, null);
+    manager.resultStored(result2, null);
+    manager.resultStored(result3, null);
+    expect(manager.currentSize, 3);
+    expect(manager.recentlyUsed, orderedEquals([result1, result2, result3]));
+    // access result2
+    manager.resultAccessed(result2);
+    expect(manager.currentSize, 3);
+    expect(manager.recentlyUsed, orderedEquals([result1, result3, result2]));
+  }
+
+  test_resultAccessed_noSuchResult() {
+    ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
+    ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
+    ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
+    AnalysisTarget target = new TestSource();
+    TargetedResult result1 = new TargetedResult(target, descriptor1);
+    TargetedResult result2 = new TargetedResult(target, descriptor2);
+    TargetedResult result3 = new TargetedResult(target, descriptor3);
+    manager.resultStored(result1, null);
+    manager.resultStored(result2, null);
+    expect(manager.currentSize, 2);
+    expect(manager.recentlyUsed, orderedEquals([result1, result2]));
+    // access result3, no-op
+    manager.resultAccessed(result3);
+    expect(manager.currentSize, 2);
+    expect(manager.recentlyUsed, orderedEquals([result1, result2]));
+  }
+
+  test_resultStored() {
+    ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
+    ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
+    ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
+    ResultDescriptor descriptor4 = new ResultDescriptor('result4', null);
+    AnalysisTarget target = new TestSource();
+    TargetedResult result1 = new TargetedResult(target, descriptor1);
+    TargetedResult result2 = new TargetedResult(target, descriptor2);
+    TargetedResult result3 = new TargetedResult(target, descriptor3);
+    TargetedResult result4 = new TargetedResult(target, descriptor4);
+    manager.resultStored(result1, null);
+    manager.resultStored(result2, null);
+    manager.resultStored(result3, null);
+    expect(manager.currentSize, 3);
+    expect(manager.recentlyUsed, orderedEquals([result1, result2, result3]));
+    // store result2 again
+    {
+      List<TargetedResult> resultsToFlush = manager.resultStored(result2, null);
+      expect(resultsToFlush, isEmpty);
+      expect(manager.currentSize, 3);
+      expect(manager.recentlyUsed, orderedEquals([result1, result3, result2]));
+    }
+    // store result4
+    {
+      List<TargetedResult> resultsToFlush = manager.resultStored(result4, null);
+      expect(resultsToFlush, [result1]);
+      expect(manager.currentSize, 3);
+      expect(manager.recentlyUsed, orderedEquals([result3, result2, result4]));
+      expect(manager.resultSizeMap, {result3: 1, result2: 1, result4: 1});
+    }
+  }
+
+  test_targetRemoved() {
+    ResultDescriptor descriptor1 = new ResultDescriptor('result1', null);
+    ResultDescriptor descriptor2 = new ResultDescriptor('result2', null);
+    ResultDescriptor descriptor3 = new ResultDescriptor('result3', null);
+    AnalysisTarget target1 = new TestSource('a.dart');
+    AnalysisTarget target2 = new TestSource('b.dart');
+    TargetedResult result1 = new TargetedResult(target1, descriptor1);
+    TargetedResult result2 = new TargetedResult(target2, descriptor2);
+    TargetedResult result3 = new TargetedResult(target1, descriptor3);
+    manager.resultStored(result1, null);
+    manager.resultStored(result2, null);
+    manager.resultStored(result3, null);
+    expect(manager.currentSize, 3);
+    expect(manager.recentlyUsed, orderedEquals([result1, result2, result3]));
+    expect(manager.resultSizeMap, {result1: 1, result2: 1, result3: 1});
+    // remove target1
+    {
+      manager.targetRemoved(target1);
+      expect(manager.currentSize, 1);
+      expect(manager.recentlyUsed, orderedEquals([result2]));
+      expect(manager.resultSizeMap, {result2: 1});
+    }
+    // remove target2
+    {
+      manager.targetRemoved(target2);
+      expect(manager.currentSize, 0);
+      expect(manager.recentlyUsed, isEmpty);
+      expect(manager.resultSizeMap, isEmpty);
+    }
+  }
+}
+
 abstract class CachePartitionTest extends EngineTestCase {
-  CachePartition createPartition([CacheRetentionPolicy policy = null]);
+  CachePartition createPartition();
 
   void test_creation() {
     expect(createPartition(), isNotNull);
@@ -527,8 +785,8 @@
   void test_entrySet() {
     CachePartition partition = createPartition();
     AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
-    partition.put(target, entry);
+    CacheEntry entry = new CacheEntry(target);
+    partition.put(entry);
     Map<AnalysisTarget, CacheEntry> entryMap = partition.map;
     expect(entryMap, hasLength(1));
     AnalysisTarget entryKey = entryMap.keys.first;
@@ -542,65 +800,32 @@
     expect(partition.get(target), isNull);
   }
 
+  void test_put_alreadyInPartition() {
+    CachePartition partition1 = createPartition();
+    CachePartition partition2 = createPartition();
+    AnalysisTarget target = new TestSource();
+    CacheEntry entry = new CacheEntry(target);
+    partition1.put(entry);
+    expect(() => partition2.put(entry), throwsStateError);
+  }
+
   void test_put_noFlush() {
     CachePartition partition = createPartition();
     AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
-    partition.put(target, entry);
+    CacheEntry entry = new CacheEntry(target);
+    partition.put(entry);
     expect(partition.get(target), entry);
   }
 
   void test_remove() {
     CachePartition partition = createPartition();
     AnalysisTarget target = new TestSource();
-    CacheEntry entry = new CacheEntry();
-    partition.put(target, entry);
+    CacheEntry entry = new CacheEntry(target);
+    partition.put(entry);
     expect(partition.get(target), entry);
     partition.remove(target);
     expect(partition.get(target), isNull);
   }
-
-  void test_setMaxCacheSize() {
-    CachePartition partition =
-        createPartition(new TestCacheRetentionPolicy(RetentionPriority.LOW));
-    ResultDescriptor result = new ResultDescriptor('result', null);
-    NullLiteral node = new NullLiteral(null);
-    int size = 6; // Must be <= partition.maxCacheSize
-    for (int i = 0; i < size; i++) {
-      AnalysisTarget target = new TestSource("/test$i.dart");
-      CacheEntry entry = new CacheEntry();
-      entry.setValue(result, node, TargetedResult.EMPTY_LIST, null);
-      partition.put(target, entry);
-      partition.accessedAst(target);
-    }
-
-    void assertNonFlushedCount(int expectedCount, CachePartition partition) {
-      int nonFlushedCount = 0;
-      Map<AnalysisTarget, CacheEntry> entryMap = partition.map;
-      entryMap.values.forEach((CacheEntry entry) {
-        if (entry.getState(result) != CacheState.FLUSHED) {
-          nonFlushedCount++;
-        }
-      });
-      expect(nonFlushedCount, expectedCount);
-    }
-
-    assertNonFlushedCount(size, partition);
-    int newSize = size - 2;
-    partition.maxCacheSize = newSize;
-    assertNonFlushedCount(newSize, partition);
-  }
-
-  void test_size() {
-    CachePartition partition = createPartition();
-    int size = 4;
-    for (int i = 0; i < size; i++) {
-      AnalysisTarget target = new TestSource("/test$i.dart");
-      partition.put(target, new CacheEntry());
-      partition.accessedAst(target);
-    }
-    expect(partition.size(), size);
-  }
 }
 
 @reflectiveTest
@@ -612,50 +837,53 @@
     expect(data.state, CacheState.INVALID);
     expect(data.value, value);
   }
+
+  test_flush() {
+    ResultDescriptor result = new ResultDescriptor('test', -1);
+    ResultData data = new ResultData(result);
+    data.state = CacheState.VALID;
+    data.value = 123;
+    data.flush();
+    expect(data.state, CacheState.FLUSHED);
+    expect(data.value, -1);
+  }
 }
 
 @reflectiveTest
 class SdkCachePartitionTest extends CachePartitionTest {
-  CachePartition createPartition([CacheRetentionPolicy policy = null]) {
-    return new SdkCachePartition(null, 8);
+  CachePartition createPartition() {
+    return new SdkCachePartition(null);
   }
 
   void test_contains_false() {
     CachePartition partition = createPartition();
     AnalysisTarget target = new TestSource();
-    expect(partition.contains(target), isFalse);
+    expect(partition.isResponsibleFor(target), isFalse);
   }
 
   void test_contains_true() {
-    SdkCachePartition partition = new SdkCachePartition(null, 8);
+    SdkCachePartition partition = new SdkCachePartition(null);
     SourceFactory factory = new SourceFactory(
         [new DartUriResolver(DirectoryBasedDartSdk.defaultSdk)]);
     AnalysisTarget target = factory.forUri("dart:core");
-    expect(partition.contains(target), isTrue);
+    expect(partition.isResponsibleFor(target), isTrue);
   }
 }
 
 @reflectiveTest
-class TestCacheRetentionPolicy extends CacheRetentionPolicy {
-  final RetentionPriority policy;
-
-  TestCacheRetentionPolicy([this.policy = RetentionPriority.MEDIUM]);
-
-  @override
-  RetentionPriority getAstPriority(AnalysisTarget target, CacheEntry entry) =>
-      policy;
-}
-
-@reflectiveTest
 class UniversalCachePartitionTest extends CachePartitionTest {
-  CachePartition createPartition([CacheRetentionPolicy policy = null]) {
-    return new UniversalCachePartition(null, 8, policy);
+  CachePartition createPartition() {
+    return new UniversalCachePartition(null);
   }
 
   void test_contains() {
-    UniversalCachePartition partition =
-        new UniversalCachePartition(null, 8, null);
+    UniversalCachePartition partition = new UniversalCachePartition(null);
     TestSource source = new TestSource();
-    expect(partition.contains(source), isTrue);
+    expect(partition.isResponsibleFor(source), isTrue);
   }
 }
+
+class _InternalAnalysisContextMock extends TypedMock
+    implements InternalAnalysisContext {
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index 92d552f..2489922 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -5,7 +5,6 @@
 library test.src.context.context_test;
 
 import 'dart:async';
-import 'dart:collection';
 
 import 'package:analyzer/src/cancelable_future.dart';
 import 'package:analyzer/src/context/cache.dart';
@@ -24,6 +23,7 @@
         AnalysisOptions,
         AnalysisOptionsImpl,
         AnalysisResult,
+        CacheState,
         ChangeNotice,
         ChangeSet,
         IncrementalAnalysisCache,
@@ -31,416 +31,71 @@
 import 'package:analyzer/src/generated/error.dart';
 import 'package:analyzer/src/generated/html.dart' as ht;
 import 'package:analyzer/src/generated/java_engine.dart';
-import 'package:analyzer/src/generated/java_engine_io.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/scanner.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/generated/sdk_io.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/source_io.dart';
-import 'package:analyzer/src/generated/testing/ast_factory.dart';
-import 'package:analyzer/src/generated/testing/element_factory.dart';
-import 'package:analyzer/src/generated/testing/test_type_provider.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
-import 'package:analyzer/src/plugin/engine_plugin.dart';
 import 'package:analyzer/task/dart.dart';
-import 'package:plugin/manager.dart';
 import 'package:unittest/unittest.dart';
 import 'package:watcher/src/utils.dart';
 
 import '../../generated/engine_test.dart';
 import '../../generated/test_support.dart';
 import '../../reflective_tests.dart';
-import '../mock_sdk.dart';
+import 'abstract_context.dart';
 
 main() {
   groupSep = ' | ';
   runReflectiveTests(AnalysisContextImplTest);
 }
 
-contextWithCore() {
-  return new AnalysisContextForTests();
-}
-
-/**
- * An analysis context that has a fake SDK that is much smaller and faster for
- * testing purposes.
- */
-class AnalysisContextForTests extends AnalysisContextImpl {
-  AnalysisContextForTests() {
-    DartSdk sdk = new MockSdk();
-    SourceFactory sourceFactory =
-        new SourceFactory([new DartUriResolver(sdk), new FileUriResolver()]);
-    this.sourceFactory = sourceFactory;
-//    initWithCore();
-  }
-
-  @override
-  void set analysisOptions(AnalysisOptions options) {
-    AnalysisOptions currentOptions = analysisOptions;
-    bool needsRecompute = currentOptions.analyzeFunctionBodiesPredicate !=
-            options.analyzeFunctionBodiesPredicate ||
-        currentOptions.generateImplicitErrors !=
-            options.generateImplicitErrors ||
-        currentOptions.generateSdkErrors != options.generateSdkErrors ||
-        currentOptions.dart2jsHint != options.dart2jsHint ||
-        (currentOptions.hint && !options.hint) ||
-        currentOptions.preserveComments != options.preserveComments ||
-        currentOptions.enableNullAwareOperators !=
-            options.enableNullAwareOperators ||
-        currentOptions.enableStrictCallChecks != options.enableStrictCallChecks;
-    if (needsRecompute) {
-      fail(
-          "Cannot set options that cause the sources to be reanalyzed in a test context");
-    }
-    super.analysisOptions = options;
-  }
-
-  @override
-  LibraryResolverFactory get libraryResolverFactory => null;
-
-  @override
-  bool exists(Source source) =>
-      super.exists(source) || sourceFactory.dartSdk.context.exists(source);
-
-  @override
-  TimestampedData<String> getContents(Source source) {
-    if (source.isInSystemLibrary) {
-      return sourceFactory.dartSdk.context.getContents(source);
-    }
-    return super.getContents(source);
-  }
-
-  @override
-  int getModificationStamp(Source source) {
-    if (source.isInSystemLibrary) {
-      return sourceFactory.dartSdk.context.getModificationStamp(source);
-    }
-    return super.getModificationStamp(source);
-  }
-
-  /**
-   * Initialize the given analysis context with a fake core library already resolved.
-   *
-   * @param context the context to be initialized (not `null`)
-   * @return the analysis context that was created
-   */
-  void initWithCore() {
-    AnalysisContext coreContext = sourceFactory.dartSdk.context;
-    //
-    // dart:core
-    //
-    TestTypeProvider provider = new TestTypeProvider();
-    typeProvider = provider;
-    CompilationUnitElementImpl coreUnit =
-        new CompilationUnitElementImpl("core.dart");
-    Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE);
-    coreContext.setContents(coreSource, "");
-    coreUnit.source = coreSource;
-    ClassElementImpl proxyClassElement = ElementFactory.classElement2("_Proxy");
-    coreUnit.types = <ClassElement>[
-      provider.boolType.element,
-      provider.deprecatedType.element,
-      provider.doubleType.element,
-      provider.functionType.element,
-      provider.intType.element,
-      provider.iterableType.element,
-      provider.iteratorType.element,
-      provider.listType.element,
-      provider.mapType.element,
-      provider.nullType.element,
-      provider.numType.element,
-      provider.objectType.element,
-      proxyClassElement,
-      provider.stackTraceType.element,
-      provider.stringType.element,
-      provider.symbolType.element,
-      provider.typeType.element
-    ];
-    coreUnit.functions = <FunctionElement>[
-      ElementFactory.functionElement3("identical", provider.boolType.element,
-          <ClassElement>[
-        provider.objectType.element,
-        provider.objectType.element
-      ], null),
-      ElementFactory.functionElement3("print", VoidTypeImpl.instance.element,
-          <ClassElement>[provider.objectType.element], null)
-    ];
-    TopLevelVariableElement proxyTopLevelVariableElt = ElementFactory
-        .topLevelVariableElement3("proxy", true, false, proxyClassElement.type);
-    TopLevelVariableElement deprecatedTopLevelVariableElt = ElementFactory
-        .topLevelVariableElement3(
-            "deprecated", true, false, provider.deprecatedType);
-    coreUnit.accessors = <PropertyAccessorElement>[
-      proxyTopLevelVariableElt.getter,
-      deprecatedTopLevelVariableElt.getter
-    ];
-    coreUnit.topLevelVariables = <TopLevelVariableElement>[
-      proxyTopLevelVariableElt,
-      deprecatedTopLevelVariableElt
-    ];
-    LibraryElementImpl coreLibrary = new LibraryElementImpl.forNode(
-        coreContext, AstFactory.libraryIdentifier2(["dart", "core"]));
-    coreLibrary.definingCompilationUnit = coreUnit;
-    //
-    // dart:async
-    //
-    CompilationUnitElementImpl asyncUnit =
-        new CompilationUnitElementImpl("async.dart");
-    Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC);
-    coreContext.setContents(asyncSource, "");
-    asyncUnit.source = asyncSource;
-    // Future
-    ClassElementImpl futureElement =
-        ElementFactory.classElement2("Future", ["T"]);
-    InterfaceType futureType = futureElement.type;
-    //   factory Future.value([value])
-    ConstructorElementImpl futureConstructor =
-        ElementFactory.constructorElement2(futureElement, "value");
-    futureConstructor.parameters = <ParameterElement>[
-      ElementFactory.positionalParameter2("value", provider.dynamicType)
-    ];
-    futureConstructor.factory = true;
-    (futureConstructor.type as FunctionTypeImpl).typeArguments =
-        futureElement.type.typeArguments;
-    futureElement.constructors = <ConstructorElement>[futureConstructor];
-    //   Future then(onValue(T value), { Function onError });
-    List<ParameterElement> parameters = <ParameterElement>[
-      ElementFactory.requiredParameter2(
-          "value", futureElement.typeParameters[0].type)
-    ];
-    FunctionTypeAliasElementImpl aliasElement =
-        new FunctionTypeAliasElementImpl.forNode(null);
-    aliasElement.synthetic = true;
-    aliasElement.parameters = parameters;
-    aliasElement.returnType = provider.dynamicType;
-    aliasElement.enclosingElement = asyncUnit;
-    FunctionTypeImpl aliasType = new FunctionTypeImpl.con2(aliasElement);
-    aliasElement.shareTypeParameters(futureElement.typeParameters);
-    aliasType.typeArguments = futureElement.type.typeArguments;
-    MethodElement thenMethod = ElementFactory.methodElementWithParameters(
-        "then", futureElement.type.typeArguments, futureType, [
-      ElementFactory.requiredParameter2("onValue", aliasType),
-      ElementFactory.namedParameter2("onError", provider.functionType)
-    ]);
-    futureElement.methods = <MethodElement>[thenMethod];
-    // Completer
-    ClassElementImpl completerElement =
-        ElementFactory.classElement2("Completer", ["T"]);
-    ConstructorElementImpl completerConstructor =
-        ElementFactory.constructorElement2(completerElement, null);
-    (completerConstructor.type as FunctionTypeImpl).typeArguments =
-        completerElement.type.typeArguments;
-    completerElement.constructors = <ConstructorElement>[completerConstructor];
-    asyncUnit.types = <ClassElement>[
-      completerElement,
-      futureElement,
-      ElementFactory.classElement2("Stream", ["T"])
-    ];
-    LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode(
-        coreContext, AstFactory.libraryIdentifier2(["dart", "async"]));
-    asyncLibrary.definingCompilationUnit = asyncUnit;
-    //
-    // dart:html
-    //
-    CompilationUnitElementImpl htmlUnit =
-        new CompilationUnitElementImpl("html_dartium.dart");
-    Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML);
-    coreContext.setContents(htmlSource, "");
-    htmlUnit.source = htmlSource;
-    ClassElementImpl elementElement = ElementFactory.classElement2("Element");
-    InterfaceType elementType = elementElement.type;
-    ClassElementImpl canvasElement =
-        ElementFactory.classElement("CanvasElement", elementType);
-    ClassElementImpl contextElement =
-        ElementFactory.classElement2("CanvasRenderingContext");
-    InterfaceType contextElementType = contextElement.type;
-    ClassElementImpl context2dElement = ElementFactory.classElement(
-        "CanvasRenderingContext2D", contextElementType);
-    canvasElement.methods = <MethodElement>[
-      ElementFactory.methodElement(
-          "getContext", contextElementType, [provider.stringType])
-    ];
-    canvasElement.accessors = <PropertyAccessorElement>[
-      ElementFactory.getterElement("context2D", false, context2dElement.type)
-    ];
-    canvasElement.fields = canvasElement.accessors
-        .map((PropertyAccessorElement accessor) => accessor.variable)
-        .toList();
-    ClassElementImpl documentElement =
-        ElementFactory.classElement("Document", elementType);
-    ClassElementImpl htmlDocumentElement =
-        ElementFactory.classElement("HtmlDocument", documentElement.type);
-    htmlDocumentElement.methods = <MethodElement>[
-      ElementFactory.methodElement(
-          "query", elementType, <DartType>[provider.stringType])
-    ];
-    htmlUnit.types = <ClassElement>[
-      ElementFactory.classElement("AnchorElement", elementType),
-      ElementFactory.classElement("BodyElement", elementType),
-      ElementFactory.classElement("ButtonElement", elementType),
-      canvasElement,
-      contextElement,
-      context2dElement,
-      ElementFactory.classElement("DivElement", elementType),
-      documentElement,
-      elementElement,
-      htmlDocumentElement,
-      ElementFactory.classElement("InputElement", elementType),
-      ElementFactory.classElement("SelectElement", elementType)
-    ];
-    htmlUnit.functions = <FunctionElement>[
-      ElementFactory.functionElement3("query", elementElement,
-          <ClassElement>[provider.stringType.element], ClassElement.EMPTY_LIST)
-    ];
-    TopLevelVariableElementImpl document = ElementFactory
-        .topLevelVariableElement3(
-            "document", false, true, htmlDocumentElement.type);
-    htmlUnit.topLevelVariables = <TopLevelVariableElement>[document];
-    htmlUnit.accessors = <PropertyAccessorElement>[document.getter];
-    LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode(
-        coreContext, AstFactory.libraryIdentifier2(["dart", "dom", "html"]));
-    htmlLibrary.definingCompilationUnit = htmlUnit;
-    //
-    // dart:math
-    //
-    CompilationUnitElementImpl mathUnit =
-        new CompilationUnitElementImpl("math.dart");
-    Source mathSource = sourceFactory.forUri("dart:math");
-    coreContext.setContents(mathSource, "");
-    mathUnit.source = mathSource;
-    FunctionElement cosElement = ElementFactory.functionElement3("cos",
-        provider.doubleType.element, <ClassElement>[provider.numType.element],
-        ClassElement.EMPTY_LIST);
-    TopLevelVariableElement ln10Element = ElementFactory
-        .topLevelVariableElement3("LN10", true, false, provider.doubleType);
-    TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3(
-        "PI", true, false, provider.doubleType);
-    ClassElementImpl randomElement = ElementFactory.classElement2("Random");
-    randomElement.abstract = true;
-    ConstructorElementImpl randomConstructor =
-        ElementFactory.constructorElement2(randomElement, null);
-    randomConstructor.factory = true;
-    ParameterElementImpl seedParam = new ParameterElementImpl("seed", 0);
-    seedParam.parameterKind = ParameterKind.POSITIONAL;
-    seedParam.type = provider.intType;
-    randomConstructor.parameters = <ParameterElement>[seedParam];
-    randomElement.constructors = <ConstructorElement>[randomConstructor];
-    FunctionElement sinElement = ElementFactory.functionElement3("sin",
-        provider.doubleType.element, <ClassElement>[provider.numType.element],
-        ClassElement.EMPTY_LIST);
-    FunctionElement sqrtElement = ElementFactory.functionElement3("sqrt",
-        provider.doubleType.element, <ClassElement>[provider.numType.element],
-        ClassElement.EMPTY_LIST);
-    mathUnit.accessors = <PropertyAccessorElement>[
-      ln10Element.getter,
-      piElement.getter
-    ];
-    mathUnit.functions = <FunctionElement>[cosElement, sinElement, sqrtElement];
-    mathUnit.topLevelVariables = <TopLevelVariableElement>[
-      ln10Element,
-      piElement
-    ];
-    mathUnit.types = <ClassElement>[randomElement];
-    LibraryElementImpl mathLibrary = new LibraryElementImpl.forNode(
-        coreContext, AstFactory.libraryIdentifier2(["dart", "math"]));
-    mathLibrary.definingCompilationUnit = mathUnit;
-    //
-    // Set empty sources for the rest of the libraries.
-    //
-    Source source = sourceFactory.forUri("dart:_interceptors");
-    coreContext.setContents(source, "");
-    source = sourceFactory.forUri("dart:_js_helper");
-    coreContext.setContents(source, "");
-    //
-    // Record the elements.
-    //
-    HashMap<Source, LibraryElement> elementMap =
-        new HashMap<Source, LibraryElement>();
-    elementMap[coreSource] = coreLibrary;
-    elementMap[asyncSource] = asyncLibrary;
-    elementMap[htmlSource] = htmlLibrary;
-    elementMap[mathSource] = mathLibrary;
-    recordLibraryElements(elementMap);
-    elementMap.forEach((Source librarySource, LibraryElement library) {
-      CompilationUnit unit = new CompilationUnit(null, null, null, null, null);
-      unit.element = library.definingCompilationUnit;
-      CacheEntry entry = getCacheEntry(librarySource);
-      entry.setValue(PARSED_UNIT, unit, TargetedResult.EMPTY_LIST, null);
-    });
-  }
-
-  /**
-   * Set the analysis options, even if they would force re-analysis. This method should only be
-   * invoked before the fake SDK is initialized.
-   *
-   * @param options the analysis options to be set
-   */
-  void _internalSetAnalysisOptions(AnalysisOptions options) {
-    super.analysisOptions = options;
-  }
-}
-
 @reflectiveTest
-class AnalysisContextImplTest extends EngineTestCase {
-  /**
-   * An analysis context whose source factory is [sourceFactory].
-   */
-  AnalysisContextImpl _context;
-
-  /**
-   * The source factory associated with the analysis [context].
-   */
-  SourceFactory _sourceFactory;
-
+class AnalysisContextImplTest extends AbstractContextTest {
   void fail_applyChanges_empty() {
-    _context.applyChanges(new ChangeSet());
-    expect(_context.performAnalysisTask().changeNotices, isNull);
+    context.applyChanges(new ChangeSet());
+    expect(context.performAnalysisTask().changeNotices, isNull);
     // This test appears to be flaky. If it is named "test_" it fails, if it's
-    // named "fail_" it doesn't fail. I'm guessing that it's dependent on some
-    // other test being run (or not).
+    // named "fail_" it doesn't fail. I'm guessing that it's dependent on
+    // whether some other test is run.
     fail('Should have failed');
   }
 
-  void fail_applyChanges_overriddenSource() {
+  void test_applyChanges_overriddenSource() {
     // Note: addSource adds the source to the contentCache.
-    Source source = _addSource("/test.dart", "library test;");
-    _context.computeErrors(source);
-    while (!_context.sourcesNeedingProcessing.isEmpty) {
-      _context.performAnalysisTask();
+    Source source = addSource("/test.dart", "library test;");
+    context.computeErrors(source);
+    while (!context.sourcesNeedingProcessing.isEmpty) {
+      context.performAnalysisTask();
     }
     // Adding the source as a changedSource should have no effect since
     // it is already overridden in the content cache.
     ChangeSet changeSet = new ChangeSet();
     changeSet.changedSource(source);
-    _context.applyChanges(changeSet);
-    expect(_context.sourcesNeedingProcessing, hasLength(0));
+    context.applyChanges(changeSet);
+    expect(context.sourcesNeedingProcessing, hasLength(0));
   }
 
   Future fail_applyChanges_remove() {
-    _context = contextWithCore();
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    _sourceFactory = _context.sourceFactory;
+    context.onSourcesChanged.listen(listener.onData);
     String libAContents = r'''
 library libA;
 import 'libB.dart';''';
-    Source libA = _addSource("/libA.dart", libAContents);
+    Source libA = addSource("/libA.dart", libAContents);
     String libBContents = "library libB;";
-    Source libB = _addSource("/libB.dart", libBContents);
-    LibraryElement libAElement = _context.computeLibraryElement(libA);
+    Source libB = addSource("/libB.dart", libBContents);
+    LibraryElement libAElement = context.computeLibraryElement(libA);
     expect(libAElement, isNotNull);
     List<LibraryElement> importedLibraries = libAElement.importedLibraries;
     expect(importedLibraries, hasLength(2));
-    _context.computeErrors(libA);
-    _context.computeErrors(libB);
-    expect(_context.sourcesNeedingProcessing, hasLength(0));
-    _context.setContents(libB, null);
+    context.computeErrors(libA);
+    context.computeErrors(libB);
+    expect(context.sourcesNeedingProcessing, hasLength(0));
+    context.setContents(libB, null);
     _removeSource(libB);
-    List<Source> sources = _context.sourcesNeedingProcessing;
+    List<Source> sources = context.sourcesNeedingProcessing;
     expect(sources, hasLength(1));
     expect(sources[0], same(libA));
-    libAElement = _context.computeLibraryElement(libA);
+    libAElement = context.computeLibraryElement(libA);
     importedLibraries = libAElement.importedLibraries;
     expect(importedLibraries, hasLength(1));
     return pumpEventQueue().then((_) {
@@ -455,26 +110,24 @@
   }
 
   Future fail_applyChanges_removeContainer() {
-    _context = contextWithCore();
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    _sourceFactory = _context.sourceFactory;
+    context.onSourcesChanged.listen(listener.onData);
     String libAContents = r'''
 library libA;
 import 'libB.dart';''';
-    Source libA = _addSource("/libA.dart", libAContents);
+    Source libA = addSource("/libA.dart", libAContents);
     String libBContents = "library libB;";
-    Source libB = _addSource("/libB.dart", libBContents);
-    _context.computeLibraryElement(libA);
-    _context.computeErrors(libA);
-    _context.computeErrors(libB);
-    expect(_context.sourcesNeedingProcessing, hasLength(0));
+    Source libB = addSource("/libB.dart", libBContents);
+    context.computeLibraryElement(libA);
+    context.computeErrors(libA);
+    context.computeErrors(libB);
+    expect(context.sourcesNeedingProcessing, hasLength(0));
     ChangeSet changeSet = new ChangeSet();
     SourceContainer removedContainer =
         new _AnalysisContextImplTest_test_applyChanges_removeContainer(libB);
     changeSet.removedContainer(removedContainer);
-    _context.applyChanges(changeSet);
-    List<Source> sources = _context.sourcesNeedingProcessing;
+    context.applyChanges(changeSet);
+    List<Source> sources = context.sourcesNeedingProcessing;
     expect(sources, hasLength(1));
     expect(sources[0], same(libA));
     return pumpEventQueue().then((_) {
@@ -487,64 +140,57 @@
     });
   }
 
-  void fail_computeErrors_dart_none() {
-    Source source = _addSource("/lib.dart", "library lib;");
-    List<AnalysisError> errors = _context.computeErrors(source);
+  void test_computeErrors_dart_none() {
+    Source source = addSource("/lib.dart", "library lib;");
+    List<AnalysisError> errors = context.computeErrors(source);
     expect(errors, hasLength(0));
   }
 
-  void fail_computeErrors_dart_part() {
+  void test_computeErrors_dart_part() {
     Source librarySource =
-        _addSource("/lib.dart", "library lib; part 'part.dart';");
-    Source partSource = _addSource("/part.dart", "part of 'lib';");
-    _context.parseCompilationUnit(librarySource);
-    List<AnalysisError> errors = _context.computeErrors(partSource);
+        addSource("/lib.dart", "library lib; part 'part.dart';");
+    Source partSource = addSource("/part.dart", "part of 'lib';");
+    context.parseCompilationUnit(librarySource);
+    List<AnalysisError> errors = context.computeErrors(partSource);
     expect(errors, isNotNull);
     expect(errors.length > 0, isTrue);
   }
 
-  void fail_computeErrors_dart_some() {
-    Source source = _addSource("/lib.dart", "library 'lib';");
-    List<AnalysisError> errors = _context.computeErrors(source);
+  void test_computeErrors_dart_some() {
+    Source source = addSource("/lib.dart", "library 'lib';");
+    List<AnalysisError> errors = context.computeErrors(source);
     expect(errors, isNotNull);
     expect(errors.length > 0, isTrue);
   }
 
   void fail_computeErrors_html_none() {
-    Source source = _addSource("/test.html", "<html></html>");
-    List<AnalysisError> errors = _context.computeErrors(source);
+    Source source = addSource("/test.html", "<html></html>");
+    List<AnalysisError> errors = context.computeErrors(source);
     expect(errors, hasLength(0));
   }
 
   void fail_computeHtmlElement_valid() {
-    Source source = _addSource("/test.html", "<html></html>");
-    HtmlElement element = _context.computeHtmlElement(source);
+    Source source = addSource("/test.html", "<html></html>");
+    HtmlElement element = context.computeHtmlElement(source);
     expect(element, isNotNull);
-    expect(_context.computeHtmlElement(source), same(element));
+    expect(context.computeHtmlElement(source), same(element));
   }
 
-  void fail_computeImportedLibraries_none() {
-    Source source = _addSource("/test.dart", "library test;");
-    expect(_context.computeImportedLibraries(source), hasLength(0));
+  void test_computeImportedLibraries_none() {
+    Source source = addSource("/test.dart", "library test;");
+    expect(context.computeImportedLibraries(source), hasLength(0));
   }
 
-  void fail_computeImportedLibraries_some() {
-    //    addSource("/lib1.dart", "library lib1;");
-    //    addSource("/lib2.dart", "library lib2;");
-    Source source = _addSource(
+  void test_computeImportedLibraries_some() {
+    Source source = addSource(
         "/test.dart", "library test; import 'lib1.dart'; import 'lib2.dart';");
-    expect(_context.computeImportedLibraries(source), hasLength(2));
-  }
-
-  void fail_computeKindOf_html() {
-    Source source = _addSource("/test.html", "");
-    expect(_context.computeKindOf(source), same(SourceKind.HTML));
+    expect(context.computeImportedLibraries(source), hasLength(2));
   }
 
   void fail_computeResolvableCompilationUnit_dart_exception() {
     TestSource source = _addSourceWithException("/test.dart");
     try {
-      _context.computeResolvableCompilationUnit(source);
+      context.computeResolvableCompilationUnit(source);
       fail("Expected AnalysisException");
     } on AnalysisException {
       // Expected
@@ -552,9 +198,9 @@
   }
 
   void fail_computeResolvableCompilationUnit_html_exception() {
-    Source source = _addSource("/lib.html", "<html></html>");
+    Source source = addSource("/lib.html", "<html></html>");
     try {
-      _context.computeResolvableCompilationUnit(source);
+      context.computeResolvableCompilationUnit(source);
       fail("Expected AnalysisException");
     } on AnalysisException {
       // Expected
@@ -562,27 +208,24 @@
   }
 
   void fail_computeResolvableCompilationUnit_valid() {
-    Source source = _addSource("/lib.dart", "library lib;");
-    CompilationUnit parsedUnit = _context.parseCompilationUnit(source);
+    Source source = addSource("/lib.dart", "library lib;");
+    CompilationUnit parsedUnit = context.parseCompilationUnit(source);
     expect(parsedUnit, isNotNull);
     CompilationUnit resolvedUnit =
-        _context.computeResolvableCompilationUnit(source);
+        context.computeResolvableCompilationUnit(source);
     expect(resolvedUnit, isNotNull);
     expect(resolvedUnit, same(parsedUnit));
   }
 
-  Future fail_computeResolvedCompilationUnitAsync_dispose() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
+  Future test_computeResolvedCompilationUnitAsync_dispose() {
+    Source source = addSource("/lib.dart", "library lib;");
     // Complete all pending analysis tasks and flush the AST so that it won't
     // be available immediately.
     _performPendingAnalysisTasks();
-    CacheEntry entry = _context.getReadableSourceEntryOrNull(source);
-    entry.flushAstStructures();
-    CancelableFuture<CompilationUnit> future =
-        _context.computeResolvedCompilationUnitAsync(source, source);
+    _flushAst(source);
     bool completed = false;
+    CancelableFuture<CompilationUnit> future =
+        context.computeResolvedCompilationUnitAsync(source, source);
     future.then((CompilationUnit unit) {
       fail('Future should have completed with error');
     }, onError: (error) {
@@ -590,29 +233,25 @@
       completed = true;
     });
     expect(completed, isFalse);
-    expect(_context.pendingFutureSources_forTesting, isNotEmpty);
+    expect(context.pendingFutureSources_forTesting, isNotEmpty);
     // Disposing of the context should cause all pending futures to complete
     // with AnalysisNotScheduled, so that no clients are left hanging.
-    _context.dispose();
-    expect(_context.pendingFutureSources_forTesting, isEmpty);
+    context.dispose();
+    expect(context.pendingFutureSources_forTesting, isEmpty);
     return pumpEventQueue().then((_) {
       expect(completed, isTrue);
-      expect(_context.pendingFutureSources_forTesting, isEmpty);
+      expect(context.pendingFutureSources_forTesting, isEmpty);
     });
   }
 
   Future fail_computeResolvedCompilationUnitAsync_unrelatedLibrary() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source librarySource = _addSource("/lib.dart", "library lib;");
-    Source partSource = _addSource("/part.dart", "part of foo;");
+    Source librarySource = addSource("/lib.dart", "library lib;");
+    Source partSource = addSource("/part.dart", "part of foo;");
     bool completed = false;
-    _context
+    context
         .computeResolvedCompilationUnitAsync(partSource, librarySource)
         .then((_) {
-      // TODO(brianwilkerson) Uncomment the line below (and figure out why
-      // invoking 'fail' directly causes a failing test to fail.
-      //fail('Expected resolution to fail');
+      fail('Expected resolution to fail');
     }, onError: (e) {
       expect(e, new isInstanceOf<AnalysisNotScheduledError>());
       completed = true;
@@ -629,199 +268,170 @@
     fail("Implement this");
   }
 
-  void fail_getElement_constructor_named() {
-    Source source = _addSource("/lib.dart", r'''
+  void test_getElement_constructor_named() {
+    Source source = addSource("/lib.dart", r'''
 class A {
   A.named() {}
 }''');
     _analyzeAll_assertFinished();
-    LibraryElement library = _context.computeLibraryElement(source);
+    LibraryElement library = context.computeLibraryElement(source);
     ClassElement classA = _findClass(library.definingCompilationUnit, "A");
     ConstructorElement constructor = classA.constructors[0];
     ElementLocation location = constructor.location;
-    Element element = _context.getElement(location);
+    Element element = context.getElement(location);
     expect(element, same(constructor));
   }
 
-  void fail_getElement_constructor_unnamed() {
-    Source source = _addSource("/lib.dart", r'''
+  void test_getElement_constructor_unnamed() {
+    Source source = addSource("/lib.dart", r'''
 class A {
   A() {}
 }''');
     _analyzeAll_assertFinished();
-    LibraryElement library = _context.computeLibraryElement(source);
+    LibraryElement library = context.computeLibraryElement(source);
     ClassElement classA = _findClass(library.definingCompilationUnit, "A");
     ConstructorElement constructor = classA.constructors[0];
     ElementLocation location = constructor.location;
-    Element element = _context.getElement(location);
+    Element element = context.getElement(location);
     expect(element, same(constructor));
   }
 
-  void fail_getElement_enum() {
-    Source source = _addSource('/test.dart', 'enum MyEnum {A, B, C}');
+  void test_getElement_enum() {
+    Source source = addSource('/test.dart', 'enum MyEnum {A, B, C}');
     _analyzeAll_assertFinished();
-    LibraryElement library = _context.computeLibraryElement(source);
+    LibraryElement library = context.computeLibraryElement(source);
     ClassElement myEnum = library.definingCompilationUnit.getEnum('MyEnum');
     ElementLocation location = myEnum.location;
-    Element element = _context.getElement(location);
+    Element element = context.getElement(location);
     expect(element, same(myEnum));
   }
 
-  void fail_getErrors_dart_none() {
-    Source source = _addSource("/lib.dart", "library lib;");
-    var errorInfo = _context.getErrors(source);
+  void test_getErrors_dart_none() {
+    Source source = addSource("/lib.dart", "library lib;");
+    var errorInfo = context.getErrors(source);
     expect(errorInfo, isNotNull);
     List<AnalysisError> errors = errorInfo.errors;
     expect(errors, hasLength(0));
-    _context.computeErrors(source);
+    context.computeErrors(source);
     errors = errorInfo.errors;
     expect(errors, hasLength(0));
   }
 
-  void fail_getErrors_dart_some() {
-    Source source = _addSource("/lib.dart", "library 'lib';");
-    var errorInfo = _context.getErrors(source);
+  void test_getErrors_dart_some() {
+    Source source = addSource("/lib.dart", "library 'lib';");
+    var errorInfo = context.getErrors(source);
     expect(errorInfo, isNotNull);
     List<AnalysisError> errors = errorInfo.errors;
     expect(errors, hasLength(0));
-    _context.computeErrors(source);
-    errors = errorInfo.errors;
+    errors = context.computeErrors(source);
     expect(errors, hasLength(1));
   }
 
-  void fail_getErrors_html_none() {
-    Source source = _addSource("/test.html", "<html></html>");
-    AnalysisErrorInfo errorInfo = _context.getErrors(source);
+  void test_getErrors_html_none() {
+    Source source = addSource("/test.html", "<html></html>");
+    AnalysisErrorInfo errorInfo = context.getErrors(source);
     expect(errorInfo, isNotNull);
     List<AnalysisError> errors = errorInfo.errors;
     expect(errors, hasLength(0));
-    _context.computeErrors(source);
+    context.computeErrors(source);
     errors = errorInfo.errors;
     expect(errors, hasLength(0));
   }
 
   void fail_getErrors_html_some() {
-    Source source = _addSource("/test.html", r'''
+    Source source = addSource("/test.html", r'''
 <html><head>
 <script type='application/dart' src='test.dart'/>
 </head></html>''');
-    AnalysisErrorInfo errorInfo = _context.getErrors(source);
+    AnalysisErrorInfo errorInfo = context.getErrors(source);
     expect(errorInfo, isNotNull);
     List<AnalysisError> errors = errorInfo.errors;
     expect(errors, hasLength(0));
-    _context.computeErrors(source);
+    context.computeErrors(source);
     errors = errorInfo.errors;
     expect(errors, hasLength(1));
   }
 
   void fail_getHtmlElement_html() {
-    Source source = _addSource("/test.html", "<html></html>");
-    HtmlElement element = _context.getHtmlElement(source);
+    Source source = addSource("/test.html", "<html></html>");
+    HtmlElement element = context.getHtmlElement(source);
     expect(element, isNull);
-    _context.computeHtmlElement(source);
-    element = _context.getHtmlElement(source);
+    context.computeHtmlElement(source);
+    element = context.getHtmlElement(source);
     expect(element, isNotNull);
   }
 
   void fail_getHtmlFilesReferencing_library() {
-    Source htmlSource = _addSource("/test.html", r'''
+    Source htmlSource = addSource("/test.html", r'''
 <html><head>
 <script type='application/dart' src='test.dart'/>
 <script type='application/dart' src='test.js'/>
 </head></html>''');
-    Source librarySource = _addSource("/test.dart", "library lib;");
-    List<Source> result = _context.getHtmlFilesReferencing(librarySource);
+    Source librarySource = addSource("/test.dart", "library lib;");
+    List<Source> result = context.getHtmlFilesReferencing(librarySource);
     expect(result, hasLength(0));
-    _context.parseHtmlUnit(htmlSource);
-    result = _context.getHtmlFilesReferencing(librarySource);
+    context.parseHtmlUnit(htmlSource);
+    result = context.getHtmlFilesReferencing(librarySource);
     expect(result, hasLength(1));
     expect(result[0], htmlSource);
   }
 
   void fail_getHtmlFilesReferencing_part() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source htmlSource = _addSource("/test.html", r'''
+    Source htmlSource = addSource("/test.html", r'''
 <html><head>
 <script type='application/dart' src='test.dart'/>
 <script type='application/dart' src='test.js'/>
 </head></html>''');
     Source librarySource =
-        _addSource("/test.dart", "library lib; part 'part.dart';");
-    Source partSource = _addSource("/part.dart", "part of lib;");
-    _context.computeLibraryElement(librarySource);
-    List<Source> result = _context.getHtmlFilesReferencing(partSource);
+        addSource("/test.dart", "library lib; part 'part.dart';");
+    Source partSource = addSource("/part.dart", "part of lib;");
+    context.computeLibraryElement(librarySource);
+    List<Source> result = context.getHtmlFilesReferencing(partSource);
     expect(result, hasLength(0));
-    _context.parseHtmlUnit(htmlSource);
-    result = _context.getHtmlFilesReferencing(partSource);
+    context.parseHtmlUnit(htmlSource);
+    result = context.getHtmlFilesReferencing(partSource);
     expect(result, hasLength(1));
     expect(result[0], htmlSource);
   }
 
   void fail_getHtmlSources() {
-    List<Source> sources = _context.htmlSources;
+    List<Source> sources = context.htmlSources;
     expect(sources, hasLength(0));
-    Source source = _addSource("/test.html", "");
-    _context.computeKindOf(source);
-    sources = _context.htmlSources;
+    Source source = addSource("/test.html", "");
+    context.computeKindOf(source);
+    sources = context.htmlSources;
     expect(sources, hasLength(1));
     expect(sources[0], source);
   }
 
-  void fail_getKindOf_html() {
-    Source source = _addSource("/test.html", "");
-    expect(_context.getKindOf(source), same(SourceKind.HTML));
-  }
-
-  void fail_getLibrariesContaining() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source librarySource = _addSource("/lib.dart", r'''
-library lib;
-part 'part.dart';''');
-    Source partSource = _addSource("/part.dart", "part of lib;");
-    _context.computeLibraryElement(librarySource);
-    List<Source> result = _context.getLibrariesContaining(librarySource);
-    expect(result, hasLength(1));
-    expect(result[0], librarySource);
-    result = _context.getLibrariesContaining(partSource);
-    expect(result, hasLength(1));
-    expect(result[0], librarySource);
-  }
-
   void fail_getLibrariesReferencedFromHtml() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source htmlSource = _addSource("/test.html", r'''
+    Source htmlSource = addSource("/test.html", r'''
 <html><head>
 <script type='application/dart' src='test.dart'/>
 <script type='application/dart' src='test.js'/>
 </head></html>''');
-    Source librarySource = _addSource("/test.dart", "library lib;");
-    _context.computeLibraryElement(librarySource);
-    _context.parseHtmlUnit(htmlSource);
-    List<Source> result = _context.getLibrariesReferencedFromHtml(htmlSource);
+    Source librarySource = addSource("/test.dart", "library lib;");
+    context.computeLibraryElement(librarySource);
+    context.parseHtmlUnit(htmlSource);
+    List<Source> result = context.getLibrariesReferencedFromHtml(htmlSource);
     expect(result, hasLength(1));
     expect(result[0], librarySource);
   }
 
-  void fail_getResolvedCompilationUnit_library() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library libb;");
-    LibraryElement library = _context.computeLibraryElement(source);
-    expect(_context.getResolvedCompilationUnit(source, library), isNotNull);
-    _context.setContents(source, "library lib;");
-    expect(_context.getResolvedCompilationUnit(source, library), isNull);
+  void test_getResolvedCompilationUnit_library() {
+    Source source = addSource("/lib.dart", "library libb;");
+    LibraryElement library = context.computeLibraryElement(source);
+    context.computeErrors(source); // Force the resolved unit to be built.
+    expect(context.getResolvedCompilationUnit(source, library), isNotNull);
+    context.setContents(source, "library lib;");
+    expect(context.getResolvedCompilationUnit(source, library), isNull);
   }
 
   void fail_getResolvedHtmlUnit() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.html", "<html></html>");
-    expect(_context.getResolvedHtmlUnit(source), isNull);
-    _context.resolveHtmlUnit(source);
-    expect(_context.getResolvedHtmlUnit(source), isNotNull);
+    Source source = addSource("/test.html", "<html></html>");
+    expect(context.getResolvedHtmlUnit(source), isNull);
+    context.resolveHtmlUnit(source);
+    expect(context.getResolvedHtmlUnit(source), isNotNull);
   }
 
   void fail_mergeContext() {
@@ -829,16 +439,16 @@
   }
 
   void fail_parseHtmlUnit_noErrors() {
-    Source source = _addSource("/lib.html", "<html></html>");
-    ht.HtmlUnit unit = _context.parseHtmlUnit(source);
+    Source source = addSource("/lib.html", "<html></html>");
+    ht.HtmlUnit unit = context.parseHtmlUnit(source);
     expect(unit, isNotNull);
   }
 
   void fail_parseHtmlUnit_resolveDirectives() {
-    Source libSource = _addSource("/lib.dart", r'''
+    Source libSource = addSource("/lib.dart", r'''
 library lib;
 class ClassA {}''');
-    Source source = _addSource("/lib.html", r'''
+    Source source = addSource("/lib.html", r'''
 <html>
 <head>
   <script type='application/dart'>
@@ -849,7 +459,7 @@
 <body>
 </body>
 </html>''');
-    ht.HtmlUnit unit = _context.parseHtmlUnit(source);
+    ht.HtmlUnit unit = context.parseHtmlUnit(source);
     expect(unit, isNotNull);
     // import directive should be resolved
     ht.XmlTagNode htmlNode = unit.tagNodes[0];
@@ -861,191 +471,178 @@
     expect(importNode.source, libSource);
   }
 
-  void fail_performAnalysisTask_addPart() {
-    Source libSource = _addSource("/lib.dart", r'''
+  void test_performAnalysisTask_addPart() {
+    Source libSource = addSource("/lib.dart", r'''
 library lib;
 part 'part.dart';''');
     // run all tasks without part
     _analyzeAll_assertFinished();
     // add part and run all tasks
-    Source partSource = _addSource("/part.dart", r'''
+    Source partSource = addSource("/part.dart", r'''
 part of lib;
 ''');
     _analyzeAll_assertFinished();
     // "libSource" should be here
-    List<Source> librariesWithPart =
-        _context.getLibrariesContaining(partSource);
+    List<Source> librariesWithPart = context.getLibrariesContaining(partSource);
     expect(librariesWithPart, unorderedEquals([libSource]));
   }
 
-  void fail_performAnalysisTask_changeLibraryContents() {
+  void test_performAnalysisTask_changeLibraryContents() {
     Source libSource =
-        _addSource("/test.dart", "library lib; part 'test-part.dart';");
-    Source partSource = _addSource("/test-part.dart", "part of lib;");
+        addSource("/test.dart", "library lib; part 'test-part.dart';");
+    Source partSource = addSource("/test-part.dart", "part of lib;");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 1");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 1");
     // update and analyze #1
-    _context.setContents(libSource, "library lib;");
-    expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
+    context.setContents(libSource, "library lib;");
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull,
         reason: "library changed 2");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part changed 2");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 2");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part resolved 2");
     // update and analyze #2
-    _context.setContents(libSource, "library lib; part 'test-part.dart';");
-    expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
+    context.setContents(libSource, "library lib; part 'test-part.dart';");
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull,
         reason: "library changed 3");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part changed 3");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 2");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 3");
   }
 
-  void fail_performAnalysisTask_changeLibraryThenPartContents() {
+  void test_performAnalysisTask_changeLibraryThenPartContents() {
     Source libSource =
-        _addSource("/test.dart", "library lib; part 'test-part.dart';");
-    Source partSource = _addSource("/test-part.dart", "part of lib;");
+        addSource("/test.dart", "library lib; part 'test-part.dart';");
+    Source partSource = addSource("/test-part.dart", "part of lib;");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 1");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 1");
     // update and analyze #1
-    _context.setContents(libSource, "library lib;");
-    expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
+    context.setContents(libSource, "library lib;");
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull,
         reason: "library changed 2");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part changed 2");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 2");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part resolved 2");
     // update and analyze #2
-    _context.setContents(partSource, "part of lib; // 1");
+    context.setContents(partSource, "part of lib; // 1");
     // Assert that changing the part's content does not effect the library
     // now that it is no longer part of that library
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library changed 3");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part changed 3");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 3");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part resolved 3");
   }
 
-  void fail_performAnalysisTask_changePartContents_makeItAPart() {
-    Source libSource = _addSource("/lib.dart", r'''
+  void test_performAnalysisTask_changePartContents_makeItAPart() {
+    Source libSource = addSource("/lib.dart", r'''
 library lib;
 part 'part.dart';
 void f(x) {}''');
-    Source partSource = _addSource("/part.dart", "void g() { f(null); }");
+    Source partSource = addSource("/part.dart", "void g() { f(null); }");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 1");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 1");
     // update and analyze
-    _context.setContents(partSource, r'''
+    context.setContents(partSource, r'''
 part of lib;
 void g() { f(null); }''');
-    expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull,
         reason: "library changed 2");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part changed 2");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 2");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 2");
-    expect(_context.getErrors(libSource).errors, hasLength(0));
-    expect(_context.getErrors(partSource).errors, hasLength(0));
+    expect(context.getErrors(libSource).errors, hasLength(0));
+    expect(context.getErrors(partSource).errors, hasLength(0));
   }
 
   /**
    * https://code.google.com/p/dart/issues/detail?id=12424
    */
-  void fail_performAnalysisTask_changePartContents_makeItNotPart() {
-    Source libSource = _addSource("/lib.dart", r'''
+  void test_performAnalysisTask_changePartContents_makeItNotPart() {
+    Source libSource = addSource("/lib.dart", r'''
 library lib;
 part 'part.dart';
 void f(x) {}''');
-    Source partSource = _addSource("/part.dart", r'''
+    Source partSource = addSource("/part.dart", r'''
 part of lib;
 void g() { f(null); }''');
     _analyzeAll_assertFinished();
-    expect(_context.getErrors(libSource).errors, hasLength(0));
-    expect(_context.getErrors(partSource).errors, hasLength(0));
+    expect(context.getErrors(libSource).errors, hasLength(0));
+    expect(context.getErrors(partSource).errors, hasLength(0));
     // Remove 'part' directive, which should make "f(null)" an error.
-    _context.setContents(partSource, r'''
+    context.setContents(partSource, r'''
 //part of lib;
 void g() { f(null); }''');
     _analyzeAll_assertFinished();
-    expect(_context.getErrors(libSource).errors.length != 0, isTrue);
+    expect(context.getErrors(libSource).errors.length != 0, isTrue);
   }
 
-  void fail_performAnalysisTask_changePartContents_noSemanticChanges() {
+  void test_performAnalysisTask_changePartContents_noSemanticChanges() {
     Source libSource =
-        _addSource("/test.dart", "library lib; part 'test-part.dart';");
-    Source partSource = _addSource("/test-part.dart", "part of lib;");
+        addSource("/test.dart", "library lib; part 'test-part.dart';");
+    Source partSource = addSource("/test-part.dart", "part of lib;");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 1");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 1");
     // update and analyze #1
-    _context.setContents(partSource, "part of lib; // 1");
-    expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
+    context.setContents(partSource, "part of lib; // 1");
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull,
         reason: "library changed 2");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part changed 2");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 2");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 2");
     // update and analyze #2
-    _context.setContents(partSource, "part of lib; // 12");
-    expect(_context.getResolvedCompilationUnit2(libSource, libSource), isNull,
+    context.setContents(partSource, "part of lib; // 12");
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNull,
         reason: "library changed 3");
-    expect(_context.getResolvedCompilationUnit2(partSource, libSource), isNull,
+    expect(context.getResolvedCompilationUnit2(partSource, libSource), isNull,
         reason: "part changed 3");
     _analyzeAll_assertFinished();
-    expect(
-        _context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
+    expect(context.getResolvedCompilationUnit2(libSource, libSource), isNotNull,
         reason: "library resolved 3");
     expect(
-        _context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
+        context.getResolvedCompilationUnit2(partSource, libSource), isNotNull,
         reason: "part resolved 3");
   }
 
@@ -1055,11 +652,11 @@
     {
       ChangeSet changeSet = new ChangeSet();
       changeSet.addedSource(source);
-      _context.applyChanges(changeSet);
+      context.applyChanges(changeSet);
     }
     // prepare errors
     _analyzeAll_assertFinished();
-    List<AnalysisError> errors = _context.getErrors(source).errors;
+    List<AnalysisError> errors = context.getErrors(source).errors;
     // validate errors
     expect(errors, hasLength(1));
     AnalysisError error = errors[0];
@@ -1073,11 +670,11 @@
     {
       ChangeSet changeSet = new ChangeSet();
       changeSet.addedSource(source);
-      _context.applyChanges(changeSet);
+      context.applyChanges(changeSet);
     }
     // prepare errors
     _analyzeAll_assertFinished();
-    List<AnalysisError> errors = _context.getErrors(source).errors;
+    List<AnalysisError> errors = context.getErrors(source).errors;
     // validate errors
     expect(errors, hasLength(1));
     AnalysisError error = errors[0];
@@ -1087,44 +684,44 @@
 
   void fail_performAnalysisTask_importedLibraryAdd() {
     Source libASource =
-        _addSource("/libA.dart", "library libA; import 'libB.dart';");
+        addSource("/libA.dart", "library libA; import 'libB.dart';");
     _analyzeAll_assertFinished();
     expect(
-        _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
+        context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
         reason: "libA resolved 1");
-    expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+    expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)),
         isTrue, reason: "libA has an error");
     // add libB.dart and analyze
-    Source libBSource = _addSource("/libB.dart", "library libB;");
+    Source libBSource = addSource("/libB.dart", "library libB;");
     _analyzeAll_assertFinished();
     expect(
-        _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
+        context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
         reason: "libA resolved 2");
     expect(
-        _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
+        context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
         reason: "libB resolved 2");
-    expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+    expect(!_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)),
         isTrue, reason: "libA doesn't have errors");
   }
 
   void fail_performAnalysisTask_importedLibraryAdd_html() {
-    Source htmlSource = _addSource("/page.html", r'''
+    Source htmlSource = addSource("/page.html", r'''
 <html><body><script type="application/dart">
   import '/libB.dart';
   main() {print('hello dart');}
 </script></body></html>''');
     _analyzeAll_assertFinished();
-    expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
+    expect(context.getResolvedHtmlUnit(htmlSource), isNotNull,
         reason: "htmlUnit resolved 1");
-    expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)),
+    expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(htmlSource)),
         isTrue, reason: "htmlSource has an error");
     // add libB.dart and analyze
-    Source libBSource = _addSource("/libB.dart", "library libB;");
+    Source libBSource = addSource("/libB.dart", "library libB;");
     _analyzeAll_assertFinished();
-    expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
+    expect(context.getResolvedHtmlUnit(htmlSource), isNotNull,
         reason: "htmlUnit resolved 1");
     expect(
-        _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
+        context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
         reason: "libB resolved 2");
     // TODO (danrubel) commented out to fix red bots
 //    AnalysisErrorInfo errors = _context.getErrors(htmlSource);
@@ -1136,56 +733,56 @@
 
   void fail_performAnalysisTask_importedLibraryDelete() {
     Source libASource =
-        _addSource("/libA.dart", "library libA; import 'libB.dart';");
-    Source libBSource = _addSource("/libB.dart", "library libB;");
+        addSource("/libA.dart", "library libA; import 'libB.dart';");
+    Source libBSource = addSource("/libB.dart", "library libB;");
     _analyzeAll_assertFinished();
     expect(
-        _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
+        context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
         reason: "libA resolved 1");
     expect(
-        _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
+        context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
         reason: "libB resolved 1");
-    expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+    expect(!_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)),
         isTrue, reason: "libA doesn't have errors");
     // remove libB.dart content and analyze
-    _context.setContents(libBSource, null);
+    context.setContents(libBSource, null);
     _analyzeAll_assertFinished();
     expect(
-        _context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
+        context.getResolvedCompilationUnit2(libASource, libASource), isNotNull,
         reason: "libA resolved 2");
-    expect(_hasAnalysisErrorWithErrorSeverity(_context.getErrors(libASource)),
+    expect(_hasAnalysisErrorWithErrorSeverity(context.getErrors(libASource)),
         isTrue, reason: "libA has an error");
   }
 
   void fail_performAnalysisTask_importedLibraryDelete_html() {
     // NOTE: This was failing before converting to the new task model.
-    Source htmlSource = _addSource("/page.html", r'''
+    Source htmlSource = addSource("/page.html", r'''
 <html><body><script type="application/dart">
   import 'libB.dart';
   main() {print('hello dart');}
 </script></body></html>''');
-    Source libBSource = _addSource("/libB.dart", "library libB;");
+    Source libBSource = addSource("/libB.dart", "library libB;");
     _analyzeAll_assertFinished();
-    expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
+    expect(context.getResolvedHtmlUnit(htmlSource), isNotNull,
         reason: "htmlUnit resolved 1");
     expect(
-        _context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
+        context.getResolvedCompilationUnit2(libBSource, libBSource), isNotNull,
         reason: "libB resolved 1");
-    expect(!_hasAnalysisErrorWithErrorSeverity(_context.getErrors(htmlSource)),
+    expect(!_hasAnalysisErrorWithErrorSeverity(context.getErrors(htmlSource)),
         isTrue, reason: "htmlSource doesn't have errors");
     // remove libB.dart content and analyze
-    _context.setContents(libBSource, null);
+    context.setContents(libBSource, null);
     _analyzeAll_assertFinished();
-    expect(_context.getResolvedHtmlUnit(htmlSource), isNotNull,
+    expect(context.getResolvedHtmlUnit(htmlSource), isNotNull,
         reason: "htmlUnit resolved 1");
-    AnalysisErrorInfo errors = _context.getErrors(htmlSource);
+    AnalysisErrorInfo errors = context.getErrors(htmlSource);
     expect(_hasAnalysisErrorWithErrorSeverity(errors), isTrue,
         reason: "htmlSource has an error");
   }
 
   void fail_performAnalysisTask_IOException() {
     TestSource source = _addSourceWithException2("/test.dart", "library test;");
-    int oldTimestamp = _context.getModificationStamp(source);
+    int oldTimestamp = context.getModificationStamp(source);
     source.generateExceptionOnRead = false;
     _analyzeAll_assertFinished();
     expect(source.readCount, 1);
@@ -1194,16 +791,16 @@
       _changeSource(source, "");
       // Ensure that the timestamp differs,
       // so that analysis engine notices the change
-    } while (oldTimestamp == _context.getModificationStamp(source));
+    } while (oldTimestamp == context.getModificationStamp(source));
     _analyzeAll_assertFinished();
     expect(source.readCount, 2);
   }
 
   void fail_performAnalysisTask_missingPart() {
     Source source =
-        _addSource("/test.dart", "library lib; part 'no-such-file.dart';");
+        addSource("/test.dart", "library lib; part 'no-such-file.dart';");
     _analyzeAll_assertFinished();
-    expect(_context.getLibraryElement(source), isNotNull,
+    expect(context.getLibraryElement(source), isNotNull,
         reason: "performAnalysisTask failed to compute an element model");
   }
 
@@ -1212,12 +809,11 @@
   }
 
   void fail_resolveCompilationUnit_import_relative() {
-    _context = contextWithCore();
     Source sourceA =
-        _addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}");
-    _addSource("/libB.dart", "library libB; class B{}");
+        addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}");
+    addSource("/libB.dart", "library libB; class B{}");
     CompilationUnit compilationUnit =
-        _context.resolveCompilationUnit2(sourceA, sourceA);
+        context.resolveCompilationUnit2(sourceA, sourceA);
     expect(compilationUnit, isNotNull);
     LibraryElement library = compilationUnit.element.library;
     List<LibraryElement> importedLibraries = library.importedLibraries;
@@ -1227,12 +823,11 @@
   }
 
   void fail_resolveCompilationUnit_import_relative_cyclic() {
-    _context = contextWithCore();
     Source sourceA =
-        _addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}");
-    _addSource("/libB.dart", "library libB; import 'libA.dart'; class B{}");
+        addSource("/libA.dart", "library libA; import 'libB.dart'; class A{}");
+    addSource("/libB.dart", "library libB; import 'libA.dart'; class B{}");
     CompilationUnit compilationUnit =
-        _context.resolveCompilationUnit2(sourceA, sourceA);
+        context.resolveCompilationUnit2(sourceA, sourceA);
     expect(compilationUnit, isNotNull);
     LibraryElement library = compilationUnit.element.library;
     List<LibraryElement> importedLibraries = library.importedLibraries;
@@ -1242,70 +837,68 @@
   }
 
   void fail_resolveHtmlUnit() {
-    Source source = _addSource("/lib.html", "<html></html>");
-    ht.HtmlUnit unit = _context.resolveHtmlUnit(source);
+    Source source = addSource("/lib.html", "<html></html>");
+    ht.HtmlUnit unit = context.resolveHtmlUnit(source);
     expect(unit, isNotNull);
   }
 
   void fail_setAnalysisOptions_reduceAnalysisPriorityOrder() {
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
+        new AnalysisOptionsImpl.from(context.analysisOptions);
     List<Source> sources = new List<Source>();
     for (int index = 0; index < options.cacheSize; index++) {
-      sources.add(_addSource("/lib.dart$index", ""));
+      sources.add(addSource("/lib.dart$index", ""));
     }
-    _context.analysisPriorityOrder = sources;
-    int oldPriorityOrderSize = _getPriorityOrder(_context).length;
+    context.analysisPriorityOrder = sources;
+    int oldPriorityOrderSize = _getPriorityOrder(context).length;
     options.cacheSize = options.cacheSize - 10;
-    _context.analysisOptions = options;
-    expect(oldPriorityOrderSize > _getPriorityOrder(_context).length, isTrue);
+    context.analysisOptions = options;
+    expect(oldPriorityOrderSize > _getPriorityOrder(context).length, isTrue);
   }
 
   void fail_setAnalysisPriorityOrder_lessThanCacheSize() {
-    AnalysisOptions options = _context.analysisOptions;
+    AnalysisOptions options = context.analysisOptions;
     List<Source> sources = new List<Source>();
     for (int index = 0; index < options.cacheSize; index++) {
-      sources.add(_addSource("/lib.dart$index", ""));
+      sources.add(addSource("/lib.dart$index", ""));
     }
-    _context.analysisPriorityOrder = sources;
-    expect(options.cacheSize > _getPriorityOrder(_context).length, isTrue);
+    context.analysisPriorityOrder = sources;
+    expect(options.cacheSize > _getPriorityOrder(context).length, isTrue);
   }
 
   Future fail_setChangedContents_libraryWithPart() {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     options.incremental = true;
-    _context = new AnalysisContextForTests();
-    _context.analysisOptions = options;
+    context.analysisOptions = options;
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    _sourceFactory = _context.sourceFactory;
+    context.onSourcesChanged.listen(listener.onData);
     String oldCode = r'''
 library lib;
 part 'part.dart';
 int a = 0;''';
-    Source librarySource = _addSource("/lib.dart", oldCode);
+    Source librarySource = addSource("/lib.dart", oldCode);
     String partContents = r'''
 part of lib;
 int b = a;''';
-    Source partSource = _addSource("/part.dart", partContents);
-    LibraryElement element = _context.computeLibraryElement(librarySource);
+    Source partSource = addSource("/part.dart", partContents);
+    LibraryElement element = context.computeLibraryElement(librarySource);
     CompilationUnit unit =
-        _context.getResolvedCompilationUnit(librarySource, element);
+        context.getResolvedCompilationUnit(librarySource, element);
     expect(unit, isNotNull);
     int offset = oldCode.indexOf("int a") + 4;
     String newCode = r'''
 library lib;
 part 'part.dart';
 int ya = 0;''';
-    expect(_getIncrementalAnalysisCache(_context), isNull);
-    _context.setChangedContents(librarySource, newCode, offset, 0, 1);
-    expect(_context.getContents(librarySource).data, newCode);
+    expect(_getIncrementalAnalysisCache(context), isNull);
+    context.setChangedContents(librarySource, newCode, offset, 0, 1);
+    expect(context.getContents(librarySource).data, newCode);
     IncrementalAnalysisCache incrementalCache =
-        _getIncrementalAnalysisCache(_context);
+        _getIncrementalAnalysisCache(context);
     expect(incrementalCache.librarySource, librarySource);
     expect(incrementalCache.resolvedUnit, same(unit));
-    expect(_context.getResolvedCompilationUnit2(partSource, librarySource),
-        isNull);
+    expect(
+        context.getResolvedCompilationUnit2(partSource, librarySource), isNull);
     expect(incrementalCache.newContents, newCode);
     return pumpEventQueue().then((_) {
       listener.assertEvent(wereSourcesAdded: true);
@@ -1317,30 +910,28 @@
     });
   }
 
-  void fail_setContents_unchanged_consistentModificationTime() {
+  void test_setContents_unchanged_consistentModificationTime() {
     String contents = "// foo";
-    Source source = _addSource("/test.dart", contents);
+    Source source = addSource("/test.dart", contents);
     // do all, no tasks
     _analyzeAll_assertFinished();
     {
-      AnalysisResult result = _context.performAnalysisTask();
+      AnalysisResult result = context.performAnalysisTask();
       expect(result.changeNotices, isNull);
     }
     // set the same contents, still no tasks
-    _context.setContents(source, contents);
+    context.setContents(source, contents);
     {
-      AnalysisResult result = _context.performAnalysisTask();
+      AnalysisResult result = context.performAnalysisTask();
       expect(result.changeNotices, isNull);
     }
   }
 
   void fail_unreadableSource() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source test1 = _addSource("/test1.dart", r'''
+    Source test1 = addSource("/test1.dart", r'''
 import 'test2.dart';
 library test1;''');
-    Source test2 = _addSource("/test2.dart", r'''
+    Source test2 = addSource("/test2.dart", r'''
 import 'test1.dart';
 import 'test3.dart';
 library test2;''');
@@ -1348,48 +939,27 @@
     _analyzeAll_assertFinished();
     // test1 and test2 should have been successfully analyzed
     // despite the fact that test3 couldn't be read.
-    expect(_context.computeLibraryElement(test1), isNotNull);
-    expect(_context.computeLibraryElement(test2), isNotNull);
-    expect(_context.computeLibraryElement(test3), isNull);
-  }
-
-  @override
-  void setUp() {
-    EnginePlugin enginePlugin = AnalysisEngine.instance.enginePlugin;
-    if (enginePlugin.taskExtensionPoint == null) {
-      ExtensionManager manager = new ExtensionManager();
-      manager.processPlugins([enginePlugin]);
-    }
-
-    _context = new AnalysisContextImpl();
-    _sourceFactory = new SourceFactory([
-      new DartUriResolver(DirectoryBasedDartSdk.defaultSdk),
-      new FileUriResolver()
-    ]);
-    _context.sourceFactory = _sourceFactory;
-    AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
-    options.cacheSize = 256;
-    _context.analysisOptions = options;
+    expect(context.computeLibraryElement(test1), isNotNull);
+    expect(context.computeLibraryElement(test2), isNotNull);
+    expect(context.computeLibraryElement(test3), isNull);
   }
 
   @override
   void tearDown() {
-    _context = null;
-    _sourceFactory = null;
+    context = null;
+    sourceFactory = null;
     super.tearDown();
   }
 
   Future test_applyChanges_add() {
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+    context.onSourcesChanged.listen(listener.onData);
+    expect(context.sourcesNeedingProcessing, isEmpty);
+    Source source = newSource('/test.dart');
     ChangeSet changeSet = new ChangeSet();
     changeSet.addedSource(source);
-    _context.applyChanges(changeSet);
-    expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
+    context.applyChanges(changeSet);
+    expect(context.sourcesNeedingProcessing, contains(source));
     return pumpEventQueue().then((_) {
       listener.assertEvent(wereSourcesAdded: true);
       listener.assertNoMoreEvents();
@@ -1398,20 +968,18 @@
 
   Future test_applyChanges_change() {
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+    context.onSourcesChanged.listen(listener.onData);
+    expect(context.sourcesNeedingProcessing, isEmpty);
+    Source source = newSource('/test.dart');
     ChangeSet changeSet1 = new ChangeSet();
     changeSet1.addedSource(source);
-    _context.applyChanges(changeSet1);
-    expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
-    Source source2 =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart"));
+    context.applyChanges(changeSet1);
+    expect(context.sourcesNeedingProcessing, contains(source));
+    Source source2 = newSource('/test2.dart');
     ChangeSet changeSet2 = new ChangeSet();
     changeSet2.addedSource(source2);
     changeSet2.changedSource(source);
-    _context.applyChanges(changeSet2);
+    context.applyChanges(changeSet2);
     return pumpEventQueue().then((_) {
       listener.assertEvent(wereSourcesAdded: true);
       listener.assertEvent(wereSourcesAdded: true, changedSources: [source]);
@@ -1421,20 +989,18 @@
 
   Future test_applyChanges_change_content() {
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+    context.onSourcesChanged.listen(listener.onData);
+    expect(context.sourcesNeedingProcessing, isEmpty);
+    Source source = newSource('/test.dart');
     ChangeSet changeSet1 = new ChangeSet();
     changeSet1.addedSource(source);
-    _context.applyChanges(changeSet1);
-    expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
-    Source source2 =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart"));
+    context.applyChanges(changeSet1);
+    expect(context.sourcesNeedingProcessing, contains(source));
+    Source source2 = newSource('/test2.dart');
     ChangeSet changeSet2 = new ChangeSet();
     changeSet2.addedSource(source2);
     changeSet2.changedContent(source, 'library test;');
-    _context.applyChanges(changeSet2);
+    context.applyChanges(changeSet2);
     return pumpEventQueue().then((_) {
       listener.assertEvent(wereSourcesAdded: true);
       listener.assertEvent(wereSourcesAdded: true, changedSources: [source]);
@@ -1443,48 +1009,44 @@
   }
 
   void test_applyChanges_change_flush_element() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source librarySource = _addSource("/lib.dart", r'''
+    Source librarySource = addSource("/lib.dart", r'''
 library lib;
 int a = 0;''');
-    expect(_context.computeLibraryElement(librarySource), isNotNull);
-    _context.setContents(librarySource, r'''
+    expect(context.computeLibraryElement(librarySource), isNotNull);
+    context.setContents(librarySource, r'''
 library lib;
 int aa = 0;''');
-    expect(_context.getLibraryElement(librarySource), isNull);
+    expect(context.getLibraryElement(librarySource), isNull);
   }
 
   Future test_applyChanges_change_multiple() {
-    _context = contextWithCore();
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    _sourceFactory = _context.sourceFactory;
+    context.onSourcesChanged.listen(listener.onData);
     String libraryContents1 = r'''
 library lib;
 part 'part.dart';
 int a = 0;''';
-    Source librarySource = _addSource("/lib.dart", libraryContents1);
+    Source librarySource = addSource("/lib.dart", libraryContents1);
     String partContents1 = r'''
 part of lib;
 int b = a;''';
-    Source partSource = _addSource("/part.dart", partContents1);
-    _context.computeLibraryElement(librarySource);
+    Source partSource = addSource("/part.dart", partContents1);
+    context.computeLibraryElement(librarySource);
     String libraryContents2 = r'''
 library lib;
 part 'part.dart';
 int aa = 0;''';
-    _context.setContents(librarySource, libraryContents2);
+    context.setContents(librarySource, libraryContents2);
     String partContents2 = r'''
 part of lib;
 int b = aa;''';
-    _context.setContents(partSource, partContents2);
-    _context.computeLibraryElement(librarySource);
+    context.setContents(partSource, partContents2);
+    context.computeLibraryElement(librarySource);
     CompilationUnit libraryUnit =
-        _context.resolveCompilationUnit2(librarySource, librarySource);
+        context.resolveCompilationUnit2(librarySource, librarySource);
     expect(libraryUnit, isNotNull);
     CompilationUnit partUnit =
-        _context.resolveCompilationUnit2(partSource, librarySource);
+        context.resolveCompilationUnit2(partSource, librarySource);
     expect(partUnit, isNotNull);
     TopLevelVariableDeclaration declaration =
         libraryUnit.declarations[0] as TopLevelVariableDeclaration;
@@ -1508,20 +1070,18 @@
 
   Future test_applyChanges_change_range() {
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+    context.onSourcesChanged.listen(listener.onData);
+    expect(context.sourcesNeedingProcessing, isEmpty);
+    Source source = newSource('/test.dart');
     ChangeSet changeSet1 = new ChangeSet();
     changeSet1.addedSource(source);
-    _context.applyChanges(changeSet1);
-    expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
-    Source source2 =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart"));
+    context.applyChanges(changeSet1);
+    expect(context.sourcesNeedingProcessing, contains(source));
+    Source source2 = newSource('/test2.dart');
     ChangeSet changeSet2 = new ChangeSet();
     changeSet2.addedSource(source2);
     changeSet2.changedRange(source, 'library test;', 0, 0, 13);
-    _context.applyChanges(changeSet2);
+    context.applyChanges(changeSet2);
     return pumpEventQueue().then((_) {
       listener.assertEvent(wereSourcesAdded: true);
       listener.assertEvent(wereSourcesAdded: true, changedSources: [source]);
@@ -1530,136 +1090,128 @@
   }
 
   void test_computeDocumentationComment_block() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
     String comment = "/** Comment */";
-    Source source = _addSource("/test.dart", """
+    Source source = addSource("/test.dart", """
 $comment
 class A {}""");
-    LibraryElement libraryElement = _context.computeLibraryElement(source);
+    LibraryElement libraryElement = context.computeLibraryElement(source);
     expect(libraryElement, isNotNull);
     ClassElement classElement = libraryElement.definingCompilationUnit.types[0];
     expect(libraryElement, isNotNull);
-    expect(_context.computeDocumentationComment(classElement), comment);
+    expect(context.computeDocumentationComment(classElement), comment);
   }
 
   void test_computeDocumentationComment_none() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", "class A {}");
-    LibraryElement libraryElement = _context.computeLibraryElement(source);
+    Source source = addSource("/test.dart", "class A {}");
+    LibraryElement libraryElement = context.computeLibraryElement(source);
     expect(libraryElement, isNotNull);
     ClassElement classElement = libraryElement.definingCompilationUnit.types[0];
     expect(libraryElement, isNotNull);
-    expect(_context.computeDocumentationComment(classElement), isNull);
+    expect(context.computeDocumentationComment(classElement), isNull);
   }
 
   void test_computeDocumentationComment_null() {
-    expect(_context.computeDocumentationComment(null), isNull);
+    expect(context.computeDocumentationComment(null), isNull);
   }
 
   void test_computeDocumentationComment_singleLine_multiple_EOL_n() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
     String comment = "/// line 1\n/// line 2\n/// line 3\n";
-    Source source = _addSource("/test.dart", "${comment}class A {}");
-    LibraryElement libraryElement = _context.computeLibraryElement(source);
+    Source source = addSource("/test.dart", "${comment}class A {}");
+    LibraryElement libraryElement = context.computeLibraryElement(source);
     expect(libraryElement, isNotNull);
     ClassElement classElement = libraryElement.definingCompilationUnit.types[0];
     expect(libraryElement, isNotNull);
-    String actual = _context.computeDocumentationComment(classElement);
+    String actual = context.computeDocumentationComment(classElement);
     expect(actual, "/// line 1\n/// line 2\n/// line 3");
   }
 
   void test_computeDocumentationComment_singleLine_multiple_EOL_rn() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
     String comment = "/// line 1\r\n/// line 2\r\n/// line 3\r\n";
-    Source source = _addSource("/test.dart", "${comment}class A {}");
-    LibraryElement libraryElement = _context.computeLibraryElement(source);
+    Source source = addSource("/test.dart", "${comment}class A {}");
+    LibraryElement libraryElement = context.computeLibraryElement(source);
     expect(libraryElement, isNotNull);
     ClassElement classElement = libraryElement.definingCompilationUnit.types[0];
     expect(libraryElement, isNotNull);
-    String actual = _context.computeDocumentationComment(classElement);
+    String actual = context.computeDocumentationComment(classElement);
     expect(actual, "/// line 1\n/// line 2\n/// line 3");
   }
 
   void test_computeExportedLibraries_none() {
-    Source source = _addSource("/test.dart", "library test;");
-    expect(_context.computeExportedLibraries(source), hasLength(0));
+    Source source = addSource("/test.dart", "library test;");
+    expect(context.computeExportedLibraries(source), hasLength(0));
   }
 
   void test_computeExportedLibraries_some() {
     //    addSource("/lib1.dart", "library lib1;");
     //    addSource("/lib2.dart", "library lib2;");
-    Source source = _addSource(
+    Source source = addSource(
         "/test.dart", "library test; export 'lib1.dart'; export 'lib2.dart';");
-    expect(_context.computeExportedLibraries(source), hasLength(2));
+    expect(context.computeExportedLibraries(source), hasLength(2));
   }
 
   void test_computeHtmlElement_nonHtml() {
-    Source source = _addSource("/test.dart", "library test;");
-    expect(_context.computeHtmlElement(source), isNull);
+    Source source = addSource("/test.dart", "library test;");
+    expect(context.computeHtmlElement(source), isNull);
+  }
+
+  void test_computeKindOf_html() {
+    Source source = addSource("/test.html", "");
+    expect(context.computeKindOf(source), same(SourceKind.HTML));
   }
 
   void test_computeKindOf_library() {
-    Source source = _addSource("/test.dart", "library lib;");
-    expect(_context.computeKindOf(source), same(SourceKind.LIBRARY));
+    Source source = addSource("/test.dart", "library lib;");
+    expect(context.computeKindOf(source), same(SourceKind.LIBRARY));
   }
 
   void test_computeKindOf_libraryAndPart() {
-    Source source = _addSource("/test.dart", "library lib; part of lib;");
-    expect(_context.computeKindOf(source), same(SourceKind.LIBRARY));
+    Source source = addSource("/test.dart", "library lib; part of lib;");
+    expect(context.computeKindOf(source), same(SourceKind.LIBRARY));
   }
 
   void test_computeKindOf_part() {
-    Source source = _addSource("/test.dart", "part of lib;");
-    expect(_context.computeKindOf(source), same(SourceKind.PART));
+    Source source = addSource("/test.dart", "part of lib;");
+    expect(context.computeKindOf(source), same(SourceKind.PART));
   }
 
   void test_computeLibraryElement() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", "library lib;");
-    LibraryElement element = _context.computeLibraryElement(source);
+    Source source = addSource("/test.dart", "library lib;");
+    LibraryElement element = context.computeLibraryElement(source);
     expect(element, isNotNull);
   }
 
   void test_computeLineInfo_dart() {
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 library lib;
 
 main() {}''');
-    LineInfo info = _context.computeLineInfo(source);
+    LineInfo info = context.computeLineInfo(source);
     expect(info, isNotNull);
   }
 
   void test_computeLineInfo_html() {
-    Source source = _addSource("/test.html", r'''
+    Source source = addSource("/test.html", r'''
 <html>
   <body>
     <h1>A</h1>
   </body>
 </html>''');
-    LineInfo info = _context.computeLineInfo(source);
+    LineInfo info = context.computeLineInfo(source);
     expect(info, isNotNull);
   }
 
   Future test_computeResolvedCompilationUnitAsync_afterDispose() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
+    Source source = addSource("/lib.dart", "library lib;");
     // Complete all pending analysis tasks and flush the AST so that it won't
     // be available immediately.
     _performPendingAnalysisTasks();
-    CacheEntry entry = _context.getReadableSourceEntryOrNull(source);
-    entry.flushAstStructures();
+    _flushAst(source);
     // Dispose of the context.
-    _context.dispose();
+    context.dispose();
     // Any attempt to start an asynchronous computation should return a future
     // which completes with error.
     CancelableFuture<CompilationUnit> future =
-        _context.computeResolvedCompilationUnitAsync(source, source);
+        context.computeResolvedCompilationUnitAsync(source, source);
     bool completed = false;
     future.then((CompilationUnit unit) {
       fail('Future should have completed with error');
@@ -1673,268 +1225,344 @@
   }
 
   void test_dispose() {
-    expect(_context.isDisposed, isFalse);
-    _context.dispose();
-    expect(_context.isDisposed, isTrue);
+    expect(context.isDisposed, isFalse);
+    context.dispose();
+    expect(context.isDisposed, isTrue);
+  }
+
+  void test_ensureResolvedDartUnits_definingUnit_hasResolved() {
+    Source source = addSource('/test.dart', '');
+    LibrarySpecificUnit libTarget = new LibrarySpecificUnit(source, source);
+    analysisDriver.computeResult(libTarget, RESOLVED_UNIT);
+    CompilationUnit unit =
+        context.getCacheEntry(libTarget).getValue(RESOLVED_UNIT);
+    List<CompilationUnit> units = context.ensureResolvedDartUnits(source);
+    expect(units, unorderedEquals([unit]));
+  }
+
+  void test_ensureResolvedDartUnits_definingUnit_notResolved() {
+    Source source = addSource('/test.dart', '');
+    LibrarySpecificUnit libTarget = new LibrarySpecificUnit(source, source);
+    analysisDriver.computeResult(libTarget, RESOLVED_UNIT);
+    // flush
+    context.getCacheEntry(libTarget).setState(
+        RESOLVED_UNIT, CacheState.FLUSHED);
+    // schedule recomputing
+    List<CompilationUnit> units = context.ensureResolvedDartUnits(source);
+    expect(units, isNull);
+    // should be the next result to compute
+    TargetedResult nextResult = context.dartWorkManager.getNextResult();
+    expect(nextResult.target, libTarget);
+    expect(nextResult.result, RESOLVED_UNIT);
+  }
+
+  void test_ensureResolvedDartUnits_partUnit_notResolved() {
+    Source libSource1 = addSource('/lib1.dart', r'''
+library lib;
+part 'part.dart';
+''');
+    Source libSource2 = addSource('/lib2.dart', r'''
+library lib;
+part 'part.dart';
+''');
+    Source partSource = addSource('/part.dart', r'''
+part of lib;
+''');
+    LibrarySpecificUnit partTarget1 =
+        new LibrarySpecificUnit(libSource1, partSource);
+    LibrarySpecificUnit partTarget2 =
+        new LibrarySpecificUnit(libSource2, partSource);
+    analysisDriver.computeResult(partTarget1, RESOLVED_UNIT);
+    analysisDriver.computeResult(partTarget2, RESOLVED_UNIT);
+    // flush
+    context.getCacheEntry(partTarget1).setState(
+        RESOLVED_UNIT, CacheState.FLUSHED);
+    context.getCacheEntry(partTarget2).setState(
+        RESOLVED_UNIT, CacheState.FLUSHED);
+    // schedule recomputing
+    List<CompilationUnit> units = context.ensureResolvedDartUnits(partSource);
+    expect(units, isNull);
+    // should be the next result to compute
+    TargetedResult nextResult = context.dartWorkManager.getNextResult();
+    expect(nextResult.target, anyOf(partTarget1, partTarget2));
+    expect(nextResult.result, RESOLVED_UNIT);
+  }
+
+  void test_ensureResolvedDartUnits_partUnit_hasResolved() {
+    Source libSource1 = addSource('/lib1.dart', r'''
+library lib;
+part 'part.dart';
+''');
+    Source libSource2 = addSource('/lib2.dart', r'''
+library lib;
+part 'part.dart';
+''');
+    Source partSource = addSource('/part.dart', r'''
+part of lib;
+''');
+    LibrarySpecificUnit partTarget1 =
+        new LibrarySpecificUnit(libSource1, partSource);
+    LibrarySpecificUnit partTarget2 =
+        new LibrarySpecificUnit(libSource2, partSource);
+    analysisDriver.computeResult(partTarget1, RESOLVED_UNIT);
+    analysisDriver.computeResult(partTarget2, RESOLVED_UNIT);
+    CompilationUnit unit1 =
+        context.getCacheEntry(partTarget1).getValue(RESOLVED_UNIT);
+    CompilationUnit unit2 =
+        context.getCacheEntry(partTarget2).getValue(RESOLVED_UNIT);
+    List<CompilationUnit> units = context.ensureResolvedDartUnits(partSource);
+    expect(units, unorderedEquals([unit1, unit2]));
   }
 
   void test_exists_false() {
     TestSource source = new TestSource();
     source.exists2 = false;
-    expect(_context.exists(source), isFalse);
+    expect(context.exists(source), isFalse);
   }
 
   void test_exists_null() {
-    expect(_context.exists(null), isFalse);
+    expect(context.exists(null), isFalse);
   }
 
   void test_exists_overridden() {
     Source source = new TestSource();
-    _context.setContents(source, "");
-    expect(_context.exists(source), isTrue);
+    context.setContents(source, "");
+    expect(context.exists(source), isTrue);
   }
 
   void test_exists_true() {
-    expect(_context.exists(new AnalysisContextImplTest_Source_exists_true()),
+    expect(context.exists(new AnalysisContextImplTest_Source_exists_true()),
         isTrue);
   }
 
   void test_getAnalysisOptions() {
-    expect(_context.analysisOptions, isNotNull);
+    expect(context.analysisOptions, isNotNull);
   }
 
   void test_getContents_fromSource() {
     String content = "library lib;";
     TimestampedData<String> contents =
-        _context.getContents(new TestSource('/test.dart', content));
+        context.getContents(new TestSource('/test.dart', content));
     expect(contents.data.toString(), content);
   }
 
   void test_getContents_overridden() {
     String content = "library lib;";
     Source source = new TestSource();
-    _context.setContents(source, content);
-    TimestampedData<String> contents = _context.getContents(source);
+    context.setContents(source, content);
+    TimestampedData<String> contents = context.getContents(source);
     expect(contents.data.toString(), content);
   }
 
   void test_getContents_unoverridden() {
     String content = "library lib;";
     Source source = new TestSource('/test.dart', content);
-    _context.setContents(source, "part of lib;");
-    _context.setContents(source, null);
-    TimestampedData<String> contents = _context.getContents(source);
+    context.setContents(source, "part of lib;");
+    context.setContents(source, null);
+    TimestampedData<String> contents = context.getContents(source);
     expect(contents.data.toString(), content);
   }
 
   void test_getDeclaredVariables() {
-    _context = contextWithCore();
-    expect(_context.declaredVariables, isNotNull);
+    expect(context.declaredVariables, isNotNull);
   }
 
   void test_getElement() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
     LibraryElement core =
-        _context.computeLibraryElement(_sourceFactory.forUri("dart:core"));
+        context.computeLibraryElement(sourceFactory.forUri("dart:core"));
     expect(core, isNotNull);
     ClassElement classObject =
         _findClass(core.definingCompilationUnit, "Object");
     expect(classObject, isNotNull);
     ElementLocation location = classObject.location;
-    Element element = _context.getElement(location);
+    Element element = context.getElement(location);
     expect(element, same(classObject));
   }
 
   void test_getHtmlElement_dart() {
-    Source source = _addSource("/test.dart", "");
-    expect(_context.getHtmlElement(source), isNull);
-    expect(_context.computeHtmlElement(source), isNull);
-    expect(_context.getHtmlElement(source), isNull);
+    Source source = addSource("/test.dart", "");
+    expect(context.getHtmlElement(source), isNull);
+    expect(context.computeHtmlElement(source), isNull);
+    expect(context.getHtmlElement(source), isNull);
   }
 
   void test_getHtmlFilesReferencing_html() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source htmlSource = _addSource("/test.html", r'''
+    Source htmlSource = addSource("/test.html", r'''
 <html><head>
 <script type='application/dart' src='test.dart'/>
 <script type='application/dart' src='test.js'/>
 </head></html>''');
-    Source librarySource = _addSource("/test.dart", "library lib;");
-    Source secondHtmlSource = _addSource("/test.html", "<html></html>");
-    _context.computeLibraryElement(librarySource);
-    List<Source> result = _context.getHtmlFilesReferencing(secondHtmlSource);
+    Source librarySource = addSource("/test.dart", "library lib;");
+    Source secondHtmlSource = addSource("/test.html", "<html></html>");
+    context.computeLibraryElement(librarySource);
+    List<Source> result = context.getHtmlFilesReferencing(secondHtmlSource);
     expect(result, hasLength(0));
-    _context.parseHtmlUnit(htmlSource);
-    result = _context.getHtmlFilesReferencing(secondHtmlSource);
+    context.parseHtmlUnit(htmlSource);
+    result = context.getHtmlFilesReferencing(secondHtmlSource);
     expect(result, hasLength(0));
   }
 
+  void test_getKindOf_html() {
+    Source source = addSource("/test.html", "");
+    expect(context.getKindOf(source), same(SourceKind.HTML));
+  }
+
   void test_getKindOf_library() {
-    Source source = _addSource("/test.dart", "library lib;");
-    expect(_context.getKindOf(source), same(SourceKind.UNKNOWN));
-    _context.computeKindOf(source);
-    expect(_context.getKindOf(source), same(SourceKind.LIBRARY));
+    Source source = addSource("/test.dart", "library lib;");
+    expect(context.getKindOf(source), same(SourceKind.UNKNOWN));
+    context.computeKindOf(source);
+    expect(context.getKindOf(source), same(SourceKind.LIBRARY));
   }
 
   void test_getKindOf_part() {
-    Source source = _addSource("/test.dart", "part of lib;");
-    expect(_context.getKindOf(source), same(SourceKind.UNKNOWN));
-    _context.computeKindOf(source);
-    expect(_context.getKindOf(source), same(SourceKind.PART));
+    Source source = addSource("/test.dart", "part of lib;");
+    expect(context.getKindOf(source), same(SourceKind.UNKNOWN));
+    context.computeKindOf(source);
+    expect(context.getKindOf(source), same(SourceKind.PART));
   }
 
   void test_getKindOf_unknown() {
-    Source source = _addSource("/test.css", "");
-    expect(_context.getKindOf(source), same(SourceKind.UNKNOWN));
+    Source source = addSource("/test.css", "");
+    expect(context.getKindOf(source), same(SourceKind.UNKNOWN));
   }
 
   void test_getLaunchableClientLibrarySources_doesNotImportHtml() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 main() {}''');
-    _context.computeLibraryElement(source);
-    List<Source> sources = _context.launchableClientLibrarySources;
+    context.computeLibraryElement(source);
+    List<Source> sources = context.launchableClientLibrarySources;
     expect(sources, isEmpty);
   }
 
   void test_getLaunchableClientLibrarySources_importsHtml_explicitly() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    List<Source> sources = _context.launchableClientLibrarySources;
+    List<Source> sources = context.launchableClientLibrarySources;
     expect(sources, isEmpty);
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 import 'dart:html';
 main() {}''');
-    _context.computeLibraryElement(source);
-    sources = _context.launchableClientLibrarySources;
+    context.computeLibraryElement(source);
+    sources = context.launchableClientLibrarySources;
     expect(sources, unorderedEquals([source]));
   }
 
   void test_getLaunchableClientLibrarySources_importsHtml_implicitly() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    List<Source> sources = _context.launchableClientLibrarySources;
+    List<Source> sources = context.launchableClientLibrarySources;
     expect(sources, isEmpty);
-    _addSource("/a.dart", r'''
+    addSource("/a.dart", r'''
 import 'dart:html';
 ''');
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 import 'a.dart';
 main() {}''');
-    _context.computeLibraryElement(source);
-    sources = _context.launchableClientLibrarySources;
+    context.computeLibraryElement(source);
+    sources = context.launchableClientLibrarySources;
     expect(sources, unorderedEquals([source]));
   }
 
   void test_getLaunchableClientLibrarySources_importsHtml_implicitly2() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    List<Source> sources = _context.launchableClientLibrarySources;
+    List<Source> sources = context.launchableClientLibrarySources;
     expect(sources, isEmpty);
-    _addSource("/a.dart", r'''
+    addSource("/a.dart", r'''
 export 'dart:html';
 ''');
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 import 'a.dart';
 main() {}''');
-    _context.computeLibraryElement(source);
-    sources = _context.launchableClientLibrarySources;
+    context.computeLibraryElement(source);
+    sources = context.launchableClientLibrarySources;
     expect(sources, unorderedEquals([source]));
   }
 
   void test_getLaunchableServerLibrarySources() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    expect(_context.launchableServerLibrarySources, isEmpty);
-    Source source = _addSource("/test.dart", "main() {}");
-    _context.computeLibraryElement(source);
-    expect(_context.launchableServerLibrarySources, unorderedEquals([source]));
+    expect(context.launchableServerLibrarySources, isEmpty);
+    Source source = addSource("/test.dart", "main() {}");
+    context.computeLibraryElement(source);
+    expect(context.launchableServerLibrarySources, unorderedEquals([source]));
   }
 
   void test_getLaunchableServerLibrarySources_importsHtml_explicitly() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 import 'dart:html';
 main() {}
 ''');
-    _context.computeLibraryElement(source);
-    expect(_context.launchableServerLibrarySources, isEmpty);
+    context.computeLibraryElement(source);
+    expect(context.launchableServerLibrarySources, isEmpty);
   }
 
   void test_getLaunchableServerLibrarySources_importsHtml_implicitly() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    _addSource("/imports_html.dart", r'''
+    addSource("/imports_html.dart", r'''
 import 'dart:html';
 ''');
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 import 'imports_html.dart';
 main() {}''');
-    _context.computeLibraryElement(source);
-    expect(_context.launchableServerLibrarySources, isEmpty);
+    context.computeLibraryElement(source);
+    expect(context.launchableServerLibrarySources, isEmpty);
   }
 
   void test_getLaunchableServerLibrarySources_noMain() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", '');
-    _context.computeLibraryElement(source);
-    expect(_context.launchableServerLibrarySources, isEmpty);
+    Source source = addSource("/test.dart", '');
+    context.computeLibraryElement(source);
+    expect(context.launchableServerLibrarySources, isEmpty);
+  }
+
+  void test_getLibrariesContaining() {
+    Source librarySource = addSource("/lib.dart", r'''
+library lib;
+part 'part.dart';''');
+    Source partSource = addSource("/part.dart", "part of lib;");
+    context.computeLibraryElement(librarySource);
+    List<Source> result = context.getLibrariesContaining(librarySource);
+    expect(result, hasLength(1));
+    expect(result[0], librarySource);
+    result = context.getLibrariesContaining(partSource);
+    expect(result, hasLength(1));
+    expect(result[0], librarySource);
   }
 
   void test_getLibrariesDependingOn() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source libASource = _addSource("/libA.dart", "library libA;");
-    _addSource("/libB.dart", "library libB;");
-    Source lib1Source = _addSource("/lib1.dart", r'''
+    Source libASource = addSource("/libA.dart", "library libA;");
+    addSource("/libB.dart", "library libB;");
+    Source lib1Source = addSource("/lib1.dart", r'''
 library lib1;
 import 'libA.dart';
 export 'libB.dart';''');
-    Source lib2Source = _addSource("/lib2.dart", r'''
+    Source lib2Source = addSource("/lib2.dart", r'''
 library lib2;
 import 'libB.dart';
 export 'libA.dart';''');
-    _context.computeLibraryElement(lib1Source);
-    _context.computeLibraryElement(lib2Source);
-    List<Source> result = _context.getLibrariesDependingOn(libASource);
+    context.computeLibraryElement(lib1Source);
+    context.computeLibraryElement(lib2Source);
+    List<Source> result = context.getLibrariesDependingOn(libASource);
     expect(result, unorderedEquals([lib1Source, lib2Source]));
   }
 
   void test_getLibrariesReferencedFromHtml_no() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source htmlSource = _addSource("/test.html", r'''
+    Source htmlSource = addSource("/test.html", r'''
 <html><head>
 <script type='application/dart' src='test.js'/>
 </head></html>''');
-    _addSource("/test.dart", "library lib;");
-    _context.parseHtmlUnit(htmlSource);
-    List<Source> result = _context.getLibrariesReferencedFromHtml(htmlSource);
+    addSource("/test.dart", "library lib;");
+    context.parseHtmlUnit(htmlSource);
+    List<Source> result = context.getLibrariesReferencedFromHtml(htmlSource);
     expect(result, hasLength(0));
   }
 
   void test_getLibraryElement() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", "library lib;");
-    LibraryElement element = _context.getLibraryElement(source);
+    Source source = addSource("/test.dart", "library lib;");
+    LibraryElement element = context.getLibraryElement(source);
     expect(element, isNull);
-    _context.computeLibraryElement(source);
-    element = _context.getLibraryElement(source);
+    context.computeLibraryElement(source);
+    element = context.getLibraryElement(source);
     expect(element, isNotNull);
   }
 
   void test_getLibrarySources() {
-    List<Source> sources = _context.librarySources;
+    List<Source> sources = context.librarySources;
     int originalLength = sources.length;
-    Source source = _addSource("/test.dart", "library lib;");
-    _context.computeKindOf(source);
-    sources = _context.librarySources;
+    Source source = addSource("/test.dart", "library lib;");
+    context.computeKindOf(source);
+    sources = context.librarySources;
     expect(sources, hasLength(originalLength + 1));
     for (Source returnedSource in sources) {
       if (returnedSource == source) {
@@ -1945,20 +1573,20 @@
   }
 
   void test_getLineInfo() {
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 library lib;
 
 main() {}''');
-    LineInfo info = _context.getLineInfo(source);
+    LineInfo info = context.getLineInfo(source);
     expect(info, isNull);
-    _context.parseCompilationUnit(source);
-    info = _context.getLineInfo(source);
+    context.parseCompilationUnit(source);
+    info = context.getLineInfo(source);
     expect(info, isNotNull);
   }
 
   void test_getModificationStamp_fromSource() {
     int stamp = 42;
-    expect(_context.getModificationStamp(
+    expect(context.getModificationStamp(
         new AnalysisContextImplTest_Source_getModificationStamp_fromSource(
             stamp)), stamp);
   }
@@ -1968,49 +1596,41 @@
     Source source =
         new AnalysisContextImplTest_Source_getModificationStamp_overridden(
             stamp);
-    _context.setContents(source, "");
-    expect(stamp != _context.getModificationStamp(source), isTrue);
+    context.setContents(source, "");
+    expect(stamp != context.getModificationStamp(source), isTrue);
   }
 
   void test_getPublicNamespace_element() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", "class A {}");
-    LibraryElement library = _context.computeLibraryElement(source);
+    Source source = addSource("/test.dart", "class A {}");
+    LibraryElement library = context.computeLibraryElement(source);
     expect(library, isNotNull);
-    Namespace namespace = _context.getPublicNamespace(library);
+    Namespace namespace = context.getPublicNamespace(library);
     expect(namespace, isNotNull);
     EngineTestCase.assertInstanceOf(
         (obj) => obj is ClassElement, ClassElement, namespace.get("A"));
   }
 
   void test_getResolvedCompilationUnit_library_null() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
-    expect(_context.getResolvedCompilationUnit(source, null), isNull);
+    Source source = addSource("/lib.dart", "library lib;");
+    expect(context.getResolvedCompilationUnit(source, null), isNull);
   }
 
   void test_getResolvedCompilationUnit_source_dart() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
-    expect(_context.getResolvedCompilationUnit2(source, source), isNull);
-    _context.resolveCompilationUnit2(source, source);
-    expect(_context.getResolvedCompilationUnit2(source, source), isNotNull);
+    Source source = addSource("/lib.dart", "library lib;");
+    expect(context.getResolvedCompilationUnit2(source, source), isNull);
+    context.resolveCompilationUnit2(source, source);
+    expect(context.getResolvedCompilationUnit2(source, source), isNotNull);
   }
 
   void test_getResolvedCompilationUnit_source_html() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.html", "<html></html>");
-    expect(_context.getResolvedCompilationUnit2(source, source), isNull);
-    expect(_context.resolveCompilationUnit2(source, source), isNull);
-    expect(_context.getResolvedCompilationUnit2(source, source), isNull);
+    Source source = addSource("/test.html", "<html></html>");
+    expect(context.getResolvedCompilationUnit2(source, source), isNull);
+    expect(context.resolveCompilationUnit2(source, source), isNull);
+    expect(context.getResolvedCompilationUnit2(source, source), isNull);
   }
 
   void test_getSourceFactory() {
-    expect(_context.sourceFactory, same(_sourceFactory));
+    expect(context.sourceFactory, same(sourceFactory));
   }
 
   void test_getSourcesWithFullName() {
@@ -2028,13 +1648,12 @@
     expected.add(source2);
     changeSet.addedSource(source2);
 
-    _context.applyChanges(changeSet);
-    expect(
-        _context.getSourcesWithFullName(filePath), unorderedEquals(expected));
+    context.applyChanges(changeSet);
+    expect(context.getSourcesWithFullName(filePath), unorderedEquals(expected));
   }
 
   void test_getStatistics() {
-    AnalysisContextStatistics statistics = _context.statistics;
+    AnalysisContextStatistics statistics = context.statistics;
     expect(statistics, isNotNull);
     // The following lines are fragile.
     // The values depend on the number of libraries in the SDK.
@@ -2044,48 +1663,44 @@
   }
 
   void test_isClientLibrary_dart() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 import 'dart:html';
 
 main() {}''');
-    expect(_context.isClientLibrary(source), isFalse);
-    expect(_context.isServerLibrary(source), isFalse);
-    _context.computeLibraryElement(source);
-    expect(_context.isClientLibrary(source), isTrue);
-    expect(_context.isServerLibrary(source), isFalse);
+    expect(context.isClientLibrary(source), isFalse);
+    expect(context.isServerLibrary(source), isFalse);
+    context.computeLibraryElement(source);
+    expect(context.isClientLibrary(source), isTrue);
+    expect(context.isServerLibrary(source), isFalse);
   }
 
   void test_isClientLibrary_html() {
-    Source source = _addSource("/test.html", "<html></html>");
-    expect(_context.isClientLibrary(source), isFalse);
+    Source source = addSource("/test.html", "<html></html>");
+    expect(context.isClientLibrary(source), isFalse);
   }
 
   void test_isServerLibrary_dart() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/test.dart", r'''
+    Source source = addSource("/test.dart", r'''
 library lib;
 
 main() {}''');
-    expect(_context.isClientLibrary(source), isFalse);
-    expect(_context.isServerLibrary(source), isFalse);
-    _context.computeLibraryElement(source);
-    expect(_context.isClientLibrary(source), isFalse);
-    expect(_context.isServerLibrary(source), isTrue);
+    expect(context.isClientLibrary(source), isFalse);
+    expect(context.isServerLibrary(source), isFalse);
+    context.computeLibraryElement(source);
+    expect(context.isClientLibrary(source), isFalse);
+    expect(context.isServerLibrary(source), isTrue);
   }
 
   void test_isServerLibrary_html() {
-    Source source = _addSource("/test.html", "<html></html>");
-    expect(_context.isServerLibrary(source), isFalse);
+    Source source = addSource("/test.html", "<html></html>");
+    expect(context.isServerLibrary(source), isFalse);
   }
 
   void test_parseCompilationUnit_errors() {
-    Source source = _addSource("/lib.dart", "library {");
-    CompilationUnit compilationUnit = _context.parseCompilationUnit(source);
+    Source source = addSource("/lib.dart", "library {");
+    CompilationUnit compilationUnit = context.parseCompilationUnit(source);
     expect(compilationUnit, isNotNull);
-    var errorInfo = _context.getErrors(source);
+    var errorInfo = context.getErrors(source);
     expect(errorInfo, isNotNull);
     List<AnalysisError> errors = errorInfo.errors;
     expect(errors, isNotNull);
@@ -2095,7 +1710,7 @@
   void test_parseCompilationUnit_exception() {
     Source source = _addSourceWithException("/test.dart");
     try {
-      _context.parseCompilationUnit(source);
+      context.parseCompilationUnit(source);
       fail("Expected AnalysisException");
     } on AnalysisException {
       // Expected
@@ -2103,19 +1718,30 @@
   }
 
   void test_parseCompilationUnit_html() {
-    Source source = _addSource("/test.html", "<html></html>");
-    expect(_context.parseCompilationUnit(source), isNull);
+    Source source = addSource("/test.html", "<html></html>");
+    expect(context.parseCompilationUnit(source), isNull);
   }
 
   void test_parseCompilationUnit_noErrors() {
-    Source source = _addSource("/lib.dart", "library lib;");
-    CompilationUnit compilationUnit = _context.parseCompilationUnit(source);
+    Source source = addSource("/lib.dart", "library lib;");
+    CompilationUnit compilationUnit = context.parseCompilationUnit(source);
     expect(compilationUnit, isNotNull);
-    AnalysisErrorInfo errorInfo = _context.getErrors(source);
+    AnalysisErrorInfo errorInfo = context.getErrors(source);
     expect(errorInfo, isNotNull);
     expect(errorInfo.errors, hasLength(0));
   }
 
+  void test_parseCompilationUnit_nonExistentSource() {
+    Source source = newSource('/test.dart');
+    resourceProvider.deleteFile('/test.dart');
+    try {
+      context.parseCompilationUnit(source);
+      fail("Expected AnalysisException because file does not exist");
+    } on AnalysisException {
+      // Expected result
+    }
+  }
+
 //  void test_resolveCompilationUnit_sourceChangeDuringResolution() {
 //    _context = new _AnalysisContext_sourceChangeDuringResolution();
 //    AnalysisContextFactory.initContextWithCore(_context);
@@ -2127,17 +1753,6 @@
 //    expect(_context.getLineInfo(source), isNotNull);
 //  }
 
-  void test_parseCompilationUnit_nonExistentSource() {
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
-    try {
-      _context.parseCompilationUnit(source);
-      fail("Expected AnalysisException because file does not exist");
-    } on AnalysisException {
-      // Expected result
-    }
-  }
-
   void test_performAnalysisTask_modifiedAfterParse() {
     // TODO(scheglov) no threads in Dart
 //    Source source = _addSource("/test.dart", "library lib;");
@@ -2157,22 +1772,18 @@
   }
 
   void test_resolveCompilationUnit_library() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
-    LibraryElement library = _context.computeLibraryElement(source);
+    Source source = addSource("/lib.dart", "library lib;");
+    LibraryElement library = context.computeLibraryElement(source);
     CompilationUnit compilationUnit =
-        _context.resolveCompilationUnit(source, library);
+        context.resolveCompilationUnit(source, library);
     expect(compilationUnit, isNotNull);
     expect(compilationUnit.element, isNotNull);
   }
 
   void test_resolveCompilationUnit_source() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
+    Source source = addSource("/lib.dart", "library lib;");
     CompilationUnit compilationUnit =
-        _context.resolveCompilationUnit2(source, source);
+        context.resolveCompilationUnit2(source, source);
     expect(compilationUnit, isNotNull);
   }
 
@@ -2181,70 +1792,66 @@
     options.cacheSize = 42;
     options.dart2jsHint = false;
     options.hint = false;
-    _context.analysisOptions = options;
-    AnalysisOptions result = _context.analysisOptions;
+    context.analysisOptions = options;
+    AnalysisOptions result = context.analysisOptions;
     expect(result.cacheSize, options.cacheSize);
     expect(result.dart2jsHint, options.dart2jsHint);
     expect(result.hint, options.hint);
   }
 
   void test_setAnalysisPriorityOrder_empty() {
-    _context.analysisPriorityOrder = new List<Source>();
+    context.analysisPriorityOrder = new List<Source>();
   }
 
   void test_setAnalysisPriorityOrder_nonEmpty() {
     List<Source> sources = new List<Source>();
-    sources.add(_addSource("/lib.dart", "library lib;"));
-    _context.analysisPriorityOrder = sources;
+    sources.add(addSource("/lib.dart", "library lib;"));
+    context.analysisPriorityOrder = sources;
   }
 
   void test_setChangedContents_notResolved() {
-    _context = contextWithCore();
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
+        new AnalysisOptionsImpl.from(context.analysisOptions);
     options.incremental = true;
-    _context.analysisOptions = options;
-    _sourceFactory = _context.sourceFactory;
+    context.analysisOptions = options;
     String oldCode = r'''
 library lib;
 int a = 0;''';
-    Source librarySource = _addSource("/lib.dart", oldCode);
+    Source librarySource = addSource("/lib.dart", oldCode);
     int offset = oldCode.indexOf("int a") + 4;
     String newCode = r'''
 library lib;
 int ya = 0;''';
-    _context.setChangedContents(librarySource, newCode, offset, 0, 1);
-    expect(_context.getContents(librarySource).data, newCode);
-    expect(_getIncrementalAnalysisCache(_context), isNull);
+    context.setChangedContents(librarySource, newCode, offset, 0, 1);
+    expect(context.getContents(librarySource).data, newCode);
+    expect(_getIncrementalAnalysisCache(context), isNull);
   }
 
   Future test_setContents_libraryWithPart() {
-    _context = contextWithCore();
     SourcesChangedListener listener = new SourcesChangedListener();
-    _context.onSourcesChanged.listen(listener.onData);
-    _sourceFactory = _context.sourceFactory;
+    context.onSourcesChanged.listen(listener.onData);
     String libraryContents1 = r'''
 library lib;
 part 'part.dart';
 int a = 0;''';
-    Source librarySource = _addSource("/lib.dart", libraryContents1);
+    Source librarySource = addSource("/lib.dart", libraryContents1);
     String partContents1 = r'''
 part of lib;
 int b = a;''';
-    Source partSource = _addSource("/part.dart", partContents1);
-    _context.computeLibraryElement(librarySource);
+    Source partSource = addSource("/part.dart", partContents1);
+    context.computeLibraryElement(librarySource);
     IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache(
         librarySource, librarySource, null, null, null, 0, 0, 0);
-    _setIncrementalAnalysisCache(_context, incrementalCache);
-    expect(_getIncrementalAnalysisCache(_context), same(incrementalCache));
+    _setIncrementalAnalysisCache(context, incrementalCache);
+    expect(_getIncrementalAnalysisCache(context), same(incrementalCache));
     String libraryContents2 = r'''
 library lib;
 part 'part.dart';
 int aa = 0;''';
-    _context.setContents(librarySource, libraryContents2);
-    expect(_context.getResolvedCompilationUnit2(partSource, librarySource),
-        isNull);
-    expect(_getIncrementalAnalysisCache(_context), isNull);
+    context.setContents(librarySource, libraryContents2);
+    expect(
+        context.getResolvedCompilationUnit2(partSource, librarySource), isNull);
+    expect(_getIncrementalAnalysisCache(context), isNull);
     return pumpEventQueue().then((_) {
       listener.assertEvent(wereSourcesAdded: true);
       listener.assertEvent(changedSources: [librarySource]);
@@ -2256,54 +1863,48 @@
   }
 
   void test_setContents_null() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source librarySource = _addSource("/lib.dart", r'''
+    Source librarySource = addSource("/lib.dart", r'''
 library lib;
 int a = 0;''');
-    _context.computeLibraryElement(librarySource);
+    context.computeLibraryElement(librarySource);
     IncrementalAnalysisCache incrementalCache = new IncrementalAnalysisCache(
         librarySource, librarySource, null, null, null, 0, 0, 0);
-    _setIncrementalAnalysisCache(_context, incrementalCache);
-    expect(_getIncrementalAnalysisCache(_context), same(incrementalCache));
-    _context.setContents(librarySource, null);
-    expect(_context.getResolvedCompilationUnit2(librarySource, librarySource),
+    _setIncrementalAnalysisCache(context, incrementalCache);
+    expect(_getIncrementalAnalysisCache(context), same(incrementalCache));
+    context.setContents(librarySource, null);
+    expect(context.getResolvedCompilationUnit2(librarySource, librarySource),
         isNull);
-    expect(_getIncrementalAnalysisCache(_context), isNull);
+    expect(_getIncrementalAnalysisCache(context), isNull);
   }
 
   void test_setSourceFactory() {
-    expect(_context.sourceFactory, _sourceFactory);
+    expect(context.sourceFactory, sourceFactory);
     SourceFactory factory = new SourceFactory([]);
-    _context.sourceFactory = factory;
-    expect(_context.sourceFactory, factory);
+    context.sourceFactory = factory;
+    expect(context.sourceFactory, factory);
   }
 
   void test_updateAnalysis() {
-    expect(_context.sourcesNeedingProcessing.isEmpty, isTrue);
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile("/test.dart"));
+    expect(context.sourcesNeedingProcessing, isEmpty);
+    Source source = newSource('/test.dart');
     AnalysisDelta delta = new AnalysisDelta();
     delta.setAnalysisLevel(source, AnalysisLevel.ALL);
-    _context.applyAnalysisDelta(delta);
-    expect(_context.sourcesNeedingProcessing.contains(source), isTrue);
+    context.applyAnalysisDelta(delta);
+    expect(context.sourcesNeedingProcessing, contains(source));
     delta = new AnalysisDelta();
     delta.setAnalysisLevel(source, AnalysisLevel.NONE);
-    _context.applyAnalysisDelta(delta);
-    expect(_context.sourcesNeedingProcessing.contains(source), isFalse);
+    context.applyAnalysisDelta(delta);
+    expect(context.sourcesNeedingProcessing.contains(source), isFalse);
   }
 
   Future xtest_computeResolvedCompilationUnitAsync() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
+    Source source = addSource("/lib.dart", "library lib;");
     // Complete all pending analysis tasks and flush the AST so that it won't
     // be available immediately.
     _performPendingAnalysisTasks();
-    CacheEntry entry = _context.getReadableSourceEntryOrNull(source);
-    entry.flushAstStructures();
+    _flushAst(source);
     bool completed = false;
-    _context
+    context
         .computeResolvedCompilationUnitAsync(source, source)
         .then((CompilationUnit unit) {
       expect(unit, isNotNull);
@@ -2318,16 +1919,13 @@
   }
 
   Future xtest_computeResolvedCompilationUnitAsync_cancel() {
-    _context = contextWithCore();
-    _sourceFactory = _context.sourceFactory;
-    Source source = _addSource("/lib.dart", "library lib;");
+    Source source = addSource("/lib.dart", "library lib;");
     // Complete all pending analysis tasks and flush the AST so that it won't
     // be available immediately.
     _performPendingAnalysisTasks();
-    CacheEntry entry = _context.getReadableSourceEntryOrNull(source);
-    entry.flushAstStructures();
+    _flushAst(source);
     CancelableFuture<CompilationUnit> future =
-        _context.computeResolvedCompilationUnitAsync(source, source);
+        context.computeResolvedCompilationUnitAsync(source, source);
     bool completed = false;
     future.then((CompilationUnit unit) {
       fail('Future should have been canceled');
@@ -2336,55 +1934,45 @@
       completed = true;
     });
     expect(completed, isFalse);
-    expect(_context.pendingFutureSources_forTesting, isNotEmpty);
+    expect(context.pendingFutureSources_forTesting, isNotEmpty);
     future.cancel();
-    expect(_context.pendingFutureSources_forTesting, isEmpty);
+    expect(context.pendingFutureSources_forTesting, isEmpty);
     return pumpEventQueue().then((_) {
       expect(completed, isTrue);
-      expect(_context.pendingFutureSources_forTesting, isEmpty);
+      expect(context.pendingFutureSources_forTesting, isEmpty);
     });
   }
 
   void xtest_performAnalysisTask_stress() {
     int maxCacheSize = 4;
     AnalysisOptionsImpl options =
-        new AnalysisOptionsImpl.con1(_context.analysisOptions);
+        new AnalysisOptionsImpl.from(context.analysisOptions);
     options.cacheSize = maxCacheSize;
-    _context.analysisOptions = options;
+    context.analysisOptions = options;
     int sourceCount = maxCacheSize + 2;
     List<Source> sources = new List<Source>();
     ChangeSet changeSet = new ChangeSet();
     for (int i = 0; i < sourceCount; i++) {
-      Source source = _addSource("/lib$i.dart", "library lib$i;");
+      Source source = addSource("/lib$i.dart", "library lib$i;");
       sources.add(source);
       changeSet.addedSource(source);
     }
-    _context.applyChanges(changeSet);
-    _context.analysisPriorityOrder = sources;
+    context.applyChanges(changeSet);
+    context.analysisPriorityOrder = sources;
     for (int i = 0; i < 1000; i++) {
-      List<ChangeNotice> notice = _context.performAnalysisTask().changeNotices;
+      List<ChangeNotice> notice = context.performAnalysisTask().changeNotices;
       if (notice == null) {
         //System.out.println("test_performAnalysisTask_stress: " + i);
         break;
       }
     }
-    List<ChangeNotice> notice = _context.performAnalysisTask().changeNotices;
+    List<ChangeNotice> notice = context.performAnalysisTask().changeNotices;
     if (notice != null) {
       fail(
           "performAnalysisTask failed to terminate after analyzing all sources");
     }
   }
 
-  Source _addSource(String fileName, String contents) {
-    Source source =
-        new FileBasedSource.con1(FileUtilities2.createFile(fileName));
-    ChangeSet changeSet = new ChangeSet();
-    changeSet.addedSource(source);
-    _context.applyChanges(changeSet);
-    _context.setContents(source, contents);
-    return source;
-  }
-
   TestSource _addSourceWithException(String fileName) {
     return _addSourceWithException2(fileName, "");
   }
@@ -2394,25 +1982,16 @@
     source.generateExceptionOnRead = true;
     ChangeSet changeSet = new ChangeSet();
     changeSet.addedSource(source);
-    _context.applyChanges(changeSet);
+    context.applyChanges(changeSet);
     return source;
   }
 
   /**
-   * Perform analysis tasks up to 512 times and asserts that that was enough.
+   * Perform analysis tasks up to 512 times and assert that it was enough.
    */
-  void _analyzeAll_assertFinished() {
-    _analyzeAll_assertFinished2(512);
-  }
-
-  /**
-   * Perform analysis tasks up to the given number of times and asserts that that was enough.
-   *
-   * @param maxIterations the maximum number of tasks to perform
-   */
-  void _analyzeAll_assertFinished2(int maxIterations) {
+  void _analyzeAll_assertFinished([int maxIterations = 512]) {
     for (int i = 0; i < maxIterations; i++) {
-      List<ChangeNotice> notice = _context.performAnalysisTask().changeNotices;
+      List<ChangeNotice> notice = context.performAnalysisTask().changeNotices;
       if (notice == null) {
         return;
       }
@@ -2424,7 +2003,7 @@
     source.setContents(contents);
     ChangeSet changeSet = new ChangeSet();
     changeSet.changedSource(source);
-    _context.applyChanges(changeSet);
+    context.applyChanges(changeSet);
   }
 
   /**
@@ -2444,6 +2023,12 @@
     return null;
   }
 
+  void _flushAst(Source source) {
+    CacheEntry entry = context
+        .getReadableSourceEntryOrNull(new LibrarySpecificUnit(source, source));
+    entry.setState(RESOLVED_UNIT, CacheState.FLUSHED);
+  }
+
   IncrementalAnalysisCache _getIncrementalAnalysisCache(
       AnalysisContextImpl context2) {
     return context2.test_incrementalAnalysisCache;
@@ -2453,8 +2038,8 @@
     return context2.test_priorityOrder;
   }
 
-  void _performPendingAnalysisTasks([int maxTasks = 20]) {
-    for (int i = 0; _context.performAnalysisTask().hasMoreWork; i++) {
+  void _performPendingAnalysisTasks([int maxTasks = 512]) {
+    for (int i = 0; context.performAnalysisTask().hasMoreWork; i++) {
       if (i > maxTasks) {
         fail('Analysis did not terminate.');
       }
@@ -2464,7 +2049,7 @@
   void _removeSource(Source source) {
     ChangeSet changeSet = new ChangeSet();
     changeSet.removedSource(source);
-    _context.applyChanges(changeSet);
+    context.applyChanges(changeSet);
   }
 
   void _setIncrementalAnalysisCache(
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index c2a5ea5..a2628ce 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -6,6 +6,7 @@
 
 import 'package:analyzer/src/context/cache.dart';
 import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/constant.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/error.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -33,9 +34,16 @@
   runReflectiveTests(BuildLibraryElementTaskTest);
   runReflectiveTests(BuildPublicNamespaceTaskTest);
   runReflectiveTests(BuildTypeProviderTaskTest);
+  runReflectiveTests(ComputeConstantDependenciesTaskTest);
+  runReflectiveTests(ComputeConstantValueTaskTest);
+  runReflectiveTests(ContainingLibrariesTaskTest);
+  runReflectiveTests(DartErrorsTaskTest);
+  runReflectiveTests(EvaluateUnitConstantsTaskTest);
   runReflectiveTests(GatherUsedImportedElementsTaskTest);
   runReflectiveTests(GatherUsedLocalElementsTaskTest);
   runReflectiveTests(GenerateHintsTaskTest);
+  runReflectiveTests(LibraryErrorsReadyTaskTest);
+  runReflectiveTests(LibraryUnitErrorsTaskTest);
   runReflectiveTests(ParseDartTaskTest);
   runReflectiveTests(ResolveUnitTypeNamesTaskTest);
   runReflectiveTests(ResolveLibraryTypeNamesTaskTest);
@@ -153,6 +161,8 @@
 
 @reflectiveTest
 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest {
+  Source source;
+
   test_buildInputs() {
     LibrarySpecificUnit target =
         new LibrarySpecificUnit(emptySource, emptySource);
@@ -190,6 +200,35 @@
     expect(descriptor, isNotNull);
   }
 
+  test_perform_find_constants() {
+    _performBuildTask('''
+const x = 1;
+class C {
+  static const y = 1;
+  const C([p = 1]);
+}
+@x
+f() {
+  const z = 1;
+}
+''');
+    CompilationUnit unit = outputs[RESOLVED_UNIT1];
+    CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT];
+    Annotation annotation = unit.declarations
+        .firstWhere((m) => m is FunctionDeclaration).metadata[0];
+    List<ConstantEvaluationTarget> expectedConstants = [
+      unitElement.accessors.firstWhere((e) => e.isGetter).variable,
+      unitElement.types[0].fields[0],
+      unitElement.functions[0].localVariables[0],
+      unitElement.types[0].constructors[0],
+      new ConstantEvaluationTarget_Annotation(
+          context, source, source, annotation),
+      unitElement.types[0].constructors[0].parameters[0]
+    ];
+    expect(
+        outputs[COMPILATION_UNIT_CONSTANTS].toSet(), expectedConstants.toSet());
+  }
+
   test_perform_library() {
     _performBuildTask(r'''
 library lib;
@@ -200,13 +239,13 @@
 class B = Object with A;
 ''');
     expect(outputs, hasLength(3));
-    expect(outputs[CLASS_ELEMENTS], hasLength(2));
     expect(outputs[COMPILATION_UNIT_ELEMENT], isNotNull);
     expect(outputs[RESOLVED_UNIT1], isNotNull);
+    expect(outputs[COMPILATION_UNIT_CONSTANTS], isNotNull);
   }
 
   void _performBuildTask(String content) {
-    Source source = newSource('/test.dart', content);
+    source = newSource('/test.dart', content);
     AnalysisTarget target = new LibrarySpecificUnit(source, source);
     _computeResult(target, RESOLVED_UNIT1);
     expect(task, new isInstanceOf<BuildCompilationUnitElementTask>());
@@ -1156,6 +1195,385 @@
 }
 
 @reflectiveTest
+class ComputeConstantDependenciesTaskTest extends _AbstractDartTaskTest {
+  Annotation findClassAnnotation(CompilationUnit unit, String className) {
+    for (CompilationUnitMember member in unit.declarations) {
+      if (member is ClassDeclaration && member.name.name == className) {
+        expect(member.metadata, hasLength(1));
+        return member.metadata[0];
+      }
+    }
+    fail('Annotation not found');
+    return null;
+  }
+
+  test_annotation_with_args() {
+    Source source = newSource('/test.dart', '''
+const x = 1;
+@D(x) class C {}
+class D { const D(value); }
+''');
+    // First compute the resolved unit for the source.
+    LibrarySpecificUnit librarySpecificUnit =
+        new LibrarySpecificUnit(source, source);
+    _computeResult(librarySpecificUnit, RESOLVED_UNIT1);
+    CompilationUnit unit = outputs[RESOLVED_UNIT1];
+    // Find the elements for x and D's constructor, and the annotation on C.
+    List<PropertyAccessorElement> accessors = unit.element.accessors;
+    Element x = accessors.firstWhere((PropertyAccessorElement accessor) =>
+        accessor.isGetter && accessor.name == 'x').variable;
+    List<ClassElement> types = unit.element.types;
+    Element constructorForD =
+        types.firstWhere((ClassElement cls) => cls.name == 'D').constructors[0];
+    Annotation annotation = findClassAnnotation(unit, 'C');
+    // Now compute the dependencies for the annotation, and check that it is
+    // the set [x, constructorForD].
+    // TODO(paulberry): test librarySource != source
+    _computeResult(new ConstantEvaluationTarget_Annotation(
+        context, source, source, annotation), CONSTANT_DEPENDENCIES);
+    expect(
+        outputs[CONSTANT_DEPENDENCIES].toSet(), [x, constructorForD].toSet());
+  }
+
+  test_annotation_without_args() {
+    Source source = newSource('/test.dart', '''
+const x = 1;
+@x class C {}
+''');
+    // First compute the resolved unit for the source.
+    LibrarySpecificUnit librarySpecificUnit =
+        new LibrarySpecificUnit(source, source);
+    _computeResult(librarySpecificUnit, RESOLVED_UNIT1);
+    CompilationUnit unit = outputs[RESOLVED_UNIT1];
+    // Find the element for x and the annotation on C.
+    List<PropertyAccessorElement> accessors = unit.element.accessors;
+    Element x = accessors.firstWhere((PropertyAccessorElement accessor) =>
+        accessor.isGetter && accessor.name == 'x').variable;
+    Annotation annotation = findClassAnnotation(unit, 'C');
+    // Now compute the dependencies for the annotation, and check that it is
+    // the list [x].
+    _computeResult(new ConstantEvaluationTarget_Annotation(
+        context, source, source, annotation), CONSTANT_DEPENDENCIES);
+    expect(outputs[CONSTANT_DEPENDENCIES], [x]);
+  }
+
+  test_perform() {
+    Source source = newSource('/test.dart', '''
+const x = y;
+const y = 1;
+''');
+    // First compute the resolved unit for the source.
+    LibrarySpecificUnit librarySpecificUnit =
+        new LibrarySpecificUnit(source, source);
+    _computeResult(librarySpecificUnit, RESOLVED_UNIT1);
+    CompilationUnit unit = outputs[RESOLVED_UNIT1];
+    // Find the elements for the constants x and y.
+    List<PropertyAccessorElement> accessors = unit.element.accessors;
+    Element x = accessors.firstWhere((PropertyAccessorElement accessor) =>
+        accessor.isGetter && accessor.name == 'x').variable;
+    Element y = accessors.firstWhere((PropertyAccessorElement accessor) =>
+        accessor.isGetter && accessor.name == 'y').variable;
+    // Now compute the dependencies for x, and check that it is the list [y].
+    _computeResult(x, CONSTANT_DEPENDENCIES);
+    expect(outputs[CONSTANT_DEPENDENCIES], [y]);
+  }
+}
+
+@reflectiveTest
+class ComputeConstantValueTaskTest extends _AbstractDartTaskTest {
+  EvaluationResultImpl computeClassAnnotation(
+      Source source, CompilationUnit unit, String className) {
+    for (CompilationUnitMember member in unit.declarations) {
+      if (member is ClassDeclaration && member.name.name == className) {
+        expect(member.metadata, hasLength(1));
+        Annotation annotation = member.metadata[0];
+        ConstantEvaluationTarget_Annotation target =
+            new ConstantEvaluationTarget_Annotation(
+                context, source, source, annotation);
+        _computeResult(target, CONSTANT_VALUE);
+        expect(outputs[CONSTANT_VALUE], same(target));
+        EvaluationResultImpl evaluationResult =
+            (annotation.elementAnnotation as ElementAnnotationImpl).evaluationResult;
+        return evaluationResult;
+      }
+    }
+    fail('Annotation not found');
+    return null;
+  }
+
+  fail_circular_reference() {
+    // TODO(paulberry): get this to work.
+    EvaluationResultImpl evaluationResult = _computeTopLevelVariableConstValue(
+        'x', '''
+const x = y + 1;
+const y = x + 1;
+''');
+    expect(evaluationResult, isNotNull);
+    expect(evaluationResult.value, isNull);
+    expect(evaluationResult.errors, hasLength(1));
+    expect(evaluationResult.errors[0].errorCode,
+        CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT);
+  }
+
+  test_annotation_with_args() {
+    Source source = newSource('/test.dart', '''
+const x = 1;
+@D(x) class C {}
+class D {
+  const D(this.value);
+  final value;
+}
+''');
+    // First compute the resolved unit for the source.
+    LibrarySpecificUnit librarySpecificUnit =
+        new LibrarySpecificUnit(source, source);
+    _computeResult(librarySpecificUnit, RESOLVED_UNIT1);
+    CompilationUnit unit = outputs[RESOLVED_UNIT1];
+    // Compute the constant value of the annotation on C.
+    EvaluationResultImpl evaluationResult =
+        computeClassAnnotation(source, unit, 'C');
+    // And check that it has the expected value.
+    expect(evaluationResult, isNotNull);
+    expect(evaluationResult.value, isNotNull);
+    expect(evaluationResult.value.type, isNotNull);
+    expect(evaluationResult.value.type.name, 'D');
+    expect(evaluationResult.value.fields, contains('value'));
+    expect(evaluationResult.value.fields['value'].intValue, 1);
+  }
+
+  test_annotation_without_args() {
+    Source source = newSource('/test.dart', '''
+const x = 1;
+@x class C {}
+''');
+    // First compute the resolved unit for the source.
+    LibrarySpecificUnit librarySpecificUnit =
+        new LibrarySpecificUnit(source, source);
+    _computeResult(librarySpecificUnit, RESOLVED_UNIT1);
+    CompilationUnit unit = outputs[RESOLVED_UNIT1];
+    // Compute the constant value of the annotation on C.
+    EvaluationResultImpl evaluationResult =
+        computeClassAnnotation(source, unit, 'C');
+    // And check that it has the expected value.
+    expect(evaluationResult, isNotNull);
+    expect(evaluationResult.value, isNotNull);
+    expect(evaluationResult.value.intValue, 1);
+  }
+
+  test_dependency() {
+    EvaluationResultImpl evaluationResult = _computeTopLevelVariableConstValue(
+        'x', '''
+const x = y + 1;
+const y = 1;
+''');
+    expect(evaluationResult, isNotNull);
+    expect(evaluationResult.value, isNotNull);
+    expect(evaluationResult.value.intValue, 2);
+  }
+
+  test_simple_constant() {
+    EvaluationResultImpl evaluationResult = _computeTopLevelVariableConstValue(
+        'x', '''
+const x = 1;
+''');
+    expect(evaluationResult, isNotNull);
+    expect(evaluationResult.value, isNotNull);
+    expect(evaluationResult.value.intValue, 1);
+  }
+
+  EvaluationResultImpl _computeTopLevelVariableConstValue(
+      String variableName, String content) {
+    Source source = newSource('/test.dart', content);
+    // First compute the resolved unit for the source.
+    LibrarySpecificUnit librarySpecificUnit =
+        new LibrarySpecificUnit(source, source);
+    _computeResult(librarySpecificUnit, RESOLVED_UNIT1);
+    CompilationUnit unit = outputs[RESOLVED_UNIT1];
+    // Find the element for the given constant.
+    List<PropertyAccessorElement> accessors = unit.element.accessors;
+    Element variableElement = accessors
+        .firstWhere((PropertyAccessorElement accessor) {
+      return accessor.isGetter && accessor.name == variableName;
+    }).variable;
+    // Now compute the value of the constant.
+    _computeResult(variableElement, CONSTANT_VALUE);
+    expect(outputs[CONSTANT_VALUE], same(variableElement));
+    EvaluationResultImpl evaluationResult =
+        (variableElement as TopLevelVariableElementImpl).evaluationResult;
+    return evaluationResult;
+  }
+}
+
+@reflectiveTest
+class ContainingLibrariesTaskTest extends _AbstractDartTaskTest {
+  test_buildInputs() {
+    Map<String, TaskInput> inputs =
+        ContainingLibrariesTask.buildInputs(emptySource);
+    expect(inputs, isNotNull);
+    expect(inputs, isEmpty);
+  }
+
+  test_constructor() {
+    ContainingLibrariesTask task =
+        new ContainingLibrariesTask(context, emptySource);
+    expect(task, isNotNull);
+    expect(task.context, context);
+    expect(task.target, emptySource);
+  }
+
+  test_createTask() {
+    ContainingLibrariesTask task =
+        ContainingLibrariesTask.createTask(context, emptySource);
+    expect(task, isNotNull);
+    expect(task.context, context);
+    expect(task.target, emptySource);
+  }
+
+  test_description() {
+    ContainingLibrariesTask task =
+        new ContainingLibrariesTask(null, emptySource);
+    expect(task.description, isNotNull);
+  }
+
+  test_descriptor() {
+    TaskDescriptor descriptor = ContainingLibrariesTask.DESCRIPTOR;
+    expect(descriptor, isNotNull);
+  }
+
+  test_perform_definingCompilationUnit() {
+    AnalysisTarget library = newSource('/test.dart', 'library test;');
+    _computeResult(library, INCLUDED_PARTS);
+    _computeResult(library, CONTAINING_LIBRARIES);
+    expect(task, new isInstanceOf<ContainingLibrariesTask>());
+    expect(outputs, hasLength(1));
+    List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES];
+    expect(containingLibraries, unorderedEquals([library]));
+  }
+
+  test_perform_partInMultipleLibraries() {
+    AnalysisTarget library1 =
+        newSource('/lib1.dart', 'library test; part "part.dart";');
+    AnalysisTarget library2 =
+        newSource('/lib2.dart', 'library test; part "part.dart";');
+    AnalysisTarget part = newSource('/part.dart', 'part of test;');
+    _computeResult(library1, INCLUDED_PARTS);
+    _computeResult(library2, INCLUDED_PARTS);
+    _computeResult(part, SOURCE_KIND);
+    _computeResult(part, CONTAINING_LIBRARIES);
+    expect(task, new isInstanceOf<ContainingLibrariesTask>());
+    expect(outputs, hasLength(1));
+    List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES];
+    expect(containingLibraries, unorderedEquals([library1, library2]));
+  }
+
+  test_perform_partInSingleLibrary() {
+    AnalysisTarget library =
+        newSource('/lib.dart', 'library test; part "part.dart";');
+    AnalysisTarget part = newSource('/part.dart', 'part of test;');
+    _computeResult(library, INCLUDED_PARTS);
+    _computeResult(part, SOURCE_KIND);
+    _computeResult(part, CONTAINING_LIBRARIES);
+    expect(task, new isInstanceOf<ContainingLibrariesTask>());
+    expect(outputs, hasLength(1));
+    List<Source> containingLibraries = outputs[CONTAINING_LIBRARIES];
+    expect(containingLibraries, unorderedEquals([library]));
+  }
+}
+
+@reflectiveTest
+class DartErrorsTaskTest extends _AbstractDartTaskTest {
+  test_buildInputs() {
+    Map<String, TaskInput> inputs = DartErrorsTask.buildInputs(emptySource);
+    expect(inputs, isNotNull);
+    expect(inputs.keys, unorderedEquals([
+      DartErrorsTask.BUILD_DIRECTIVES_ERRORS_INPUT,
+      DartErrorsTask.BUILD_LIBRARY_ERRORS_INPUT,
+      DartErrorsTask.PARSE_ERRORS_INPUT,
+      DartErrorsTask.SCAN_ERRORS_INPUT,
+      DartErrorsTask.LIBRARY_UNIT_ERRORS_INPUT
+    ]));
+  }
+
+  test_constructor() {
+    DartErrorsTask task = new DartErrorsTask(context, emptySource);
+    expect(task, isNotNull);
+    expect(task.context, context);
+    expect(task.target, emptySource);
+  }
+
+  test_createTask() {
+    DartErrorsTask task = DartErrorsTask.createTask(context, emptySource);
+    expect(task, isNotNull);
+    expect(task.context, context);
+    expect(task.target, emptySource);
+  }
+
+  test_description() {
+    DartErrorsTask task = new DartErrorsTask(null, emptySource);
+    expect(task.description, isNotNull);
+  }
+
+  test_descriptor() {
+    TaskDescriptor descriptor = DartErrorsTask.DESCRIPTOR;
+    expect(descriptor, isNotNull);
+  }
+
+  test_perform_definingCompilationUnit() {
+    AnalysisTarget library =
+        newSource('/test.dart', 'library test; import "dart:math";');
+    _computeResult(library, INCLUDED_PARTS);
+    _computeResult(library, DART_ERRORS);
+    expect(task, new isInstanceOf<DartErrorsTask>());
+    expect(outputs, hasLength(1));
+    List<AnalysisError> errors = outputs[DART_ERRORS];
+    expect(errors, hasLength(1));
+  }
+
+  test_perform_partInSingleLibrary() {
+    AnalysisTarget library = newSource(
+        '/lib.dart', 'library test; import "dart:math"; part "part.dart";');
+    AnalysisTarget part =
+        newSource('/part.dart', 'part of test; class A extends A {}');
+    _computeResult(library, INCLUDED_PARTS);
+    _computeResult(library, DART_ERRORS);
+    _computeResult(part, DART_ERRORS);
+    expect(task, new isInstanceOf<DartErrorsTask>());
+    expect(outputs, hasLength(1));
+    List<AnalysisError> errors = outputs[DART_ERRORS];
+    // This should contain only the errors in the part file, not the ones in the
+    // library.
+    expect(errors, hasLength(1));
+  }
+}
+
+@reflectiveTest
+class EvaluateUnitConstantsTaskTest extends _AbstractDartTaskTest {
+  test_perform() {
+    Source source = newSource('/test.dart', '''
+class C {
+  const C();
+}
+
+@x
+f() {}
+
+const x = const C();
+''');
+    LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
+    _computeResult(target, CONSTANT_RESOLVED_UNIT);
+    expect(task, new isInstanceOf<EvaluateUnitConstantsTask>());
+    CompilationUnit unit = outputs[CONSTANT_RESOLVED_UNIT];
+    CompilationUnitElement unitElement = unit.element;
+    expect((unitElement.types[0].constructors[
+        0] as ConstructorElementImpl).isCycleFree, isTrue);
+    expect((unitElement.functions[0].metadata[
+        0] as ElementAnnotationImpl).evaluationResult, isNotNull);
+    expect((unitElement.topLevelVariables[
+        0] as TopLevelVariableElementImpl).evaluationResult, isNotNull);
+  }
+}
+
+@reflectiveTest
 class GatherUsedImportedElementsTaskTest extends _AbstractDartTaskTest {
   UsedImportedElements usedElements;
   Set<String> usedElementNames;
@@ -1431,6 +1849,98 @@
 }
 
 @reflectiveTest
+class LibraryErrorsReadyTaskTest extends _AbstractDartTaskTest {
+  test_perform() {
+    Source library = newSource('/lib.dart', r'''
+library lib;
+part 'part1.dart';
+part 'part2.dart';
+X v1;
+''');
+    Source part1 = newSource('/part1.dart', r'''
+part of lib;
+X v2;
+''');
+    Source part2 = newSource('/part2.dart', r'''
+part of lib;
+X v3;
+''');
+    _computeResult(library, LIBRARY_ERRORS_READY);
+    expect(task, new isInstanceOf<LibraryErrorsReadyTask>());
+    expect(outputs, hasLength(1));
+    bool ready = outputs[LIBRARY_ERRORS_READY];
+    expect(ready, isTrue);
+    expect(context.getErrors(library).errors, hasLength(1));
+    expect(context.getErrors(part1).errors, hasLength(1));
+    expect(context.getErrors(part2).errors, hasLength(1));
+  }
+}
+
+@reflectiveTest
+class LibraryUnitErrorsTaskTest extends _AbstractDartTaskTest {
+  test_buildInputs() {
+    Map<String, TaskInput> inputs = LibraryUnitErrorsTask
+        .buildInputs(new LibrarySpecificUnit(emptySource, emptySource));
+    expect(inputs, isNotNull);
+    expect(inputs.keys, unorderedEquals([
+      LibraryUnitErrorsTask.BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT,
+      LibraryUnitErrorsTask.HINTS_INPUT,
+      LibraryUnitErrorsTask.RESOLVE_REFERENCES_ERRORS_INPUT,
+      LibraryUnitErrorsTask.RESOLVE_TYPE_NAMES_ERRORS_INPUT,
+      LibraryUnitErrorsTask.VERIFY_ERRORS_INPUT
+    ]));
+  }
+
+  test_constructor() {
+    LibraryUnitErrorsTask task =
+        new LibraryUnitErrorsTask(context, emptySource);
+    expect(task, isNotNull);
+    expect(task.context, context);
+    expect(task.target, emptySource);
+  }
+
+  test_createTask() {
+    LibraryUnitErrorsTask task =
+        LibraryUnitErrorsTask.createTask(context, emptySource);
+    expect(task, isNotNull);
+    expect(task.context, context);
+    expect(task.target, emptySource);
+  }
+
+  test_description() {
+    LibraryUnitErrorsTask task = new LibraryUnitErrorsTask(null, emptySource);
+    expect(task.description, isNotNull);
+  }
+
+  test_descriptor() {
+    TaskDescriptor descriptor = LibraryUnitErrorsTask.DESCRIPTOR;
+    expect(descriptor, isNotNull);
+  }
+
+  test_perform_definingCompilationUnit() {
+    AnalysisTarget library =
+        newSource('/test.dart', 'library test; import "dart:math";');
+    _computeResult(
+        new LibrarySpecificUnit(library, library), LIBRARY_UNIT_ERRORS);
+    expect(task, new isInstanceOf<LibraryUnitErrorsTask>());
+    expect(outputs, hasLength(1));
+    List<AnalysisError> errors = outputs[LIBRARY_UNIT_ERRORS];
+    expect(errors, hasLength(1));
+  }
+
+  test_perform_partInSingleLibrary() {
+    AnalysisTarget library =
+        newSource('/lib.dart', 'library test; part "part.dart";');
+    AnalysisTarget part = newSource('/part.dart', 'part of test;');
+    _computeResult(new LibrarySpecificUnit(library, part), LIBRARY_UNIT_ERRORS);
+    expect(task, new isInstanceOf<LibraryUnitErrorsTask>());
+    expect(outputs, hasLength(1));
+    List<AnalysisError> errors = outputs[LIBRARY_UNIT_ERRORS];
+    expect(errors, hasLength(0));
+  }
+}
+
+@reflectiveTest
 class ParseDartTaskTest extends _AbstractDartTaskTest {
   test_buildInputs() {
     Map<String, TaskInput> inputs = ParseDartTask.buildInputs(emptySource);
@@ -1469,7 +1979,8 @@
     _performParseTask(r'''
 part of lib;
 class B {}''');
-    expect(outputs, hasLength(7));
+    expect(outputs, hasLength(8));
+    expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(0));
     expect(outputs[EXPORTED_LIBRARIES], hasLength(0));
     _assertHasCore(outputs[IMPORTED_LIBRARIES], 1);
     expect(outputs[INCLUDED_PARTS], hasLength(0));
@@ -1487,7 +1998,8 @@
 export '${a}lib3.dart';
 part 'part.dart';
 class A {}''');
-    expect(outputs, hasLength(7));
+    expect(outputs, hasLength(8));
+    expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1));
     expect(outputs[EXPORTED_LIBRARIES], hasLength(0));
     _assertHasCore(outputs[IMPORTED_LIBRARIES], 2);
     expect(outputs[INCLUDED_PARTS], hasLength(1));
@@ -1504,7 +2016,8 @@
 export 'lib3.dart';
 part 'part.dart';
 class A {''');
-    expect(outputs, hasLength(7));
+    expect(outputs, hasLength(8));
+    expect(outputs[EXPLICITLY_IMPORTED_LIBRARIES], hasLength(1));
     expect(outputs[EXPORTED_LIBRARIES], hasLength(1));
     _assertHasCore(outputs[IMPORTED_LIBRARIES], 2);
     expect(outputs[INCLUDED_PARTS], hasLength(1));
@@ -1514,25 +2027,6 @@
     expect(outputs[UNITS], hasLength(2));
   }
 
-  test_perform_useMemento() {
-    String content = r'''
-library lib;
-import 'lib2.dart';
-export 'lib3.dart';
-part 'part.dart';
-class A {''';
-    AnalysisTarget target = newSource('/test.dart', content);
-    _computeResult(target, PARSED_UNIT);
-    // update content
-    context.setContents(target, content);
-    assertIsInvalid(target, PARSED_UNIT);
-    // recompute
-    _computeResult(target, PARSED_UNIT);
-    assertIsValid(target, PARSED_UNIT);
-    // values from the memento are returned
-    assertSameResults(ParseDartTask.DESCRIPTOR.results);
-  }
-
   void _performParseTask(String content) {
     AnalysisTarget target = newSource('/test.dart', content);
     _computeResult(target, PARSED_UNIT);
@@ -1627,27 +2121,17 @@
 ''');
     LibrarySpecificUnit target = new LibrarySpecificUnit(source, source);
     // prepare unit and "a.m()" invocation
-    CompilationUnit unit;
-    MethodInvocation invocation;
-    {
-      _computeResult(target, RESOLVED_UNIT1);
-      unit = outputs[RESOLVED_UNIT1];
-      // walk the AST
-      FunctionDeclaration function = unit.declarations[1];
-      BlockFunctionBody body = function.functionExpression.body;
-      ExpressionStatement statement = body.block.statements[0];
-      invocation = statement.expression;
-      // not resolved yet
-      expect(invocation.methodName.staticElement, isNull);
-    }
-    // fully resolve
-    {
-      _computeResult(target, RESOLVED_UNIT);
-      expect(task, new isInstanceOf<ResolveReferencesTask>());
-      expect(outputs[RESOLVED_UNIT], same(outputs[RESOLVED_UNIT]));
-      // a.m() is resolved now
-      expect(invocation.methodName.staticElement, isNotNull);
-    }
+    _computeResult(target, RESOLVED_UNIT);
+    CompilationUnit unit = outputs[RESOLVED_UNIT];
+    // walk the AST
+    FunctionDeclaration function = unit.declarations[1];
+    BlockFunctionBody body = function.functionExpression.body;
+    ExpressionStatement statement = body.block.statements[0];
+    MethodInvocation invocation = statement.expression;
+    expect(task, new isInstanceOf<ResolveReferencesTask>());
+    expect(unit, same(outputs[RESOLVED_UNIT]));
+    // a.m() is resolved now
+    expect(invocation.methodName.staticElement, isNotNull);
   }
 
   test_perform_errors() {
@@ -1822,19 +2306,6 @@
     expect(outputs[TOKEN_STREAM], isNotNull);
   }
 
-  test_perform_useMemento() {
-    AnalysisTarget target = newSource('/test.dart', 'main() {}');
-    _computeResult(target, TOKEN_STREAM);
-    // update content
-    context.setContents(target, 'main() {}');
-    assertIsInvalid(target, TOKEN_STREAM);
-    // recompute
-    _computeResult(target, TOKEN_STREAM);
-    assertIsValid(target, TOKEN_STREAM);
-    // values from the memento are returned
-    assertSameResults(ScanDartTask.DESCRIPTOR.results);
-  }
-
   void _performScanTask(String content) {
     AnalysisTarget target = newSource('/test.dart', content);
     _computeResult(target, TOKEN_STREAM);
diff --git a/pkg/analyzer/test/src/task/dart_work_manager_test.dart b/pkg/analyzer/test/src/task/dart_work_manager_test.dart
new file mode 100644
index 0000000..ad3d337
--- /dev/null
+++ b/pkg/analyzer/test/src/task/dart_work_manager_test.dart
@@ -0,0 +1,333 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.src.task.dart_work_manager_test;
+
+import 'package:analyzer/src/context/cache.dart';
+import 'package:analyzer/src/generated/engine.dart'
+    show CacheState, InternalAnalysisContext;
+import 'package:analyzer/src/generated/java_engine.dart' show CaughtException;
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/task/dart.dart';
+import 'package:analyzer/src/task/dart_work_manager.dart';
+import 'package:analyzer/src/task/driver.dart';
+import 'package:analyzer/task/dart.dart';
+import 'package:analyzer/task/model.dart';
+import 'package:typed_mock/typed_mock.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../generated/test_support.dart';
+import '../../reflective_tests.dart';
+
+main() {
+  groupSep = ' | ';
+  runReflectiveTests(DartWorkManagerTest);
+}
+
+@reflectiveTest
+class DartWorkManagerTest {
+  InternalAnalysisContext context = new _InternalAnalysisContextMock();
+  DartWorkManager manager;
+
+  CaughtException caughtException = new CaughtException(null, null);
+
+  Source source1 = new TestSource('1.dart');
+  Source source2 = new TestSource('2.dart');
+  Source source3 = new TestSource('3.dart');
+  Source source4 = new TestSource('4.dart');
+  CacheEntry entry1;
+  CacheEntry entry2;
+  CacheEntry entry3;
+  CacheEntry entry4;
+
+  void expect_librarySourceQueue(List<Source> sources) {
+    expect(manager.librarySourceQueue, unorderedEquals(sources));
+  }
+
+  void expect_unknownSourceQueue(List<Source> sources) {
+    expect(manager.unknownSourceQueue, unorderedEquals(sources));
+  }
+
+  void setUp() {
+    manager = new DartWorkManager(context);
+    entry1 = context.getCacheEntry(source1);
+    entry2 = context.getCacheEntry(source2);
+    entry3 = context.getCacheEntry(source3);
+    entry4 = context.getCacheEntry(source4);
+  }
+
+  void test_applyChange_add() {
+    // add source1
+    manager.applyChange([source1], [], []);
+    expect_unknownSourceQueue([source1]);
+    expect_librarySourceQueue([]);
+    // add source2
+    manager.applyChange([source2], [], []);
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source1, source2]);
+  }
+
+  void test_applyChange_add_duplicate() {
+    // add source1
+    manager.applyChange([source1], [], []);
+    expect_unknownSourceQueue([source1]);
+    expect_librarySourceQueue([]);
+    // add source2
+    manager.applyChange([source1], [], []);
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source1]);
+  }
+
+  void test_applyChange_addRemove() {
+    manager.applyChange([source1, source2], [], [source2, source3]);
+    expect_unknownSourceQueue([source1]);
+    expect_librarySourceQueue([]);
+  }
+
+  void test_applyChange_change() {
+    manager.librarySourceQueue.addAll([source1, source3]);
+    manager.unknownSourceQueue.addAll([source4]);
+    // change source1
+    manager.applyChange([], [source1], []);
+    expect_librarySourceQueue([source3]);
+    expect_unknownSourceQueue([source4, source1]);
+  }
+
+  void test_applyChange_remove() {
+    manager.librarySourceQueue.addAll([source1, source3]);
+    manager.unknownSourceQueue.addAll([source4]);
+    // remove source1
+    manager.applyChange([], [], [source1]);
+    expect_librarySourceQueue([source3]);
+    expect_unknownSourceQueue([source4]);
+    // remove source3
+    manager.applyChange([], [], [source3]);
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source4]);
+    // remove source4
+    manager.applyChange([], [], [source4]);
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([]);
+  }
+
+  void test_applyChange_scheduleInvalidatedLibraries() {
+    // libraries source1 and source3 are invalid
+    entry1.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    entry2.setValue(SOURCE_KIND, SourceKind.PART, []);
+    entry3.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    entry1.setValue(LIBRARY_ERRORS_READY, false, []);
+    entry3.setValue(LIBRARY_ERRORS_READY, false, []);
+    // change source2, schedule source1 and source3
+    manager.applyChange([], [source2], []);
+    expect_librarySourceQueue([source1, source3]);
+  }
+
+  void test_applyPriorityTargets_library() {
+    entry1.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    entry2.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    entry3.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    manager.priorityResultQueue
+        .add(new TargetedResult(source1, LIBRARY_ERRORS_READY));
+    manager.priorityResultQueue
+        .add(new TargetedResult(source2, LIBRARY_ERRORS_READY));
+    // -source1 +source3
+    manager.applyPriorityTargets([source2, source3]);
+    expect(manager.priorityResultQueue, unorderedEquals([
+      new TargetedResult(source2, LIBRARY_ERRORS_READY),
+      new TargetedResult(source3, LIBRARY_ERRORS_READY)
+    ]));
+    // get next request
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, LIBRARY_ERRORS_READY);
+  }
+
+  void test_applyPriorityTargets_part() {
+    entry1.setValue(SOURCE_KIND, SourceKind.PART, []);
+    entry2.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    entry3.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    // +source2 +source3
+    when(context.getLibrariesContaining(source1))
+        .thenReturn([source2, source3]);
+    manager.applyPriorityTargets([source1]);
+    expect(manager.priorityResultQueue, unorderedEquals([
+      new TargetedResult(source2, LIBRARY_ERRORS_READY),
+      new TargetedResult(source3, LIBRARY_ERRORS_READY)
+    ]));
+    // get next request
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, LIBRARY_ERRORS_READY);
+  }
+
+  void test_getNextResult_hasLibraries_firstIsError() {
+    entry1.setErrorState(caughtException, [LIBRARY_ERRORS_READY]);
+    manager.librarySourceQueue.addAll([source1, source2]);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, LIBRARY_ERRORS_READY);
+    // source1 is out, source2 is waiting
+    expect_librarySourceQueue([source2]);
+  }
+
+  void test_getNextResult_hasLibraries_firstIsInvalid() {
+    entry1.setState(LIBRARY_ERRORS_READY, CacheState.INVALID);
+    manager.librarySourceQueue.addAll([source1, source2]);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source1);
+    expect(request.result, LIBRARY_ERRORS_READY);
+    // no changes until computed
+    expect_librarySourceQueue([source1, source2]);
+  }
+
+  void test_getNextResult_hasLibraries_firstIsValid() {
+    entry1.setValue(LIBRARY_ERRORS_READY, true, []);
+    manager.librarySourceQueue.addAll([source1, source2]);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, LIBRARY_ERRORS_READY);
+    // source1 is out, source2 is waiting
+    expect_librarySourceQueue([source2]);
+  }
+
+  void test_getNextResult_hasPriority_firstIsError() {
+    manager.addPriorityResult(source1, SOURCE_KIND);
+    manager.addPriorityResult(source2, SOURCE_KIND);
+    expect(manager.priorityResultQueue, unorderedEquals([
+      new TargetedResult(source1, SOURCE_KIND),
+      new TargetedResult(source2, SOURCE_KIND)
+    ]));
+    // configure state and get next result
+    entry1.setErrorState(caughtException, [SOURCE_KIND]);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, SOURCE_KIND);
+    // source1 is out, source2 is waiting
+    expect(manager.priorityResultQueue,
+        unorderedEquals([new TargetedResult(source2, SOURCE_KIND)]));
+  }
+
+  void test_getNextResult_hasPriority_firstIsValid() {
+    manager.addPriorityResult(source1, SOURCE_KIND);
+    manager.addPriorityResult(source2, SOURCE_KIND);
+    expect(manager.priorityResultQueue, unorderedEquals([
+      new TargetedResult(source1, SOURCE_KIND),
+      new TargetedResult(source2, SOURCE_KIND)
+    ]));
+    // configure state and get next result
+    entry1.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, SOURCE_KIND);
+    // source1 is out, source2 is waiting
+    expect(manager.priorityResultQueue,
+        unorderedEquals([new TargetedResult(source2, SOURCE_KIND)]));
+  }
+
+  void test_getNextResult_hasUnknown_firstIsError() {
+    entry1.setErrorState(caughtException, [SOURCE_KIND]);
+    manager.unknownSourceQueue.addAll([source1, source2]);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, SOURCE_KIND);
+    // source1 is out, source2 is waiting
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source2]);
+  }
+
+  void test_getNextResult_hasUnknown_firstIsInvalid() {
+    manager.unknownSourceQueue.addAll([source1, source2]);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source1);
+    expect(request.result, SOURCE_KIND);
+    // no changes until computed
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source1, source2]);
+  }
+
+  void test_getNextResult_hasUnknown_firstIsValid() {
+    entry1.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
+    manager.unknownSourceQueue.addAll([source1, source2]);
+    TargetedResult request = manager.getNextResult();
+    expect(request.target, source2);
+    expect(request.result, SOURCE_KIND);
+    // source1 is out, source2 is waiting
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source2]);
+  }
+
+  void test_getNextResult_nothingToDo() {
+    TargetedResult request = manager.getNextResult();
+    expect(request, isNull);
+  }
+
+  void test_getNextResultPriority_hasLibrary() {
+    manager.librarySourceQueue.addAll([source1]);
+    expect(manager.getNextResultPriority(), WorkOrderPriority.NORMAL);
+  }
+
+  void test_getNextResultPriority_hasPriority() {
+    manager.addPriorityResult(source1, SOURCE_KIND);
+    expect(manager.getNextResultPriority(), WorkOrderPriority.PRIORITY);
+  }
+
+  void test_getNextResultPriority_hasUnknown() {
+    manager.unknownSourceQueue.addAll([source1]);
+    expect(manager.getNextResultPriority(), WorkOrderPriority.NORMAL);
+  }
+
+  void test_getNextResultPriority_nothingToDo() {
+    expect(manager.getNextResultPriority(), WorkOrderPriority.NONE);
+  }
+
+  void test_resultsComputed_isLibrary() {
+    manager.unknownSourceQueue.addAll([source1, source2, source3]);
+    manager.resultsComputed(source2, {SOURCE_KIND: SourceKind.LIBRARY});
+    expect_librarySourceQueue([source2]);
+    expect_unknownSourceQueue([source1, source3]);
+  }
+
+  void test_resultsComputed_isPart() {
+    manager.unknownSourceQueue.addAll([source1, source2, source3]);
+    manager.resultsComputed(source2, {SOURCE_KIND: SourceKind.PART});
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source1, source3]);
+  }
+
+  void test_resultsComputed_noSourceKind() {
+    manager.unknownSourceQueue.addAll([source1, source2]);
+    manager.resultsComputed(source1, {});
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source1, source2]);
+  }
+
+  void test_resultsComputed_notDart() {
+    manager.unknownSourceQueue.addAll([source1, source2]);
+    manager.resultsComputed(new TestSource('test.html'), {});
+    expect_librarySourceQueue([]);
+    expect_unknownSourceQueue([source1, source2]);
+  }
+}
+
+class _InternalAnalysisContextMock extends TypedMock
+    implements InternalAnalysisContext {
+  @override
+  AnalysisCache analysisCache;
+
+  _InternalAnalysisContextMock() {
+    analysisCache = new AnalysisCache([new UniversalCachePartition(this)]);
+  }
+
+  @override
+  CacheEntry getCacheEntry(AnalysisTarget target) {
+    CacheEntry entry = analysisCache.get(target);
+    if (entry == null) {
+      entry = new CacheEntry(target);
+      analysisCache.put(entry);
+    }
+    return entry;
+  }
+
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
diff --git a/pkg/analyzer/test/src/task/driver_test.dart b/pkg/analyzer/test/src/task/driver_test.dart
index d69dbe4..d7005bd3 100644
--- a/pkg/analyzer/test/src/task/driver_test.dart
+++ b/pkg/analyzer/test/src/task/driver_test.dart
@@ -5,19 +5,23 @@
 library test.src.task.driver_test;
 
 import 'package:analyzer/src/context/cache.dart';
-import 'package:analyzer/src/context/context.dart';
 import 'package:analyzer/src/generated/engine.dart'
-    hide AnalysisContextImpl, AnalysisTask;
+    hide
+        AnalysisCache,
+        AnalysisContextImpl,
+        AnalysisTask,
+        UniversalCachePartition,
+        WorkManager;
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/task/driver.dart';
 import 'package:analyzer/src/task/inputs.dart';
 import 'package:analyzer/src/task/manager.dart';
 import 'package:analyzer/task/model.dart';
+import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart';
 
 import '../../generated/test_support.dart';
 import '../../reflective_tests.dart';
-import '../context/abstract_context.dart';
 import 'test_support.dart';
 
 main() {
@@ -27,10 +31,41 @@
   runReflectiveTests(WorkItemTest);
 }
 
+class AbstractDriverTest {
+  TaskManager taskManager = new TaskManager();
+  List<WorkManager> workManagers = <WorkManager>[];
+  InternalAnalysisContext context = new _InternalAnalysisContextMock();
+  AnalysisDriver analysisDriver;
+
+  void setUp() {
+    context = new _InternalAnalysisContextMock();
+    analysisDriver = new AnalysisDriver(taskManager, workManagers, context);
+  }
+}
+
 @reflectiveTest
-class AnalysisDriverTest extends AbstractContextTest {
-  AnalysisContextImpl createAnalysisContext() {
-    return new _TestContext();
+class AnalysisDriverTest extends AbstractDriverTest {
+  WorkManager workManager1 = new _WorkManagerMock();
+  WorkManager workManager2 = new _WorkManagerMock();
+
+  AnalysisTarget target1 = new TestSource('/1.dart');
+  AnalysisTarget target2 = new TestSource('/2.dart');
+
+  ResultDescriptor result1 = new ResultDescriptor('result1', -1);
+  ResultDescriptor result2 = new ResultDescriptor('result2', -2);
+
+  TaskDescriptor descriptor1;
+  TaskDescriptor descriptor2;
+
+  void setUp() {
+    super.setUp();
+    when(workManager1.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.NONE);
+    when(workManager2.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.NONE);
+
+    workManagers.add(workManager1);
+    workManagers.add(workManager2);
   }
 
   test_computeResult() {
@@ -53,75 +88,43 @@
     expect(analysisDriver.taskManager, taskManager);
   }
 
-  test_createNextWorkOrder_complete() {
-    AnalysisTarget priorityTarget = new TestSource();
-    AnalysisTarget normalTarget = new TestSource();
-    ResultDescriptor result = new ResultDescriptor('result', null);
-    TaskDescriptor descriptor = new TaskDescriptor('task',
-        (context, target) => new TestAnalysisTask(context, target),
-        (target) => {}, [result]);
-    taskManager.addGeneralResult(result);
-    taskManager.addTaskDescriptor(descriptor);
-    context.priorityTargets.add(priorityTarget);
-    context.getCacheEntry(priorityTarget).setValue(
-        result, '', TargetedResult.EMPTY_LIST, null);
-    context.explicitTargets.add(normalTarget);
-    context.getCacheEntry(priorityTarget).setValue(
-        result, '', TargetedResult.EMPTY_LIST, null);
-
-    expect(analysisDriver.createNextWorkOrder(), isNull);
-  }
-
-  test_createNextWorkOrder_normalTarget() {
-    AnalysisTarget priorityTarget = new TestSource();
-    AnalysisTarget normalTarget = new TestSource();
-    ResultDescriptor result = new ResultDescriptor('result', null);
-    TaskDescriptor descriptor = new TaskDescriptor('task',
-        (context, target) => new TestAnalysisTask(context, target),
-        (target) => {}, [result]);
-    taskManager.addGeneralResult(result);
-    taskManager.addTaskDescriptor(descriptor);
-    context.priorityTargets.add(priorityTarget);
-    context.getCacheEntry(priorityTarget).setValue(
-        result, '', TargetedResult.EMPTY_LIST, null);
-    context.explicitTargets.add(normalTarget);
-    context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID);
-
+  test_createNextWorkOrder_highLow() {
+    _configureDescriptors12();
+    when(workManager1.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.PRIORITY);
+    when(workManager2.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.NORMAL);
+    when(workManager1.getNextResult())
+        .thenReturn(new TargetedResult(target1, result1));
     WorkOrder workOrder = analysisDriver.createNextWorkOrder();
     expect(workOrder, isNotNull);
     expect(workOrder.moveNext(), true);
-    expect(workOrder.currentItem.target, normalTarget);
+    expect(workOrder.currentItem.target, target1);
+    expect(workOrder.currentItem.descriptor, descriptor1);
   }
 
-  test_createNextWorkOrder_noTargets() {
-    ResultDescriptor result = new ResultDescriptor('result', null);
-    TaskDescriptor descriptor = new TaskDescriptor('task',
-        (context, target) => new TestAnalysisTask(context, target),
-        (target) => {}, [result]);
-    taskManager.addGeneralResult(result);
-    taskManager.addTaskDescriptor(descriptor);
-
-    expect(analysisDriver.createNextWorkOrder(), isNull);
-  }
-
-  test_createNextWorkOrder_priorityTarget() {
-    AnalysisTarget priorityTarget = new TestSource();
-    AnalysisTarget normalTarget = new TestSource();
-    ResultDescriptor result = new ResultDescriptor('result', null);
-    TaskDescriptor descriptor = new TaskDescriptor('task',
-        (context, target) => new TestAnalysisTask(context, target),
-        (target) => {}, [result]);
-    taskManager.addGeneralResult(result);
-    taskManager.addTaskDescriptor(descriptor);
-    context.priorityTargets.add(priorityTarget);
-    context.getCacheEntry(priorityTarget).setState(result, CacheState.INVALID);
-    context.explicitTargets.add(normalTarget);
-    context.getCacheEntry(normalTarget).setState(result, CacheState.INVALID);
-
+  test_createNextWorkOrder_lowHigh() {
+    _configureDescriptors12();
+    when(workManager1.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.NORMAL);
+    when(workManager2.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.PRIORITY);
+    when(workManager2.getNextResult())
+        .thenReturn(new TargetedResult(target1, result1));
     WorkOrder workOrder = analysisDriver.createNextWorkOrder();
     expect(workOrder, isNotNull);
     expect(workOrder.moveNext(), true);
-    expect(workOrder.currentItem.target, priorityTarget);
+    expect(workOrder.currentItem.target, target1);
+    expect(workOrder.currentItem.descriptor, descriptor1);
+  }
+
+  test_createNextWorkOrder_none() {
+    _configureDescriptors12();
+    when(workManager1.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.NONE);
+    when(workManager2.getNextResultPriority())
+        .thenReturn(WorkOrderPriority.NONE);
+    expect(analysisDriver.createNextWorkOrder(), isNull);
   }
 
   test_createWorkOrderForResult_error() {
@@ -160,7 +163,7 @@
     AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('result', null);
     context.getCacheEntry(target).setValue(
-        result, '', TargetedResult.EMPTY_LIST, null);
+        result, '', TargetedResult.EMPTY_LIST);
 
     expect(analysisDriver.createWorkOrderForResult(target, result), isNull);
   }
@@ -198,15 +201,11 @@
   }
 
   test_performAnalysisTask() {
-    AnalysisTarget target = new TestSource();
-    ResultDescriptor result = new ResultDescriptor('result', null);
-    TestAnalysisTask task;
-    TaskDescriptor descriptor = new TaskDescriptor(
-        'task', (context, target) => task, (target) => {}, [result]);
-    task = new TestAnalysisTask(context, target, descriptor: descriptor);
-    taskManager.addTaskDescriptor(descriptor);
-    taskManager.addGeneralResult(result);
-    context.priorityTargets.add(target);
+    _configureDescriptors12();
+    when(workManager1.getNextResultPriority()).thenReturnList(
+        <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]);
+    when(workManager1.getNextResult())
+        .thenReturn(new TargetedResult(target1, result1));
 
     expect(analysisDriver.performAnalysisTask(), true);
     expect(analysisDriver.performAnalysisTask(), true);
@@ -232,8 +231,11 @@
     task2 = new TestAnalysisTask(context, target, descriptor: descriptor2);
     taskManager.addTaskDescriptor(descriptor1);
     taskManager.addTaskDescriptor(descriptor2);
-    context.explicitTargets.add(target);
-    taskManager.addGeneralResult(resultB);
+    // configure WorkManager
+    when(workManager1.getNextResultPriority()).thenReturnList(
+        <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]);
+    when(workManager1.getNextResult())
+        .thenReturn(new TargetedResult(target, resultB));
     // prepare work order
     expect(analysisDriver.performAnalysisTask(), true);
     expect(analysisDriver.performAnalysisTask(), true);
@@ -261,8 +263,11 @@
         descriptor: descriptor2, value: 20);
     taskManager.addTaskDescriptor(descriptor1);
     taskManager.addTaskDescriptor(descriptor2);
-    context.explicitTargets.add(target);
-    taskManager.addGeneralResult(resultB);
+    // configure WorkManager
+    when(workManager1.getNextResultPriority()).thenReturnList(
+        <WorkOrderPriority>[WorkOrderPriority.NORMAL, WorkOrderPriority.NONE]);
+    when(workManager1.getNextResult())
+        .thenReturn(new TargetedResult(target, resultB));
     // prepare work order
     expect(analysisDriver.performAnalysisTask(), true);
     expect(context.getCacheEntry(target).getValue(resultA), -1);
@@ -279,32 +284,6 @@
     expect(analysisDriver.performAnalysisTask(), false);
   }
 
-  test_performAnalysisTask_recordMemento() {
-    AnalysisTarget target = new TestSource();
-    ResultDescriptor result = new ResultDescriptor('result', -1);
-    // configure tasks
-    TestAnalysisTask task;
-    TaskDescriptor descriptor = new TaskDescriptor(
-        'task', (context, target) => task, (target) => {}, [result]);
-    task = new TestAnalysisTask(context, target,
-        descriptor: descriptor,
-        memento: 'my mem',
-        results: [result],
-        value: 10);
-    taskManager.addTaskDescriptor(descriptor);
-    context.explicitTargets.add(target);
-    taskManager.addGeneralResult(result);
-    // prepare work order
-    expect(analysisDriver.performAnalysisTask(), true);
-    expect(context.getCacheEntry(target).getValue(result), -1);
-    // compute result
-    expect(analysisDriver.performAnalysisTask(), true);
-    expect(context.getCacheEntry(target).getValue(result), 10);
-    expect(context.getCacheEntry(target).getMemento(result), 'my mem');
-    // done
-    expect(analysisDriver.performAnalysisTask(), false);
-  }
-
   test_performWorkItem_exceptionInTask() {
     AnalysisTarget target = new TestSource();
     ResultDescriptor result = new ResultDescriptor('result', null);
@@ -315,7 +294,7 @@
         'task', (context, target) => task, (target) => {}, [result]);
     task = new TestAnalysisTask(context, target,
         descriptor: descriptor, exception: exception);
-    WorkItem item = new WorkItem(context, target, descriptor, null);
+    WorkItem item = new WorkItem(context, target, descriptor);
 
     analysisDriver.performWorkItem(item);
     CacheEntry targetEntry = context.getCacheEntry(item.target);
@@ -330,7 +309,7 @@
     TaskDescriptor descriptor = new TaskDescriptor(
         'task', (context, target) => task, (target) => {}, [result]);
     task = new TestAnalysisTask(context, target, descriptor: descriptor);
-    WorkItem item = new WorkItem(context, target, descriptor, null);
+    WorkItem item = new WorkItem(context, target, descriptor);
 
     analysisDriver.performWorkItem(item);
     CacheEntry targetEntry = context.getCacheEntry(item.target);
@@ -346,7 +325,7 @@
         (target) => {}, [result]);
     CaughtException exception =
         new CaughtException(new AnalysisException(), null);
-    WorkItem item = new WorkItem(context, target, descriptor, null);
+    WorkItem item = new WorkItem(context, target, descriptor);
     item.exception = exception;
 
     analysisDriver.performWorkItem(item);
@@ -362,12 +341,24 @@
         (target) => {'one': inputResult.of(target)},
         [new ResultDescriptor('output', null)]);
     analysisDriver.currentWorkOrder =
-        new WorkOrder(taskManager, new WorkItem(null, null, descriptor, null));
+        new WorkOrder(taskManager, new WorkItem(null, null, descriptor));
 
     analysisDriver.reset();
     expect(analysisDriver.currentWorkOrder, isNull);
   }
 
+  void _configureDescriptors12() {
+    descriptor1 = new TaskDescriptor('task1', (context, target) =>
+            new TestAnalysisTask(context, target, descriptor: descriptor1),
+        (target) => {}, [result1]);
+    taskManager.addTaskDescriptor(descriptor1);
+
+    descriptor2 = new TaskDescriptor('task2', (context, target) =>
+            new TestAnalysisTask(context, target, descriptor: descriptor1),
+        (target) => {}, [result2]);
+    taskManager.addTaskDescriptor(descriptor2);
+  }
+
   /**
    * [complete] is `true` if the value of the result has already been computed.
    * [priorityTarget] is `true` if the target is in the list of priority
@@ -395,7 +386,7 @@
     }
     if (complete) {
       context.getCacheEntry(target).setValue(
-          result, '', TargetedResult.EMPTY_LIST, null);
+          result, '', TargetedResult.EMPTY_LIST);
     } else {
       context.getCacheEntry(target).setState(result, CacheState.INVALID);
     }
@@ -413,22 +404,18 @@
 }
 
 @reflectiveTest
-class WorkItemTest extends EngineTestCase {
+class WorkItemTest extends AbstractDriverTest {
   test_buildTask_complete() {
-    AnalysisContext context = new AnalysisContextImpl();
     AnalysisTarget target = new TestSource();
     TaskDescriptor descriptor = new TaskDescriptor('task',
         (context, target) => new TestAnalysisTask(context, target),
         (target) => {}, [new ResultDescriptor('output', null)]);
-    Object memento = new Object();
-    WorkItem item = new WorkItem(context, target, descriptor, memento);
+    WorkItem item = new WorkItem(context, target, descriptor);
     AnalysisTask task = item.buildTask();
     expect(task, isNotNull);
-    expect(task.inputMemento, memento);
   }
 
   test_buildTask_incomplete() {
-    AnalysisContext context = new AnalysisContextImpl();
     AnalysisTarget target = new TestSource();
     ResultDescriptor inputResult = new ResultDescriptor('input', null);
     List<ResultDescriptor> outputResults =
@@ -436,40 +423,33 @@
     TaskDescriptor descriptor = new TaskDescriptor('task', (context, target) =>
             new TestAnalysisTask(context, target, results: outputResults),
         (target) => {'one': inputResult.of(target)}, outputResults);
-    WorkItem item = new WorkItem(context, target, descriptor, null);
+    WorkItem item = new WorkItem(context, target, descriptor);
     expect(() => item.buildTask(), throwsStateError);
   }
 
   test_create() {
-    AnalysisContext context = new AnalysisContextImpl();
     AnalysisTarget target = new TestSource();
-    Object memento = new Object();
     TaskDescriptor descriptor = new TaskDescriptor(
         'task', null, (target) => {}, [new ResultDescriptor('result', null)]);
-    WorkItem item = new WorkItem(context, target, descriptor, memento);
+    WorkItem item = new WorkItem(context, target, descriptor);
     expect(item, isNotNull);
     expect(item.context, context);
     expect(item.descriptor, descriptor);
-    expect(item.inputMemento, memento);
     expect(item.target, target);
   }
 
   test_gatherInputs_complete() {
-    TaskManager manager = new TaskManager();
-    AnalysisContext context = new AnalysisContextImpl();
     AnalysisTarget target = new TestSource();
     TaskDescriptor descriptor = new TaskDescriptor('task',
         (context, target) => new TestAnalysisTask(context, target),
         (target) => {}, [new ResultDescriptor('output', null)]);
-    WorkItem item = new WorkItem(context, target, descriptor, null);
-    WorkItem result = item.gatherInputs(manager);
+    WorkItem item = new WorkItem(context, target, descriptor);
+    WorkItem result = item.gatherInputs(taskManager);
     expect(result, isNull);
     expect(item.exception, isNull);
   }
 
   test_gatherInputs_incomplete() {
-    TaskManager manager = new TaskManager();
-    AnalysisContextImpl context = new AnalysisContextImpl();
     AnalysisTarget target = new TestSource();
     ResultDescriptor resultA = new ResultDescriptor('resultA', null);
     ResultDescriptor resultB = new ResultDescriptor('resultB', null);
@@ -480,33 +460,23 @@
     TaskDescriptor task2 = new TaskDescriptor('task',
         (context, target) => new TestAnalysisTask(context, target),
         (target) => {'one': resultA.of(target)}, [resultB]);
-    manager.addTaskDescriptor(task1);
-    manager.addTaskDescriptor(task2);
-    // configure memento for "resultA"
-    dynamic memento = 'main() {}';
-    {
-      CacheEntry cacheEntry = context.getCacheEntry(target);
-      cacheEntry.setValue(resultA, null, TargetedResult.EMPTY_LIST, memento);
-      cacheEntry.setState(resultA, CacheState.INVALID);
-    }
+    taskManager.addTaskDescriptor(task1);
+    taskManager.addTaskDescriptor(task2);
     // gather inputs
-    WorkItem item = new WorkItem(context, target, task2, null);
-    WorkItem inputItem = item.gatherInputs(manager);
+    WorkItem item = new WorkItem(context, target, task2);
+    WorkItem inputItem = item.gatherInputs(taskManager);
     expect(inputItem, isNotNull);
-    expect(inputItem.inputMemento, memento);
   }
 
   test_gatherInputs_invalid() {
-    TaskManager manager = new TaskManager();
-    AnalysisContext context = new AnalysisContextImpl();
     AnalysisTarget target = new TestSource();
     ResultDescriptor inputResult = new ResultDescriptor('input', null);
     TaskDescriptor descriptor = new TaskDescriptor('task',
         (context, target) => new TestAnalysisTask(context, target),
         (target) => {'one': inputResult.of(target)},
         [new ResultDescriptor('output', null)]);
-    WorkItem item = new WorkItem(context, target, descriptor, null);
-    WorkItem result = item.gatherInputs(manager);
+    WorkItem item = new WorkItem(context, target, descriptor);
+    WorkItem result = item.gatherInputs(taskManager);
     expect(result, isNull);
     expect(item.exception, isNotNull);
   }
@@ -519,7 +489,7 @@
     TaskDescriptor descriptor = new TaskDescriptor(
         'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
     WorkOrder order =
-        new WorkOrder(manager, new WorkItem(null, null, descriptor, null));
+        new WorkOrder(manager, new WorkItem(null, null, descriptor));
     expect(order, isNotNull);
     expect(order.currentItem, isNull);
     expect(order.pendingItems, hasLength(1));
@@ -530,7 +500,7 @@
     TaskManager manager = new TaskManager();
     TaskDescriptor descriptor = new TaskDescriptor(
         'task', null, (_) => {}, [new ResultDescriptor('result', null)]);
-    WorkItem workItem = new WorkItem(null, null, descriptor, null);
+    WorkItem workItem = new WorkItem(null, null, descriptor);
     WorkOrder order = new WorkOrder(manager, workItem);
     // "item" has no child items
     expect(order.moveNext(), isTrue);
@@ -542,13 +512,36 @@
 }
 
 /**
- * An [AnalysisContextImpl] which allows to set explicit and implicit targets
- * directly.
+ * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself,
+ * but provides enough implementation for it to function.
  */
-class _TestContext extends AnalysisContextImpl {
+class _InternalAnalysisContextMock extends TypedMock
+    implements InternalAnalysisContext {
+  AnalysisCache analysisCache;
+
   @override
   List<AnalysisTarget> explicitTargets = <AnalysisTarget>[];
 
   @override
   List<AnalysisTarget> priorityTargets = <AnalysisTarget>[];
+
+  _InternalAnalysisContextMock() {
+    analysisCache = new AnalysisCache([new UniversalCachePartition(this)]);
+  }
+
+  @override
+  CacheEntry getCacheEntry(AnalysisTarget target) {
+    CacheEntry entry = analysisCache.get(target);
+    if (entry == null) {
+      entry = new CacheEntry(target);
+      analysisCache.put(entry);
+    }
+    return entry;
+  }
+
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+class _WorkManagerMock extends TypedMock implements WorkManager {
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
diff --git a/pkg/analyzer/test/src/task/incremental_element_builder_test.dart b/pkg/analyzer/test/src/task/incremental_element_builder_test.dart
new file mode 100644
index 0000000..dd05bcb
--- /dev/null
+++ b/pkg/analyzer/test/src/task/incremental_element_builder_test.dart
@@ -0,0 +1,597 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.src.task.incremental_element_builder_test;
+
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/task/incremental_element_builder.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../reflective_tests.dart';
+import '../context/abstract_context.dart';
+
+main() {
+  groupSep = ' | ';
+  runReflectiveTests(IncrementalCompilationUnitElementBuilderTest);
+}
+
+@reflectiveTest
+class IncrementalCompilationUnitElementBuilderTest extends AbstractContextTest {
+  Source source;
+  String oldCode;
+  CompilationUnit oldUnit;
+  CompilationUnitElement unitElement;
+
+  String newCode;
+  CompilationUnit newUnit;
+
+  String getNodeText(AstNode node) {
+    return newCode.substring(node.offset, node.end);
+  }
+
+  test_directives_add() {
+    _buildOldUnit(r'''
+library test;
+import 'dart:math';
+''');
+    _buildNewUnit(r'''
+library test;
+import 'dart:async';
+import 'dart:math';
+''');
+    var oldDirectives = oldUnit.directives;
+    var newDirectives = newUnit.directives;
+    {
+      Directive newNode = newDirectives[0];
+      expect(newNode, same(oldDirectives[0]));
+      expect(getNodeText(newNode), "library test;");
+      LibraryElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf('test;'));
+    }
+    {
+      Directive newNode = newDirectives[1];
+      expect(getNodeText(newNode), "import 'dart:async';");
+      ImportElement element = newNode.element;
+      expect(element, isNull);
+    }
+    {
+      Directive newNode = newDirectives[2];
+      expect(newNode, same(oldDirectives[1]));
+      expect(getNodeText(newNode), "import 'dart:math';");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import 'dart:math';"));
+    }
+  }
+
+  test_directives_keepOffset_partOf() {
+    String libCode = '''
+// comment to shift tokens
+library my_lib;
+part 'test.dart';
+''';
+    Source libSource = newSource('/lib.dart', libCode);
+    _buildOldUnit(r'''
+part of my_lib;
+class A {}
+''', libSource);
+    _buildNewUnit(r'''
+part of my_lib;
+class A {}
+''');
+    var oldDirectives = oldUnit.directives;
+    var newDirectives = newUnit.directives;
+    {
+      Directive newNode = newDirectives[0];
+      expect(newNode, same(oldDirectives[0]));
+      expect(getNodeText(newNode), 'part of my_lib;');
+      LibraryElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, libCode.indexOf('my_lib;'));
+    }
+  }
+
+  test_directives_remove() {
+    _buildOldUnit(r'''
+library test;
+import 'dart:async';
+import 'dart:math';
+''');
+    _buildNewUnit(r'''
+library test;
+import 'dart:math';
+''');
+    var oldDirectives = oldUnit.directives;
+    var newDirectives = newUnit.directives;
+    {
+      Directive newNode = newDirectives[0];
+      expect(newNode, same(oldDirectives[0]));
+      expect(getNodeText(newNode), "library test;");
+      LibraryElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf('test;'));
+    }
+    {
+      Directive newNode = newDirectives[1];
+      expect(newNode, same(oldDirectives[2]));
+      expect(getNodeText(newNode), "import 'dart:math';");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import 'dart:math';"));
+    }
+  }
+
+  test_directives_reorder() {
+    _buildOldUnit(r'''
+library test;
+import  'dart:math' as m;
+import 'dart:async';
+''');
+    _buildNewUnit(r'''
+library test;
+import 'dart:async';
+import 'dart:math' as m;
+''');
+    var oldDirectives = oldUnit.directives;
+    var newDirectives = newUnit.directives;
+    {
+      Directive newNode = newDirectives[0];
+      expect(newNode, same(oldDirectives[0]));
+      expect(getNodeText(newNode), "library test;");
+      LibraryElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf('test;'));
+    }
+    {
+      Directive newNode = newDirectives[1];
+      expect(newNode, same(oldDirectives[2]));
+      expect(getNodeText(newNode), "import 'dart:async';");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import 'dart:async';"));
+    }
+    {
+      Directive newNode = newDirectives[2];
+      expect(newNode, same(oldDirectives[1]));
+      expect(getNodeText(newNode), "import 'dart:math' as m;");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import 'dart:math' as m;"));
+      expect(element.prefix.nameOffset, newCode.indexOf("m;"));
+    }
+  }
+
+  test_directives_sameOrder_insertSpaces() {
+    _buildOldUnit(r'''
+library test;
+import 'dart:async';
+import 'dart:math';
+''');
+    _buildNewUnit(r'''
+library test;
+
+import 'dart:async' ;
+import  'dart:math';
+''');
+    var oldDirectives = oldUnit.directives;
+    var newDirectives = newUnit.directives;
+    {
+      Directive newNode = newDirectives[0];
+      expect(newNode, same(oldDirectives[0]));
+      expect(getNodeText(newNode), "library test;");
+      LibraryElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf('test;'));
+    }
+    {
+      Directive newNode = newDirectives[1];
+      expect(newNode, same(oldDirectives[1]));
+      expect(getNodeText(newNode), "import 'dart:async' ;");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import 'dart:async' ;"));
+    }
+    {
+      Directive newNode = newDirectives[2];
+      expect(newNode, same(oldDirectives[2]));
+      expect(getNodeText(newNode), "import  'dart:math';");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import  'dart:math';"));
+    }
+  }
+
+  test_directives_sameOrder_removeSpaces() {
+    _buildOldUnit(r'''
+library test;
+
+import 'dart:async' ;
+import  'dart:math';
+''');
+    _buildNewUnit(r'''
+library test;
+import 'dart:async';
+import 'dart:math';
+''');
+    var oldDirectives = oldUnit.directives;
+    var newDirectives = newUnit.directives;
+    {
+      Directive newNode = newDirectives[0];
+      expect(newNode, same(oldDirectives[0]));
+      expect(getNodeText(newNode), "library test;");
+      LibraryElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf('test;'));
+    }
+    {
+      Directive newNode = newDirectives[1];
+      expect(newNode, same(oldDirectives[1]));
+      expect(getNodeText(newNode), "import 'dart:async';");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import 'dart:async';"));
+    }
+    {
+      Directive newNode = newDirectives[2];
+      expect(newNode, same(oldDirectives[2]));
+      expect(getNodeText(newNode), "import 'dart:math';");
+      ImportElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.nameOffset, newCode.indexOf("import 'dart:math';"));
+    }
+  }
+
+  test_unitMembers_accessor_add() {
+    _buildOldUnit(r'''
+get a => 1;
+''');
+    _buildNewUnit(r'''
+get a => 1;
+get b => 2;
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    // nodes
+    FunctionDeclaration node1 = newNodes[0];
+    FunctionDeclaration node2 = newNodes[1];
+    expect(node1, same(oldNodes[0]));
+    // elements
+    PropertyAccessorElement elementA = node1.element;
+    PropertyAccessorElement elementB = node2.element;
+    expect(elementA, isNotNull);
+    expect(elementB, isNotNull);
+    expect(elementA.name, 'a');
+    expect(elementB.name, 'b');
+    // unit.types
+    expect(unitElement.topLevelVariables,
+        unorderedEquals([elementA.variable, elementB.variable]));
+    expect(unitElement.accessors, unorderedEquals([elementA, elementB]));
+  }
+
+  test_unitMembers_class_add() {
+    _buildOldUnit(r'''
+class A {}
+''');
+    _buildNewUnit(r'''
+class A {}
+class B {}
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    // nodes
+    CompilationUnitMember nodeA = newNodes[0];
+    CompilationUnitMember nodeB = newNodes[1];
+    expect(nodeA, same(oldNodes[0]));
+    // elements
+    ClassElement elementA = nodeA.element;
+    ClassElement elementB = nodeB.element;
+    expect(elementA, isNotNull);
+    expect(elementB, isNotNull);
+    expect(elementA.name, 'A');
+    expect(elementB.name, 'B');
+    // unit.types
+    expect(unitElement.types, unorderedEquals([elementA, elementB]));
+  }
+
+  test_unitMembers_class_comments() {
+    _buildOldUnit(r'''
+/// reference [bool] type.
+class A {}
+/// reference [int] type.
+class B {}
+/// reference [double] and [B] types.
+class C {}
+''');
+    _buildNewUnit(r'''
+/// reference [double] and [B] types.
+class C {}
+/// reference [bool] type.
+class A {}
+/// reference [int] type.
+class B {}
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    {
+      CompilationUnitMember newNode = newNodes[0];
+      expect(newNode, same(oldNodes[2]));
+      expect(getNodeText(newNode), r'''
+/// reference [double] and [B] types.
+class C {}''');
+      ClassElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.name, 'C');
+      expect(element.nameOffset, newCode.indexOf('C {}'));
+      // [double] and [B] are still resolved
+      {
+        var docReferences = newNode.documentationComment.references;
+        expect(docReferences, hasLength(2));
+        expect(docReferences[0].identifier.staticElement.name, 'double');
+        expect(docReferences[1].identifier.staticElement,
+            same(newNodes[2].element));
+      }
+    }
+    {
+      CompilationUnitMember newNode = newNodes[1];
+      expect(newNode, same(oldNodes[0]));
+      expect(getNodeText(newNode), r'''
+/// reference [bool] type.
+class A {}''');
+      ClassElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.name, 'A');
+      expect(element.nameOffset, newCode.indexOf('A {}'));
+      // [bool] is still resolved
+      {
+        var docReferences = newNode.documentationComment.references;
+        expect(docReferences, hasLength(1));
+        expect(docReferences[0].identifier.staticElement.name, 'bool');
+      }
+    }
+    {
+      CompilationUnitMember newNode = newNodes[2];
+      expect(newNode, same(oldNodes[1]));
+      expect(getNodeText(newNode), r'''
+/// reference [int] type.
+class B {}''');
+      ClassElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.name, 'B');
+      expect(element.nameOffset, newCode.indexOf('B {}'));
+      // [int] is still resolved
+      {
+        var docReferences = newNode.documentationComment.references;
+        expect(docReferences, hasLength(1));
+        expect(docReferences[0].identifier.staticElement.name, 'int');
+      }
+    }
+  }
+
+  test_unitMembers_class_reorder() {
+    _buildOldUnit(r'''
+class A {}
+class B {}
+class C {}
+''');
+    _buildNewUnit(r'''
+class C {}
+class A {}
+class B {}
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    {
+      CompilationUnitMember newNode = newNodes[0];
+      expect(newNode, same(oldNodes[2]));
+      expect(getNodeText(newNode), 'class C {}');
+      ClassElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.name, 'C');
+      expect(element.nameOffset, newCode.indexOf('C {}'));
+    }
+    {
+      CompilationUnitMember newNode = newNodes[1];
+      expect(newNode, same(oldNodes[0]));
+      expect(getNodeText(newNode), 'class A {}');
+      ClassElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.name, 'A');
+      expect(element.nameOffset, newCode.indexOf('A {}'));
+    }
+    {
+      CompilationUnitMember newNode = newNodes[2];
+      expect(newNode, same(oldNodes[1]));
+      expect(getNodeText(newNode), 'class B {}');
+      ClassElement element = newNode.element;
+      expect(element, isNotNull);
+      expect(element.name, 'B');
+      expect(element.nameOffset, newCode.indexOf('B {}'));
+    }
+  }
+
+  test_unitMembers_enum_add() {
+    _buildOldUnit(r'''
+enum A {A1, A2}
+''');
+    _buildNewUnit(r'''
+enum A {A1, A2}
+enum B {B1, B2}
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    // nodes
+    CompilationUnitMember nodeA = newNodes[0];
+    CompilationUnitMember nodeB = newNodes[1];
+    expect(nodeA, same(oldNodes[0]));
+    // elements
+    ClassElement elementA = nodeA.element;
+    ClassElement elementB = nodeB.element;
+    expect(elementA, isNotNull);
+    expect(elementB, isNotNull);
+    expect(elementA.name, 'A');
+    expect(elementB.name, 'B');
+    // unit.types
+    expect(unitElement.enums, unorderedEquals([elementA, elementB]));
+  }
+
+  test_unitMembers_function_add() {
+    _buildOldUnit(r'''
+a() {}
+''');
+    _buildNewUnit(r'''
+a() {}
+b() {}
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    // nodes
+    CompilationUnitMember nodeA = newNodes[0];
+    CompilationUnitMember nodeB = newNodes[1];
+    expect(nodeA, same(oldNodes[0]));
+    // elements
+    FunctionElement elementA = nodeA.element;
+    FunctionElement elementB = nodeB.element;
+    expect(elementA, isNotNull);
+    expect(elementB, isNotNull);
+    expect(elementA.name, 'a');
+    expect(elementB.name, 'b');
+    // unit.types
+    expect(unitElement.functions, unorderedEquals([elementA, elementB]));
+  }
+
+  test_unitMembers_functionTypeAlias_add() {
+    _buildOldUnit(r'''
+typedef A();
+''');
+    _buildNewUnit(r'''
+typedef A();
+typedef B();
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    // nodes
+    CompilationUnitMember nodeA = newNodes[0];
+    CompilationUnitMember nodeB = newNodes[1];
+    expect(nodeA, same(oldNodes[0]));
+    // elements
+    FunctionTypeAliasElement elementA = nodeA.element;
+    FunctionTypeAliasElement elementB = nodeB.element;
+    expect(elementA, isNotNull);
+    expect(elementB, isNotNull);
+    expect(elementA.name, 'A');
+    expect(elementB.name, 'B');
+    // unit.types
+    expect(
+        unitElement.functionTypeAliases, unorderedEquals([elementA, elementB]));
+  }
+
+  test_unitMembers_topLevelVariable_add() {
+    _buildOldUnit(r'''
+int a, b;
+''');
+    _buildNewUnit(r'''
+int a, b;
+int c, d;
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    // nodes
+    TopLevelVariableDeclaration node1 = newNodes[0];
+    TopLevelVariableDeclaration node2 = newNodes[1];
+    expect(node1, same(oldNodes[0]));
+    // elements
+    TopLevelVariableElement elementA = node1.variables.variables[0].element;
+    TopLevelVariableElement elementB = node1.variables.variables[1].element;
+    TopLevelVariableElement elementC = node2.variables.variables[0].element;
+    TopLevelVariableElement elementD = node2.variables.variables[1].element;
+    expect(elementA, isNotNull);
+    expect(elementB, isNotNull);
+    expect(elementC, isNotNull);
+    expect(elementD, isNotNull);
+    expect(elementA.name, 'a');
+    expect(elementB.name, 'b');
+    expect(elementC.name, 'c');
+    expect(elementD.name, 'd');
+    // unit.types
+    expect(unitElement.topLevelVariables,
+        unorderedEquals([elementA, elementB, elementC, elementD]));
+    expect(unitElement.accessors, unorderedEquals([
+      elementA.getter,
+      elementA.setter,
+      elementB.getter,
+      elementB.setter,
+      elementC.getter,
+      elementC.setter,
+      elementD.getter,
+      elementD.setter
+    ]));
+  }
+
+  test_unitMembers_topLevelVariableDeclaration() {
+    _buildOldUnit(r'''
+bool a = 1, b = 2;
+int c = 3;
+''');
+    _buildNewUnit(r'''
+int c = 3;
+
+bool a =1, b = 2;
+''');
+    List<CompilationUnitMember> oldNodes = oldUnit.declarations;
+    List<CompilationUnitMember> newNodes = newUnit.declarations;
+    {
+      TopLevelVariableDeclaration newNode = newNodes[0];
+      expect(newNode, same(oldNodes[1]));
+      expect(getNodeText(newNode), 'int c = 3;');
+      {
+        TopLevelVariableElement element =
+            newNode.variables.variables[0].element;
+        expect(element, isNotNull);
+        expect(element.name, 'c');
+        expect(element.nameOffset, newCode.indexOf('c = 3'));
+      }
+    }
+    {
+      TopLevelVariableDeclaration newNode = newNodes[1];
+      expect(newNode, same(oldNodes[0]));
+      expect(getNodeText(newNode), 'bool a =1, b = 2;');
+      {
+        TopLevelVariableElement element =
+            newNode.variables.variables[0].element;
+        expect(element, isNotNull);
+        expect(element.name, 'a');
+        expect(element.nameOffset, newCode.indexOf('a =1'));
+      }
+      {
+        TopLevelVariableElement element =
+            newNode.variables.variables[1].element;
+        expect(element, isNotNull);
+        expect(element.name, 'b');
+        expect(element.nameOffset, newCode.indexOf('b = 2'));
+      }
+    }
+  }
+
+  void _buildNewUnit(String newCode) {
+    this.newCode = newCode;
+    context.setContents(source, newCode);
+    newUnit = context.parseCompilationUnit(source);
+    new IncrementalCompilationUnitElementBuilder(oldUnit, newUnit).build();
+    expect(newUnit.element, unitElement);
+  }
+
+  void _buildOldUnit(String oldCode, [Source libSource]) {
+    this.oldCode = oldCode;
+    source = newSource('/test.dart', oldCode);
+    if (libSource == null) {
+      libSource = source;
+    }
+    oldUnit = context.resolveCompilationUnit2(source, libSource);
+    unitElement = oldUnit.element;
+    expect(unitElement, isNotNull);
+  }
+}
diff --git a/pkg/analyzer/test/src/task/model_test.dart b/pkg/analyzer/test/src/task/model_test.dart
index 5fd31ec7..b75afd6 100644
--- a/pkg/analyzer/test/src/task/model_test.dart
+++ b/pkg/analyzer/test/src/task/model_test.dart
@@ -17,8 +17,8 @@
 main() {
   groupSep = ' | ';
   runReflectiveTests(AnalysisTaskTest);
-  runReflectiveTests(ContributionPointImplTest);
   runReflectiveTests(ResultDescriptorImplTest);
+  runReflectiveTests(SimpleResultCachingPolicyTest);
   runReflectiveTests(TaskDescriptorImplTest);
 }
 
@@ -56,52 +56,20 @@
 }
 
 @reflectiveTest
-class ContributionPointImplTest extends EngineTestCase {
-  test_contributors_empty() {
-    CompositeResultDescriptorImpl point =
-        new CompositeResultDescriptorImpl('point');
-    List<ResultDescriptor> contributors = point.contributors;
-    expect(contributors, isEmpty);
-  }
-
-  test_contributors_nonEmpty() {
-    ResultDescriptorImpl result1 = new ResultDescriptorImpl('result1', null);
-    ResultDescriptorImpl result2 = new ResultDescriptorImpl('result2', null);
-    CompositeResultDescriptorImpl point =
-        new CompositeResultDescriptorImpl('point');
-    point.recordContributor(result1);
-    point.recordContributor(result2);
-    List<ResultDescriptor> contributors = point.contributors;
-    expect(contributors, isNotNull);
-    expect(contributors, hasLength(2));
-    if (!(contributors[0] == result1 && contributors[1] == result2) ||
-        (contributors[0] == result2 && contributors[1] == result1)) {
-      fail("Invalid contributors: $contributors");
-    }
-  }
-
-  test_create() {
-    expect(new CompositeResultDescriptorImpl('name'), isNotNull);
-  }
-
-  test_name() {
-    String name = 'point';
-    CompositeResultDescriptorImpl point =
-        new CompositeResultDescriptorImpl(name);
-    expect(point.name, name);
-  }
-}
-
-@reflectiveTest
 class ResultDescriptorImplTest extends EngineTestCase {
-  test_create_withContribution() {
-    CompositeResultDescriptorImpl point =
-        new CompositeResultDescriptorImpl('point');
+  test_create_withCachingPolicy() {
+    ResultCachingPolicy policy = new SimpleResultCachingPolicy(128, 16);
     ResultDescriptorImpl result =
-        new ResultDescriptorImpl('result', null, contributesTo: point);
-    expect(result, isNotNull);
-    List<ResultDescriptor> contributors = point.contributors;
-    expect(contributors, unorderedEquals([result]));
+        new ResultDescriptorImpl('result', null, cachingPolicy: policy);
+    expect(result.cachingPolicy, same(policy));
+  }
+
+  test_create_withoutCachingPolicy() {
+    ResultDescriptorImpl result = new ResultDescriptorImpl('result', null);
+    ResultCachingPolicy cachingPolicy = result.cachingPolicy;
+    expect(cachingPolicy, isNotNull);
+    expect(cachingPolicy.maxActiveSize, -1);
+    expect(cachingPolicy.maxIdleSize, -1);
   }
 
   test_create_withoutContribution() {
@@ -123,6 +91,16 @@
 }
 
 @reflectiveTest
+class SimpleResultCachingPolicyTest extends EngineTestCase {
+  test_create() {
+    ResultCachingPolicy policy = new SimpleResultCachingPolicy(256, 32);
+    expect(policy.maxActiveSize, 256);
+    expect(policy.maxIdleSize, 32);
+    expect(policy.measure(null), 1);
+  }
+}
+
+@reflectiveTest
 class TaskDescriptorImplTest extends EngineTestCase {
   test_create() {
     String name = 'name';
@@ -148,13 +126,10 @@
     AnalysisContext context = null;
     AnalysisTarget target = new TestSource();
     Map<String, dynamic> inputs = {};
-    String inputMemento = 'main() {}';
-    AnalysisTask createTask =
-        descriptor.createTask(context, target, inputs, inputMemento);
+    AnalysisTask createTask = descriptor.createTask(context, target, inputs);
     expect(createTask, isNotNull);
     expect(createTask.context, context);
     expect(createTask.inputs, inputs);
-    expect(createTask.inputMemento, inputMemento);
     expect(createTask.target, target);
   }
 }
diff --git a/pkg/analyzer/test/src/task/test_all.dart b/pkg/analyzer/test/src/task/test_all.dart
index bee52dc..2b6de23 100644
--- a/pkg/analyzer/test/src/task/test_all.dart
+++ b/pkg/analyzer/test/src/task/test_all.dart
@@ -7,8 +7,11 @@
 import 'package:unittest/unittest.dart';
 
 import 'dart_test.dart' as dart_test;
+import 'dart_work_manager_test.dart' as dart_work_manager_test;
 import 'driver_test.dart' as driver_test;
 import 'general_test.dart' as general_test;
+import 'incremental_element_builder_test.dart'
+    as incremental_element_builder_test;
 import 'inputs_test.dart' as inputs_test;
 import 'manager_test.dart' as manager_test;
 import 'model_test.dart' as model_test;
@@ -18,8 +21,10 @@
   groupSep = ' | ';
   group('task tests', () {
     dart_test.main();
+    dart_work_manager_test.main();
     driver_test.main();
     general_test.main();
+    incremental_element_builder_test.main();
     inputs_test.main();
     manager_test.main();
     model_test.main();
diff --git a/pkg/analyzer/test/src/task/test_support.dart b/pkg/analyzer/test/src/task/test_support.dart
index 7ac0d82..80cd7c3 100644
--- a/pkg/analyzer/test/src/task/test_support.dart
+++ b/pkg/analyzer/test/src/task/test_support.dart
@@ -23,11 +23,6 @@
   CaughtException exception;
 
   /**
-   * The memento to associate with the result.
-   */
-  dynamic memento;
-
-  /**
    * The results whose values are to be provided as outputs from this task.
    */
   List<ResultDescriptor> results;
@@ -38,8 +33,7 @@
   int value;
 
   TestAnalysisTask(AnalysisContext context, AnalysisTarget target,
-      {this.descriptor, this.exception, this.memento, this.results,
-      this.value: 1})
+      {this.descriptor, this.exception, this.results, this.value: 1})
       : super(context, target);
 
   @override
@@ -53,12 +47,10 @@
       for (ResultDescriptor result in results) {
         outputs[result] = value++;
       }
-      outputMemento = memento;
     } else if (descriptor != null) {
       for (ResultDescriptor result in descriptor.results) {
         outputs[result] = value++;
       }
-      outputMemento = memento;
     }
   }
 }
diff --git a/pkg/analyzer2dart/lib/src/modely.dart b/pkg/analyzer2dart/lib/src/modely.dart
index 640680f..b386d5a 100644
--- a/pkg/analyzer2dart/lib/src/modely.dart
+++ b/pkg/analyzer2dart/lib/src/modely.dart
@@ -420,7 +420,7 @@
 }
 
 class ParameterElementY extends ElementY
-    with AnalyzableElementY, AstElementY
+    with AnalyzableElementY, AstElementY, VariableElementMixin
     implements dart2js.ParameterElement {
 
   analyzer.ParameterElement get element => super.element;
@@ -459,12 +459,6 @@
   get functionDeclaration => unsupported('functionDeclaration');
 
   @override
-  get initializer => unsupported('initializer');
-
-  @override
-  get memberContext => unsupported('memberContext');
-
-  @override
   get functionSignature => unsupported('functionSignature');
 }
 
@@ -718,6 +712,9 @@
 
   @override
   get memberContext => unsupported('memberContext');
+
+  @override
+  get constant => unsupported('constant');
 }
 
 class TopLevelVariableElementY extends ElementY
@@ -861,6 +858,21 @@
 
   @override
   get nestedClosures => unsupported('nestedClosures');
+
+  @override
+  get constantConstructor => unsupported('constantConstructor');
+
+  @override
+  get isFromEnvironmentConstructor {
+    unsupported('isFromEnvironmentConstructor');
+  }
+
+  @override
+  bool get isCyclicRedirection => effectiveTarget.isRedirectingFactory;
+
+  // TODO(johnniwinther): implement redirectionDeferredPrefix
+  @override
+  dart2js.PrefixElement get redirectionDeferredPrefix => null;
 }
 
 class InstanceMethodElementY extends ElementY
diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
index 242fb82..355e526 100644
--- a/pkg/compiler/lib/src/closure.dart
+++ b/pkg/compiler/lib/src/closure.dart
@@ -4,20 +4,20 @@
 
 library closureToClassMapper;
 
-import "elements/elements.dart";
-import "dart2jslib.dart";
-import "dart_types.dart";
-import "js_backend/js_backend.dart" show JavaScriptBackend;
-import "scanner/scannerlib.dart" show Token;
-import "tree/tree.dart";
-import "util/util.dart";
-import "elements/modelx.dart"
+import 'constants/expressions.dart';
+import 'dart2jslib.dart';
+import 'dart_types.dart';
+import 'elements/elements.dart';
+import 'elements/modelx.dart'
     show BaseFunctionElementX,
          ClassElementX,
          ElementX,
          LocalFunctionElementX;
-import "elements/visitor.dart" show ElementVisitor;
-
+import 'elements/visitor.dart' show ElementVisitor;
+import 'js_backend/js_backend.dart' show JavaScriptBackend;
+import 'scanner/scannerlib.dart' show Token;
+import 'tree/tree.dart';
+import 'util/util.dart';
 import 'universe/universe.dart' show
     Universe;
 
@@ -151,6 +151,9 @@
 
   @override
   List<FunctionElement> get nestedClosures => const <FunctionElement>[];
+
+  @override
+  ConstantExpression get constant => null;
 }
 
 // TODO(ahe): These classes continuously cause problems.  We need to find
@@ -276,6 +279,9 @@
   ResolvedAst get resolvedAst {
     throw new UnsupportedError("BoxFieldElement.resolvedAst");
   }
+
+  @override
+  ConstantExpression get constant => null;
 }
 
 /// A local variable used encode the direct (uncaptured) references to [this].
@@ -298,7 +304,7 @@
                                 LocalFunctionElementX other,
                                 ClosureClassElement enclosing)
       : expression = other,
-        super(name, other.kind, other.modifiers, enclosing, false) {
+        super(name, other.kind, other.modifiers, enclosing) {
     asyncMarker = other.asyncMarker;
     functionSignatureCache = other.functionSignature;
   }
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
index 83e1307..6273efa 100644
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ b/pkg/compiler/lib/src/compile_time_constants.dart
@@ -348,7 +348,7 @@
     DartType type = elements.getType(node);
     return new AstConstant(
         context, node, new ListConstantExpression(
-            new ListConstantValue(type, argumentValues),
+            constantSystem.createList(type, argumentValues),
             type,
             argumentExpressions));
   }
@@ -479,10 +479,8 @@
   }
 
   ConstantExpression makeTypeConstant(DartType elementType) {
-    DartType constantType =
-        compiler.backend.typeImplementation.computeType(compiler);
     return new TypeConstantExpression(
-        new TypeConstantValue(elementType, constantType), elementType);
+        constantSystem.createType(compiler, elementType), elementType);
   }
 
   /// Returns true if the prefix of the send resolves to a deferred import
@@ -827,15 +825,6 @@
       CallStructure callStructure,
       List<AstConstant> normalizedArguments,
       List<AstConstant> concreteArguments) {
-    AstConstant createEvaluatedConstant(ConstantValue value) {
-      return new AstConstant(
-          context, node, new ConstructedConstantExpression(
-              value,
-              type,
-              constructor,
-              callStructure,
-              concreteArguments.map((e) => e.expression).toList()));
-    }
 
     var firstArgument = normalizedArguments[0].value;
     ConstantValue defaultValue = normalizedArguments[1].value;
@@ -881,8 +870,26 @@
       return null;
     }
 
+    String name =
+        firstArgument.primitiveValue.slowToString();
     String value =
-        compiler.fromEnvironment(firstArgument.primitiveValue.slowToString());
+        compiler.fromEnvironment(name);
+
+    AstConstant createEvaluatedConstant(ConstantValue value) {
+
+      ConstantExpression expression;
+      if (constructor == compiler.intEnvironment) {
+        expression = new IntFromEnvironmentConstantExpression(
+            value, name, normalizedArguments[1].expression);
+      } else if (constructor == compiler.boolEnvironment) {
+        expression = new BoolFromEnvironmentConstantExpression(
+            value, name, normalizedArguments[1].expression);
+      } else if (constructor == compiler.stringEnvironment) {
+        expression = new StringFromEnvironmentConstantExpression(
+            value, name, normalizedArguments[1].expression);
+      }
+      return new AstConstant(context, node, expression);
+    }
 
     if (value == null) {
       return createEvaluatedConstant(defaultValue);
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 4671212..6d8b6d0 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -25,6 +25,7 @@
    * Invariant: [element] must be a declaration element.
    */
   final AstElement element;
+
   TreeElements get resolutionTree;
 
   WorkItem(this.element, this.compilationContext) {
@@ -186,16 +187,30 @@
 /// [WorkItem] used exclusively by the [CodegenEnqueuer].
 class CodegenWorkItem extends WorkItem {
   Registry registry;
-  final TreeElements resolutionTree;
 
-  CodegenWorkItem(AstElement element,
-                  ItemCompilationContext compilationContext)
-      : this.resolutionTree = element.resolvedAst.elements,
-        super(element, compilationContext) {
-    assert(invariant(element, resolutionTree != null,
+  factory CodegenWorkItem(
+      Compiler compiler,
+      AstElement element,
+      ItemCompilationContext compilationContext) {
+    // If this assertion fails, the resolution callbacks of the backend may be
+    // missing call of form registry.registerXXX. Alternatively, the code
+    // generation could spuriously be adding dependencies on things we know we
+    // don't need.
+    assert(invariant(element,
+        compiler.enqueuer.resolution.hasBeenResolved(element),
+        message: "$element has not been resolved."));
+    assert(invariant(element, element.resolvedAst.elements != null,
         message: 'Resolution tree is null for $element in codegen work item'));
+    return new CodegenWorkItem.internal(element, compilationContext);
   }
 
+  CodegenWorkItem.internal(
+      AstElement element,
+      ItemCompilationContext compilationContext)
+      : super(element, compilationContext);
+
+  TreeElements get resolutionTree => element.resolvedAst.elements;
+
   void run(Compiler compiler, CodegenEnqueuer world) {
     if (world.isProcessed(element)) return;
 
@@ -418,7 +433,7 @@
   /// have special treatment, such as being allowed to extends blacklisted
   /// classes or member being eagerly resolved.
   bool isBackendLibrary(LibraryElement library) {
-    // TODO(johnnwinther): Remove this when patching is only done by the
+    // TODO(johnniwinther): Remove this when patching is only done by the
     // JavaScript backend.
     Uri canonicalUri = library.canonicalUri;
     if (canonicalUri == js_backend.JavaScriptBackend.DART_JS_HELPER ||
@@ -654,7 +669,7 @@
   final CacheStrategy cacheStrategy;
 
   /**
-   * Map from token to the first preceeding comment token.
+   * Map from token to the first preceding comment token.
    */
   final TokenMap commentMap = new TokenMap();
 
@@ -852,9 +867,15 @@
   Element identicalFunction;
   Element loadLibraryFunction;
   Element functionApplyMethod;
-  Element intEnvironment;
-  Element boolEnvironment;
-  Element stringEnvironment;
+
+  /// The [int.fromEnvironment] constructor.
+  ConstructorElement intEnvironment;
+
+  /// The [bool.fromEnvironment] constructor.
+  ConstructorElement boolEnvironment;
+
+  /// The [String.fromEnvironment] constructor.
+  ConstructorElement stringEnvironment;
 
   /// Tracks elements with compile-time errors.
   final Set<Element> elementsWithCompileTimeErrors = new Set<Element>();
@@ -1053,7 +1074,7 @@
       progress = new Stopwatch()..start();
     }
 
-    // TODO(johnniwinther): Separate the dependency tracking from the enqueueing
+    // TODO(johnniwinther): Separate the dependency tracking from the enqueuing
     // for global dependencies.
     globalDependencies =
         new CodegenRegistry(this, new TreeElementMapping(null));
@@ -2420,7 +2441,10 @@
   InterfaceType get numType => numClass.computeType(compiler);
 
   @override
-  InterfaceType get stringType =>  stringClass.computeType(compiler);
+  InterfaceType get stringType => stringClass.computeType(compiler);
+
+  @override
+  InterfaceType get typeType => typeClass.computeType(compiler);
 
   @override
   InterfaceType iterableType([DartType elementType = const DynamicType()]) {
diff --git a/pkg/compiler/lib/src/constant_system_dart.dart b/pkg/compiler/lib/src/constant_system_dart.dart
index a827d59..f140cf5 100644
--- a/pkg/compiler/lib/src/constant_system_dart.dart
+++ b/pkg/compiler/lib/src/constant_system_dart.dart
@@ -394,13 +394,31 @@
 
   const DartConstantSystem();
 
+
+  @override
   IntConstantValue createInt(int i) => new IntConstantValue(i);
+
+  @override
   DoubleConstantValue createDouble(double d) => new DoubleConstantValue(d);
+
+  @override
   StringConstantValue createString(DartString string) {
     return new StringConstantValue(string);
   }
+
+  @override
   BoolConstantValue createBool(bool value) => new BoolConstantValue(value);
+
+  @override
   NullConstantValue createNull() => new NullConstantValue();
+
+  @override
+  ListConstantValue createList(InterfaceType type,
+                               List<ConstantValue> values) {
+    return new ListConstantValue(type, values);
+  }
+
+  @override
   MapConstantValue createMap(Compiler compiler,
                              InterfaceType type,
                              List<ConstantValue> keys,
@@ -408,6 +426,15 @@
     return new MapConstantValue(type, keys, values);
   }
 
+  @override
+  ConstantValue createType(Compiler compiler, DartType type) {
+    // TODO(johnniwinther): Change the `Type` type to
+    // `compiler.coreTypes.typeType` and check the backend specific value in
+    // [checkConstMapKeysDontOverrideEquals] in 'members.dart'.
+    return new TypeConstantValue(type,
+        compiler.backend.typeImplementation.computeType(compiler));
+  }
+
   bool isInt(ConstantValue constant) => constant.isInt;
   bool isDouble(ConstantValue constant) => constant.isDouble;
   bool isString(ConstantValue constant) => constant.isString;
diff --git a/pkg/compiler/lib/src/constants/constant_system.dart b/pkg/compiler/lib/src/constants/constant_system.dart
index e8260b9..085fe29 100644
--- a/pkg/compiler/lib/src/constants/constant_system.dart
+++ b/pkg/compiler/lib/src/constants/constant_system.dart
@@ -61,10 +61,16 @@
   ConstantValue createString(DartString string);
   ConstantValue createBool(bool value);
   ConstantValue createNull();
+  ConstantValue createList(InterfaceType type,
+                           List<ConstantValue> values);
+  // TODO(johnniwinther): Remove the need for [compiler].
   ConstantValue createMap(Compiler compiler,
                           InterfaceType type,
                           List<ConstantValue> keys,
                           List<ConstantValue> values);
+  // TODO(johnniwinther): Remove the need for [compiler].
+  ConstantValue createType(Compiler compiler,
+                           DartType type);
 
   // We need to special case the subtype check for JavaScript constant
   // system because an int is a double at runtime.
diff --git a/pkg/compiler/lib/src/constants/constructors.dart b/pkg/compiler/lib/src/constants/constructors.dart
new file mode 100644
index 0000000..3c09a94
--- /dev/null
+++ b/pkg/compiler/lib/src/constants/constructors.dart
@@ -0,0 +1,376 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js.constants.constructors;
+
+import '../elements/elements.dart';
+import 'expressions.dart';
+import 'values.dart';
+import '../dart_types.dart';
+import '../resolution/resolution.dart';
+import '../resolution/operators.dart';
+import '../resolution/semantic_visitor.dart';
+import '../resolution/send_structure.dart';
+import '../dart2jslib.dart';
+import '../tree/tree.dart';
+
+ConstantConstructor computeConstantConstructor(ResolvedAst resolvedAst) {
+  ConstantConstructorComputer visitor =
+      new ConstantConstructorComputer(resolvedAst.elements);
+  return resolvedAst.node.accept(visitor);
+}
+
+class ConstantConstructorComputer extends SemanticVisitor
+    with SemanticDeclarationResolvedMixin,
+         DeclarationResolverMixin,
+         GetBulkMixin,
+         SetBulkMixin,
+         ErrorBulkMixin,
+         InvokeBulkMixin,
+         IndexSetBulkMixin,
+         CompoundBulkMixin,
+         UnaryBulkMixin,
+         BaseBulkMixin,
+         BinaryBulkMixin,
+         PrefixBulkMixin,
+         PostfixBulkMixin,
+         NewBulkMixin,
+         InitializerBulkMixin,
+         FunctionBulkMixin,
+         VariableBulkMixin
+    implements SemanticDeclarationVisitor, SemanticSendVisitor {
+  final Map<FieldElement, ConstantExpression> fieldMap =
+      <FieldElement, ConstantExpression>{};
+  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues =
+      <dynamic/*int|String*/, ConstantExpression>{};
+
+  ConstantConstructorComputer(TreeElements elements)
+      : super(elements);
+
+  SemanticDeclarationVisitor get declVisitor => this;
+
+  SemanticSendVisitor get sendVisitor => this;
+
+  ClassElement get currentClass => currentConstructor.enclosingClass;
+
+  ConstructorElement get currentConstructor => elements.analyzedElement;
+
+  apply(Node node, [_]) => node.accept(this);
+
+  visitNode(Node node) {
+    internalError(node, 'Unhandled node $node: ${node.toDebugString()}');
+  }
+
+  @override
+  bulkHandleNode(Node node, String template, _) {
+    internalError(node, template.replaceFirst('#' , '$node'));
+  }
+
+  internalError(Node node, String message) {
+    throw new UnsupportedError(message);
+  }
+
+  ConstantConstructor visitGenerativeConstructorDeclaration(
+        FunctionExpression node,
+        ConstructorElement constructor,
+        NodeList parameters,
+        NodeList initializers,
+        Node body,
+        _) {
+    applyParameters(parameters, _);
+    ConstructedConstantExpression constructorInvocation =
+        applyInitializers(initializers, _);
+    return new GenerativeConstantConstructor(
+        currentClass.thisType, defaultValues, fieldMap, constructorInvocation);
+  }
+
+  ConstantConstructor visitRedirectingGenerativeConstructorDeclaration(
+      FunctionExpression node,
+      ConstructorElement constructor,
+      NodeList parameters,
+      NodeList initializers,
+      _) {
+    applyParameters(parameters, _);
+    ConstructedConstantExpression constructorInvocation =
+        applyInitializers(initializers, _);
+    return new RedirectingGenerativeConstantConstructor(
+        defaultValues, constructorInvocation);
+  }
+
+  ConstantConstructor visitRedirectingFactoryConstructorDeclaration(
+      FunctionExpression node,
+      ConstructorElement constructor,
+      NodeList parameters,
+      InterfaceType redirectionType,
+      ConstructorElement redirectionTarget,
+      _) {
+    List<String> argumentNames = [];
+    List<ConstantExpression> arguments = [];
+    int index = 0;
+    for (ParameterElement parameter in constructor.parameters) {
+      if (parameter.isNamed) {
+        String name = parameter.name;
+        argumentNames.add(name);
+        arguments.add(new NamedArgumentReference(name));
+      } else {
+        arguments.add(new PositionalArgumentReference(index));
+      }
+      index++;
+    }
+    CallStructure callStructure = new CallStructure(index, argumentNames);
+
+    return new RedirectingFactoryConstantConstructor(
+        new ConstructedConstantExpression(null,
+            redirectionType,
+            redirectionTarget,
+            callStructure,
+            arguments));
+  }
+
+  @override
+  visitFactoryConstructorDeclaration(
+      FunctionExpression node,
+      ConstructorElement constructor,
+      NodeList parameters,
+      Node body, _) {
+    // TODO(johnniwinther): Handle constant constructors with errors.
+    internalError(node, "Factory constructor cannot be constant.");
+  }
+
+  applyParameters(NodeList parameters, _) {
+    computeParameterStructures(parameters).forEach((s) => s.dispatch(this, _));
+  }
+
+  visitParameterDeclaration(
+      VariableDefinitions node,
+      Node definition,
+      ParameterElement parameter,
+      int index,
+      _) {
+    // Do nothing.
+  }
+
+  visitOptionalParameterDeclaration(
+      VariableDefinitions node,
+      Node definition,
+      ParameterElement parameter,
+      ConstantExpression defaultValue,
+      int index,
+      _) {
+    assert(invariant(node, defaultValue != null));
+    defaultValues[index] = defaultValue;
+  }
+
+  visitNamedParameterDeclaration(
+      VariableDefinitions node,
+      Node definition,
+      ParameterElement parameter,
+      ConstantExpression defaultValue,
+      _) {
+    assert(invariant(node, defaultValue != null));
+    String name = parameter.name;
+    defaultValues[name] = defaultValue;
+  }
+
+  visitInitializingFormalDeclaration(
+      VariableDefinitions node,
+      Node definition,
+      InitializingFormalElement parameter,
+      int index,
+      _) {
+    fieldMap[parameter.fieldElement] = new PositionalArgumentReference(index);
+  }
+
+  visitOptionalInitializingFormalDeclaration(
+      VariableDefinitions node,
+      Node definition,
+      InitializingFormalElement parameter,
+      ConstantExpression defaultValue,
+      int index,
+      _) {
+    assert(invariant(node, defaultValue != null));
+    defaultValues[index] = defaultValue;
+    fieldMap[parameter.fieldElement] = new PositionalArgumentReference(index);
+  }
+
+  visitNamedInitializingFormalDeclaration(
+      VariableDefinitions node,
+      Node definition,
+      InitializingFormalElement parameter,
+      ConstantExpression defaultValue,
+      _) {
+    assert(invariant(node, defaultValue != null));
+    String name = parameter.name;
+    defaultValues[name] = defaultValue;
+    fieldMap[parameter.fieldElement] = new NamedArgumentReference(name);
+  }
+
+  /// Apply this visitor to the constructor [initializers].
+  ConstructedConstantExpression applyInitializers(NodeList initializers, _) {
+    ConstructedConstantExpression constructorInvocation;
+    if (initializers != null) {
+      for (Node initializer in initializers) {
+        InitializerStructure structure =
+            computeInitializerStructure(initializer);
+        if (structure is SuperConstructorInvokeStructure ||
+            structure is ThisConstructorInvokeStructure) {
+          constructorInvocation = structure.dispatch(this, initializer, _);
+        } else {
+          structure.dispatch(this, initializer, _);
+        }
+      }
+    }
+    if (constructorInvocation == null && !currentClass.isObject) {
+      constructorInvocation =
+          new ConstructedConstantExpression(null,
+              currentClass.supertype,
+              currentClass.superclass.lookupDefaultConstructor(),
+              CallStructure.NO_ARGS,
+              const <ConstantExpression>[]);
+    }
+    return constructorInvocation;
+  }
+
+  visitFieldInitializer(
+      SendSet node,
+      FieldElement field,
+      Node initializer,
+      _) {
+    fieldMap[field] = apply(initializer);
+  }
+
+  visitParameterGet(
+      Send node,
+      ParameterElement parameter,
+      _) {
+    if (parameter.isNamed) {
+      return new NamedArgumentReference(parameter.name);
+    } else {
+      return new PositionalArgumentReference(
+          parameter.functionDeclaration.parameters.indexOf(parameter));
+    }
+  }
+
+  ConstructedConstantExpression visitSuperConstructorInvoke(
+      Send node,
+      ConstructorElement superConstructor,
+      InterfaceType type,
+      NodeList arguments,
+      Selector selector,
+      _) {
+    List<ConstantExpression> argumentExpression =
+        arguments.nodes.map((a) => apply(a)).toList();
+    return new ConstructedConstantExpression(null,
+        type,
+        superConstructor,
+        selector.callStructure,
+        argumentExpression);
+  }
+
+  ConstructedConstantExpression visitThisConstructorInvoke(
+      Send node,
+      ConstructorElement thisConstructor,
+      NodeList arguments,
+      Selector selector,
+      _) {
+    List<ConstantExpression> argumentExpression =
+        arguments.nodes.map((a) => apply(a)).toList();
+    return new ConstructedConstantExpression(null,
+        currentClass.thisType,
+        thisConstructor,
+        selector.callStructure,
+        argumentExpression);
+  }
+
+  @override
+  ConstantExpression visitBinary(
+      Send node,
+      Node left,
+      BinaryOperator operator,
+      Node right,
+      _) {
+    return new BinaryConstantExpression(null,
+        apply(left), operator, apply(right));
+  }
+
+
+  @override
+  ConstantExpression visitUnary(
+      Send node,
+      UnaryOperator operator,
+      Node expression,
+      _) {
+    return new UnaryConstantExpression(null,
+        operator, apply(expression));
+  }
+
+  @override
+  ConstantExpression visitStaticFieldGet(
+      Send node,
+      FieldElement field,
+      _) {
+    return new VariableConstantExpression(null, field);
+  }
+
+  @override
+  ConstantExpression visitTopLevelFieldGet(
+      Send node,
+      FieldElement field,
+      _) {
+    return new VariableConstantExpression(null, field);
+  }
+
+  @override
+  ConstantExpression visitLiteralInt(LiteralInt node) {
+    return new IntConstantExpression(
+        node.value, new IntConstantValue(node.value));
+  }
+
+  @override
+  ConstantExpression visitLiteralBool(LiteralBool node) {
+    return new BoolConstantExpression(node.value, null);
+  }
+
+  @override
+  ConstantExpression visitLiteralNull(LiteralNull node) {
+    return new NullConstantExpression(new NullConstantValue());
+  }
+
+  @override
+  ConstantExpression visitLiteralString(LiteralString node) {
+    return new StringConstantExpression(node.dartString.slowToString(), null);
+  }
+
+  @override
+  ConstantExpression visitConditional(Conditional node) {
+    return new ConditionalConstantExpression(null,
+        apply(node.condition),
+        apply(node.thenExpression),
+        apply(node.elseExpression));
+  }
+
+  @override
+  ConstantExpression visitParenthesizedExpression(ParenthesizedExpression node) {
+    return apply(node.expression);
+  }
+
+  @override
+  ConstantExpression visitTopLevelFunctionInvoke(
+      Send node,
+      MethodElement function,
+      NodeList arguments,
+      CallStructure callStructure,
+      _) {
+    if (function.name != 'identical' || !function.library.isDartCore) {
+      throw new UnsupportedError("Unexpected function call: $function");
+    }
+    return new IdenticalConstantExpression(
+        null, apply(arguments.nodes.head), apply(arguments.nodes.tail.head));
+  }
+
+  @override
+  ConstantExpression visitNamedArgument(NamedArgument node) {
+    return apply(node.expression);
+  }
+}
\ No newline at end of file
diff --git a/pkg/compiler/lib/src/constants/expressions.dart b/pkg/compiler/lib/src/constants/expressions.dart
index c454975..0c6a6ac 100644
--- a/pkg/compiler/lib/src/constants/expressions.dart
+++ b/pkg/compiler/lib/src/constants/expressions.dart
@@ -4,21 +4,25 @@
 
 library dart2js.constants.expressions;
 
-import '../dart2jslib.dart' show assertDebugMode;
+import '../constants/constant_system.dart';
+import '../dart2jslib.dart' show assertDebugMode, Compiler;
 import '../dart_types.dart';
 import '../elements/elements.dart' show
     ConstructorElement,
     Element,
+    FieldElement,
     FunctionElement,
     PrefixElement,
     VariableElement;
 import '../resolution/operators.dart';
+import '../tree/tree.dart' show DartString;
 import '../universe/universe.dart' show CallStructure;
 import 'values.dart';
 
 enum ConstantExpressionKind {
   BINARY,
   BOOL,
+  BOOL_FROM_ENVIRONMENT,
   CONCATENATE,
   CONDITIONAL,
   CONSTRUCTED,
@@ -28,14 +32,218 @@
   FUNCTION,
   IDENTICAL,
   INT,
+  INT_FROM_ENVIRONMENT,
   LIST,
   MAP,
   NULL,
   STRING,
+  STRING_FROM_ENVIRONMENT,
   SYMBOL,
   TYPE,
   UNARY,
   VARIABLE,
+
+  POSITIONAL_REFERENCE,
+  NAMED_REFERENCE,
+}
+
+/// Environment used for evaluating constant expressions.
+abstract class Environment {
+  // TODO(johnniwinther): Replace this with [CoreTypes] and maybe [Backend].
+  Compiler get compiler;
+
+  /// Read environments string passed in using the '-Dname=value' option.
+  String readFromEnvironment(String name);
+}
+
+/// The normalized arguments passed to a const constructor computed from the
+/// actual [arguments] and the [defaultValues] of the called construrctor.
+class NormalizedArguments {
+  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues;
+  final CallStructure callStructure;
+  final List<ConstantExpression> arguments;
+
+  NormalizedArguments(this.defaultValues, this.callStructure, this.arguments);
+
+  /// Returns the normalized named argument [name].
+  ConstantExpression getNamedArgument(String name) {
+    int index = callStructure.namedArguments.indexOf(name);
+    if (index == -1) {
+      // The named argument is not provided.
+      return defaultValues[name];
+    }
+    return arguments[index + callStructure.positionalArgumentCount];
+  }
+
+  /// Returns the normalized [index]th positional argument.
+  ConstantExpression getPositionalArgument(int index) {
+    if (index >= callStructure.positionalArgumentCount) {
+      // The positional argument is not provided.
+      return defaultValues[index];
+    }
+    return arguments[index];
+  }
+}
+
+enum ConstantConstructorKind {
+  GENERATIVE,
+  REDIRECTING_GENERATIVE,
+  REDIRECTING_FACTORY,
+}
+
+/// Definition of a constant constructor.
+abstract class ConstantConstructor {
+  ConstantConstructorKind get kind;
+
+  /// Computes the type of the instance created in a const constructor
+  /// invocation with type [newType].
+  InterfaceType computeInstanceType(InterfaceType newType);
+
+  /// Computes the constant expressions of the fields of the created instance
+  /// in a const constructor invocation with [arguments].
+  Map<FieldElement, ConstantExpression> computeInstanceFields(
+      List<ConstantExpression> arguments,
+      CallStructure callStructure);
+}
+
+/// A generative constant constructor.
+class GenerativeConstantConstructor implements ConstantConstructor{
+  final InterfaceType type;
+  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues;
+  final Map<FieldElement, ConstantExpression> fieldMap;
+  final ConstructedConstantExpression superConstructorInvocation;
+
+  GenerativeConstantConstructor(
+      this.type,
+      this.defaultValues,
+      this.fieldMap,
+      this.superConstructorInvocation);
+
+  ConstantConstructorKind get kind => ConstantConstructorKind.GENERATIVE;
+
+  InterfaceType computeInstanceType(InterfaceType newType) {
+    return type.substByContext(newType);
+  }
+
+  Map<FieldElement, ConstantExpression> computeInstanceFields(
+      List<ConstantExpression> arguments,
+      CallStructure callStructure) {
+    NormalizedArguments args = new NormalizedArguments(
+        defaultValues, callStructure, arguments);
+    Map<FieldElement, ConstantExpression> appliedFieldMap =
+        applyFields(args, superConstructorInvocation);
+    fieldMap.forEach((FieldElement field, ConstantExpression constant) {
+     appliedFieldMap[field] = constant.apply(args);
+    });
+    return appliedFieldMap;
+  }
+
+  String toString() {
+    StringBuffer sb = new StringBuffer();
+    sb.write("{'type': $type");
+    defaultValues.forEach((key, ConstantExpression expression) {
+      sb.write(",\n 'default:${key}': ${expression.getText()}");
+    });
+    fieldMap.forEach((FieldElement field, ConstantExpression expression) {
+      sb.write(",\n 'field:${field}': ${expression.getText()}");
+    });
+    if (superConstructorInvocation != null) {
+      sb.write(",\n 'constructor: ${superConstructorInvocation.getText()}");
+    }
+    sb.write("}");
+    return sb.toString();
+  }
+
+  /// Creates the field-to-constant map from applying [args] to
+  /// [constructorInvocation]. If [constructorInvocation] is `null`, an empty
+  /// map is created.
+  static Map<FieldElement, ConstantExpression> applyFields(
+      NormalizedArguments args,
+      ConstructedConstantExpression constructorInvocation) {
+    Map<FieldElement, ConstantExpression> appliedFieldMap =
+        <FieldElement, ConstantExpression>{};
+    if (constructorInvocation != null) {
+      Map<FieldElement, ConstantExpression> fieldMap =
+          constructorInvocation.computeInstanceFields();
+      fieldMap.forEach((FieldElement field, ConstantExpression constant) {
+        appliedFieldMap[field] = constant.apply(args);
+      });
+    }
+    return appliedFieldMap;
+  }
+}
+
+/// A redirecting generative constant constructor.
+class RedirectingGenerativeConstantConstructor implements ConstantConstructor {
+  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues;
+  final ConstructedConstantExpression thisConstructorInvocation;
+
+  RedirectingGenerativeConstantConstructor(
+      this.defaultValues,
+      this.thisConstructorInvocation);
+
+  ConstantConstructorKind get kind {
+    return ConstantConstructorKind.REDIRECTING_GENERATIVE;
+  }
+
+  InterfaceType computeInstanceType(InterfaceType newType) {
+    return thisConstructorInvocation.computeInstanceType()
+        .substByContext(newType);
+  }
+
+  Map<FieldElement, ConstantExpression> computeInstanceFields(
+      List<ConstantExpression> arguments,
+      CallStructure callStructure) {
+    NormalizedArguments args =
+        new NormalizedArguments(defaultValues, callStructure, arguments);
+    Map<FieldElement, ConstantExpression> appliedFieldMap =
+        GenerativeConstantConstructor.applyFields(
+            args, thisConstructorInvocation);
+    return appliedFieldMap;
+  }
+
+  String toString() {
+    StringBuffer sb = new StringBuffer();
+    sb.write("{'type': ${thisConstructorInvocation.type}");
+    defaultValues.forEach((key, ConstantExpression expression) {
+      sb.write(",\n 'default:${key}': ${expression.getText()}");
+    });
+    sb.write(",\n 'constructor': ${thisConstructorInvocation.getText()}");
+    sb.write("}");
+    return sb.toString();
+  }
+}
+
+/// A redirecting factory constant constructor.
+class RedirectingFactoryConstantConstructor implements ConstantConstructor {
+  final ConstructedConstantExpression targetConstructorInvocation;
+
+  RedirectingFactoryConstantConstructor(this.targetConstructorInvocation);
+
+  ConstantConstructorKind get kind {
+    return ConstantConstructorKind.REDIRECTING_FACTORY;
+  }
+
+  InterfaceType computeInstanceType(InterfaceType newType) {
+    return targetConstructorInvocation.computeInstanceType()
+        .substByContext(newType);
+  }
+
+  Map<FieldElement, ConstantExpression> computeInstanceFields(
+      List<ConstantExpression> arguments,
+      CallStructure callStructure) {
+    ConstantConstructor constantConstructor =
+        targetConstructorInvocation.target.constantConstructor;
+    return constantConstructor.computeInstanceFields(arguments, callStructure);
+  }
+
+  String toString() {
+    StringBuffer sb = new StringBuffer();
+    sb.write("{");
+    sb.write("'constructor': ${targetConstructorInvocation.getText()}");
+    sb.write("}");
+    return sb.toString();
+  }
 }
 
 /// An expression that is a compile-time constant.
@@ -53,6 +261,8 @@
   ConstantExpressionKind get kind;
 
   /// Returns the value of this constant expression.
+  // TODO(johnniwinther): Replace this with an evaluation method that takes
+  // a constant system and an environment.
   ConstantValue get value;
 
   // TODO(johnniwinther): Unify precedence handled between constants, front-end
@@ -61,6 +271,14 @@
 
   accept(ConstantExpressionVisitor visitor, [context]);
 
+  /// Substitute free variables using arguments.
+  ConstantExpression apply(NormalizedArguments arguments) => this;
+
+  /// Compute the [ConstantValue] for this expression using the [environment]
+  /// and the [constantSystem].
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem);
+
   String getText() {
     ConstExpPrinter printer = new ConstExpPrinter();
     accept(printer);
@@ -104,6 +322,13 @@
   }
 
   @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    // TODO(johnniwinther): Use non-constant values for errors.
+    return value;
+  }
+
+  @override
   int _computeHashCode() => 13;
 
   @override
@@ -118,10 +343,6 @@
 
   /// The primitive value of this contant expression.
   get primitiveValue;
-
-  accept(ConstantExpressionVisitor visitor, [context]) {
-    return visitor.visitPrimitive(this, context);
-  }
 }
 
 /// Boolean literal constant.
@@ -133,6 +354,16 @@
 
   ConstantExpressionKind get kind => ConstantExpressionKind.BOOL;
 
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitBool(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createBool(primitiveValue);
+  }
+
   @override
   int _computeHashCode() => 13 * primitiveValue.hashCode;
 
@@ -151,6 +382,16 @@
 
   ConstantExpressionKind get kind => ConstantExpressionKind.INT;
 
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitInt(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createInt(primitiveValue);
+  }
+
   @override
   int _computeHashCode() => 17 * primitiveValue.hashCode;
 
@@ -169,6 +410,16 @@
 
   ConstantExpressionKind get kind => ConstantExpressionKind.DOUBLE;
 
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitDouble(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createDouble(primitiveValue);
+  }
+
   @override
   int _computeHashCode() => 19 * primitiveValue.hashCode;
 
@@ -187,6 +438,16 @@
 
   ConstantExpressionKind get kind => ConstantExpressionKind.STRING;
 
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitString(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createString(new DartString.literal(primitiveValue));
+  }
+
   @override
   int _computeHashCode() => 23 * primitiveValue.hashCode;
 
@@ -202,6 +463,16 @@
 
   ConstantExpressionKind get kind => ConstantExpressionKind.NULL;
 
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitNull(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createNull();
+  }
+
   get primitiveValue => null;
 
   @override
@@ -226,6 +497,18 @@
   }
 
   @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createList(type,
+        values.map((v) => v.evaluate(environment, constantSystem)).toList());
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new ListConstantExpression(null, type,
+        values.map((v) => v.apply(arguments)).toList());
+  }
+
+  @override
   int _computeHashCode() {
     int hashCode = 13 * type.hashCode + 17 * values.length;
     for (ConstantExpression value in values) {
@@ -261,6 +544,21 @@
   }
 
   @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createMap(environment.compiler,
+        type,
+        keys.map((k) => k.evaluate(environment, constantSystem)).toList(),
+        values.map((v) => v.evaluate(environment, constantSystem)).toList());
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new MapConstantExpression(null, type,
+        keys.map((k) => k.apply(arguments)).toList(),
+        values.map((v) => v.apply(arguments)).toList());
+  }
+
+  @override
   int _computeHashCode() {
     int hashCode = 13 * type.hashCode + 17 * values.length;
     for (ConstantExpression value in values) {
@@ -296,6 +594,7 @@
       this.callStructure,
       this.arguments) {
     assert(type.element == target.enclosingClass);
+    assert(!arguments.contains(null));
   }
 
   ConstantExpressionKind get kind => ConstantExpressionKind.CONSTRUCTED;
@@ -304,6 +603,33 @@
     return visitor.visitConstructed(this, context);
   }
 
+  Map<FieldElement, ConstantExpression> computeInstanceFields() {
+    return target.constantConstructor.computeInstanceFields(
+        arguments, callStructure);
+  }
+
+  InterfaceType computeInstanceType() {
+    return target.constantConstructor.computeInstanceType(type);
+  }
+
+  ConstructedConstantExpression apply(NormalizedArguments arguments) {
+    return new ConstructedConstantExpression(null,
+        type, target, callStructure,
+        this.arguments.map((a) => a.apply(arguments)).toList());
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    Map<FieldElement, ConstantValue> fieldValues =
+        <FieldElement, ConstantValue>{};
+    computeInstanceFields().forEach(
+        (FieldElement field, ConstantExpression constant) {
+      fieldValues[field] = constant.evaluate(environment, constantSystem);
+    });
+    return new ConstructedConstantValue(computeInstanceType(), fieldValues);
+  }
+
   @override
   int _computeHashCode() {
     int hashCode =
@@ -331,9 +657,9 @@
 /// String literal with juxtaposition and/or interpolations.
 class ConcatenateConstantExpression extends ConstantExpression {
   final StringConstantValue value;
-  final List<ConstantExpression> arguments;
+  final List<ConstantExpression> expressions;
 
-  ConcatenateConstantExpression(this.value, this.arguments);
+  ConcatenateConstantExpression(this.value, this.expressions);
 
   ConstantExpressionKind get kind => ConstantExpressionKind.CONCATENATE;
 
@@ -341,10 +667,43 @@
     return visitor.visitConcatenate(this, context);
   }
 
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new ConcatenateConstantExpression(null,
+        expressions.map((a) => a.apply(arguments)).toList());
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    DartString accumulator;
+    for (ConstantExpression expression in expressions) {
+      ConstantValue value = expression.evaluate(environment, constantSystem);
+      DartString valueString;
+      if (value.isNum || value.isBool) {
+        PrimitiveConstantValue primitive = value;
+        valueString =
+            new DartString.literal(primitive.primitiveValue.toString());
+      } else if (value.isString) {
+        PrimitiveConstantValue primitive = value;
+        valueString = primitive.primitiveValue;
+      } else {
+        // TODO(johnniwinther): Specialize message to indicated that the problem
+        // is not constness but the types of the const expressions.
+        return new NonConstantValue();
+      }
+      if (accumulator == null) {
+        accumulator = valueString;
+      } else {
+        accumulator = new DartString.concat(accumulator, valueString);
+      }
+    }
+    return constantSystem.createString(accumulator);
+  }
+
   @override
   int _computeHashCode() {
-    int hashCode = 17 * arguments.length;
-    for (ConstantExpression value in arguments) {
+    int hashCode = 17 * expressions.length;
+    for (ConstantExpression value in expressions) {
       hashCode ^= 19 * value.hashCode;
     }
     return hashCode;
@@ -352,9 +711,9 @@
 
   @override
   bool _equals(ConcatenateConstantExpression other) {
-    if (arguments.length != other.arguments.length) return false;
-    for (int i = 0; i < arguments.length; i++) {
-      if (arguments[i] != other.arguments[i]) return false;
+    if (expressions.length != other.expressions.length) return false;
+    for (int i = 0; i < expressions.length; i++) {
+      if (expressions[i] != other.expressions[i]) return false;
     }
     return true;
   }
@@ -380,6 +739,13 @@
   bool _equals(SymbolConstantExpression other) {
     return name == other.name;
   }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    // TODO(johnniwinther): Implement this.
+    throw new UnsupportedError('SymbolConstantExpression.evaluate');
+  }
 }
 
 /// Type literal.
@@ -399,6 +765,12 @@
   }
 
   @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.createType(environment.compiler, type);
+  }
+
+  @override
   int _computeHashCode() => 13 * type.hashCode;
 
   @override
@@ -421,6 +793,12 @@
   }
 
   @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return element.constant.evaluate(environment, constantSystem);
+  }
+
+  @override
   int _computeHashCode() => 13 * element.hashCode;
 
   @override
@@ -443,6 +821,12 @@
   }
 
   @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return new FunctionConstantValue(element);
+  }
+
+  @override
   int _computeHashCode() => 13 * element.hashCode;
 
   @override
@@ -468,6 +852,22 @@
     return visitor.visitBinary(this, context);
   }
 
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.lookupBinary(operator).fold(
+        left.evaluate(environment, constantSystem),
+        right.evaluate(environment, constantSystem));
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new BinaryConstantExpression(
+        value,
+        left.apply(arguments),
+        operator,
+        right.apply(arguments));
+  }
+
   int get precedence => PRECEDENCE_MAP[operator.kind];
 
   @override
@@ -521,6 +921,21 @@
     return visitor.visitIdentical(this, context);
   }
 
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.identity.fold(
+        left.evaluate(environment, constantSystem),
+        right.evaluate(environment, constantSystem));
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new IdenticalConstantExpression(
+        value,
+        left.apply(arguments),
+        right.apply(arguments));
+  }
+
   int get precedence => 15;
 
   @override
@@ -552,6 +967,20 @@
     return visitor.visitUnary(this, context);
   }
 
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return constantSystem.lookupUnary(operator).fold(
+        expression.evaluate(environment, constantSystem));
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new UnaryConstantExpression(
+        value,
+        operator,
+        expression.apply(arguments));
+  }
+
   int get precedence => PRECEDENCE_MAP[operator.kind];
 
   @override
@@ -591,6 +1020,14 @@
     return visitor.visitConditional(this, context);
   }
 
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new ConditionalConstantExpression(
+        value,
+        condition.apply(arguments),
+        trueExp.apply(arguments),
+        falseExp.apply(arguments));
+  }
+
   int get precedence => 3;
 
   @override
@@ -606,6 +1043,225 @@
            trueExp == other.trueExp &&
            falseExp == other.falseExp;
   }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    ConstantValue conditionValue =
+        condition.evaluate(environment, constantSystem);
+    ConstantValue trueValue =
+        trueExp.evaluate(environment, constantSystem);
+    ConstantValue falseValue =
+        falseExp.evaluate(environment, constantSystem);
+    if (conditionValue.isTrue) {
+      return trueValue;
+    } else if (conditionValue.isFalse) {
+      return falseValue;
+    } else {
+      return new NonConstantValue();
+    }
+  }
+}
+
+/// A reference to a position parameter.
+class PositionalArgumentReference extends ConstantExpression {
+  final int index;
+
+  PositionalArgumentReference(this.index);
+
+  ConstantExpressionKind get kind {
+    return ConstantExpressionKind.POSITIONAL_REFERENCE;
+  }
+
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitPositional(this, context);
+  }
+
+  ConstantValue get value {
+    throw new UnsupportedError('PositionalArgumentReference.value');
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return arguments.getPositionalArgument(index);
+  }
+
+  @override
+  int _computeHashCode() => 13 * index.hashCode;
+
+  @override
+  bool _equals(PositionalArgumentReference other) => index == other.index;
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    throw new UnsupportedError('PositionalArgumentReference.evaluate');
+  }
+}
+
+/// A reference to a named parameter.
+class NamedArgumentReference extends ConstantExpression {
+  final String name;
+
+  NamedArgumentReference(this.name);
+
+  ConstantExpressionKind get kind {
+    return ConstantExpressionKind.NAMED_REFERENCE;
+  }
+
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitNamed(this, context);
+  }
+
+  ConstantValue get value {
+    throw new UnsupportedError('NamedArgumentReference.value');
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return arguments.getNamedArgument(name);
+  }
+
+  @override
+  int _computeHashCode() => 13 * name.hashCode;
+
+  @override
+  bool _equals(NamedArgumentReference other) => name == other.name;
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    throw new UnsupportedError('NamedArgumentReference.evaluate');
+  }
+}
+
+abstract class FromEnvironmentConstantExpression extends ConstantExpression {
+  final ConstantValue value;
+  final String name;
+  final ConstantExpression defaultValue;
+
+  FromEnvironmentConstantExpression(this.value, this.name, this.defaultValue);
+
+  @override
+  int _computeHashCode() {
+    return 13 * name.hashCode +
+           17 * defaultValue.hashCode;
+  }
+
+  @override
+  bool _equals(FromEnvironmentConstantExpression other) {
+    return name == other.name &&
+           defaultValue == other.defaultValue;
+  }
+}
+
+/// A `const bool.fromEnvironment` constant.
+class BoolFromEnvironmentConstantExpression
+    extends FromEnvironmentConstantExpression {
+
+  BoolFromEnvironmentConstantExpression(
+      ConstantValue value,
+      String name,
+      ConstantExpression defaultValue)
+      : super(value, name, defaultValue);
+
+  ConstantExpressionKind get kind {
+    return ConstantExpressionKind.BOOL_FROM_ENVIRONMENT;
+  }
+
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitBoolFromEnvironment(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    String text = environment.readFromEnvironment(name);
+    if (text == 'true') {
+      return constantSystem.createBool(true);
+    } else if (text == 'false') {
+      return constantSystem.createBool(false);
+    } else {
+      return defaultValue.evaluate(environment, constantSystem);
+    }
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new BoolFromEnvironmentConstantExpression(
+        null, name, defaultValue.apply(arguments));
+  }
+}
+
+/// A `const int.fromEnvironment` constant.
+class IntFromEnvironmentConstantExpression
+    extends FromEnvironmentConstantExpression {
+
+  IntFromEnvironmentConstantExpression(
+      ConstantValue value,
+      String name,
+      ConstantExpression defaultValue)
+      : super(value, name, defaultValue);
+
+  ConstantExpressionKind get kind {
+    return ConstantExpressionKind.INT_FROM_ENVIRONMENT;
+  }
+
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitIntFromEnvironment(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    int value;
+    String text = environment.readFromEnvironment(name);
+    if (text != null) {
+      value = int.parse(text, onError: (_) => null);
+    }
+    if (value == null) {
+      return defaultValue.evaluate(environment, constantSystem);
+    } else {
+      return constantSystem.createInt(value);
+    }
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new IntFromEnvironmentConstantExpression(
+        null, name, defaultValue.apply(arguments));
+  }
+}
+
+/// A `const String.fromEnvironment` constant.
+class StringFromEnvironmentConstantExpression
+    extends FromEnvironmentConstantExpression {
+
+  StringFromEnvironmentConstantExpression(
+      ConstantValue value,
+      String name,
+      ConstantExpression defaultValue)
+      : super(value, name, defaultValue);
+
+  ConstantExpressionKind get kind {
+    return ConstantExpressionKind.STRING_FROM_ENVIRONMENT;
+  }
+
+  accept(ConstantExpressionVisitor visitor, [context]) {
+    return visitor.visitStringFromEnvironment(this, context);
+  }
+
+  @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    String text = environment.readFromEnvironment(name);
+    if (text == null) {
+      return defaultValue.evaluate(environment, constantSystem);
+    } else {
+      return constantSystem.createString(new DartString.literal(text));
+    }
+  }
+
+  ConstantExpression apply(NormalizedArguments arguments) {
+    return new StringFromEnvironmentConstantExpression(
+        null, name, defaultValue.apply(arguments));
+  }
 }
 
 /// A constant expression referenced with a deferred prefix.
@@ -620,6 +1276,12 @@
   ConstantExpressionKind get kind => ConstantExpressionKind.DEFERRED;
 
   @override
+  ConstantValue evaluate(Environment environment,
+                         ConstantSystem constantSystem) {
+    return expression.evaluate(environment, constantSystem);
+  }
+
+  @override
   int _computeHashCode() {
     return 13 * expression.hashCode;
   }
@@ -635,27 +1297,40 @@
   }
 }
 
-abstract class ConstantExpressionVisitor<C, R> {
+abstract class ConstantExpressionVisitor<R, A> {
   const ConstantExpressionVisitor();
 
-  R visit(ConstantExpression constant, C context) {
+  R visit(ConstantExpression constant, A context) {
     return constant.accept(this, context);
   }
 
-  R visitPrimitive(PrimitiveConstantExpression exp, C context);
-  R visitList(ListConstantExpression exp, C context);
-  R visitMap(MapConstantExpression exp, C context);
-  R visitConstructed(ConstructedConstantExpression exp, C context);
-  R visitConcatenate(ConcatenateConstantExpression exp, C context);
-  R visitSymbol(SymbolConstantExpression exp, C context);
-  R visitType(TypeConstantExpression exp, C context);
-  R visitVariable(VariableConstantExpression exp, C context);
-  R visitFunction(FunctionConstantExpression exp, C context);
-  R visitBinary(BinaryConstantExpression exp, C context);
-  R visitIdentical(IdenticalConstantExpression exp, C context);
-  R visitUnary(UnaryConstantExpression exp, C context);
-  R visitConditional(ConditionalConstantExpression exp, C context);
-  R visitDeferred(DeferredConstantExpression exp, C context);
+  R visitBool(BoolConstantExpression exp, A context);
+  R visitInt(IntConstantExpression exp, A context);
+  R visitDouble(DoubleConstantExpression exp, A context);
+  R visitString(StringConstantExpression exp, A context);
+  R visitNull(NullConstantExpression exp, A context);
+  R visitList(ListConstantExpression exp, A context);
+  R visitMap(MapConstantExpression exp, A context);
+  R visitConstructed(ConstructedConstantExpression exp, A context);
+  R visitConcatenate(ConcatenateConstantExpression exp, A context);
+  R visitSymbol(SymbolConstantExpression exp, A context);
+  R visitType(TypeConstantExpression exp, A context);
+  R visitVariable(VariableConstantExpression exp, A context);
+  R visitFunction(FunctionConstantExpression exp, A context);
+  R visitBinary(BinaryConstantExpression exp, A context);
+  R visitIdentical(IdenticalConstantExpression exp, A context);
+  R visitUnary(UnaryConstantExpression exp, A context);
+  R visitConditional(ConditionalConstantExpression exp, A context);
+  R visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp,
+                             A context);
+  R visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp,
+                            A context);
+  R visitStringFromEnvironment(StringFromEnvironmentConstantExpression exp,
+                               A context);
+  R visitDeferred(DeferredConstantExpression exp, A context);
+
+  R visitPositional(PositionalArgumentReference exp, A context);
+  R visitNamed(NamedArgumentReference exp, A context);
 }
 
 /// Represents the declaration of a constant [element] with value [expression].
@@ -702,9 +1377,34 @@
     return constant.accept(this, null);
   }
 
+  void visitPrimitive(PrimitiveConstantExpression exp) {
+    sb.write(exp.primitiveValue);
+  }
+
   @override
-  void visitPrimitive(PrimitiveConstantExpression exp, [_]) {
-    sb.write(exp.value.unparse());
+  void visitBool(BoolConstantExpression exp, [_]) {
+    visitPrimitive(exp);
+  }
+
+  @override
+  void visitDouble(DoubleConstantExpression exp, [_]) {
+    visitPrimitive(exp);
+  }
+
+  @override
+  void visitInt(IntConstantExpression exp, [_]) {
+    visitPrimitive(exp);
+  }
+
+  @override
+  void visitNull(NullConstantExpression exp, [_]) {
+    visitPrimitive(exp);
+  }
+
+  @override
+  void visitString(StringConstantExpression exp, [_]) {
+    // TODO(johnniwinther): Ensure correct escaping.
+    sb.write('"${exp.primitiveValue}"');
   }
 
   @override
@@ -839,11 +1539,46 @@
   }
 
   @override
-  visitDeferred(DeferredConstantExpression exp, context) {
+  void visitPositional(PositionalArgumentReference exp, [_]) {
+    // TODO(johnniwinther): Maybe this should throw.
+    sb.write('args[${exp.index}]');
+  }
+
+  @override
+  void visitNamed(NamedArgumentReference exp, [_]) {
+    // TODO(johnniwinther): Maybe this should throw.
+    sb.write('args[${exp.name}]');
+  }
+
+  @override
+  void visitDeferred(DeferredConstantExpression exp, context) {
     sb.write(exp.prefix.deferredImport.prefix.source);
     sb.write('.');
     write(exp, exp.expression);
   }
 
+  @override
+  void visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp,
+                                [_]) {
+    sb.write('const bool.fromEnvironment("${exp.name}", defaultValue: ');
+    visit(exp.defaultValue);
+    sb.write(')');
+  }
+
+  @override
+  void visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp, [_]) {
+    sb.write('const int.fromEnvironment("${exp.name}", defaultValue: ');
+    visit(exp.defaultValue);
+    sb.write(')');
+  }
+
+  @override
+  void visitStringFromEnvironment(StringFromEnvironmentConstantExpression exp,
+                                  [_]) {
+    sb.write('const String.fromEnvironment("${exp.name}", defaultValue: ');
+    visit(exp.defaultValue);
+    sb.write(')');
+  }
+
   String toString() => sb.toString();
 }
\ No newline at end of file
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 45f47ea..e40a6b8 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -39,6 +39,9 @@
 abstract class ConstantValue {
   const ConstantValue();
 
+  /// `true` if this is a valid constant value.
+  bool get isConstant => true;
+
   bool get isNull => false;
   bool get isBool => false;
   bool get isTrue => false;
@@ -482,9 +485,11 @@
 
   String toStructuredString() {
     StringBuffer sb = new StringBuffer();
-    sb.write('ListConstant([');
+    sb.write('ListConstant(');
+    _unparseTypeArguments(sb);
+    sb.write('[');
     for (int i = 0 ; i < length ; i++) {
-      if (i > 0) sb.write(',');
+      if (i > 0) sb.write(', ');
       sb.write(entries[i].toStructuredString());
     }
     sb.write('])');
@@ -551,11 +556,13 @@
 
   String toStructuredString() {
     StringBuffer sb = new StringBuffer();
-    sb.write('MapConstant({');
+    sb.write('MapConstant(');
+    _unparseTypeArguments(sb);
+    sb.write('{');
     for (int i = 0; i < length; i++) {
-      if (i > 0) sb.write(',');
+      if (i > 0) sb.write(', ');
       sb.write(keys[i].toStructuredString());
-      sb.write(':');
+      sb.write(': ');
       sb.write(values[i].toStructuredString());
     }
     sb.write('})');
@@ -717,3 +724,27 @@
 
   String toStructuredString() => 'DeferredConstant($referenced)';
 }
+
+/// A constant value resulting from a non constant or erroneous constant
+/// expression.
+// TODO(johnniwinther): Expand this to contain the error kind.
+class NonConstantValue extends ConstantValue {
+  bool get isConstant => false;
+
+  @override
+  accept(ConstantValueVisitor visitor, arg) {
+    // TODO(johnniwinther): Should this be part of the visiting?
+  }
+
+  @override
+  List<ConstantValue> getDependencies() => const <ConstantValue>[];
+
+  @override
+  DartType getType(CoreTypes types) => const DynamicType();
+
+  @override
+  String toStructuredString() => 'NonConstant';
+
+  @override
+  String unparse() => '>>non-constant<<';
+}
\ No newline at end of file
diff --git a/pkg/compiler/lib/src/core_types.dart b/pkg/compiler/lib/src/core_types.dart
index a1ec975..c2e66c6 100644
--- a/pkg/compiler/lib/src/core_types.dart
+++ b/pkg/compiler/lib/src/core_types.dart
@@ -33,6 +33,9 @@
   /// The `Null` type defined in 'dart:core'.
   InterfaceType get nullType;
 
+  /// The `Type` type defined in 'dart:core'.
+  InterfaceType get typeType;
+
   /// Returns an instance of the `List` type defined in 'dart:core' with
   /// [elementType] as its type argument.
   InterfaceType listType([DartType elementType = const DynamicType()]);
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
index d511047..3297497 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
@@ -457,6 +457,9 @@
   void _createFunctionParameter(Local parameterElement);
   void _createThisParameter();
 
+  /// Reifies the value of [variable] on the current receiver object.
+  ir.Primitive buildReifyTypeVariable(TypeVariableType variable);
+
   /// Creates an access to the receiver from the current (or enclosing) method.
   ///
   /// If inside a closure class, [buildThis] will redirect access through
@@ -488,9 +491,15 @@
   }
 
   /// Creates a [ir.MutableVariable] for the given local.
-  void makeMutableVariable(Local local) {
-    mutableVariables[local] =
-        new ir.MutableVariable(local.executableContext, local);
+  void makeMutableVariable(Local local, [ClosureClassMap closureMap]) {
+    ExecutableElement owner;
+    if (closureMap == null || closureMap.closureClassElement == null) {
+      owner = local.executableContext;
+    } else {
+      assert(local.executableContext == closureMap.closureElement);
+      owner = closureMap.callElement;
+    }
+    mutableVariables[local] = new ir.MutableVariable(owner, local);
   }
 
   /// Remove an [ir.MutableVariable] for a local.
@@ -1711,7 +1720,8 @@
   void buildTry(
       {TryStatementInfo tryStatementInfo,
        SubbuildFunction buildTryBlock,
-       List<CatchClauseInfo> catchClauseInfos: const <CatchClauseInfo>[]}) {
+       List<CatchClauseInfo> catchClauseInfos: const <CatchClauseInfo>[],
+       ClosureClassMap closureClassMap}) {
     assert(isOpen);
 
     // Catch handlers are in scope for their body.  The CPS translation of
@@ -1753,7 +1763,7 @@
     for (LocalVariableElement variable in tryStatementInfo.boxedOnEntry) {
       assert(!tryCatchBuilder.isInMutableVariable(variable));
       ir.Primitive value = tryCatchBuilder.buildLocalVariableGet(variable);
-      tryCatchBuilder.makeMutableVariable(variable);
+      tryCatchBuilder.makeMutableVariable(variable, closureClassMap);
       tryCatchBuilder.declareLocalVariable(variable, initialValue: value);
     }
 
@@ -1786,39 +1796,78 @@
       catchBuilder.environment.update(variable, value);
     }
 
-    // TODO(kmillikin): Handle multiple catch clauses.
-    assert(catchClauseInfos.length == 1);
-    for (CatchClauseInfo catchClauseInfo in catchClauseInfos) {
-      LocalVariableElement exceptionVariable =
-          catchClauseInfo.exceptionVariable;
-      ir.Parameter exceptionParameter = new ir.Parameter(exceptionVariable);
-      catchBuilder.declareLocalVariable(exceptionVariable,
-                                        initialValue: exceptionParameter);
-      ir.Parameter traceParameter;
-      LocalVariableElement stackTraceVariable =
-          catchClauseInfo.stackTraceVariable;
-      if (stackTraceVariable != null) {
-        traceParameter = new ir.Parameter(stackTraceVariable);
-        catchBuilder.declareLocalVariable(stackTraceVariable,
-                                          initialValue: traceParameter);
-      } else {
-        // Use a dummy continuation parameter for the stack trace parameter.
-        // This will ensure that all handlers have two parameters and so they
-        // can be treated uniformly.
-        traceParameter = new ir.Parameter(null);
+    // Handlers are always translated as having both exception and stack trace
+    // parameters.  Multiple clauses do not have to use the same names for
+    // them.  Choose the first of each as the name hint for the respective
+    // handler parameter.
+    ir.Parameter exceptionParameter =
+        new ir.Parameter(catchClauseInfos.first.exceptionVariable);
+    LocalVariableElement traceVariable;
+    CatchClauseInfo catchAll;
+    for (int i = 0; i < catchClauseInfos.length; ++i) {
+      CatchClauseInfo info = catchClauseInfos[i];
+      if (info.type == null) {
+        catchAll = info;
+        catchClauseInfos.length = i;
+        break;
       }
-      catchClauseInfo.buildCatchBlock(catchBuilder);
-      if (catchBuilder.isOpen) catchBuilder.jumpTo(join);
-      List<ir.Parameter> catchParameters =
-          <ir.Parameter>[exceptionParameter, traceParameter];
-      ir.Continuation catchContinuation = new ir.Continuation(catchParameters);
-      catchContinuation.body = catchBuilder._root;
+      if (traceVariable == null) {
+        traceVariable = info.stackTraceVariable;
+      }
+    }
+    ir.Parameter traceParameter = new ir.Parameter(traceVariable);
+    // Expand multiple catch clauses into an explicit if/then/else.  Iterate
+    // them in reverse so the current block becomes the next else block.
+    ir.Expression catchBody;
+    if (catchAll == null) {
+      catchBody = new ir.Rethrow();
+    } else {
+      IrBuilder clauseBuilder = catchBuilder.makeDelimitedBuilder();
+      clauseBuilder.declareLocalVariable(catchAll.exceptionVariable,
+                                         initialValue: exceptionParameter);
+      if (catchAll.stackTraceVariable != null) {
+        clauseBuilder.declareLocalVariable(catchAll.stackTraceVariable,
+                                           initialValue: traceParameter);
+      }
+      catchAll.buildCatchBlock(clauseBuilder);
+      if (clauseBuilder.isOpen) clauseBuilder.jumpTo(join);
+      catchBody = clauseBuilder._root;
+    }
+    for (CatchClauseInfo clause in catchClauseInfos.reversed) {
+      IrBuilder clauseBuilder = catchBuilder.makeDelimitedBuilder();
+      clauseBuilder.declareLocalVariable(clause.exceptionVariable,
+                                         initialValue: exceptionParameter);
+      if (clause.stackTraceVariable != null) {
+        clauseBuilder.declareLocalVariable(clause.stackTraceVariable,
+                                           initialValue: traceParameter);
+      }
+      clause.buildCatchBlock(clauseBuilder);
+      if (clauseBuilder.isOpen) clauseBuilder.jumpTo(join);
+      ir.Continuation thenContinuation = new ir.Continuation([]);
+      thenContinuation.body = clauseBuilder._root;
+      ir.Continuation elseContinuation = new ir.Continuation([]);
+      elseContinuation.body = catchBody;
 
-      tryCatchBuilder.add(
-          new ir.LetHandler(catchContinuation, tryBuilder._root));
-      tryCatchBuilder._current = null;
+      ir.Parameter typeMatches = new ir.Parameter(null);
+      ir.Continuation checkType = new ir.Continuation([typeMatches]);
+      checkType.body =
+          new ir.LetCont.many([thenContinuation, elseContinuation],
+              new ir.Branch(new ir.IsTrue(typeMatches),
+                            thenContinuation,
+                            elseContinuation));
+      catchBody =
+          new ir.LetCont(checkType,
+              new ir.TypeOperator(exceptionParameter, clause.type, checkType,
+                                  isTypeTest: true));
     }
 
+    List<ir.Parameter> catchParameters =
+        <ir.Parameter>[exceptionParameter, traceParameter];
+    ir.Continuation catchContinuation = new ir.Continuation(catchParameters);
+    catchContinuation.body = catchBody;
+
+    tryCatchBuilder.add(
+        new ir.LetHandler(catchContinuation, tryBuilder._root));
     add(new ir.LetCont(join.continuation, tryCatchBuilder._root));
     environment = join.environment;
   }
@@ -2258,6 +2307,11 @@
         (k) => new ir.InvokeConstructor(type, element, selector,
             arguments, k));
   }
+
+  @override
+  ir.Primitive buildReifyTypeVariable(TypeVariableType variable) {
+    return addPrimitive(new ir.ReifyTypeVar(variable.element));
+  }
 }
 
 /// State shared between JsIrBuilders within the same function.
@@ -2485,6 +2539,7 @@
 
   ir.Primitive buildThis() {
     if (jsState.receiver != null) return jsState.receiver;
+    assert(state.thisParameter != null);
     return state.thisParameter;
   }
 
@@ -2554,11 +2609,11 @@
 
   ir.Primitive buildTypeExpression(DartType type) {
     if (type is TypeVariableType) {
-      return buildTypeVariableAccess(buildThis(), type);
+      return buildTypeVariableAccess(type);
     } else if (type is InterfaceType) {
       List<ir.Primitive> arguments = <ir.Primitive>[];
       type.forEachTypeVariable((TypeVariableType variable) {
-        ir.Primitive value = buildTypeVariableAccess(buildThis(), variable);
+        ir.Primitive value = buildTypeVariableAccess(variable);
         arguments.add(value);
       });
       return addPrimitive(new ir.TypeExpression(type, arguments));
@@ -2568,8 +2623,13 @@
     }
   }
 
-  ir.Primitive buildTypeVariableAccess(ir.Primitive target,
-                                       TypeVariableType variable) {
+  /// Obtains the internal type representation of the type held in [variable].
+  ///
+  /// The value of [variable] is taken from the current receiver object, or
+  /// if we are currently building a constructor field initializer, from the
+  /// corresponding type argument (field initializers are evaluated before the
+  /// receiver object is created).
+  ir.Primitive buildTypeVariableAccess(TypeVariableType variable) {
     ir.Parameter accessTypeArgumentParameter() {
       for (int i = 0; i < environment.length; i++) {
         Local local = environment.index2variable[i];
@@ -2584,9 +2644,21 @@
     if (jsState.inInitializers) {
       return accessTypeArgumentParameter();
     } else {
+      ir.Primitive target = buildThis();
       return addPrimitive(new ir.ReadTypeVariable(variable, target));
     }
   }
+
+  @override
+  ir.Primitive buildReifyTypeVariable(TypeVariableType variable) {
+    ir.Primitive typeArgument = buildTypeVariableAccess(variable);
+    return addPrimitive(new ir.ReifyRuntimeType(typeArgument));
+  }
+
+  ir.Primitive buildInvocationMirror(Selector selector,
+                                     List<ir.Primitive> arguments) {
+    return addPrimitive(new ir.CreateInvocationMirror(selector, arguments));
+  }
 }
 
 
@@ -2648,13 +2720,14 @@
       new Set<LocalVariableElement>();
 }
 
-// TODO(johnniwinther): Support passing of [DartType] for the exception.
 class CatchClauseInfo {
+  final DartType type;
   final LocalVariableElement exceptionVariable;
   final LocalVariableElement stackTraceVariable;
   final SubbuildFunction buildCatchBlock;
 
-  CatchClauseInfo({this.exceptionVariable,
+  CatchClauseInfo({this.type,
+                   this.exceptionVariable,
                    this.stackTraceVariable,
                    this.buildCatchBlock});
 }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
index 5252b0f..fbb348b 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
@@ -57,6 +57,10 @@
   }
 
   ir.RootNode buildNode(AstElement element) {
+    return measure(() => _buildNode(element));
+  }
+
+  ir.RootNode _buildNode(AstElement element) {
     bailoutMessage = null;
     if (!canBuild(element)) {
       bailoutMessage = 'unsupported element ${element.name}:${element.kind}';
@@ -140,8 +144,7 @@
          BaseImplementationOfDynamicsMixin<ir.Primitive, dynamic>,
          BaseImplementationOfConstantsMixin<ir.Primitive, dynamic>,
          BaseImplementationOfSuperIncDecsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfNewMixin<ir.Primitive, dynamic>,
-         ErrorBulkMixin<ir.Primitive, dynamic>
+         BaseImplementationOfNewMixin<ir.Primitive, dynamic>
     implements SemanticSendVisitor<ir.Primitive, dynamic> {
   final TreeElements elements;
   final Compiler compiler;
@@ -178,11 +181,6 @@
                    this.compiler,
                    this.sourceInformationBuilder);
 
-  @override
-  bulkHandleNode(ast.Node node, String message, _) {
-    giveup(node, message.replaceFirst('#', '$node'));
-  }
-
   String bailoutMessage = null;
 
   @override
@@ -198,6 +196,7 @@
    */
   ir.RootNode buildExecutable(ExecutableElement element);
 
+  ClosureClassMap get closureClassMap;
   ClosureScope getClosureScopeForNode(ast.Node node);
   ClosureEnvironment getClosureEnvironment();
 
@@ -223,6 +222,28 @@
       CallStructure callStructure,
       List<ir.Primitive> arguments);
 
+  /// Creates a [TypedSelector] variant of [newSelector] using the type of
+  /// [oldSelector], if available.
+  ///
+  /// This is needed to preserve inferred receiver types when creating new
+  /// selectors.
+  Selector useSelectorType(Selector newSelector, Selector oldSelector) {
+    // TODO(asgerf,johnniwinther): This works but it is brittle.
+    //     We should decouple selectors from inferred receiver type masks.
+    // TODO(asgerf): Use this whenever we create a selector for a dynamic call.
+    if (oldSelector is TypedSelector) {
+      return new TypedSelector(oldSelector.mask, newSelector, compiler.world);
+    } else {
+      return newSelector;
+    }
+  }
+
+  /// Like [useSelectorType], except the original typed selector is obtained
+  /// from the [node].
+  Selector useSelectorTypeOfNode(Selector newSelector, ast.Send node) {
+    return useSelectorType(newSelector, elements.getSelector(node));
+  }
+
   ir.RootNode _makeFunctionBody(FunctionElement element,
                                 ast.FunctionExpression node) {
     FunctionSignature signature = element.functionSignature;
@@ -503,15 +524,6 @@
   }
 
   visitTryStatement(ast.TryStatement node) {
-    // Multiple catch blocks are not yet implemented.
-    if (node.catchBlocks.isEmpty ||
-        !node.catchBlocks.nodes.tail.isEmpty) {
-      return giveup(node, 'not exactly one catch block');
-    }
-    // 'on T' catch blocks are not yet implemented.
-    if ((node.catchBlocks.nodes.head as ast.CatchBlock).onKeyword != null) {
-      return giveup(node, '"on T" catch block');
-    }
     // Finally blocks are not yet implemented.
     if (node.finallyBlock != null) {
       return giveup(node, 'try/finally');
@@ -525,7 +537,12 @@
       if (catchClause.trace != null) {
         stackTraceVariable = elements[catchClause.trace];
       }
+      DartType type;
+      if (catchClause.onKeyword != null) {
+        type = elements.getType(catchClause.type);
+      }
       catchClauseInfos.add(new CatchClauseInfo(
+          type: type,
           exceptionVariable: exceptionVariable,
           stackTraceVariable: stackTraceVariable,
           buildCatchBlock: subbuild(catchClause.block)));
@@ -534,7 +551,8 @@
     irBuilder.buildTry(
         tryStatementInfo: tryStatements[node],
         buildTryBlock: subbuild(node.tryBlock),
-        catchClauseInfos: catchClauseInfos);
+        catchClauseInfos: catchClauseInfos,
+        closureClassMap: closureClassMap);
   }
 
   // ## Expressions ##
@@ -614,12 +632,6 @@
     return translateConstant(node);
   }
 
-  ir.Primitive visitIdentifier(ast.Identifier node) {
-    // "this" is the only identifier that should be met by the visitor.
-    assert(node.isThis());
-    return irBuilder.buildThis();
-  }
-
   ir.Primitive visitParenthesizedExpression(
       ast.ParenthesizedExpression node) {
     assert(irBuilder.isOpen);
@@ -795,28 +807,25 @@
   }
 
   @override
-  ir.Primitive visitUnresolvedGet(
-      ast.Send node,
-      Element element,
-      _) {
-    return giveup(node, 'visitUnresolvedGet');
-  }
-
-  @override
   ir.Primitive visitUnresolvedSuperGet(
       ast.Send node,
-      Element element,
-      _) {
-    return giveup(node, 'visitUnresolvedSuperGet');
+      Element element, _) {
+    return buildInstanceNoSuchMethod(elements.getSelector(node), []);
   }
 
   @override
   ir.Primitive visitThisGet(ast.Identifier node, _) {
+    if (irBuilder.state.thisParameter == null) {
+      // TODO(asgerf,johnniwinther): Should be in a visitInvalidThis method.
+      // 'this' in static context. Just translate to null.
+      assert(compiler.compilationFailed);
+      return irBuilder.buildNullConstant();
+    }
     return irBuilder.buildThis();
   }
 
   ir.Primitive translateTypeVariableTypeLiteral(TypeVariableElement element) {
-    return buildReifyTypeVariable(irBuilder.buildThis(), element.type);
+    return irBuilder.buildReifyTypeVariable(element.type);
   }
 
   @override
@@ -933,16 +942,6 @@
   }
 
   @override
-  ir.Primitive visitUnresolvedSuperBinary(
-      ast.Send node,
-      Element element,
-      op.BinaryOperator operator,
-      ast.Node argument,
-      _) {
-    return giveup(node, 'visitUnresolvedSuperBinary');
-  }
-
-  @override
   ir.Primitive visitSuperIndex(
       ast.Send node,
       FunctionElement function,
@@ -952,15 +951,6 @@
   }
 
   @override
-  ir.Primitive visitUnresolvedSuperIndex(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      _) {
-    return giveup(node, 'visitUnresolvedSuperIndex');
-  }
-
-  @override
   ir.Primitive visitEquals(
       ast.Send node,
       ast.Node left,
@@ -1028,15 +1018,6 @@
         function, CallStructure.NO_ARGS, const []);
   }
 
-  @override
-  ir.Primitive visitUnresolvedSuperUnary(
-      ast.Send node,
-      op.UnaryOperator operator,
-      Element element,
-      _) {
-    return giveup(node, 'visitUnresolvedSuperUnary');
-  }
-
   // TODO(johnniwinther): Handle this in the [IrBuilder] to ensure the correct
   // semantic correlation between arguments and invocation.
   List<ir.Primitive> translateDynamicArguments(ast.NodeList nodeList,
@@ -1140,9 +1121,10 @@
       ast.Send node,
       MethodElement function,
       ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    return giveup(node, 'handleStaticFunctionIncompatibleInvoke');
+      CallStructure callStructure, _) {
+    return buildStaticNoSuchMethod(
+        elements.getSelector(node),
+        arguments.nodes.mapToList(visit));
   }
 
   @override
@@ -1203,19 +1185,10 @@
       ast.Send node,
       MethodElement method,
       ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    return giveup(node, 'visitSuperMethodIncompatibleInvoke');
-  }
-
-  @override
-  ir.Primitive visitUnresolvedInvoke(
-      ast.Send node,
-      Element element,
-      ast.NodeList arguments,
-      Selector selector,
-      _) {
-    return giveup(node, 'visitUnresolvedInvoke');
+      CallStructure callStructure, _) {
+    return buildInstanceNoSuchMethod(
+        elements.getSelector(node),
+        translateDynamicArguments(arguments, callStructure));
   }
 
   @override
@@ -1223,9 +1196,10 @@
       ast.Send node,
       Element element,
       ast.NodeList arguments,
-      Selector selector,
-      _) {
-    return giveup(node, 'visitUnresolvedSuperInvoke');
+      Selector selector, _) {
+    return buildInstanceNoSuchMethod(
+        elements.getSelector(node),
+        translateDynamicArguments(arguments, selector.callStructure));
   }
 
   @override
@@ -1250,10 +1224,6 @@
         callStructure);
   }
 
-  // TODO(johnniwinther): This should be a method on [IrBuilder].
-  ir.Primitive buildReifyTypeVariable(ir.Primitive target,
-                                      TypeVariableType variable);
-
   @override
   ir.Primitive visitIndexSet(
        ast.SendSet node,
@@ -1711,6 +1681,62 @@
   }
 
   @override
+  ir.Primitive handleUnresolvedSuperGetterIndexPostfixPrefix(
+      ast.Send node,
+      Element element,
+      ast.Node index,
+      op.IncDecOperator operator,
+      arg,
+      {bool isPrefix}) {
+    return giveup(node, 'handleSuperUnresolvedGetterIndexPostfixPrefix');
+  }
+
+  @override
+  ir.Primitive handleUnresolvedSuperSetterIndexPostfixPrefix(
+      ast.Send node,
+      FunctionElement indexFunction,
+      Element element,
+      ast.Node index,
+      op.IncDecOperator operator,
+      arg,
+      {bool isPrefix}) {
+    return giveup(node, 'handleSuperUnresolvedGetterIndexPostfixPrefix');
+  }
+
+  @override
+  ir.Primitive visitUnresolvedSuperGetterCompoundIndexSet(
+      ast.Send node,
+      Element element,
+      ast.Node index,
+      op.AssignmentOperator operator,
+      ast.Node rhs,
+      arg) {
+    return giveup(node, 'visitUnresolvedSuperGetterCompoundIndexSet');
+  }
+
+  @override
+  ir.Primitive visitUnresolvedSuperIndexSet(
+      ast.Send node,
+      Element element,
+      ast.Node index,
+      ast.Node rhs,
+      arg) {
+    return giveup(node, 'visitUnresolvedSuperIndexSet');
+  }
+
+  @override
+  ir.Primitive visitUnresolvedSuperSetterCompoundIndexSet(
+      ast.Send node,
+      MethodElement getter,
+      Element element,
+      ast.Node index,
+      op.AssignmentOperator operator,
+      ast.Node rhs,
+      arg) {
+    return giveup(node, 'visitUnresolvedSuperSetterCompoundIndexSet');
+  }
+
+  @override
   ir.Primitive handleStaticSetterSet(
       ast.SendSet node,
       FunctionElement setter,
@@ -1867,6 +1893,727 @@
     return irBuilder.buildNonTailThrow(visit(node.expression));
   }
 
+  ir.Primitive buildStaticNoSuchMethod(
+      Selector selector,
+      List<ir.Primitive> arguments);
+
+  ir.Primitive buildInstanceNoSuchMethod(
+      Selector selector,
+      List<ir.Primitive> arguments);
+
+  ir.Primitive buildRuntimeError(String message);
+
+  ir.Primitive buildAbstractClassInstantiationError(ClassElement element);
+
+  @override
+  ir.Primitive errorInvalidAssert(
+      ast.Send node,
+      ast.NodeList arguments, _) {
+    if (compiler.enableUserAssertions) {
+      return giveup(node, 'Assert');
+    } else {
+      return irBuilder.buildNullConstant();
+    }
+  }
+
+  @override
+  ir.Primitive errorUnresolvedCompound(
+      ast.Send node,
+      Element element,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    // TODO(asgerf): What is unresolved? The getter and/or the setter?
+    //               If it was the setter, we must evaluate the right-hand side.
+    return buildStaticNoSuchMethod(elements.getSelector(node), []);
+  }
+
+  @override
+  ir.Primitive visitUnresolvedClassConstructorInvoke(
+      ast.NewExpression node,
+      Element element,
+      DartType type,
+      ast.NodeList arguments,
+      Selector selector, _) {
+    // If the class is missing it's a runtime error.
+    return buildRuntimeError("Unresolved class: '${element.name}'");
+  }
+
+  @override
+  ir.Primitive visitUnresolvedConstructorInvoke(
+      ast.NewExpression node,
+      Element constructor,
+      DartType type,
+      ast.NodeList arguments,
+      Selector selector, _) {
+    // If the class is there but the constructor is missing, it's an NSM error.
+    return buildStaticNoSuchMethod(selector,
+        translateDynamicArguments(arguments, selector.callStructure));
+  }
+
+  @override
+  ir.Primitive errorNonConstantConstructorInvoke(
+      ast.NewExpression node,
+      Element element,
+      InterfaceType type,
+      ast.NodeList arguments,
+      CallStructure callStructure, _) {
+    assert(compiler.compilationFailed);
+    return irBuilder.buildNullConstant();
+  }
+
+  @override
+  ir.Primitive visitUnresolvedGet(
+      ast.Send node,
+      Element element, _) {
+    return buildStaticNoSuchMethod(elements.getSelector(node), []);
+  }
+
+  @override
+  ir.Primitive visitUnresolvedInvoke(
+      ast.Send node,
+      Element element,
+      ast.NodeList arguments,
+      Selector selector, _) {
+    return buildStaticNoSuchMethod(elements.getSelector(node),
+        arguments.nodes.mapToList(visit));
+  }
+
+  @override
+  ir.Primitive errorUnresolvedPostfix(
+      ast.Send node,
+      Element element,
+      op.IncDecOperator operator, _) {
+    // TODO(asgerf): Which ones are missing? The getter and/or the setter?
+    return buildStaticNoSuchMethod(elements.getSelector(node), []);
+  }
+
+  @override
+  ir.Primitive errorUnresolvedPrefix(
+      ast.Send node,
+      Element element,
+      op.IncDecOperator operator, _) {
+    // TODO(asgerf): Which ones are missing? The getter and/or the setter?
+    return buildStaticNoSuchMethod(elements.getSelector(node), []);
+  }
+
+  @override
+  ir.Primitive visitUnresolvedRedirectingFactoryConstructorInvoke(
+       ast.NewExpression node,
+       ConstructorElement constructor,
+       InterfaceType type,
+       ast.NodeList arguments,
+       CallStructure callStructure, _) {
+    String nameString = Elements.reconstructConstructorName(constructor);
+    Name name = new Name(nameString, constructor.library);
+    return buildStaticNoSuchMethod(
+        new Selector(SelectorKind.CALL, name, callStructure),
+        translateDynamicArguments(arguments, callStructure));
+  }
+
+  @override
+  ir.Primitive errorUnresolvedSet(
+      ast.Send node,
+      Element element,
+      ast.Node rhs, _) {
+    return buildStaticNoSuchMethod(elements.getSelector(node), [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorUnresolvedSuperCompoundIndexSet(
+      ast.SendSet node,
+      Element element,
+      ast.Node index,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    // Assume the index getter is missing.
+    Selector selector = useSelectorTypeOfNode(new Selector.index(), node);
+    return buildInstanceNoSuchMethod(selector, [visit(index)]);
+  }
+
+  @override
+  ir.Primitive visitUnresolvedSuperIndex(
+      ast.Send node,
+      Element function,
+      ast.Node index, _) {
+    // Assume the index getter is missing.
+    Selector selector = useSelectorTypeOfNode(new Selector.index(), node);
+    return buildInstanceNoSuchMethod(selector, [visit(index)]);
+  }
+
+  @override
+  ir.Primitive errorUnresolvedSuperIndexPostfix(
+      ast.Send node,
+      Element function,
+      ast.Node index,
+      op.IncDecOperator operator, _) {
+    // Assume the index getter is missing.
+    Selector selector = useSelectorTypeOfNode(new Selector.index(), node);
+    return buildInstanceNoSuchMethod(selector, [visit(index)]);
+  }
+
+  @override
+  ir.Primitive errorUnresolvedSuperIndexPrefix(
+      ast.Send node,
+      Element function,
+      ast.Node index,
+      op.IncDecOperator operator, _) {
+    // Assume the index getter is missing.
+    Selector selector = useSelectorTypeOfNode(new Selector.index(), node);
+    return buildInstanceNoSuchMethod(selector, [visit(index)]);
+  }
+
+  @override
+  ir.Primitive errorUnresolvedSuperIndexSet(
+      ast.SendSet node,
+      Element element,
+      ast.Node index,
+      ast.Node rhs, _) {
+    Selector selector = useSelectorTypeOfNode(new Selector.index(), node);
+    return buildInstanceNoSuchMethod(
+        selector,
+        [visit(index), visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive visitUnresolvedSuperBinary(
+      ast.Send node,
+      Element element,
+      op.BinaryOperator operator,
+      ast.Node argument, _) {
+    return buildInstanceNoSuchMethod(
+        elements.getSelector(node),
+        [visit(argument)]);
+  }
+
+  @override
+  ir.Primitive visitUnresolvedSuperUnary(
+      ast.Send node,
+      op.UnaryOperator operator,
+      Element element, _) {
+    return buildInstanceNoSuchMethod(elements.getSelector(node), []);
+  }
+
+  @override
+  ir.Primitive errorUndefinedBinaryExpression(
+      ast.Send node,
+      ast.Node left,
+      ast.Operator operator,
+      ast.Node right, _) {
+    assert(compiler.compilationFailed);
+    return irBuilder.buildNullConstant();
+  }
+
+  @override
+  ir.Primitive errorUndefinedUnaryExpression(
+      ast.Send node,
+      ast.Operator operator,
+      ast.Node expression, _) {
+    assert(compiler.compilationFailed);
+    return irBuilder.buildNullConstant();
+  }
+
+  @override
+  ir.Primitive errorTopLevelFunctionSet(
+      ast.Send node,
+      MethodElement function,
+      ast.Node rhs, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter(function.name, function.library),
+        [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorTopLevelSetterGet(
+      ast.Send node,
+      FunctionElement setter, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.getter(setter.name, setter.library), []);
+  }
+
+  @override
+  ir.Primitive errorTopLevelGetterSet(
+      ast.SendSet node,
+      FunctionElement getter,
+      ast.Node rhs, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter(getter.name, getter.library),
+        [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorTopLevelSetterInvoke(
+      ast.Send node,
+      FunctionElement setter,
+      ast.NodeList arguments,
+      CallStructure callStructure, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.getter(setter.name, setter.library), []);
+  }
+
+  @override
+  ir.Primitive errorClassTypeLiteralSet(
+      ast.SendSet node,
+      TypeConstantExpression constant,
+      ast.Node rhs, _) {
+    InterfaceType type = constant.type;
+    ClassElement element = type.element;
+    return buildStaticNoSuchMethod(
+        new Selector.setter(element.name, element.library), [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorTypedefTypeLiteralSet(
+      ast.SendSet node,
+      TypeConstantExpression constant,
+      ast.Node rhs, _) {
+    TypedefType type = constant.type;
+    TypedefElement element = type.element;
+    return buildStaticNoSuchMethod(
+        new Selector.setter(element.name, element.library), [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorTypeVariableTypeLiteralSet(
+      ast.SendSet node,
+      TypeVariableElement element,
+      ast.Node rhs, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter(element.name, element.library), [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorDynamicTypeLiteralSet(
+      ast.SendSet node,
+      ConstantExpression constant,
+      ast.Node rhs, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter('dynamic', null), [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive visitAbstractClassConstructorInvoke(
+      ast.NewExpression node,
+      ConstructorElement element,
+      InterfaceType type,
+      ast.NodeList arguments,
+      CallStructure callStructure, _) {
+    return buildAbstractClassInstantiationError(element.enclosingClass);
+  }
+
+  @override
+  ir.Primitive errorClassTypeLiteralCompound(
+      ast.Send node,
+      ConstantExpression constant,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    return translateCompound(
+        getValue: () => irBuilder.buildConstant(constant),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) {}); // The binary operator will throw before this.
+  }
+
+  @override
+  ir.Primitive errorClassTypeLiteralPostfix(
+      ast.Send node,
+      ConstantExpression constant,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+      getValue: () => irBuilder.buildConstant(constant),
+      operator: operator,
+      setValue: (value) {}, // The binary operator will throw before this.
+      isPrefix: false);
+  }
+
+  @override
+  ir.Primitive errorClassTypeLiteralPrefix(
+      ast.Send node,
+      ConstantExpression constant,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+      getValue: () => irBuilder.buildConstant(constant),
+      operator: operator,
+      setValue: (value) {}, // The binary operator will throw before this.
+      isPrefix: true);
+  }
+
+  @override
+  ir.Primitive errorDynamicTypeLiteralCompound(
+      ast.Send node,
+      ConstantExpression constant,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    return translateCompound(
+        getValue: () => irBuilder.buildConstant(constant),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) {}); // The binary operator will throw before this.
+  }
+
+  @override
+  ir.Primitive errorDynamicTypeLiteralPostfix(
+      ast.Send node,
+      ConstantExpression constant,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildConstant(constant),
+        operator: operator,
+        setValue: (value) {}, // The binary operator will throw before this.
+        isPrefix: false);
+  }
+
+  @override
+  ir.Primitive errorDynamicTypeLiteralPrefix(
+      ast.Send node,
+      ConstantExpression constant,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildConstant(constant),
+        operator: operator,
+        setValue: (value) {}, // The binary operator will throw before this.
+        isPrefix: true);
+  }
+
+  @override
+  ir.Primitive errorFinalLocalVariableCompound(
+      ast.Send node,
+      LocalVariableElement variable,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    Selector selector = new Selector.setter(variable.name, null);
+    return translateCompound(
+        getValue: () => irBuilder.buildLocalVariableGet(variable),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) => buildStaticNoSuchMethod(selector, [value]));
+  }
+
+  @override
+  ir.Primitive errorFinalLocalVariableSet(
+      ast.SendSet node,
+      LocalVariableElement variable,
+      ast.Node rhs, _) {
+    Selector selector = new Selector.setter(variable.name, null);
+    return buildStaticNoSuchMethod(selector, [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorFinalParameterCompound(
+      ast.Send node,
+      ParameterElement parameter,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    Selector selector = new Selector.setter(parameter.name, null);
+    return translateCompound(
+        getValue: () => irBuilder.buildLocalVariableGet(parameter),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) => buildStaticNoSuchMethod(selector, [value]));
+  }
+
+  @override
+  ir.Primitive errorFinalParameterSet(
+      ast.SendSet node,
+      ParameterElement parameter,
+      ast.Node rhs, _) {
+    Selector selector = new Selector.setter(parameter.name, null);
+    return buildStaticNoSuchMethod(selector, [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorFinalStaticFieldCompound(
+      ast.Send node,
+      FieldElement field,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    return translateCompound(
+        getValue: () => irBuilder.buildStaticFieldGet(field),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) => buildStaticNoSuchMethod(
+            new Selector.setter(field.name, field.library), [value]));
+  }
+
+  @override
+  ir.Primitive errorFinalStaticFieldSet(
+      ast.SendSet node,
+      FieldElement field,
+      ast.Node rhs, _) {
+    // TODO(asgerf): Include class name somehow?
+    return buildStaticNoSuchMethod(
+        new Selector.setter(field.name, field.library),
+        [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorFinalSuperFieldCompound(
+      ast.Send node,
+      FieldElement field,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    Selector selector = useSelectorTypeOfNode(
+        new Selector.setter(field.name, field.library),
+        node);
+    return translateCompound(
+        getValue: () => irBuilder.buildSuperFieldGet(field),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) => buildInstanceNoSuchMethod(selector, [value]));
+  }
+
+  @override
+  ir.Primitive errorFinalSuperFieldSet(
+      ast.SendSet node,
+      FieldElement field,
+      ast.Node rhs, _) {
+    Selector selector = useSelectorTypeOfNode(
+        new Selector.setter(field.name, field.library),
+        node);
+    return buildInstanceNoSuchMethod(selector, [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorFinalTopLevelFieldCompound(
+      ast.Send node,
+      FieldElement field,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    return translateCompound(
+        getValue: () => irBuilder.buildStaticFieldGet(field),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) => buildStaticNoSuchMethod(
+            new Selector.setter(field.name, field.library), [value]));
+  }
+
+  @override
+  ir.Primitive errorFinalTopLevelFieldSet(
+      ast.SendSet node,
+      FieldElement field,
+      ast.Node rhs, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter(field.name, field.library),
+        [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorLocalFunctionCompound(
+      ast.Send node,
+      LocalFunctionElement function,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    return translateCompound(
+        getValue: () => irBuilder.buildLocalFunctionGet(function),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) {}); // Binary operator will throw before this.
+  }
+
+  @override
+  ir.Primitive errorLocalFunctionPostfix(
+      ast.Send node,
+      LocalFunctionElement function,
+      op.IncDecOperator operator,
+      _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildLocalFunctionGet(function),
+        operator: operator,
+        setValue: (value) {}, // Binary operator will throw before this.
+        isPrefix: false);
+  }
+
+  @override
+  ir.Primitive errorLocalFunctionPrefix(
+      ast.Send node,
+      LocalFunctionElement function,
+      op.IncDecOperator operator,
+      _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildLocalFunctionGet(function),
+        operator: operator,
+        setValue: (value) {}, // Binary operator will throw before this.
+        isPrefix: true);
+  }
+
+  @override
+  ir.Primitive errorLocalFunctionSet(
+      ast.SendSet node,
+      LocalFunctionElement function,
+      ast.Node rhs, _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter(function.name, null),
+        [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorStaticFunctionSet(
+      ast.Send node,
+      MethodElement function,
+      ast.Node rhs,
+      _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter(function.name, function.library),
+        [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorStaticGetterSet(
+      ast.SendSet node,
+      FunctionElement getter,
+      ast.Node rhs,
+      _) {
+    return buildStaticNoSuchMethod(
+        new Selector.setter(getter.name, getter.library),
+        [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorStaticSetterGet(
+      ast.Send node,
+      FunctionElement setter,
+      _) {
+    return buildStaticNoSuchMethod(
+        new Selector.getter(setter.name, setter.library),
+        []);
+  }
+
+  @override
+  ir.Primitive errorStaticSetterInvoke(
+      ast.Send node,
+      FunctionElement setter,
+      ast.NodeList arguments,
+      CallStructure callStructure, _) {
+    // Translate as a method call.
+    List<ir.Primitive> args = arguments.nodes.mapToList(visit);
+    Name name = new Name(setter.name, setter.library);
+    return buildStaticNoSuchMethod(
+        new Selector(SelectorKind.CALL, name, callStructure),
+        args);
+  }
+
+  @override
+  ir.Primitive errorSuperGetterSet(
+      ast.SendSet node,
+      FunctionElement getter,
+      ast.Node rhs,
+      _) {
+    Selector selector = useSelectorTypeOfNode(
+        new Selector.setter(getter.name, getter.library),
+        node);
+    return buildInstanceNoSuchMethod(selector, [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorSuperMethodSet(
+      ast.Send node,
+      MethodElement method,
+      ast.Node rhs,
+      _) {
+    Selector selector = useSelectorTypeOfNode(
+        new Selector.setter(method.name, method.library),
+        node);
+    return buildInstanceNoSuchMethod(selector, [visit(rhs)]);
+  }
+
+  @override
+  ir.Primitive errorSuperSetterGet(
+      ast.Send node,
+      FunctionElement setter, _) {
+    Selector selector = useSelectorTypeOfNode(
+        new Selector.setter(setter.name, setter.library),
+        node);
+    return buildInstanceNoSuchMethod(selector, []);
+  }
+
+  @override
+  ir.Primitive errorSuperSetterInvoke(
+      ast.Send node,
+      FunctionElement setter,
+      ast.NodeList arguments,
+      CallStructure callStructure, _) {
+    List<ir.Primitive> args =
+        translateDynamicArguments(arguments, callStructure);
+    Name name = new Name(setter.name, setter.library);
+    Selector selector = useSelectorTypeOfNode(
+        new Selector(SelectorKind.CALL, name, callStructure),
+        node);
+    return buildInstanceNoSuchMethod(selector, args);
+  }
+
+  @override
+  ir.Primitive errorTypeVariableTypeLiteralCompound(
+      ast.Send node,
+      TypeVariableElement element,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    return translateCompound(
+        getValue: () => irBuilder.buildReifyTypeVariable(element.type),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) {}); // The binary operator will throw before this.
+  }
+
+  @override
+  ir.Primitive errorTypeVariableTypeLiteralPostfix(
+      ast.Send node,
+      TypeVariableElement element,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildReifyTypeVariable(element.type),
+        operator: operator,
+        setValue: (value) {}, // The binary operator will throw before this.
+        isPrefix: false);
+  }
+
+  @override
+  ir.Primitive errorTypeVariableTypeLiteralPrefix(
+      ast.Send node,
+      TypeVariableElement element,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildReifyTypeVariable(element.type),
+        operator: operator,
+        setValue: (value) {}, // The binary operator will throw before this.
+        isPrefix: true);
+  }
+
+  @override
+  ir.Primitive errorTypedefTypeLiteralCompound(
+      ast.Send node,
+      ConstantExpression constant,
+      op.AssignmentOperator operator,
+      ast.Node rhs, _) {
+    return translateCompound(
+        getValue: () => irBuilder.buildConstant(constant),
+        operator: operator,
+        rhs: rhs,
+        setValue: (value) {}); // The binary operator will throw before this.
+  }
+
+  @override
+  ir.Primitive errorTypedefTypeLiteralPostfix(
+      ast.Send node,
+      ConstantExpression constant,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildConstant(constant),
+        operator: operator,
+        setValue: (value) {}, // The binary operator will throw before this.
+        isPrefix: false);
+  }
+
+  @override
+  ir.Primitive errorTypedefTypeLiteralPrefix(
+      ast.Send node,
+      TypeConstantExpression constant,
+      op.IncDecOperator operator, _) {
+    return translatePrefixPostfix(
+        getValue: () => irBuilder.buildConstant(constant),
+        operator: operator,
+        setValue: (value) {}, // The binary operator will throw before this.
+        isPrefix: true);
+  }
+
   ir.RootNode nullIfGiveup(ir.RootNode action()) {
     try {
       return action();
@@ -2105,6 +2852,7 @@
     irBuilder.declareLocalFunction(element, inner);
   }
 
+  ClosureClassMap get closureClassMap => null;
   ClosureScope getClosureScopeForNode(ast.Node node) => null;
   ClosureEnvironment getClosureEnvironment() => null;
 
@@ -2190,15 +2938,6 @@
   }
 
   @override
-  ir.Primitive buildReifyTypeVariable(ir.Primitive target,
-                                      TypeVariableType variable) {
-    assert(target == irBuilder.state.enclosingMethodThisParameter);
-    ir.Primitive prim = new ir.ReifyTypeVar(variable.element);
-    irBuilder.add(new ir.LetPrim(prim));
-    return prim;
-  }
-
-  @override
   ir.Primitive handleConstructorInvoke(
       ast.NewExpression node,
       ConstructorElement constructor,
@@ -2213,6 +2952,28 @@
         type,
         arguments);
   }
+
+  @override
+  ir.Primitive buildStaticNoSuchMethod(Selector selector,
+                                       List<ir.Primitive> arguments) {
+    return giveup(null, 'Static noSuchMethod');
+  }
+
+  @override
+  ir.Primitive buildInstanceNoSuchMethod(Selector selector,
+                                         List<ir.Primitive> arguments) {
+    return giveup(null, 'Instance noSuchMethod');
+  }
+
+  @override
+  ir.Primitive buildRuntimeError(String message) {
+    return giveup(null, 'Build runtime error: $message');
+  }
+
+  @override
+  ir.Primitive buildAbstractClassInstantiationError(ClassElement element) {
+    return giveup(null, 'Abstract class instantiation: ${element.name}');
+  }
 }
 
 /// The [IrBuilder]s view on the information about the program that has been
@@ -2235,11 +2996,13 @@
   /// Promote the type of [irBuilder] to [JsIrBuilder].
   JsIrBuilder get irBuilder => super.irBuilder;
 
+  JavaScriptBackend get backend => compiler.backend;
+
   /// Result of closure conversion for the current body of code.
   ///
   /// Will be initialized upon entering the body of a function.
   /// It is computed by the [ClosureTranslator].
-  ClosureClassMap closureMap;
+  ClosureClassMap closureClassMap;
 
   /// During construction of a constructor factory, [fieldValues] maps fields
   /// to the primitive containing their initial value.
@@ -2293,11 +3056,11 @@
   /// captured reference to `this`), returns a [ClosureEnvironment]
   /// indicating how to access these.
   ClosureEnvironment getClosureEnvironment() {
-    if (closureMap.closureElement == null) return null;
+    if (closureClassMap.closureElement == null) return null;
     return new ClosureEnvironment(
-        closureMap.closureElement,
-        closureMap.thisLocal,
-        mapValues(closureMap.freeVariableMap, getLocation));
+        closureClassMap.closureElement,
+        closureClassMap.thisLocal,
+        mapValues(closureClassMap.freeVariableMap, getLocation));
   }
 
   /// If [node] has declarations for variables that should be boxed,
@@ -2306,7 +3069,7 @@
   ///
   /// Also see [ClosureScope].
   ClosureScope getClosureScopeForNode(ast.Node node) {
-    closurelib.ClosureScope scope = closureMap.capturingScopes[node];
+    closurelib.ClosureScope scope = closureClassMap.capturingScopes[node];
     if (scope == null) return null;
     // We translate a ClosureScope from closure.dart into IR builder's variant
     // because the IR builder should not depend on the synthetic elements
@@ -2699,10 +3462,11 @@
   ir.FunctionDefinition buildConstructorBody(ConstructorBodyElement body) {
     ConstructorElement constructor = body.constructor;
     ast.FunctionExpression node = constructor.node;
-    closureMap = compiler.closureToClassMapper.computeClosureToClassMapping(
-        constructor,
-        node,
-        elements);
+    closureClassMap =
+        compiler.closureToClassMapper.computeClosureToClassMapping(
+            constructor,
+            node,
+            elements);
 
     // We compute variables boxed in mutable variables on entry to each try
     // block, not including variables captured by a closure (which are boxed
@@ -2731,10 +3495,11 @@
     assert(node != null);
     assert(elements[node] != null);
 
-    closureMap = compiler.closureToClassMapper.computeClosureToClassMapping(
-        element,
-        node,
-        elements);
+    closureClassMap =
+        compiler.closureToClassMapper.computeClosureToClassMapping(
+            element,
+            node,
+            elements);
     DartCapturedVariables variables = _analyzeCapturedVariables(node);
     tryStatements = variables.tryStatements;
     IrBuilder builder = getBuilderFor(element);
@@ -2815,18 +3580,6 @@
     }
     return result;
   }
-
-  @override
-  ir.Primitive buildReifyTypeVariable(ir.Primitive target,
-                                      TypeVariableType variable) {
-    ir.Primitive typeArgument =
-        irBuilder.buildTypeVariableAccess(target, variable);
-
-    ir.Primitive type = new ir.ReifyRuntimeType(typeArgument);
-    irBuilder.add(new ir.LetPrim(type));
-    return type;
-  }
-
   @override
   ir.Primitive handleConstructorInvoke(
       ast.NewExpression node,
@@ -2845,6 +3598,45 @@
         constructor.computeEffectiveTargetType(type),
         arguments);
   }
+
+  @override
+  ir.Primitive buildStaticNoSuchMethod(Selector selector,
+                                       List<ir.Primitive> arguments) {
+    Element thrower = backend.getThrowNoSuchMethod();
+    ir.Primitive receiver = irBuilder.buildStringConstant('');
+    ir.Primitive name = irBuilder.buildStringConstant(selector.name);
+    ir.Primitive argumentList = irBuilder.buildListLiteral(null, arguments);
+    ir.Primitive expectedArgumentNames = irBuilder.buildNullConstant();
+    return irBuilder.buildStaticFunctionInvocation(
+        thrower,
+        new CallStructure.unnamed(4),
+        [receiver, name, argumentList, expectedArgumentNames]);
+  }
+
+  @override
+  ir.Primitive buildInstanceNoSuchMethod(Selector selector,
+                                         List<ir.Primitive> arguments) {
+    return irBuilder.buildDynamicInvocation(
+        irBuilder.buildThis(),
+        useSelectorType(compiler.noSuchMethodSelector, selector),
+        [irBuilder.buildInvocationMirror(selector, arguments)]);
+  }
+
+  @override
+  ir.Primitive buildRuntimeError(String message) {
+    return irBuilder.buildStaticFunctionInvocation(
+        backend.getThrowRuntimeError(),
+        new CallStructure.unnamed(1),
+        [irBuilder.buildStringConstant(message)]);
+  }
+
+  @override
+  ir.Primitive buildAbstractClassInstantiationError(ClassElement element) {
+    return irBuilder.buildStaticFunctionInvocation(
+        backend.getThrowAbstractClassInstantiationError(),
+        new CallStructure.unnamed(1),
+        [irBuilder.buildStringConstant(element.name)]);
+  }
 }
 
 /// Perform simple post-processing on the initial CPS-translated root term.
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
index 7577607..9f0b7a0c 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
@@ -329,6 +329,9 @@
 /// invocations to intercepted methods, where the effective receiver is instead
 /// passed as a formal parameter.
 ///
+/// TODO(sra): Review. A direct call to a method that is mixed into a native
+/// class will still require an explicit argument.
+///
 /// When targeting Dart, this instruction is used to represent super calls.
 /// Here, [receiver] must always be a reference to `this`, and [target] must be
 /// a method that is available in the super class.
@@ -667,6 +670,17 @@
   accept(Visitor visitor) => visitor.visitInterceptor(this);
 }
 
+/// Create an instance of [Invocation] for use in a call to `noSuchMethod`.
+class CreateInvocationMirror extends Primitive implements JsSpecificNode {
+  final Selector selector;
+  final List<Reference<Primitive>> arguments;
+
+  CreateInvocationMirror(this.selector, List<Primitive> arguments)
+      : this.arguments = _referenceList(arguments);
+
+  accept(Visitor visitor) => visitor.visitCreateInvocationMirror(this);
+}
+
 class Constant extends Primitive {
   final ConstantExpression expression;
 
@@ -1021,6 +1035,7 @@
   T visitReifyRuntimeType(ReifyRuntimeType node);
   T visitReadTypeVariable(ReadTypeVariable node);
   T visitTypeExpression(TypeExpression node);
+  T visitCreateInvocationMirror(CreateInvocationMirror node);
 }
 
 /// Recursively visits the entire CPS term, and calls abstract `process*`
@@ -1326,4 +1341,10 @@
     processNonTailThrow(node);
     processReference(node.value);
   }
+
+  processCreateInvocationMirror(CreateInvocationMirror node) {}
+  visitCreateInvocationMirror(CreateInvocationMirror node) {
+    processCreateInvocationMirror(node);
+    node.arguments.forEach(processReference);
+  }
 }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
index 8a99d443..c330117 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
@@ -373,6 +373,12 @@
     String value = access(node.value);
     return '(NonTailThrow $value)';
   }
+
+  String visitCreateInvocationMirror(CreateInvocationMirror node) {
+    String selector = node.selector.name;
+    String args = node.arguments.map(access).join(', ');
+    return '(CreateInvocationMirror $selector $args)';
+  }
 }
 
 class ConstantStringifier extends ConstantValueVisitor<String, Null> {
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
index ae35ea7..a807214 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
@@ -369,6 +369,11 @@
     String value = formatReference(node.value);
     return "NonTailThrow($value)";
   }
+
+  visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) {
+    String args = node.arguments.map(formatReference).join(', ');
+    return "CreateInvocationMirror(${node.selector.name}, $args)";
+  }
 }
 
 /**
@@ -624,4 +629,8 @@
   visitNonTailThrow(cps_ir.NonTailThrow node) {
     unexpectedNode(node);
   }
+
+  visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) {
+    unexpectedNode(node);
+  }
 }
diff --git a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
index edc8121..552e24d 100644
--- a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
+++ b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
@@ -681,6 +681,10 @@
   processTypeExpression(TypeExpression node) {
     node.arguments.forEach((Reference ref) => ref.parent = node);
   }
+
+  processCreateInvocationMirror(CreateInvocationMirror node) {
+    node.arguments.forEach((Reference ref) => ref.parent = node);
+  }
 }
 
 class _ReductionKind {
diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
index f66f370..27e92d7 100644
--- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
+++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
@@ -896,6 +896,10 @@
     // real constants of type [Type].
     setValue(node, nonConstant());
   }
+
+  void visitCreateInvocationMirror(CreateInvocationMirror node) {
+    setValue(node, nonConstant());
+  }
 }
 
 /// Represents the abstract value of a primitive value at some point in the
diff --git a/pkg/compiler/lib/src/dart2jslib.dart b/pkg/compiler/lib/src/dart2jslib.dart
index fc659d3..0221ca9 100644
--- a/pkg/compiler/lib/src/dart2jslib.dart
+++ b/pkg/compiler/lib/src/dart2jslib.dart
@@ -28,7 +28,7 @@
     show ErroneousElementX,
          ClassElementX,
          CompilationUnitElementX,
-         FunctionElementX,
+         MethodElementX,
          LibraryElementX,
          PrefixElementX,
          VoidElementX,
diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
index a578d2e..44f0ae9 100644
--- a/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
@@ -988,6 +988,11 @@
   }
 
   @override
+  visitCreateInvocationMirror(tree.CreateInvocationMirror node, arg) {
+    return errorUnsupportedNode(node);
+  }
+
+  @override
   Expression visitReadTypeVariable(tree.ReadTypeVariable node, arg) {
     return errorUnsupportedNode(node);
   }
@@ -1114,7 +1119,7 @@
 
 
 class ConstantEmitter
-    extends ConstantExpressionVisitor<BuilderContext<Statement>, Expression> {
+    extends ConstantExpressionVisitor<Expression, BuilderContext<Statement>> {
   const ConstantEmitter();
 
   /// Creates the [Expression] for the constant [exp].
@@ -1147,8 +1152,32 @@
   }
 
   @override
-  Expression visitPrimitive(PrimitiveConstantExpression exp,
-                            BuilderContext<Statement> context) {
+  Expression visitBool(BoolConstantExpression exp,
+                       BuilderContext<Statement> context) {
+    return handlePrimitiveConstant(exp.value);
+  }
+
+  @override
+  Expression visitInt(IntConstantExpression exp,
+                      BuilderContext<Statement> context) {
+    return handlePrimitiveConstant(exp.value);
+  }
+
+  @override
+  Expression visitDouble(DoubleConstantExpression exp,
+                         BuilderContext<Statement> context) {
+    return handlePrimitiveConstant(exp.value);
+  }
+
+  @override
+  Expression visitString(StringConstantExpression exp,
+                         BuilderContext<Statement> context) {
+    return handlePrimitiveConstant(exp.value);
+  }
+
+  @override
+  Expression visitNull(NullConstantExpression exp,
+                       BuilderContext<Statement> context) {
     return handlePrimitiveConstant(exp.value);
   }
 
@@ -1216,7 +1245,7 @@
   Expression visitConcatenate(ConcatenateConstantExpression exp,
                               BuilderContext<Statement> context) {
 
-    return new StringConcat(visitExpressions(exp.arguments, context));
+    return new StringConcat(visitExpressions(exp.expressions, context));
   }
 
   @override
@@ -1281,6 +1310,39 @@
   }
 
   @override
+  Expression visitNamed(NamedArgumentReference exp,
+                        BuilderContext<Statement> context) {
+    throw new UnsupportedError("ConstantEmitter.visitNamed");
+  }
+
+  @override
+  Expression visitPositional(PositionalArgumentReference exp,
+                             BuilderContext<Statement> context) {
+    throw new UnsupportedError("ConstantEmitter.visitPositional");
+  }
+
+  @override
+  Expression visitBoolFromEnvironment(
+      BoolFromEnvironmentConstantExpression exp,
+      BuilderContext<Statement> context) {
+    return handlePrimitiveConstant(exp.value);
+  }
+
+  @override
+  Expression visitIntFromEnvironment(
+      IntFromEnvironmentConstantExpression exp,
+      BuilderContext<Statement> context) {
+    return handlePrimitiveConstant(exp.value);
+  }
+
+  @override
+  Expression visitStringFromEnvironment(
+      StringFromEnvironmentConstantExpression exp,
+      BuilderContext<Statement> context) {
+    return handlePrimitiveConstant(exp.value);
+  }
+
+  @override
   Expression visitDeferred(DeferredConstantExpression exp,
                            BuilderContext<Statement> context) {
     return exp.expression.accept(this);
diff --git a/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart b/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
index 91ed149..04a7b7c 100644
--- a/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
+++ b/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
@@ -369,8 +369,8 @@
       return;
     }
 
-    if (element.isGetter || element.isSetter) {
-      element = (element as FunctionElement).abstractField;
+    if (element.isAccessor) {
+      element = (element as AccessorElement).abstractField;
     }
     elementNodes.putIfAbsent(element, () => new Set<Node>()).add(node);
   }
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index b4ef154..2b0b7fc 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -25,6 +25,7 @@
     JavaScriptBackend;
 
 import 'elements/elements.dart' show
+    AccessorElement,
     AstElement,
     ClassElement,
     Element,
@@ -201,9 +202,16 @@
     return outputUnitForElement(element) != mainOutputUnit;
   }
 
-  /// Returns true if e1 and e2 are in the same output unit.
-  bool inSameOutputUnit(Element e1, Element e2) {
-    return outputUnitForElement(e1) == outputUnitForElement(e2);
+  /// Returns `true` if element [to] is reachable from element [from] without
+  /// crossing a deferred import.
+  ///
+  /// For example, if we have two deferred libraries `A` and `B` that both
+  /// import a library `C`, then even though elements from `A` and `C` end up in
+  /// different output units, there is a non-deferred path between `A` and `C`.
+  bool hasOnlyNonDeferredImportPaths(Element from, Element to) {
+    OutputUnit outputUnitFrom = outputUnitForElement(from);
+    OutputUnit outputUnitTo = outputUnitForElement(to);
+    return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
   }
 
   void registerConstantDeferredUse(DeferredConstantValue constant,
@@ -233,7 +241,7 @@
       element = element.enclosingClass;
     }
     if (element.isAccessor) {
-      element = (element as FunctionElement).abstractField;
+      element = (element as AccessorElement).abstractField;
     }
     return library.getImportsFor(element);
   }
diff --git a/pkg/compiler/lib/src/elements/elements.dart b/pkg/compiler/lib/src/elements/elements.dart
index dc86504..5301e0b 100644
--- a/pkg/compiler/lib/src/elements/elements.dart
+++ b/pkg/compiler/lib/src/elements/elements.dart
@@ -411,9 +411,6 @@
   bool get isAbstract;
   bool isForeign(Backend backend);
 
-  void addMetadata(MetadataAnnotation annotation);
-  void setNative(String name);
-
   Scope buildScope();
 
   void diagnose(Element context, DiagnosticListener listener);
@@ -840,12 +837,14 @@
 }
 
 abstract class CompilationUnitElement extends Element {
+  /// Use [library] instead.
+  @deprecated
+  get enclosingElement;
+
   Script get script;
   PartOf get partTag;
 
   void forEachLocalMember(f(Element element));
-  void addMember(Element element, DiagnosticListener listener);
-  void setPartOf(PartOf tag, DiagnosticListener listener);
   bool get hasMembers;
 
   int compareTo(CompilationUnitElement other);
@@ -887,33 +886,15 @@
    * an underscore.
    */
   bool get isInternalLibrary;
+
   bool get canUseNative;
   bool get exportsHandled;
 
-  // TODO(kasperl): We should try to get rid of these.
-  void set libraryTag(LibraryName value);
-
   LibraryElement get implementation;
 
-  void addCompilationUnit(CompilationUnitElement element);
-  void addTag(LibraryTag tag, DiagnosticListener listener);
-  void addImport(Element element, Import import, DiagnosticListener listener);
-
-  /// Record which element an import or export tag resolved to.
-  /// (Belongs on builder object).
-  void recordResolvedTag(LibraryDependency tag, LibraryElement library);
-
   /// Return the library element corresponding to an import or export.
   LibraryElement getLibraryFromTag(LibraryDependency tag);
 
-  void addMember(Element element, DiagnosticListener listener);
-  void addToScope(Element element, DiagnosticListener listener);
-
-  // TODO(kasperl): Get rid of this method.
-  Iterable<Element> getNonPrivateElementsInScope();
-
-  void setExports(Iterable<Element> exportedElements);
-
   Element find(String elementName);
   Element findLocal(String elementName);
   Element findExported(String elementName);
@@ -998,6 +979,10 @@
 /// A top level, static or instance field, a formal parameter or local variable.
 abstract class VariableElement extends ExecutableElement {
   Expression get initializer;
+
+  /// The constant expression defining the value of the variable if `const`,
+  /// `null` otherwise.
+  ConstantExpression get constant;
 }
 
 /// An entity that defines a local entity (memory slot) in generated code.
@@ -1135,10 +1120,6 @@
   FunctionElement get patch;
   FunctionElement get origin;
 
-  /// Used to retrieve a link to the abstract field element representing this
-  /// element.
-  AbstractFieldElement get abstractField;
-
   /// Do not use [computeSignature] outside of the resolver; instead retrieve
   /// the signature through the [functionSignature] field.
   /// Trying to access a function signature that has not been computed in
@@ -1162,6 +1143,25 @@
   bool get isExternal;
 }
 
+/// A getter or setter.
+abstract class AccessorElement extends MethodElement {
+  /// Used to retrieve a link to the abstract field element representing this
+  /// element.
+  AbstractFieldElement get abstractField;
+}
+
+/// A getter.
+abstract class GetterElement extends AccessorElement {
+  /// The setter corresponding to this getter, if any.
+  SetterElement get setter;
+}
+
+/// A setter.
+abstract class SetterElement extends AccessorElement {
+  /// The getter corresponding to this setter, if any.
+  GetterElement get getter;
+}
+
 /// Enum for the synchronous/asynchronous function body modifiers.
 class AsyncMarker {
   /// The default function body marker.
@@ -1232,6 +1232,12 @@
   /// constructor so its immediate redirection target is `null`.
   ConstructorElement get immediateRedirectionTarget;
 
+  bool get isCyclicRedirection;
+
+  /// The prefix of the immediateRedirectionTarget, if it is deferred.
+  /// [null] if it is not deferred.
+  PrefixElement get redirectionDeferredPrefix;
+
   /// Is `true` if this constructor is a redirecting generative constructor.
   bool get isRedirectingGenerative;
 
@@ -1256,6 +1262,13 @@
   /// is `C.c`.
   ConstructorElement get definingConstructor;
 
+  /// The constant constructor defining the binding of fields if `const`,
+  /// `null` otherwise.
+  ConstantConstructor get constantConstructor;
+
+  /// `true` if this constructor is either `bool.fromEnviroment`
+  bool get isFromEnvironmentConstructor;
+
   /// Use [enclosingClass] instead.
   @deprecated
   get enclosingElement;
diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart
index 7d96a64..e19d722 100644
--- a/pkg/compiler/lib/src/elements/modelx.dart
+++ b/pkg/compiler/lib/src/elements/modelx.dart
@@ -6,6 +6,7 @@
 
 import 'elements.dart';
 import '../constants/expressions.dart';
+import '../constants/constructors.dart';
 import '../helpers/helpers.dart';  // Included for debug helpers.
 import '../tree/tree.dart';
 import '../util/util.dart';
@@ -170,7 +171,7 @@
 
   Name get memberName => new Name(name, library);
 
-  LibraryElement get implementationLibrary {
+  LibraryElementX get implementationLibrary {
     Element element = this;
     while (!identical(element.kind, ElementKind.LIBRARY)) {
       element = element.enclosingElement;
@@ -283,6 +284,10 @@
 
   bool get isSynthesized => true;
 
+  bool get isCyclicRedirection => false;
+
+  PrefixElement get redirectionDeferredPrefix => null;
+
   AbstractFieldElement abstractField;
 
   unsupported() {
@@ -306,6 +311,7 @@
   get memberContext => unsupported();
   get executableContext => unsupported();
   get isExternal => unsupported();
+  get constantConstructor => null;
 
   bool get isRedirectingGenerative => unsupported();
   bool get isRedirectingFactory => unsupported();
@@ -329,11 +335,16 @@
   accept(ElementVisitor visitor, arg) {
     return visitor.visitErroneousElement(this, arg);
   }
+
+  @override
+  bool get isFromEnvironmentConstructor => false;
 }
 
 /// A constructor that was synthesized to recover from a compile-time error.
 class ErroneousConstructorElementX extends ErroneousElementX
-    with PatchMixin<FunctionElement>, AnalyzableElementX
+    with PatchMixin<FunctionElement>,
+         AnalyzableElementX,
+         ConstantConstructorMixin
     implements ConstructorElementX {
   // TODO(ahe): Instead of subclassing [ErroneousElementX], this class should
   // be more like [ErroneousFieldElementX]. In particular, its kind should be
@@ -414,9 +425,9 @@
     throw new UnsupportedError("nestedClosures=");
   }
 
-  bool get hasNoBody => false;
-
-  bool get _hasNoBody => false;
+  set redirectionDeferredPrefix(_) {
+    throw new UnsupportedError("redirectionDeferredPrefix=");
+  }
 
   void set effectiveTarget(_) {
     throw new UnsupportedError("effectiveTarget=");
@@ -608,7 +619,7 @@
    * element, they are enclosed by the class or compilation unit, as is the
    * abstract field.
    */
-  void addAccessor(FunctionElementX accessor,
+  void addAccessor(AccessorElementX accessor,
                    Element existing,
                    DiagnosticListener listener) {
     void reportError(Element other) {
@@ -666,7 +677,7 @@
   PartOf partTag;
   Link<Element> localMembers = const Link<Element>();
 
-  CompilationUnitElementX(Script script, LibraryElement library)
+  CompilationUnitElementX(Script script, LibraryElementX library)
     : this.script = script,
       super(script.name,
             ElementKind.COMPILATION_UNIT,
@@ -674,6 +685,9 @@
     library.addCompilationUnit(this);
   }
 
+  @override
+  LibraryElementX get library => enclosingElement.declaration;
+
   void forEachLocalMember(f(Element element)) {
     localMembers.forEach(f);
   }
@@ -925,6 +939,7 @@
     return tagsCache;
   }
 
+  /// Record which element an import or export tag resolved to.
   void recordResolvedTag(LibraryDependency tag, LibraryElement library) {
     assert(tagMapping[tag] == null);
     tagMapping[tag] = library;
@@ -1255,7 +1270,24 @@
   DartType computeType(Element element, Compiler compiler) => type;
 }
 
-abstract class VariableElementX extends ElementX with AstElementMixin
+abstract class ConstantVariableMixin implements VariableElement {
+  ConstantExpression _constant;
+
+  ConstantExpression get constant {
+    assert(invariant(this, _constant != null,
+        message: "Constant has not been computed for $this."));
+    return _constant;
+  }
+
+  void set constant(ConstantExpression value) {
+    assert(invariant(this, _constant == null || _constant == value,
+        message: "Constant has already been computed for $this."));
+    _constant = value;
+  }
+}
+
+abstract class VariableElementX extends ElementX
+    with AstElementMixin, ConstantVariableMixin
     implements VariableElement {
   final Token token;
   final VariableList variables;
@@ -1414,7 +1446,8 @@
 }
 
 /// A field that was synthesized to recover from a compile-time error.
-class ErroneousFieldElementX extends ElementX implements FieldElementX {
+class ErroneousFieldElementX extends ElementX
+    with ConstantVariableMixin implements FieldElementX {
   final VariableList variables;
 
   ErroneousFieldElementX(Identifier name, Element enclosingElement)
@@ -1559,7 +1592,8 @@
 /// to ensure that default values on parameters are computed once (on the
 /// origin parameter) but can be found through both the origin and the patch.
 abstract class ParameterElementX extends FormalElementX
-  with PatchMixin<ParameterElement> implements ParameterElement {
+    with PatchMixin<ParameterElement>, ConstantVariableMixin
+    implements ParameterElement {
   final Expression initializer;
   final bool isOptional;
   final bool isNamed;
@@ -1652,8 +1686,8 @@
 }
 
 class AbstractFieldElementX extends ElementX implements AbstractFieldElement {
-  FunctionElementX getter;
-  FunctionElementX setter;
+  GetterElementX getter;
+  SetterElementX setter;
 
   AbstractFieldElementX(String name, Element enclosing)
       : super(name, ElementKind.ABSTRACT_FIELD, enclosing);
@@ -1811,26 +1845,18 @@
 
   FunctionSignature functionSignatureCache;
 
-  final bool _hasNoBody;
-
-  AbstractFieldElement abstractField;
-
   AsyncMarker asyncMarker = AsyncMarker.SYNC;
 
   BaseFunctionElementX(String name,
                        ElementKind kind,
                        Modifiers this.modifiers,
-                       Element enclosing,
-                       bool hasNoBody)
-      : super(name, kind, enclosing),
-        _hasNoBody = hasNoBody {
+                       Element enclosing)
+      : super(name, kind, enclosing) {
     assert(modifiers != null);
   }
 
   bool get isExternal => modifiers.isExternal;
 
-  bool get hasNoBody => _hasNoBody;
-
   bool get isInstanceMember {
     return isClassMember
            && !isConstructor
@@ -1885,11 +1911,7 @@
     }
   }
 
-  bool get isAbstract {
-    return !modifiers.isExternal &&
-           (isFunction || isAccessor) &&
-           _hasNoBody;
-  }
+  bool get isAbstract => false;
 
   accept(ElementVisitor visitor, arg) {
     return visitor.visitFunctionElement(this, arg);
@@ -1901,12 +1923,12 @@
 
 abstract class FunctionElementX extends BaseFunctionElementX
     with AnalyzableElementX implements MethodElement {
+
   FunctionElementX(String name,
                    ElementKind kind,
                    Modifiers modifiers,
-                   Element enclosing,
-                   bool hasNoBody)
-      : super(name, kind, modifiers, enclosing, hasNoBody);
+                   Element enclosing)
+      : super(name, kind, modifiers, enclosing);
 
   MemberElement get memberContext => this;
 
@@ -1918,6 +1940,55 @@
   }
 }
 
+abstract class MethodElementX extends FunctionElementX {
+  final bool hasBody;
+
+  MethodElementX(String name,
+                 ElementKind kind,
+                 Modifiers modifiers,
+                 Element enclosing,
+                 // TODO(15101): Make this a named parameter.
+                 this.hasBody)
+      : super(name, kind, modifiers, enclosing);
+
+  @override
+  bool get isAbstract {
+    return !modifiers.isExternal && !hasBody;
+  }
+}
+
+abstract class AccessorElementX extends MethodElementX
+    implements AccessorElement {
+  AbstractFieldElement abstractField;
+
+  AccessorElementX(String name,
+                   ElementKind kind,
+                   Modifiers modifiers,
+                   Element enclosing,
+                   bool hasBody)
+      : super(name, kind, modifiers, enclosing, hasBody);
+}
+
+abstract class GetterElementX extends AccessorElementX
+    implements GetterElement {
+
+  GetterElementX(String name,
+                 Modifiers modifiers,
+                 Element enclosing,
+                 bool hasBody)
+      : super(name, ElementKind.GETTER, modifiers, enclosing, hasBody);
+}
+
+abstract class SetterElementX extends AccessorElementX
+    implements SetterElement {
+
+  SetterElementX(String name,
+                 Modifiers modifiers,
+                 Element enclosing,
+                 bool hasBody)
+      : super(name, ElementKind.SETTER, modifiers, enclosing, hasBody);
+}
+
 class LocalFunctionElementX extends BaseFunctionElementX
     implements LocalFunctionElement {
   final FunctionExpression node;
@@ -1927,7 +1998,7 @@
                         ElementKind kind,
                         Modifiers modifiers,
                         ExecutableElement enclosing)
-      : super(name, kind, modifiers, enclosing, false);
+      : super(name, kind, modifiers, enclosing);
 
   ExecutableElement get executableContext => enclosingElement;
 
@@ -1949,20 +2020,49 @@
   bool get isLocal => true;
 }
 
+abstract class ConstantConstructorMixin implements ConstructorElement {
+  ConstantConstructor _constantConstructor;
+
+  ConstantConstructor get constantConstructor {
+    if (isPatch) {
+      ConstructorElement originConstructor = origin;
+      return originConstructor.constantConstructor;
+    }
+    if (!isConst || isFromEnvironmentConstructor) return null;
+    if (_constantConstructor == null) {
+      _constantConstructor = computeConstantConstructor(resolvedAst);
+    }
+    return _constantConstructor;
+  }
+
+  bool get isFromEnvironmentConstructor {
+    return name == 'fromEnvironment' &&
+           library.isDartCore &&
+           (enclosingClass.name == 'bool' ||
+            enclosingClass.name == 'int' ||
+            enclosingClass.name == 'String');
+  }
+}
+
 abstract class ConstructorElementX extends FunctionElementX
-    implements ConstructorElement {
+    with ConstantConstructorMixin implements ConstructorElement {
   bool isRedirectingGenerative = false;
 
   ConstructorElementX(String name,
                       ElementKind kind,
                       Modifiers modifiers,
                       Element enclosing)
-        : super(name, kind, modifiers, enclosing, false);
+        : super(name, kind, modifiers, enclosing);
 
   FunctionElement immediateRedirectionTarget;
+  PrefixElement redirectionDeferredPrefix;
 
   bool get isRedirectingFactory => immediateRedirectionTarget != null;
 
+  // TODO(johnniwinther): This should also return true for cyclic redirecting
+  // generative constructors.
+  bool get isCyclicRedirection => effectiveTarget.isRedirectingFactory;
+
   /// This field is set by the post process queue when checking for cycles.
   ConstructorElement internalEffectiveTarget;
   DartType effectiveTargetType;
@@ -1988,20 +2088,25 @@
     return effectiveTargetType.substByContext(newType);
   }
 
+  accept(ElementVisitor visitor, arg) {
+    return visitor.visitConstructorElement(this, arg);
+  }
+
   ConstructorElement get definingConstructor => null;
 
   ClassElement get enclosingClass => enclosingElement;
 }
 
-class DeferredLoaderGetterElementX extends FunctionElementX {
+class DeferredLoaderGetterElementX extends GetterElementX
+    implements GetterElement {
   final PrefixElement prefix;
 
   DeferredLoaderGetterElementX(PrefixElement prefix)
       : this.prefix = prefix,
         super("loadLibrary",
-              ElementKind.FUNCTION,
               Modifiers.EMPTY,
-              prefix, true);
+              prefix,
+              false);
 
   FunctionSignature computeSignature(Compiler compiler) {
     if (functionSignatureCache != null) return functionSignature;
@@ -2018,12 +2123,8 @@
 
   bool get isSynthesized => true;
 
-  bool get isFunction => false;
-
   bool get isDeferredLoaderGetter => true;
 
-  bool get isGetter => true;
-
   bool get isTopLevel => true;
   // By having position null, the enclosing elements location is printed in
   // error messages.
@@ -2034,18 +2135,21 @@
   bool get hasNode => false;
 
   FunctionExpression get node => null;
+
+  @override
+  SetterElement get setter => null;
 }
 
 class ConstructorBodyElementX extends BaseFunctionElementX
     implements ConstructorBodyElement {
-  ConstructorElement constructor;
+  ConstructorElementX constructor;
 
-  ConstructorBodyElementX(FunctionElement constructor)
+  ConstructorBodyElementX(ConstructorElementX constructor)
       : this.constructor = constructor,
         super(constructor.name,
               ElementKind.GENERATIVE_CONSTRUCTOR_BODY,
               Modifiers.EMPTY,
-              constructor.enclosingElement, false) {
+              constructor.enclosingElement) {
     functionSignatureCache = constructor.functionSignature;
   }
 
@@ -2783,18 +2887,14 @@
   FunctionExpression parseNode(Compiler compiler) => node;
 }
 
-class EnumMethodElementX extends FunctionElementX {
+class EnumMethodElementX extends MethodElementX {
   final FunctionExpression node;
 
   EnumMethodElementX(String name,
                      EnumClassElementX enumClass,
                      Modifiers modifiers,
                      this.node)
-      : super(name,
-              ElementKind.FUNCTION,
-              modifiers,
-              enumClass,
-              false);
+      : super(name, ElementKind.FUNCTION, modifiers, enumClass, true);
 
   @override
   bool get hasNode => true;
diff --git a/pkg/compiler/lib/src/elements/visitor.dart b/pkg/compiler/lib/src/elements/visitor.dart
index e3e610a..7769226 100644
--- a/pkg/compiler/lib/src/elements/visitor.dart
+++ b/pkg/compiler/lib/src/elements/visitor.dart
@@ -29,6 +29,7 @@
   R visitFieldParameterElement(InitializingFormalElement e, A arg) => null;
   R visitAbstractFieldElement(AbstractFieldElement e, A arg) => null;
   R visitFunctionElement(FunctionElement e, A arg) => null;
+  R visitConstructorElement(ConstructorElement e, A arg) => null;
   R visitConstructorBodyElement(ConstructorBodyElement e, A arg) => null;
   R visitClassElement(ClassElement e, A arg) => null;
   R visitMixinApplicationElement(MixinApplicationElement e, A arg) => null;
@@ -47,7 +48,7 @@
 
   @override
   R visitErroneousElement(ErroneousElement e, A arg) {
-    return visitFunctionElement(e, arg);
+    return visitElement(e, arg);
   }
 
   @override
@@ -120,6 +121,11 @@
   }
 
   @override
+  R visitConstructorElement(ConstructorElement e, A arg) {
+    return visitFunctionElement(e, arg);
+  }
+
+  @override
   R visitConstructorBodyElement(ConstructorBodyElement e, A arg) {
     return visitElement(e, arg);
   }
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index da3afed..056db9f 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -853,7 +853,7 @@
           "Codegen work list is closed. Trying to add $element");
     }
     CodegenWorkItem workItem = new CodegenWorkItem(
-        element, itemCompilationContextCreator());
+        compiler, element, itemCompilationContextCreator());
     queue.add(workItem);
     return true;
   }
diff --git a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
index e3bdac5..941d64d 100644
--- a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
@@ -835,38 +835,7 @@
     }
 
     if (node.isIndex) {
-      if (op == '=') {
-        // [: foo[0] = 42 :]
-        handleDynamicSend(
-            node,
-            setterSelector,
-            receiverType,
-            new ArgumentsTypes<T>([indexType, rhsType], null));
-        return rhsType;
-      } else {
-        // [: foo[0] += 42 :] or [: foo[0]++ :].
-        T getterType = handleDynamicSend(
-            node,
-            getterSelector,
-            receiverType,
-            new ArgumentsTypes<T>([indexType], null));
-        T returnType = handleDynamicSend(
-            node,
-            operatorSelector,
-            getterType,
-            new ArgumentsTypes<T>([rhsType], null));
-        handleDynamicSend(
-            node,
-            setterSelector,
-            receiverType,
-            new ArgumentsTypes<T>([indexType, returnType], null));
-
-        if (node.isPostfix) {
-          return getterType;
-        } else {
-          return returnType;
-        }
-      }
+      return internalError(node, "Unexpected index operation");
     } else if (op == '=') {
       return handlePlainAssignment(
           node, element, setterSelector, receiverType, rhsType,
@@ -918,6 +887,259 @@
     }
   }
 
+  /// Handle compound index set, like `foo[0] += 42` or `foo[0]++`.
+  T handleCompoundIndexSet(
+      ast.SendSet node,
+      T receiverType,
+      T indexType,
+      T rhsType) {
+    Selector getterSelector =
+         elements.getGetterSelectorInComplexSendSet(node);
+     Selector operatorSelector =
+         elements.getOperatorSelectorInComplexSendSet(node);
+     Selector setterSelector = elements.getSelector(node);
+
+    T getterType = handleDynamicSend(
+        node,
+        getterSelector,
+        receiverType,
+        new ArgumentsTypes<T>([indexType], null));
+    T returnType = handleDynamicSend(
+        node,
+        operatorSelector,
+        getterType,
+        new ArgumentsTypes<T>([rhsType], null));
+    handleDynamicSend(
+        node,
+        setterSelector,
+        receiverType,
+        new ArgumentsTypes<T>([indexType, returnType], null));
+
+    if (node.isPostfix) {
+      return getterType;
+    } else {
+      return returnType;
+    }
+  }
+
+  /// Handle compound prefix/postfix operations, like `a[0]++`.
+  T handleCompoundPrefixPostfix(
+      ast.Send node,
+      T receiverType,
+      T indexType) {
+    return handleCompoundIndexSet(
+        node, receiverType, indexType, types.uint31Type);
+  }
+
+  @override
+  T visitIndexPostfix(
+      ast.Send node,
+      ast.Node receiver,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T receiverType = visit(receiver);
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, receiverType, indexType);
+  }
+
+  @override
+  T visitIndexPrefix(
+      ast.Send node,
+      ast.Node receiver,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T receiverType = visit(receiver);
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, receiverType, indexType);
+  }
+
+  @override
+  T visitCompoundIndexSet(
+      ast.SendSet node,
+      ast.Node receiver,
+      ast.Node index,
+      op.AssignmentOperator operator,
+      ast.Node rhs,
+      _) {
+    T receiverType = visit(receiver);
+    T indexType = visit(index);
+    T rhsType = visit(rhs);
+    return handleCompoundIndexSet(node, receiverType, indexType, rhsType);
+  }
+
+  @override
+  T visitSuperIndexPrefix(
+      ast.Send node,
+      MethodElement getter,
+      MethodElement setter,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, superType, indexType);
+  }
+
+  @override
+  T visitSuperIndexPostfix(
+      ast.Send node,
+      MethodElement getter,
+      MethodElement setter,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, superType, indexType);
+  }
+
+  /// Handle compound super index set, like `super[42] =+ 2`.
+  T handleSuperCompoundIndexSet(
+      ast.SendSet node,
+      ast.Node index,
+      ast.Node rhs) {
+    T receiverType = superType;
+    T indexType = visit(index);
+    T rhsType = visit(rhs);
+    return handleCompoundIndexSet(node, receiverType, indexType, rhsType);
+  }
+
+  @override
+  T visitSuperCompoundIndexSet(
+      ast.SendSet node,
+      FunctionElement getter,
+      FunctionElement setter,
+      ast.Node index,
+      op.AssignmentOperator operator,
+      ast.Node rhs,
+      _) {
+    return handleSuperCompoundIndexSet(node, index, rhs);
+  }
+
+  @override
+  T visitUnresolvedSuperGetterCompoundIndexSet(
+      ast.SendSet node,
+      Element element,
+      ast.Node index,
+      op.AssignmentOperator operator,
+      ast.Node rhs,
+      _) {
+    return handleSuperCompoundIndexSet(node, index, rhs);
+  }
+
+  @override
+  T visitUnresolvedSuperSetterCompoundIndexSet(
+      ast.SendSet node,
+      FunctionElement getter,
+      Element element,
+      ast.Node index,
+      op.AssignmentOperator operator,
+      ast.Node rhs,
+      _) {
+    return handleSuperCompoundIndexSet(node, index, rhs);
+  }
+
+  @override
+  T visitUnresolvedSuperGetterIndexPrefix(
+      ast.SendSet node,
+      Element element,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, superType, indexType);
+  }
+
+  @override
+  T visitUnresolvedSuperSetterIndexPrefix(
+      ast.SendSet node,
+      FunctionElement getter,
+      Element element,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, superType, indexType);
+  }
+
+  @override
+  T visitUnresolvedSuperGetterIndexPostfix(
+      ast.SendSet node,
+      Element element,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, superType, indexType);
+  }
+
+  @override
+  T visitUnresolvedSuperSetterIndexPostfix(
+      ast.SendSet node,
+      FunctionElement getter,
+      Element element,
+      ast.Node index,
+      op.IncDecOperator operator,
+      _) {
+    T indexType = visit(index);
+    return handleCompoundPrefixPostfix(node, superType, indexType);
+  }
+
+  /// Handle index set, like `foo[0] = 42`.
+  T handleIndexSet(ast.SendSet node, T receiverType, T indexType, T rhsType) {
+    Selector setterSelector = elements.getSelector(node);
+    handleDynamicSend(
+        node,
+        setterSelector,
+        receiverType,
+        new ArgumentsTypes<T>([indexType, rhsType], null));
+    return rhsType;
+  }
+
+  @override
+  T visitIndexSet(
+      ast.SendSet node,
+      ast.Node receiver,
+      ast.Node index,
+      ast.Node rhs,
+      _) {
+    T receiverType = visit(receiver);
+    T indexType = visit(index);
+    T rhsType = visit(rhs);
+    return handleIndexSet(node, receiverType, indexType, rhsType);
+  }
+
+  /// Handle super index set, like `super[42] = true`.
+  T handleSuperIndexSet(
+      ast.SendSet node,
+      ast.Node index,
+      ast.Node rhs) {
+    T receiverType = superType;
+    T indexType = visit(index);
+    T rhsType = visit(rhs);
+    return handleIndexSet(node, receiverType, indexType, rhsType);
+  }
+
+  @override
+  T visitSuperIndexSet(
+      ast.SendSet node,
+      FunctionElement function,
+      ast.Node index,
+      ast.Node rhs,
+      _) {
+    return handleSuperIndexSet(node, index, rhs);
+  }
+
+  @override
+  T visitUnresolvedSuperIndexSet(
+      ast.SendSet node,
+      Element element,
+      ast.Node index,
+      ast.Node rhs,
+      _) {
+    return handleSuperIndexSet(node, index, rhs);
+  }
+
   T handlePlainAssignment(ast.Node node,
                           Element element,
                           Selector setterSelector,
@@ -1436,7 +1658,6 @@
       return inferrer.typeOfNativeBehavior(nativeBehavior);
     } else if (name == 'JS_NULL_CLASS_NAME'
                || name == 'JS_OBJECT_CLASS_NAME'
-               || name == 'JS_OPERATOR_IS_PREFIX'
                || name == 'JS_OPERATOR_AS_PREFIX'
                || name == 'JS_STRING_CONCAT') {
       return types.stringType;
diff --git a/pkg/compiler/lib/src/js/js.dart b/pkg/compiler/lib/src/js/js.dart
index 378b89e..bfbe96a 100644
--- a/pkg/compiler/lib/src/js/js.dart
+++ b/pkg/compiler/lib/src/js/js.dart
@@ -15,7 +15,6 @@
 import '../util/util.dart' show NO_LOCATION_SPANNABLE;
 import '../dump_info.dart' show DumpInfoTask;
 
-
 CodeBuffer prettyPrint(Node node, leg.Compiler compiler,
                        {DumpInfoTask monitor,
                         bool allowVariableMinification: true}) {
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index aeb4fb8..986a313 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -290,6 +290,7 @@
   ClassElement jsMutableArrayClass;
   ClassElement jsFixedArrayClass;
   ClassElement jsExtendableArrayClass;
+  ClassElement jsUnmodifiableArrayClass;
   ClassElement jsPositiveIntClass;
   ClassElement jsUInt32Class;
   ClassElement jsUInt31Class;
@@ -386,6 +387,15 @@
     return _extendableArrayTypeCache;
   }
 
+  TypeMask _unmodifiableArrayTypeCache;
+  TypeMask get unmodifiableArrayType {
+    if (_unmodifiableArrayTypeCache == null) {
+      _unmodifiableArrayTypeCache =
+          new TypeMask.nonNullExact(jsUnmodifiableArrayClass, compiler.world);
+    }
+    return _fixedArrayTypeCache;
+  }
+
   TypeMask _nonNullTypeCache;
   TypeMask get nonNullType {
     if (_nonNullTypeCache == null) {
@@ -1055,11 +1065,13 @@
     } else if (cls == compiler.listClass ||
                cls == jsArrayClass ||
                cls == jsFixedArrayClass ||
-               cls == jsExtendableArrayClass) {
+               cls == jsExtendableArrayClass ||
+               cls == jsUnmodifiableArrayClass) {
       addInterceptors(jsArrayClass, enqueuer, registry);
       addInterceptors(jsMutableArrayClass, enqueuer, registry);
       addInterceptors(jsFixedArrayClass, enqueuer, registry);
       addInterceptors(jsExtendableArrayClass, enqueuer, registry);
+      addInterceptors(jsUnmodifiableArrayClass, enqueuer, registry);
     } else if (cls == compiler.intClass || cls == jsIntClass) {
       addInterceptors(jsIntClass, enqueuer, registry);
       addInterceptors(jsPositiveIntClass, enqueuer, registry);
@@ -1639,7 +1651,8 @@
         element == jsArrayClass ||
         element == jsMutableArrayClass ||
         element == jsExtendableArrayClass ||
-        element == jsFixedArrayClass;
+        element == jsFixedArrayClass ||
+        element == jsUnmodifiableArrayClass;
   }
 
   /// Return [true] if the class is represented by a native JavaSCript type in
@@ -1871,7 +1884,7 @@
   ClassElement get numImplementation => jsNumberClass;
   ClassElement get stringImplementation => jsStringClass;
   ClassElement get listImplementation => jsArrayClass;
-  ClassElement get constListImplementation => jsArrayClass;
+  ClassElement get constListImplementation => jsUnmodifiableArrayClass;
   ClassElement get fixedListImplementation => jsFixedArrayClass;
   ClassElement get growableListImplementation => jsExtendableArrayClass;
   ClassElement get mapImplementation => mapLiteralClass;
@@ -2032,6 +2045,7 @@
           jsMutableArrayClass = findClass('JSMutableArray'),
           jsFixedArrayClass = findClass('JSFixedArray'),
           jsExtendableArrayClass = findClass('JSExtendableArray'),
+          jsUnmodifiableArrayClass = findClass('JSUnmodifiableArray'),
           jsPlainJavaScriptObjectClass = findClass('PlainJavaScriptObject'),
           jsUnknownJavaScriptObjectClass = findClass('UnknownJavaScriptObject'),
         ];
@@ -2115,6 +2129,9 @@
     if (jsExtendableArrayClass != null) {
       jsExtendableArrayClass.ensureResolved(compiler);
     }
+    if (jsUnmodifiableArrayClass != null) {
+      jsUnmodifiableArrayClass.ensureResolved(compiler);
+    }
 
     jsIndexableClass.ensureResolved(compiler);
     jsIndexableLength = compiler.lookupElementIn(
diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
index 95b1dee..f101a76 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
@@ -589,6 +589,20 @@
   }
 
   @override
+  js.Expression visitCreateInvocationMirror(
+      tree_ir.CreateInvocationMirror node) {
+    js.Expression name = js.string(node.selector.name);
+    js.Expression internalName = js.string(glue.invocationName(node.selector));
+    js.Expression kind = js.number(node.selector.invocationMirrorKind);
+    js.Expression arguments = new js.ArrayInitializer(
+        node.arguments.map(visitExpression).toList());
+    js.Expression argumentNames = new js.ArrayInitializer(
+        node.selector.namedArguments.map(js.string).toList());
+    return buildStaticHelperInvocation(glue.createInvocationMirrorMethod,
+        [name, internalName, kind, arguments, argumentNames]);
+  }
+
+  @override
   js.Expression visitGetField(tree_ir.GetField node) {
     return new js.PropertyAccess.field(
         visitExpression(node.object),
diff --git a/pkg/compiler/lib/src/js_backend/codegen/glue.dart b/pkg/compiler/lib/src/js_backend/codegen/glue.dart
index 47d5b39..d3d3728 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/glue.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/glue.dart
@@ -76,6 +76,10 @@
     return _namer.invocationName(selector);
   }
 
+  FunctionElement get createInvocationMirrorMethod {
+    return _backend.getCreateInvocationMirror();
+  }
+
   void registerUseInterceptorInCodegen() {
     _backend.registerUseInterceptor(_enqueuer);
   }
@@ -114,7 +118,6 @@
         hasBeenInstantiated: hasBeenInstantiated);
   }
 
-
   String getInterceptorName(Set<ClassElement> interceptedClasses) {
     return _backend.namer.nameForGetInterceptor(interceptedClasses);
   }
@@ -207,4 +210,8 @@
   String getTypeTestTag(DartType type) {
     return _backend.namer.operatorIsType(type);
   }
+
+  bool operatorEqHandlesNullArgument(FunctionElement element) {
+    return _backend.operatorEqHandlesNullArgument(element);
+  }
 }
diff --git a/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart b/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart
index 3499f38..98893f8 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/js_tree_builder.dart
@@ -73,4 +73,9 @@
         node.arguments.map(getVariableUse).toList(growable: false),
         node.typeInformation.map(getVariableUse).toList(growable: false));
   }
+
+  Expression visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) {
+    return new CreateInvocationMirror(node.selector,
+        node.arguments.map(getVariableUse).toList(growable: false));
+  }
 }
diff --git a/pkg/compiler/lib/src/js_backend/codegen/task.dart b/pkg/compiler/lib/src/js_backend/codegen/task.dart
index 89cf74c..3befc85 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/task.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/task.dart
@@ -117,13 +117,6 @@
         giveUp(irBuilderTask.bailoutMessage);
       }
     }
-    if (element.isInstanceMember && !element.isGenerativeConstructorBody) {
-      Selector selector = new Selector.fromElement(cpsNode.element);
-      if (glue.isInterceptedSelector(selector)) {
-        giveUp('cannot compile methods that need interceptor calling '
-            'convention.');
-      }
-    }
     traceGraph("IR Builder", cpsNode);
     new UnsugarVisitor(glue).rewrite(cpsNode);
     traceGraph("Unsugaring", cpsNode);
diff --git a/pkg/compiler/lib/src/js_backend/codegen/type_test_emitter.dart b/pkg/compiler/lib/src/js_backend/codegen/type_test_emitter.dart
index 49b28e6..4a697a4 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/type_test_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/type_test_emitter.dart
@@ -60,4 +60,4 @@
         new js.Prefix("typeof", value),
         js.string(type));
   }
-}
+}
\ No newline at end of file
diff --git a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
index cf1e3ed..fab6a45 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
@@ -6,21 +6,39 @@
 import '../../cps_ir/optimizers.dart';
 import '../../constants/expressions.dart';
 import '../../constants/values.dart';
-import '../../elements/elements.dart'
-    show ClassElement, FieldElement, FunctionElement, Element;
+import '../../elements/elements.dart' show
+    ClassElement,
+    FieldElement,
+    FunctionElement,
+    Local,
+    ExecutableElement;
 import '../../js_backend/codegen/glue.dart';
 import '../../dart2jslib.dart' show Selector, World;
+import '../../cps_ir/cps_ir_builder.dart' show ThisParameterLocal;
+
+class ExplicitReceiverParameterEntity implements Local {
+  String get name => 'receiver';
+  final ExecutableElement executableContext;
+  ExplicitReceiverParameterEntity(this.executableContext);
+  toString() => 'ExplicitReceiverParameterEntity($executableContext)';
+}
 
 /// Rewrites the initial CPS IR to make Dart semantics explicit and inserts
 /// special nodes that respect JavaScript behavior.
 ///
 /// Performs the following rewrites:
-///  - rewrite [IsTrue] in a [Branch] to do boolean conversion.
-///  - converts two-parameter exception handlers to one-parameter ones.
+///  - Rewrite [IsTrue] in a [Branch] to do boolean conversion.
+///  - Add interceptors at call sites that use interceptor calling convention.
+///  - Add explicit receiver argument for methods that are called in interceptor
+///    calling convention.
+///  - Convert two-parameter exception handlers to one-parameter ones.
 class UnsugarVisitor extends RecursiveVisitor {
   Glue _glue;
   ParentVisitor _parentVisitor = new ParentVisitor();
 
+  Parameter thisParameter;
+  Parameter explicitReceiverParameter;
+
   // In a catch block, rethrow implicitly throws the block's exception
   // parameter.  This is the exception parameter when nested in a catch
   // block and null otherwise.
@@ -29,8 +47,32 @@
   UnsugarVisitor(this._glue);
 
   void rewrite(FunctionDefinition function) {
+    bool inInterceptedMethod = _glue.isInterceptedMethod(function.element);
+
+    if (function.element.name == '==' &&
+        function.parameters.length == 1 &&
+        !_glue.operatorEqHandlesNullArgument(function.element)) {
+      // Insert the null check that the language semantics requires us to
+      // perform before calling operator ==.
+      insertEqNullCheck(function);
+    }
+
+    if (inInterceptedMethod) {
+      thisParameter = function.thisParameter;
+      ThisParameterLocal holder = thisParameter.hint;
+      explicitReceiverParameter = new Parameter(
+          new ExplicitReceiverParameterEntity(
+              holder.executableContext));
+      function.parameters.insert(0, explicitReceiverParameter);
+    }
+
     // Set all parent pointers.
     _parentVisitor.visit(function);
+
+    if (inInterceptedMethod) {
+      explicitReceiverParameter.substituteFor(thisParameter);
+    }
+
     visit(function);
   }
 
@@ -47,6 +89,19 @@
             new TrueConstantValue()));
   }
 
+  Constant get falseConstant {
+    return new Constant(
+        new BoolConstantExpression(
+            false,
+            new FalseConstantValue()));
+  }
+
+  Constant get nullConstant {
+    return new Constant(
+        new NullConstantExpression(
+            new NullConstantValue()));
+  }
+
   void insertLetPrim(Primitive primitive, Expression node) {
     LetPrim let = new LetPrim(primitive);
     InteriorNode parent = node.parent;
@@ -56,6 +111,42 @@
     let.parent = parent;
   }
 
+  void insertEqNullCheck(FunctionDefinition function) {
+    // Replace
+    //
+    //     body;
+    //
+    // with
+    //
+    //     if (identical(arg, null))
+    //       return false;
+    //     else
+    //       body;
+    //
+    Continuation originalBody = new Continuation(<Parameter>[]);
+    originalBody.body = function.body.body;
+
+    Continuation returnFalse = new Continuation(<Parameter>[]);
+    Primitive falsePrimitive = falseConstant;
+    returnFalse.body =
+        new LetPrim(falsePrimitive,
+            new InvokeContinuation(
+                function.body.returnContinuation, <Primitive>[falsePrimitive]));
+
+    Primitive nullPrimitive = nullConstant;
+    Primitive test = new Identical(function.parameters.single, nullPrimitive);
+
+    Expression newBody =
+        new LetCont.many(<Continuation>[returnFalse, originalBody],
+            new LetPrim(nullPrimitive,
+                new LetPrim(test,
+                    new Branch(
+                        new IsTrue(test),
+                        returnFalse,
+                        originalBody))));
+    function.body.body = newBody;
+  }
+
   /// Insert a static call to [function] at the point of [node] with result
   /// [result].
   ///
@@ -145,32 +236,42 @@
 
   processInvokeMethod(InvokeMethod node) {
     Selector selector = node.selector;
-    // TODO(karlklose):  should we rewrite all selectors?
     if (!_glue.isInterceptedSelector(selector)) return;
 
     Primitive receiver = node.receiver.definition;
-    Set<ClassElement> interceptedClasses =
-        _glue.getInterceptedClassesOn(selector);
-    _glue.registerSpecializedGetInterceptor(interceptedClasses);
+    Primitive newReceiver;
 
-    Primitive intercepted = new Interceptor(receiver, interceptedClasses);
-    insertLetPrim(intercepted, node);
+    if (receiver == explicitReceiverParameter) {
+      // If the receiver is the explicit receiver, we are calling a method in
+      // the same interceptor:
+      //  Change 'receiver.foo()'  to  'this.foo(receiver)'.
+      newReceiver = thisParameter;
+    } else {
+      // TODO(sra): Move the computation of interceptedClasses to a much later
+      // phase and take into account the remaining uses of the interceptor.
+      Set<ClassElement> interceptedClasses =
+        _glue.getInterceptedClassesOn(selector);
+      _glue.registerSpecializedGetInterceptor(interceptedClasses);
+      newReceiver = new Interceptor(receiver, interceptedClasses);
+      insertLetPrim(newReceiver, node);
+    }
+
     node.arguments.insert(0, node.receiver);
     node.callingConvention = CallingConvention.JS_INTERCEPTED;
     assert(node.isValid);
-    node.receiver = new Reference<Primitive>(intercepted);
-  }
-
-  Primitive makeNull() {
-    NullConstantValue nullConst = new NullConstantValue();
-    return new Constant(new NullConstantExpression(nullConst));
+    node.receiver = new Reference<Primitive>(newReceiver);
   }
 
   processInvokeMethodDirectly(InvokeMethodDirectly node) {
     if (_glue.isInterceptedMethod(node.target)) {
-      Primitive nullPrim = makeNull();
+      Primitive nullPrim = nullConstant;
       insertLetPrim(nullPrim, node);
       node.arguments.insert(0, node.receiver);
+      // TODO(sra): `null` is not adequate.  Interceptors project the class
+      // hierarchy onto an interceptor hierarchy.  A super call that does a
+      // method call will use the javascript 'this' parameter to avoid calling
+      // getInterceptor again, so the receiver must be the interceptor (likely
+      // `this`), not `null`.
       node.receiver = new Reference<Primitive>(nullPrim);
     }
   }
diff --git a/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart b/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart
index 0f66c0d..a9d83e5 100644
--- a/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart
@@ -207,14 +207,6 @@
     return constant;
   }
 
-  ConstantExpression createTypeConstant(TypeDeclarationElement element) {
-    DartType elementType = element.rawType;
-    DartType constantType =
-        compiler.backend.typeImplementation.computeType(compiler);
-    return new TypeConstantExpression(
-        new TypeConstantValue(elementType, constantType), elementType);
-  }
-
   void forgetElement(Element element) {
     super.forgetElement(element);
     const ForgetConstantElementVisitor().visit(element, this);
diff --git a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
index fc97cad..214c480 100644
--- a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
@@ -240,8 +240,11 @@
     return constant;
   }
 
-  NumConstantValue createInt(int i)
-      => convertToJavaScriptConstant(new IntConstantValue(i));
+  @override
+  NumConstantValue createInt(int i) {
+    return convertToJavaScriptConstant(new IntConstantValue(i));
+  }
+
   NumConstantValue createInt32(int i) => new IntConstantValue(i & BITS32);
   NumConstantValue createDouble(double d)
       => convertToJavaScriptConstant(new DoubleConstantValue(d));
@@ -251,6 +254,19 @@
   BoolConstantValue createBool(bool value) => new BoolConstantValue(value);
   NullConstantValue createNull() => new NullConstantValue();
 
+
+  @override
+  ListConstantValue createList(InterfaceType type,
+                               List<ConstantValue> values) {
+    return new ListConstantValue(type, values);
+  }
+
+  @override
+  ConstantValue createType(Compiler compiler, DartType type) {
+    return new TypeConstantValue(
+        type, compiler.backend.typeImplementation.computeType(compiler));
+  }
+
   // Integer checks don't verify that the number is not -0.0.
   bool isInt(ConstantValue constant) => constant.isInt || constant.isMinusZero;
   bool isDouble(ConstantValue constant)
diff --git a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
index 99c46ca..6afef1b 100644
--- a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
@@ -178,8 +178,7 @@
 
   TypeConstantValue makeTypeConstant(ClassElement element) {
     DartType elementType = element.rawType;
-    DartType constantType = backend.typeImplementation.rawType;
-    return new TypeConstantValue(elementType, constantType);
+    return backend.constantSystem.createType(compiler, elementType);
   }
 
   List<Element> computeEscapingConstructors(ClassElement classElement) {
diff --git a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
index 6344a1d..52d00c4 100644
--- a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
+++ b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
@@ -87,7 +87,11 @@
       ConstantExpression bound = new IntConstantExpression(
           boundIndex,
           _backend.constantSystem.createInt(boundIndex));
-      ConstantExpression type = _backend.constants.createTypeConstant(cls);
+      ConstantExpression type =
+          new TypeConstantExpression(
+              _backend.constantSystem.createType(
+                  _backend.compiler, cls.rawType),
+              cls.rawType);
       List<AstConstant> arguments =
           [wrapConstant(type), wrapConstant(name), wrapConstant(bound)];
 
@@ -124,8 +128,7 @@
    * there, otherwise a new entry for [c] is created.
    */
   int _reifyTypeVariableConstant(ConstantValue c, TypeVariableElement variable) {
-    String name = jsAst.prettyPrint(_task.constantReference(c),
-                                    _compiler).getText();
+    jsAst.Expression name = _task.constantReference(c);
     int index;
     if (_typeVariableConstants.containsKey(variable)) {
       index = _typeVariableConstants[variable];
@@ -153,7 +156,7 @@
     }
 
     // TODO(15613): Remove quotes.
-    _metadataCollector.globalMetadata.add('"Placeholder for ${variable}"');
+    _metadataCollector.globalMetadata.add(js('"Placeholder for ${variable}"'));
     return _typeVariableConstants[variable] =
         _metadataCollector.globalMetadata.length - 1;
   }
diff --git a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
index bd4ab29..a2501fd 100644
--- a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
@@ -10,14 +10,15 @@
 
   /// A list of JS expressions that represent metadata, parameter names and
   /// type variable types.
-  final List<String> globalMetadata = <String>[];
+  final List<jsAst.Expression> globalMetadata = <jsAst.Expression>[];
 
   /// A map used to canonicalize the entries of globalMetadata.
   final Map<String, int> _globalMetadataMap = <String, int>{};
 
   /// A map with lists of JS expressions, one list for each output unit. The
   /// entries represent types including function types and typedefs.
-  final Map<OutputUnit, List<String>> types = <OutputUnit, List<String>>{};
+  final Map<OutputUnit, List<jsAst.Expression>> types =
+      <OutputUnit, List<jsAst.Expression>>{};
 
   /// A map used to canonicalize the entries of types.
   final Map<OutputUnit, Map<String, int>> _typesMap =
@@ -70,11 +71,10 @@
     for (ParameterElement element in signature.optionalParameters) {
       ConstantExpression constant =
           _backend.constants.getConstantForVariable(element);
-      String stringRepresentation = (constant == null)
-          ? "null"
-          : jsAst.prettyPrint(
-              _emitter.constantReference(constant.value), _compiler).getText();
-      defaultValues.add(addGlobalMetadata(stringRepresentation));
+      jsAst.Expression expression = (constant == null)
+          ? null
+          : _emitter.constantReference(constant.value);
+      defaultValues.add(addGlobalMetadata(expression));
     }
     return defaultValues;
   }
@@ -86,9 +86,7 @@
       _compiler.internalError(annotation, 'Annotation value is null.');
       return -1;
     }
-    return addGlobalMetadata(
-        jsAst.prettyPrint(
-            _emitter.constantReference(constant.value), _compiler).getText());
+    return addGlobalMetadata(_emitter.constantReference(constant.value));
   }
 
   int reifyType(DartType type, {bool ignoreTypeVariables: false}) {
@@ -112,31 +110,41 @@
               return _backend.isAccessibleByReflection(typedef.element);
             });
 
-    return addTypeInOutputUnit(
-        jsAst.prettyPrint(representation, _compiler).getText(), outputUnit);
+    if (representation is jsAst.LiteralString) {
+      // We don't want the representation to be a string, since we use
+      // strings as indicator for non-initialized types in the lazy emitter.
+      _compiler.internalError(
+          NO_LOCATION_SPANNABLE, 'reified types should not be strings.');
+    }
+
+    return addTypeInOutputUnit(representation, outputUnit);
   }
 
   int reifyName(String name) {
-    return addGlobalMetadata('"$name"');
+    return addGlobalMetadata(js('"$name"'));
   }
 
-  int addGlobalMetadata(String string) {
+  int addGlobalMetadata(jsAst.Expression expression) {
+    // TODO(sigmund): consider adding an effient way to compare expressions
+    String string = jsAst.prettyPrint(expression, _compiler).getText();
     return _globalMetadataMap.putIfAbsent(string, () {
-      globalMetadata.add(string);
+      globalMetadata.add(expression);
       return globalMetadata.length - 1;
     });
   }
 
-  int addTypeInOutputUnit(String compiledType, OutputUnit outputUnit) {
+  int addTypeInOutputUnit(jsAst.Expression type, OutputUnit outputUnit) {
+    String string = jsAst.prettyPrint(type, _compiler).getText();
     if (_typesMap[outputUnit] == null) {
       _typesMap[outputUnit] = <String, int>{};
     }
-    return _typesMap[outputUnit].putIfAbsent(compiledType, () {
+    return _typesMap[outputUnit].putIfAbsent(string, () {
 
-      if (types[outputUnit] == null)
-        types[outputUnit] = <String>[];
+      if (types[outputUnit] == null) {
+        types[outputUnit] = <jsAst.Expression>[];
+      }
 
-      types[outputUnit].add(compiledType);
+      types[outputUnit].add(type);
       return types[outputUnit].length - 1;
     });
   }
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index 7fa389b..69eb6ae 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -43,7 +43,7 @@
     assert(hasIsolateSupport != null);
   }
 
-  /// A list of pretty-printed JavaScript expressions.
+  /// A list of metadata expressions.
   ///
   /// This list must be emitted in the `METADATA` embedded global.
   /// The list references constants and must hence be emitted after constants
@@ -53,9 +53,9 @@
   /// list must not be emitted before all operations on it are done. For
   /// example, the old emitter generates metadata when emitting reflection
   /// data.
-  List<String> get metadata => _metadataCollector.globalMetadata;
+  List<js.Expression> get metadata => _metadataCollector.globalMetadata;
 
-  /// A map with lists of pretty-printed JavaScript expressions.
+  /// A map with lists of type expressions.
   ///
   /// There is one list for each output unit. The list belonging to the main
   /// unit must be emitted in the `TYPES` embedded global. The list references
@@ -65,7 +65,7 @@
   /// list must not be emitted before all operations on it are done. For
   /// example, the old emitter generates metadata when emitting reflection
   /// data.
-  Map<OutputUnit, List<String>> get metadataTypes
+  Map<OutputUnit, List<js.Expression>> get metadataTypes
       => _metadataCollector.types;
 
 
diff --git a/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart
index 6a55d08..aeeddc3 100644
--- a/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/new_emitter/emitter.dart
@@ -5,7 +5,9 @@
 library dart2js.new_js_emitter.emitter;
 
 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show
-    JsBuiltin;
+    JsBuiltin,
+    METADATA,
+    TYPES;
 
 import '../program_builder.dart' show ProgramBuilder;
 import '../model.dart';
@@ -138,6 +140,10 @@
         return js.js.expressionTemplateYielding(
             typeAccess(_compiler.objectClass));
 
+      case JsBuiltin.classNameFromIsCheckProperty:
+        int isPrefixLength = namer.operatorIsPrefix.length;
+        return js.js.expressionTemplateFor('#.substring($isPrefixLength)');
+
       case JsBuiltin.isFunctionType:
         return _backend.rti.representationGenerator.templateForIsFunctionType;
 
@@ -158,6 +164,18 @@
         return _backend.rti.representationGenerator
             .templateForCreateFunctionType;
 
+      case JsBuiltin.isSubtype:
+        // TODO(floitsch): move this closer to where is-check properties are
+        // built.
+        String isPrefix = namer.operatorIsPrefix;
+        return js.js.expressionTemplateFor("('$isPrefix' + #) in #.prototype");
+
+      case JsBuiltin.getMetadata:
+        return _emitter.templateForReadMetadata;
+
+      case JsBuiltin.getType:
+        return _emitter.templateForReadType;
+
       default:
         _compiler.internalError(NO_LOCATION_SPANNABLE,
                                 "Unhandled Builtin: $builtin");
diff --git a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
index 23646b7..ebeb1df 100644
--- a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
@@ -66,8 +66,12 @@
   }
 
   js.Expression generateEmbeddedGlobalAccess(String global) {
-    // TODO(floitsch): We should not use "init" for globals.
-    return js.js("init.$global");
+    return js.js(generateEmbeddedGlobalAccessString(global));
+  }
+
+  String generateEmbeddedGlobalAccessString(String global) {
+    // TODO(floitsch): don't use 'init' as global embedder storage.
+    return 'init.$global';
   }
 
   bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
@@ -134,7 +138,8 @@
     // deferred hash (which depends on the output) when emitting the main
     // fragment.
     fragments.skip(1).forEach((DeferredFragment deferredUnit) {
-      List<String> types = program.metadataTypes[deferredUnit.outputUnit];
+      List<js.Expression> types =
+          program.metadataTypes[deferredUnit.outputUnit];
       js.Expression ast = emitDeferredFragment(types, deferredUnit,
                                                program.holders);
       String code = js.prettyPrint(ast, compiler).getText();
@@ -155,13 +160,21 @@
     return totalSize;
   }
 
-  js.LiteralString unparse(Compiler compiler, js.Node value) {
+  /// Unparses the given [value].
+  ///
+  /// Pretty-prints the given [value] and, if [protectForEval] is
+  /// true, wraps the resulting string in parenthesis. The result is escaped
+  /// and returned.
+  js.LiteralString unparse(Compiler compiler, js.Node value,
+                           {bool protectForEval: true}) {
     String text = js.prettyPrint(value, compiler).getText();
-    if (value is js.Fun) text = '($text)';
-    if (value is js.LiteralExpression &&
-        (value.template.startsWith("function ") ||
-         value.template.startsWith("{"))) {
-      text = '($text)';
+    if (protectForEval) {
+      if (value is js.Fun) text = '($text)';
+      if (value is js.LiteralExpression &&
+      (value.template.startsWith("function ") ||
+      value.template.startsWith("{"))) {
+        text = '($text)';
+      }
     }
     return js.js.escapedString(text);
   }
@@ -196,6 +209,7 @@
            backend.emitter.staticFunctionAccess(backend.getCyclicThrowHelper()),
        'outputContainsConstantList': program.outputContainsConstantList,
        'embeddedGlobals': emitEmbeddedGlobals(program),
+       'readMetadataTypeFunction': readMetadataTypeFunction,
        'staticNonFinals':
             emitStaticNonFinalFields(fragment.staticNonFinalFields),
        'operatorIsPrefix': js.string(namer.operatorIsPrefix),
@@ -416,27 +430,83 @@
     return new js.Property(js.string(GET_TYPE_FROM_NAME), function);
   }
 
+  static final String readMetadataTypeName = "readMetadataType";
+
+  js.Statement get readMetadataTypeFunction {
+    // Types are non-evaluated and must be compiled at first use.
+    // Compiled strings are guaranteed not to be strings, and it's thus safe
+    // to use a type-test to determine if a type has already been compiled.
+    return js.js.statement('''function $readMetadataTypeName(index) {
+      var type = #typesAccess[index];
+      if (typeof type == 'string') {
+        type = expressionCompile(type);
+        #typesAccess[index] = type;
+      }
+      return type;
+    }''', {"typesAccess": generateEmbeddedGlobalAccess(TYPES)});
+  }
+
+  js.Template get templateForReadType {
+    // TODO(floitsch): make sure that no local variable shadows the access to
+    // the readMetadataType function.
+    return js.js.expressionTemplateFor('$readMetadataTypeName(#)');
+  }
+
+  static final String readMetadataName = "readLazyMetadata";
+  static final String lazyMetadataName = "lazy_$METADATA";
+
+  js.Statement get readMetadataFunction {
+    // Types are non-evaluated and must be compiled at first use.
+    // Compiled strings are guaranteed not to be strings, and it's thus safe
+    // to use a type-test to determine if a type has already been compiled.
+    return js.js.statement('''function $readMetadataName(index) {
+      var lazyMetadata = #lazyMetadataAccess[index];
+      if (typeof lazyMetadata == 'string') {
+        #metadataAccess[index] = expressionCompile(lazyMetadata);
+        #lazyMetadataAccess[index] = null;
+      }
+      return #metadataAccess[index];
+    }''', {
+      "lazyMetadataAccess": generateEmbeddedGlobalAccess(lazyMetadataName),
+      "metadataAccess": generateEmbeddedGlobalAccess(METADATA)
+    });
+  }
+
+  js.Template get templateForReadMetadata {
+    // TODO(floitsch): make sure that no local variable shadows the access to
+    // the readMetadata function.
+    return js.js.expressionTemplateFor('$readMetadataName(#)');
+  }
+
   List<js.Property> emitMetadata(Program program) {
+    // Unparses all given js-expressions (suitable for `expressionCompile`) and
+    // returns the result in a js-array.
+    // If the given [expressions] is null returns the empty js-array.
+    js.ArrayInitializer unparseExpressions(List<js.Expression> expressions) {
+      if (expressions == null) expressions = <js.Expression>[];
+      List<js.LiteralString> unparsedExpressions = expressions
+          .map((expr) => unparse(compiler, expr, protectForEval: false))
+          .toList();
+      return new js.ArrayInitializer(unparsedExpressions);
+    }
 
     List<js.Property> metadataGlobals = <js.Property>[];
 
-    js.Property createGlobal(List<String> list, String global) {
-      String listAsString = "[${list.join(",")}]";
-      js.Expression metadata =
-                js.js.uncachedExpressionTemplate(listAsString).instantiate([]);
-      return new js.Property(js.string(global), metadata);
-    }
+    js.ArrayInitializer unparsedMetadata = unparseExpressions(program.metadata);
+    metadataGlobals.add(new js.Property(js.string(lazyMetadataName),
+                                        unparsedMetadata));
+    metadataGlobals.add(new js.Property(js.string(METADATA),
+                                        new js.ArrayInitializer([])));
 
-    metadataGlobals.add(createGlobal(program.metadata, METADATA));
-    List<String> types =
+    List<js.Expression> types =
         program.metadataTypes[program.fragments.first.outputUnit];
-    if (types == null) types = <String>[];
-    metadataGlobals.add(createGlobal(types, TYPES));
+    metadataGlobals.add(new js.Property(js.string(TYPES),
+                                        unparseExpressions(types)));
 
     return metadataGlobals;
   }
 
-  js.Expression emitDeferredFragment(List<String> types,
+  js.Expression emitDeferredFragment(List<js.Expression> types,
                                      DeferredFragment fragment,
                                      List<Holder> holders) {
     // TODO(floitsch): initialize eager classes.
@@ -460,9 +530,9 @@
 
     js.LiteralString immediateString = unparse(compiler, immediateCode);
 
-    js.Expression deferredTypes = types == null
+    js.Expression deferredTypes = (types == null)
         ? js.string("[]")
-        : js.string("[${types.join(",")}]");
+        : unparse(compiler, new js.ArrayInitializer(types));
 
     js.ArrayInitializer hunk =
         new js.ArrayInitializer([deferredArray, immediateString,
@@ -1158,6 +1228,13 @@
   // Initialize globals.
   #embeddedGlobals;
 
+  function expressionCompile(__s__) {
+    'use strict';
+    return eval('(' + __s__ + ')');
+  }
+
+  #readMetadataTypeFunction;
+
   // TODO(floitsch): this order means that native classes may not be
   // referenced from constants. I'm mostly afraid of things like using them as
   // generic arguments (which should be fine, but maybe there are other
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
index 240e771..dd2c214 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
@@ -276,6 +276,10 @@
         return jsAst.js.expressionTemplateYielding(
             typeAccess(compiler.objectClass));
 
+      case JsBuiltin.classNameFromIsCheckProperty:
+        int isPrefixLength = namer.operatorIsPrefix.length;
+        return jsAst.js.expressionTemplateFor('#.substring($isPrefixLength)');
+
       case JsBuiltin.isFunctionType:
         return backend.rti.representationGenerator.templateForIsFunctionType;
 
@@ -295,6 +299,23 @@
         return backend.rti.representationGenerator
             .templateForCreateFunctionType;
 
+      case JsBuiltin.isSubtype:
+        // TODO(floitsch): move this closer to where is-check properties are
+        // built.
+        String isPrefix = namer.operatorIsPrefix;
+        return jsAst.js.expressionTemplateFor(
+            "('$isPrefix' + #) in #.prototype");
+
+      case JsBuiltin.getMetadata:
+        String metadataAccess =
+            generateEmbeddedGlobalAccessString(embeddedNames.METADATA);
+        return jsAst.js.expressionTemplateFor("$metadataAccess[#]");
+
+      case JsBuiltin.getType:
+        String typesAccess =
+            generateEmbeddedGlobalAccessString(embeddedNames.TYPES);
+        return jsAst.js.expressionTemplateFor("$typesAccess[#]");
+
       default:
         compiler.internalError(NO_LOCATION_SPANNABLE,
             "Unhandled Builtin: $builtin");
@@ -654,12 +675,11 @@
 
   void emitMetadata(Program program, CodeOutput output, OutputUnit outputUnit) {
 
-    jsAst.Expression constructList(List<String> list) {
-      String listAsString = list == null ? '[]' : '[${list.join(",")}]';
-      return js.uncachedExpressionTemplate(listAsString).instantiate([]);
+    jsAst.Expression constructList(List<jsAst.Expression> list) {
+      return new jsAst.ArrayInitializer(list == null ? [] : list);
     }
 
-    List<String> types = program.metadataTypes[outputUnit];
+    List<jsAst.Expression> types = program.metadataTypes[outputUnit];
 
     if (outputUnit == compiler.deferredLoadTask.mainOutputUnit) {
       jsAst.Expression metadataAccess =
@@ -989,8 +1009,8 @@
     output.add(N);
   }
 
-  void writeLibraryDescriptor(CodeOutput output, LibraryElement library,
-                              Fragment fragment) {
+  jsAst.Expression generateLibraryDescriptor(LibraryElement library,
+                                             Fragment fragment) {
     var uri = "";
     if (!compiler.enableMinification || backend.mustPreserveUris) {
       uri = library.canonicalUri;
@@ -998,14 +1018,6 @@
         uri = relativize(compiler.outputUri, library.canonicalUri, false);
       }
     }
-    ClassBuilder descriptor = elementDescriptors[fragment][library];
-    if (descriptor == null) {
-      // Nothing of the library was emitted.
-      // TODO(floitsch): this should not happen. We currently have an example
-      // with language/prefix6_negative_test.dart where we have an instance
-      // method without its corresponding class.
-      return;
-    }
 
     String libraryName =
         (!compiler.enableMinification || backend.mustRetainLibraryNames) ?
@@ -1014,27 +1026,33 @@
 
     jsAst.Fun metadata = task.metadataCollector.buildMetadataFunction(library);
 
-    jsAst.ObjectInitializer initializers = descriptor.toObjectInitializer();
+    ClassBuilder descriptor = elementDescriptors[fragment][library];
+
+    jsAst.ObjectInitializer initializer;
+    if (descriptor == null) {
+      // Nothing of the library was emitted.
+      // TODO(floitsch): this should not happen. We currently have an example
+      // with language/prefix6_negative_test.dart where we have an instance
+      // method without its corresponding class.
+      initializer = new jsAst.ObjectInitializer([]);
+    } else {
+      initializer = descriptor.toObjectInitializer();
+    }
 
     compiler.dumpInfoTask.registerElementAst(library, metadata);
-    compiler.dumpInfoTask.registerElementAst(library, initializers);
-    output
-        ..add('["$libraryName",$_')
-        ..add('"${uri}",$_');
-    if (metadata != null) {
-      output.addBuffer(jsAst.prettyPrint(metadata,
-                                         compiler,
-                                         monitor: compiler.dumpInfoTask));
+    compiler.dumpInfoTask.registerElementAst(library, initializer);
+
+    List<jsAst.Expression> parts = <jsAst.Expression>[];
+    parts..add(js.string(libraryName))
+         ..add(js.string(uri.toString()))
+         ..add(metadata == null ? new jsAst.ArrayHole() : metadata)
+         ..add(js.name(namer.globalObjectFor(library)))
+         ..add(initializer);
+    if (library == compiler.mainApp) {
+      parts.add(js.number(1));
     }
-    output
-        ..add(',$_')
-        ..add(namer.globalObjectFor(library))
-        ..add(',$_')
-        ..addBuffer(jsAst.prettyPrint(initializers,
-                                      compiler,
-                                      monitor: compiler.dumpInfoTask))
-        ..add(library == compiler.mainApp ? ',${n}1' : "")
-        ..add('],$n');
+
+    return new jsAst.ArrayInitializer(parts);
   }
 
   void assemblePrecompiledConstructor(OutputUnit outputUnit,
@@ -1308,9 +1326,9 @@
 
     checkEverythingEmitted(descriptors.keys);
 
-    CodeBuffer libraryBuffer = new CodeBuffer();
+    List<jsAst.Expression> parts = <jsAst.Expression>[];
     for (LibraryElement library in Elements.sortedByPosition(libraries)) {
-      writeLibraryDescriptor(libraryBuffer, library, mainFragment);
+      parts.add(generateLibraryDescriptor(library, mainFragment));
       descriptors.remove(library);
     }
 
@@ -1325,11 +1343,12 @@
       for (LibraryElement element in remainingLibraries) {
         assert(element is LibraryElement || compiler.hasIncrementalSupport);
         if (element is LibraryElement) {
-          writeLibraryDescriptor(libraryBuffer, element, mainFragment);
+          parts.add(generateLibraryDescriptor(element, mainFragment));
           descriptors.remove(element);
         }
       }
     }
+    jsAst.ArrayInitializer descriptorsAst = new jsAst.ArrayInitializer(parts);
 
     bool needsNativeSupport = program.needsNativeSupport;
     mainOutput.addBuffer(
@@ -1340,9 +1359,10 @@
     // The argument to reflectionDataParser is assigned to a temporary 'dart'
     // so that 'dart.' will appear as the prefix to dart methods in stack
     // traces and profile entries.
-    mainOutput..add('var dart = [$n')
-              ..addBuffer(libraryBuffer)
-              ..add(']$N');
+    mainOutput..add('var dart =')
+              ..addBuffer(jsAst.prettyPrint(descriptorsAst, compiler,
+                                            monitor: compiler.dumpInfoTask))
+              ..add('$N');
     if (compiler.useContentSecurityPolicy) {
       jsAst.Statement precompiledFunctionAst =
           buildCspPrecompiledFunctionFor(mainOutputUnit);
@@ -1586,8 +1606,8 @@
   Map<OutputUnit, String> emitDeferredOutputUnits(Program program) {
     if (!program.isSplit) return const {};
 
-    Map<OutputUnit, CodeBuffer> outputBuffers =
-        new Map<OutputUnit, CodeBuffer>();
+    Map<OutputUnit, jsAst.Expression> outputs =
+        new Map<OutputUnit, jsAst.Expression>();
 
     for (Fragment fragment in program.deferredFragments) {
       OutputUnit outputUnit = fragment.outputUnit;
@@ -1600,16 +1620,17 @@
         if (libraries == null) libraries = [];
 
         // TODO(johnniwinther): Avoid creating [CodeBuffer]s.
-        CodeBuffer buffer = new CodeBuffer();
-        outputBuffers[outputUnit] = buffer;
+        List<jsAst.Expression> parts = <jsAst.Expression>[];
         for (LibraryElement library in Elements.sortedByPosition(libraries)) {
-          writeLibraryDescriptor(buffer, library, fragment);
+          parts.add(generateLibraryDescriptor(library, fragment));
           descriptors.remove(library);
         }
+
+        outputs[outputUnit] = new jsAst.ArrayInitializer(parts);
       }
     }
 
-    return emitDeferredCode(program, outputBuffers);
+    return emitDeferredCode(program, outputs);
   }
 
   int emitProgram(ProgramBuilder programBuilder) {
@@ -1752,14 +1773,14 @@
   /// can be used for calling the initializer.
   Map<OutputUnit, String> emitDeferredCode(
       Program program,
-      Map<OutputUnit, CodeBuffer> deferredBuffers) {
+      Map<OutputUnit, jsAst.Expression> deferredAsts) {
 
     Map<OutputUnit, String> hunkHashes = new Map<OutputUnit, String>();
 
     for (Fragment fragment in program.deferredFragments) {
       OutputUnit outputUnit = fragment.outputUnit;
 
-      CodeOutput libraryDescriptorBuffer = deferredBuffers[outputUnit];
+      jsAst.Expression libraryDescriptor = deferredAsts[outputUnit];
 
       List<CodeOutputListener> outputListeners = <CodeOutputListener>[];
       Hasher hasher = new Hasher();
@@ -1796,7 +1817,7 @@
                     '${globalsHolder}.${namer.isolateName}$N');
       String typesAccess =
           generateEmbeddedGlobalAccessString(embeddedNames.TYPES);
-      if (libraryDescriptorBuffer != null) {
+      if (libraryDescriptor != null) {
         // TODO(ahe): This defines a lot of properties on the
         // Isolate.prototype object.  We know this will turn it into a
         // slow object in V8, so instead we should do something similar
@@ -1806,9 +1827,10 @@
             // The argument to reflectionDataParser is assigned to a temporary
             // 'dart' so that 'dart.' will appear as the prefix to dart methods
             // in stack traces and profile entries.
-            ..add('var dart = [$n ')
-            ..addBuffer(libraryDescriptorBuffer)
-            ..add(']$N');
+            ..add('var dart = $n ')
+            ..addBuffer(jsAst.prettyPrint(libraryDescriptor, compiler,
+                                          monitor: compiler.dumpInfoTask))
+            ..add('$N');
 
         if (compiler.useContentSecurityPolicy) {
           jsAst.Statement precompiledFunctionAst =
diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
index 3e5ddde..86d14f7f 100644
--- a/pkg/compiler/lib/src/library_loader.dart
+++ b/pkg/compiler/lib/src/library_loader.dart
@@ -371,7 +371,7 @@
    * the import/export scopes are not set up.
    */
   Future processLibraryTags(LibraryDependencyHandler handler,
-                            LibraryElement library) {
+                            LibraryElementX library) {
     TagState tagState = new TagState();
 
     bool importsDartCore = false;
@@ -499,13 +499,23 @@
   /**
    * Handle an import/export tag by loading the referenced library and
    * registering its dependency in [handler] for the computation of the import/
-   * export scope.
+   * export scope. If the tag does not contain a valid URI, then its dependency
+   * is not registered in [handler].
    */
-  Future registerLibraryFromTag(LibraryDependencyHandler handler,
-                                LibraryElement library,
-                                LibraryDependency tag) {
+  Future<Null> registerLibraryFromTag(LibraryDependencyHandler handler,
+                                      LibraryElement library,
+                                      LibraryDependency tag) {
     Uri base = library.canonicalUri;
-    Uri resolvedUri = base.resolve(tag.uri.dartString.slowToString());
+    String tagUriString = tag.uri.dartString.slowToString();
+    Uri resolvedUri;
+    try {
+      resolvedUri = base.resolve(tagUriString);
+    } on FormatException {
+      compiler.reportError(
+          tag.uri, MessageKind.INVALID_URI, {'uri': tagUriString});
+      // 'reportError' does not stop necessarily stop compilation
+      return new Future.value();
+    }
     return createLibrary(handler, library, resolvedUri, tag.uri)
         .then((LibraryElement loadedLibrary) {
           if (loadedLibrary == null) return;
@@ -649,7 +659,7 @@
   /**
    * Imports the library into the [importingLibrary].
    */
-  void importLibrary(Compiler compiler, LibraryElement importingLibrary) {
+  void importLibrary(Compiler compiler, LibraryElementX importingLibrary) {
     assert(invariant(importingLibrary,
                      importedLibrary.exportsHandled,
                      message: 'Exports not handled on $importedLibrary'));
@@ -722,7 +732,7 @@
  * exports performed in [LibraryDependencyHandler.computeExports].
  */
 class LibraryDependencyNode {
-  final LibraryElement library;
+  final LibraryElementX library;
 
   // TODO(ahe): Remove [hashCodeCounter] and [hashCode] when
   // VM implementation of Object.hashCode is not slow.
@@ -765,7 +775,7 @@
   Map<Element, Link<Export>> pendingExportMap =
       new Map<Element, Link<Export>>();
 
-  LibraryDependencyNode(LibraryElement this.library);
+  LibraryDependencyNode(this.library);
 
   /**
    * Registers that the library of this node imports [importLibrary] through the
@@ -1015,7 +1025,7 @@
   /**
    * Registers that [library] depends on [loadedLibrary] through [tag].
    */
-  void registerDependency(LibraryElement library,
+  void registerDependency(LibraryElementX library,
                           LibraryDependency tag,
                           LibraryElement loadedLibrary) {
     if (tag != null) {
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index 11968db..1f09444 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.dart
@@ -225,7 +225,7 @@
    * Returns the source string of the class named in the extends clause, or
    * `null` if there is no extends clause.
    */
-  String findExtendsNameOfClass(ClassElement classElement) {
+  String findExtendsNameOfClass(BaseClassElementX classElement) {
     //  "class B extends A ... {}"  --> "A"
     //  "class B extends foo.A ... {}"  --> "A"
     //  "class B<T> extends foo.A<T,T> with M1, M2 ... {}"  --> "A"
@@ -360,7 +360,7 @@
     flushing = false;
   }
 
-  processClass(ClassElementX classElement, cause) {
+  processClass(BaseClassElementX classElement, cause) {
     // TODO(ahe): Fix this assertion to work in incremental compilation.
     assert(compiler.hasIncrementalSupport ||
            !registeredClasses.contains(classElement));
@@ -422,7 +422,7 @@
 
   /// Sets the native name of [element], either from an annotation, or
   /// defaulting to the Dart name.
-  void setNativeName(Element element) {
+  void setNativeName(ElementX element) {
     String name = findJsNameFromAnnotation(element);
     if (name == null) name = element.name;
     element.setNative(name);
@@ -436,7 +436,7 @@
   ///    use the declared @JSName as the expression
   /// 3. If [element] does not have a @JSName annotation, qualify the name of
   ///    the method with the @Native name of the enclosing class.
-  void setNativeNameForStaticMethod(Element element) {
+  void setNativeNameForStaticMethod(ElementX element) {
     String name = findJsNameFromAnnotation(element);
     if (name == null) name = element.name;
     if (isIdentifier(name)) {
diff --git a/pkg/compiler/lib/src/native/native.dart b/pkg/compiler/lib/src/native/native.dart
index cf1d062..5783e52 100644
--- a/pkg/compiler/lib/src/native/native.dart
+++ b/pkg/compiler/lib/src/native/native.dart
@@ -11,7 +11,7 @@
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../elements/modelx.dart'
-    show ClassElementX, FunctionElementX, LibraryElementX;
+    show ElementX, BaseClassElementX, FunctionElementX, LibraryElementX;
 import '../js/js.dart' as js;
 import '../js_backend/js_backend.dart';
 import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter;
diff --git a/pkg/compiler/lib/src/patch_parser.dart b/pkg/compiler/lib/src/patch_parser.dart
index c6e90d5..8ed2a09 100644
--- a/pkg/compiler/lib/src/patch_parser.dart
+++ b/pkg/compiler/lib/src/patch_parser.dart
@@ -128,7 +128,7 @@
     show LibraryElementX,
          MetadataAnnotationX,
          ClassElementX,
-         FunctionElementX;
+         BaseFunctionElementX;
 import 'helpers/helpers.dart';  // Included for debug helpers.
 import 'library_loader.dart' show LibraryLoader;
 import 'scanner/scannerlib.dart';  // Scanner, Parsers, Listeners
@@ -541,8 +541,8 @@
 }
 
 void patchFunction(DiagnosticListener listener,
-                   FunctionElementX origin,
-                   FunctionElementX patch) {
+                   BaseFunctionElementX origin,
+                   BaseFunctionElementX patch) {
   if (!origin.modifiers.isExternal) {
     listener.reportError(origin, MessageKind.PATCH_NON_EXTERNAL);
     listener.reportInfo(
diff --git a/pkg/compiler/lib/src/resolution/access_semantics.dart b/pkg/compiler/lib/src/resolution/access_semantics.dart
index ecd16c0..a99db1f 100644
--- a/pkg/compiler/lib/src/resolution/access_semantics.dart
+++ b/pkg/compiler/lib/src/resolution/access_semantics.dart
@@ -143,6 +143,11 @@
   SUPER_METHOD_SETTER,
   /// Read from a superclass getter and write to a superclass field.
   SUPER_GETTER_FIELD,
+
+  /// Read from a superclass where the getter (and maybe setter) is unresolved.
+  UNRESOLVED_SUPER_GETTER,
+  /// Read from a superclass getter and write to an unresolved setter.
+  UNRESOLVED_SUPER_SETTER,
 }
 
 /**
@@ -388,17 +393,32 @@
   ///
   ABSTRACT,
 
-  /// An invocation of an unresolved constructor or an unresolved type.
+  /// An invocation of a constructor on an unresolved type.
+  ///
+  /// For instance
+  ///     m() => new Unresolved();
+  ///
+  UNRESOLVED_TYPE,
+
+  /// An invocation of an unresolved constructor.
   ///
   /// For instance
   ///     class C {
   ///       C();
   ///     }
-  ///     m1() => new C.unresolved();
-  ///     m2() => new Unresolved();
+  ///     m() => new C.unresolved();
   ///
-  // TODO(johnniwinther): Differentiate between error types.
-  ERRONEOUS,
+  UNRESOLVED_CONSTRUCTOR,
+
+  /// An const invocation of an non-constant constructor.
+  ///
+  /// For instance
+  ///     class C {
+  ///       C();
+  ///     }
+  ///     m() => const C();
+  ///
+  NON_CONSTANT_CONSTRUCTOR,
 
   /// An invocation of an ill-defined redirecting factory constructor.
   ///
@@ -431,7 +451,9 @@
   /// `true` if this invocation is erroneous.
   bool get isErroneous {
     return kind == ConstructorAccessKind.ABSTRACT ||
-           kind == ConstructorAccessKind.ERRONEOUS ||
+           kind == ConstructorAccessKind.UNRESOLVED_TYPE ||
+           kind == ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR ||
+           kind == ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR ||
            kind == ConstructorAccessKind.ERRONEOUS_REDIRECTING_FACTORY;
   }
 }
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index 986663e..6973a47 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -714,7 +714,7 @@
     if (Elements.isStaticOrTopLevelField(element)) {
       visitor.addDeferredAction(element, () {
         if (element.modifiers.isConst) {
-          constantCompiler.compileConstant(element);
+          element.constant = constantCompiler.compileConstant(element);
         } else {
           constantCompiler.compileVariable(element);
         }
@@ -1156,9 +1156,9 @@
     }
     AbstractFieldElement field = lookupElement;
 
-    FunctionElementX getter = field.getter;
+    MethodElementX getter = field.getter;
     if (getter == null) return;
-    FunctionElementX setter = field.setter;
+    MethodElementX setter = field.setter;
     if (setter == null) return;
     int getterFlags = getter.modifiers.flags | Modifiers.FLAG_ABSTRACT;
     int setterFlags = setter.modifiers.flags | Modifiers.FLAG_ABSTRACT;
@@ -2427,8 +2427,10 @@
       parameterNodes = parameterNodes.tail;
     });
     addDeferredAction(enclosingElement, () {
-      functionParameters.forEachOptionalParameter((Element parameter) {
-        compiler.resolver.constantCompiler.compileConstant(parameter);
+      functionParameters.forEachOptionalParameter(
+          (ParameterElementX parameter) {
+        parameter.constant =
+            compiler.resolver.constantCompiler.compileConstant(parameter);
       });
     });
     if (inCheckContext) {
@@ -3227,6 +3229,14 @@
     ConstructorElement redirectionTarget = resolveRedirectingFactory(
         node, inConstContext: isConstConstructor);
     constructor.immediateRedirectionTarget = redirectionTarget;
+
+    Node constructorReference = node.constructorReference;
+    if (constructorReference is Send) {
+      constructor.redirectionDeferredPrefix =
+          compiler.deferredLoadTask.deferredPrefixElement(constructorReference,
+                                                          registry.mapping);
+    }
+
     registry.setRedirectingTargetConstructor(node, redirectionTarget);
     if (Elements.isUnresolved(redirectionTarget)) {
       registry.registerThrowNoSuchMethod();
@@ -4869,14 +4879,15 @@
   visitNodeList(NodeList node) {
     for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       Identifier name = visit(link.head);
-      LocalVariableElement element = new LocalVariableElementX(
+      LocalVariableElementX element = new LocalVariableElementX(
           name.source, resolver.enclosingElement,
           variables, name.token);
       resolver.defineLocalVariable(link.head, element);
       resolver.addToScope(element);
       if (definitions.modifiers.isConst) {
         compiler.enqueuer.resolution.addDeferredAction(element, () {
-          compiler.resolver.constantCompiler.compileConstant(element);
+          element.constant =
+              compiler.resolver.constantCompiler.compileConstant(element);
         });
       }
     }
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart
index 19039c8..7b8bf65 100644
--- a/pkg/compiler/lib/src/resolution/resolution.dart
+++ b/pkg/compiler/lib/src/resolution/resolution.dart
@@ -35,6 +35,7 @@
     LocalParameterElementX,
     LocalVariableElementX,
     MetadataAnnotationX,
+    MethodElementX,
     MixinApplicationElementX,
     ParameterElementX,
     ParameterMetadataAnnotation,
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor.dart b/pkg/compiler/lib/src/resolution/semantic_visitor.dart
index b626bba..b1c1f31 100644
--- a/pkg/compiler/lib/src/resolution/semantic_visitor.dart
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor.dart
@@ -5,7 +5,7 @@
 library dart2js.semantics_visitor;
 
 import '../constants/expressions.dart';
-import '../dart2jslib.dart' show invariant;
+import '../dart2jslib.dart' show invariant, MessageKind;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../helpers/helpers.dart';
@@ -1223,6 +1223,22 @@
       Node argument,
       A arg);
 
+  /// Binary operation on the unresolved super [element].
+  ///
+  /// For instance
+  ///     class B {
+  ///     }
+  ///     class C extends B {
+  ///       m() => super + 42;
+  ///     }
+  ///
+  R visitUnresolvedSuperBinary(
+      Send node,
+      Element element,
+      BinaryOperator operator,
+      Node argument,
+      A arg);
+
   /// Index expression `receiver[index]`.
   ///
   /// For instance:
@@ -1277,6 +1293,20 @@
       Node index,
       A arg);
 
+  /// Index expression `super[index]` where 'operator []' is unresolved.
+  ///
+  /// For instance:
+  ///     class B {}
+  ///     class C extends B {
+  ///       m(a) => super[a];
+  ///     }
+  ///
+  R visitUnresolvedSuperIndex(
+      Send node,
+      Element element,
+      Node index,
+      A arg);
+
   /// Prefix operation on an index expression `operator super[index]` where
   /// 'operator []' is implemented on a superclass by [indexFunction] and
   /// 'operator []=' is implemented on by [indexSetFunction] and the operation
@@ -1293,8 +1323,8 @@
   ///
   R visitSuperIndexPrefix(
       Send node,
-      FunctionElement indexFunction,
-      FunctionElement indexSetFunction,
+      MethodElement indexFunction,
+      MethodElement indexSetFunction,
       Node index,
       IncDecOperator operator,
       A arg);
@@ -1315,29 +1345,15 @@
   ///
   R visitSuperIndexPostfix(
       Send node,
-      FunctionElement indexFunction,
-      FunctionElement indexSetFunction,
+      MethodElement indexFunction,
+      MethodElement indexSetFunction,
       Node index,
       IncDecOperator operator,
       A arg);
 
-  /// Index expression `super[index]` where 'operator []' is unresolved.
-  ///
-  /// For instance:
-  ///     class B {}
-  ///     class C extends B {
-  ///       m(a) => super[a];
-  ///     }
-  ///
-  R visitUnresolvedSuperIndex(
-      Send node,
-      Element element,
-      Node index,
-      A arg);
-
   /// Prefix operation on an index expression `operator super[index]` where
-  /// 'operator []' or 'operator []=' is unresolved and the operation
-  /// is defined by [operator].
+  /// 'operator []' and maybe also 'operator []=' is unresolved and the
+  /// operation is defined by [operator].
   ///
   /// For instance:
   ///     class B {}
@@ -1345,16 +1361,16 @@
   ///       m(a) => --super[a];
   ///     }
   ///
-  R errorUnresolvedSuperIndexPrefix(
+  R visitUnresolvedSuperGetterIndexPrefix(
       Send node,
-      Element function,
+      Element element,
       Node index,
       IncDecOperator operator,
       A arg);
 
   /// Postfix operation on an index expression `super[index] operator` where
-  /// 'operator []' or 'operator []=' is unresolved and the operation
-  /// is defined by [operator].
+  /// 'operator []' and maybe also 'operator []=' is unresolved and the
+  /// operation is defined by [operator].
   ///
   /// For instance:
   ///     class B {}
@@ -1362,9 +1378,45 @@
   ///       m(a) => super[a]++;
   ///     }
   ///
-  R errorUnresolvedSuperIndexPostfix(
+  R visitUnresolvedSuperGetterIndexPostfix(
       Send node,
-      Element function,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg);
+
+  /// Prefix operation on an index expression `operator super[index]` where
+  /// 'operator []' is implemented on a superclass by [indexFunction] and
+  /// 'operator []=' is unresolved and the operation is defined by [operator].
+  ///
+  /// For instance:
+  ///     class B {}
+  ///     class C extends B {
+  ///       m(a) => --super[a];
+  ///     }
+  ///
+  R visitUnresolvedSuperSetterIndexPrefix(
+      Send node,
+      MethodElement indexFunction,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg);
+
+  /// Postfix operation on an index expression `super[index] operator` where
+  /// 'operator []' is implemented on a superclass by [indexFunction] and
+  /// 'operator []=' is unresolved and the operation is defined by [operator].
+  ///
+  /// For instance:
+  ///     class B {}
+  ///     class C extends B {
+  ///       m(a) => super[a]++;
+  ///     }
+  ///
+  R visitUnresolvedSuperSetterIndexPostfix(
+      Send node,
+      MethodElement indexFunction,
+      Element element,
       Node index,
       IncDecOperator operator,
       A arg);
@@ -1455,6 +1507,21 @@
       FunctionElement function,
       A arg);
 
+  /// Unary operation on the unresolved super [element].
+  ///
+  /// For instance
+  ///     class B {
+  ///     }
+  ///     class C extends B {
+  ///       m() => -super;
+  ///     }
+  ///
+  R visitUnresolvedSuperUnary(
+      Send node,
+      UnaryOperator operator,
+      Element element,
+      A arg);
+
   /// Unary expression `!expression`.
   ///
   /// For instance:
@@ -1495,6 +1562,23 @@
       Node rhs,
       A arg);
 
+  /// Index set expression `super[index] = rhs` where `operator []=` is
+  /// undefined.
+  ///
+  /// For instance
+  ///     class B {
+  ///     }
+  ///     class C extends B {
+  ///       m() => super[1] = 42;
+  ///     }
+  ///
+  R visitUnresolvedSuperIndexSet(
+      Send node,
+      Element element,
+      Node index,
+      Node rhs,
+      A arg);
+
   /// Logical and, &&, expression with operands [left] and [right].
   ///
   /// For instance
@@ -1970,8 +2054,8 @@
       Node rhs,
       A arg);
 
-  /// Compound assignment expression of [rhs] with [operator] on the index
-  /// operators of [receiver] whose getter and setter are defined by
+  /// Compound index assignment of [rhs] with [operator] to [index] on the
+  /// index operators of [receiver] whose getter and setter are defined by
   /// [getterSelector] and [setterSelector], respectively.
   ///
   /// For instance:
@@ -1985,7 +2069,7 @@
       Node rhs,
       A arg);
 
-  /// Compound assignment expression of [rhs] with [operator] on the index
+  /// Compound index assignment of [rhs] with [operator] to [index] on the index
   /// operators of a super class defined by [getter] and [setter].
   ///
   /// For instance:
@@ -1999,8 +2083,48 @@
   ///
   R visitSuperCompoundIndexSet(
       SendSet node,
-      FunctionElement getter,
-      FunctionElement setter,
+      MethodElement getter,
+      MethodElement setter,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
+      A arg);
+
+  /// Compound index assignment of [rhs] with [operator] to [index] on a super
+  /// super class where the index getter is undefined. The index setter might
+  /// also be undefined.
+  ///
+  /// For instance
+  ///     class B {
+  ///     }
+  ///     class C extends B {
+  ///       m() => super[1] += 42;
+  ///     }
+  ///
+  R visitUnresolvedSuperGetterCompoundIndexSet(
+      Send node,
+      Element element,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
+      A arg);
+
+  /// Compound index assignment of [rhs] with [operator] to [index] on a super
+  /// super class where the index getter is defined by [getter] but the index
+  /// setter is undefined.
+  ///
+  /// For instance
+  ///     class B {
+  ///       operator [](index) => 42;
+  ///     }
+  ///     class C extends B {
+  ///       m() => super[1] += 42;
+  ///     }
+  ///
+  R visitUnresolvedSuperSetterCompoundIndexSet(
+      Send node,
+      MethodElement getter,
+      Element element,
       Node index,
       AssignmentOperator operator,
       Node rhs,
@@ -2842,71 +2966,6 @@
       IncDecOperator operator,
       A arg);
 
-  /// Index set operation on the unresolved super [element].
-  ///
-  /// For instance
-  ///     class B {
-  ///     }
-  ///     class C extends B {
-  ///       m() => super[1] = 42;
-  ///     }
-  ///
-  R errorUnresolvedSuperIndexSet(
-      Send node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg);
-
-  /// Compound index set operation on the unresolved super [element].
-  ///
-  /// For instance
-  ///     class B {
-  ///     }
-  ///     class C extends B {
-  ///       m() => super[1] += 42;
-  ///     }
-  ///
-  // TODO(johnniwinther): Split this case into unresolved getter/setter cases.
-  R errorUnresolvedSuperCompoundIndexSet(
-      Send node,
-      Element element,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
-
-  /// Unary operation on the unresolved super [element].
-  ///
-  /// For instance
-  ///     class B {
-  ///     }
-  ///     class C extends B {
-  ///       m() => -super;
-  ///     }
-  ///
-  R visitUnresolvedSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      Element element,
-      A arg);
-
-  /// Binary operation on the unresolved super [element].
-  ///
-  /// For instance
-  ///     class B {
-  ///     }
-  ///     class C extends B {
-  ///       m() => super + 42;
-  ///     }
-  ///
-  R visitUnresolvedSuperBinary(
-      Send node,
-      Element element,
-      BinaryOperator operator,
-      Node argument,
-      A arg);
-
   /// Invocation of an undefined unary [operator] on [expression].
   R errorUndefinedUnaryExpression(
       Send node,
@@ -3028,9 +3087,9 @@
   ///
   /// where [type] is `C<int>`.
   ///
-  // TODO(johnniwinther): Update [type] to be [InterfaceType] when this is no
-  // longer a catch-all clause for the erroneous constructor invocations.
-  R errorUnresolvedConstructorInvoke(
+  // TODO(johnniwinther): Change [type] to [InterfaceType] when is it not
+  // `dynamic`.
+  R visitUnresolvedConstructorInvoke(
       NewExpression node,
       Element constructor,
       DartType type,
@@ -3045,14 +3104,32 @@
   ///
   /// where [type] is the malformed type `Unresolved`.
   ///
-  R errorUnresolvedClassConstructorInvoke(
+  // TODO(johnniwinther): Change [type] to [MalformedType] when is it not
+  // `dynamic`.
+  R visitUnresolvedClassConstructorInvoke(
       NewExpression node,
       Element element,
-      MalformedType type,
+      DartType type,
       NodeList arguments,
       Selector selector,
       A arg);
 
+  /// Constant invocation of a non-constant constructor.
+  ///
+  /// For instance
+  ///   class C {
+  ///     C(a, b);
+  ///   }
+  ///   m() => const C(true, 42);
+  ///
+  R errorNonConstantConstructorInvoke(
+      NewExpression node,
+      Element element,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      A arg);
+
   /// Invocation of a constructor on an abstract [type] with [arguments].
   ///
   /// For instance
@@ -3060,7 +3137,7 @@
   ///
   /// where [type] is the malformed type `Unresolved`.
   ///
-  R errorAbstractClassConstructorInvoke(
+  R visitAbstractClassConstructorInvoke(
       NewExpression node,
       ConstructorElement element,
       InterfaceType type,
@@ -3080,12 +3157,12 @@
   ///   m1() => new C(true, 42);
   ///   m2() => new C.a(true, 42);
   ///
-  R errorUnresolvedRedirectingFactoryConstructorInvoke(
+  R visitUnresolvedRedirectingFactoryConstructorInvoke(
       NewExpression node,
       ConstructorElement constructor,
       InterfaceType type,
       NodeList arguments,
-      Selector selector,
+      CallStructure callStructure,
       A arg);
 }
 
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
index dce195b..7f5b884 100644
--- a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
@@ -33,17 +33,6 @@
   }
 
   @override
-  R errorAbstractClassConstructorInvoke(
-      NewExpression node,
-      ConstructorElement element,
-      InterfaceType type,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
   R errorClassTypeLiteralCompound(
       Send node,
       ConstantExpression constant,
@@ -251,6 +240,17 @@
   }
 
   @override
+  R errorNonConstantConstructorInvoke(
+      NewExpression node,
+      Element element,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      A arg) {
+    return bulkHandleError(node, arg);
+  }
+
+  @override
   R errorStaticFunctionSet(
       Send node,
       MethodElement function,
@@ -443,28 +443,6 @@
   }
 
   @override
-  R errorUnresolvedClassConstructorInvoke(
-      NewExpression node,
-      Element element,
-      MalformedType type,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
-  R errorUnresolvedConstructorInvoke(
-      NewExpression node,
-      Element constructor,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
   R errorUnresolvedPostfix(
       Send node,
       Element element,
@@ -483,17 +461,6 @@
   }
 
   @override
-  R errorUnresolvedRedirectingFactoryConstructorInvoke(
-       NewExpression node,
-       ConstructorElement constructor,
-       InterfaceType type,
-       NodeList arguments,
-       Selector selector,
-       A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
   R errorUnresolvedSet(
       Send node,
       Element element,
@@ -503,47 +470,6 @@
   }
 
   @override
-  R errorUnresolvedSuperCompoundIndexSet(
-      SendSet node,
-      Element element,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
-  R errorUnresolvedSuperIndexPostfix(
-      Send node,
-      Element function,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
-  R errorUnresolvedSuperIndexPrefix(
-      Send node,
-      Element function,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
-  R errorUnresolvedSuperIndexSet(
-      SendSet node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
-    return bulkHandleError(node, arg);
-  }
-
-  @override
   R errorUndefinedUnaryExpression(
       Send node,
       Operator operator,
@@ -704,6 +630,27 @@
   }
 
   @override
+  R visitUnresolvedSuperGetterIndexPrefix(
+      Send node,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return bulkHandlePrefix(node, arg);
+  }
+
+  @override
+  R visitUnresolvedSuperSetterIndexPrefix(
+      Send node,
+      MethodElement getter,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return bulkHandlePrefix(node, arg);
+  }
+
+  @override
   R visitSuperMethodSetterPrefix(
       Send node,
       FunctionElement method,
@@ -894,6 +841,27 @@
   }
 
   @override
+  R visitUnresolvedSuperGetterIndexPostfix(
+      Send node,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return bulkHandlePostfix(node, arg);
+  }
+
+  @override
+  R visitUnresolvedSuperSetterIndexPostfix(
+      Send node,
+      MethodElement getter,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return bulkHandlePostfix(node, arg);
+  }
+
+  @override
   R visitSuperMethodSetterPostfix(
       Send node,
       FunctionElement method,
@@ -1725,6 +1693,29 @@
   }
 
   @override
+  R visitUnresolvedSuperGetterCompoundIndexSet(
+      SendSet node,
+      Element element,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
+      A arg) {
+    return bulkHandleIndexSet(node, arg);
+  }
+
+  @override
+  R visitUnresolvedSuperSetterCompoundIndexSet(
+      SendSet node,
+      MethodElement getter,
+      Element element,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
+      A arg) {
+    return bulkHandleIndexSet(node, arg);
+  }
+
+  @override
   R visitSuperIndexSet(
       SendSet node,
       FunctionElement function,
@@ -1733,6 +1724,16 @@
       A arg) {
     return bulkHandleIndexSet(node, arg);
   }
+
+  @override
+  R visitUnresolvedSuperIndexSet(
+      SendSet node,
+      Element element,
+      Node index,
+      Node rhs,
+      A arg) {
+    return bulkHandleIndexSet(node, arg);
+  }
 }
 
 /// Mixin that implements all binary visitor methods in [SemanticSendVisitor] by
@@ -2342,6 +2343,17 @@
   }
 
   @override
+  R visitAbstractClassConstructorInvoke(
+      NewExpression node,
+      ConstructorElement element,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      A arg) {
+    return bulkHandleNew(node, arg);
+  }
+
+  @override
   R visitConstConstructorInvoke(
       NewExpression node,
       ConstructedConstantExpression constant,
@@ -2390,6 +2402,39 @@
       A arg) {
     return bulkHandleNew(node, arg);
   }
+
+  @override
+  R visitUnresolvedClassConstructorInvoke(
+      NewExpression node,
+      Element element,
+      DartType type,
+      NodeList arguments,
+      Selector selector,
+      A arg) {
+    return bulkHandleNew(node, arg);
+  }
+
+  @override
+  R visitUnresolvedConstructorInvoke(
+      NewExpression node,
+      Element constructor,
+      DartType type,
+      NodeList arguments,
+      Selector selector,
+      A arg) {
+    return bulkHandleNew(node, arg);
+  }
+
+  @override
+  R visitUnresolvedRedirectingFactoryConstructorInvoke(
+       NewExpression node,
+       ConstructorElement constructor,
+       InterfaceType type,
+       NodeList arguments,
+       CallStructure callStructure,
+       A arg) {
+    return bulkHandleNew(node, arg);
+  }
 }
 
 /// Visitor that implements [SemanticSendVisitor] by the use of `BulkX` mixins.
@@ -4676,7 +4721,7 @@
   }
 
   @override
-  R errorUnresolvedSuperIndexSet(
+  R visitUnresolvedSuperIndexSet(
       Send node,
       Element element,
       Node index,
@@ -4688,7 +4733,7 @@
   }
 
   @override
-  R errorUnresolvedSuperCompoundIndexSet(
+  R visitUnresolvedSuperGetterCompoundIndexSet(
       SendSet node,
       Element element,
       Node index,
@@ -4701,6 +4746,20 @@
   }
 
   @override
+  R visitUnresolvedSuperSetterCompoundIndexSet(
+      SendSet node,
+      MethodElement getter,
+      Element element,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
+      A arg) {
+    apply(index, arg);
+    apply(rhs, arg);
+    return null;
+  }
+
+  @override
   R visitUnresolvedSuperBinary(
       Send node,
       Element element,
@@ -4721,9 +4780,9 @@
   }
 
   @override
-  R errorUnresolvedSuperIndexPostfix(
+  R visitUnresolvedSuperGetterIndexPostfix(
       Send node,
-      Element function,
+      Element element,
       Node index,
       IncDecOperator operator,
       A arg) {
@@ -4732,9 +4791,33 @@
   }
 
   @override
-  R errorUnresolvedSuperIndexPrefix(
+  R visitUnresolvedSuperSetterIndexPostfix(
       Send node,
-      Element function,
+      MethodElement getter,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    apply(index, arg);
+    return null;
+  }
+
+  @override
+  R visitUnresolvedSuperGetterIndexPrefix(
+      Send node,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    apply(index, arg);
+    return null;
+  }
+
+  @override
+  R visitUnresolvedSuperSetterIndexPrefix(
+      Send node,
+      MethodElement getter,
+      Element element,
       Node index,
       IncDecOperator operator,
       A arg) {
@@ -4798,10 +4881,10 @@
   }
 
   @override
-  R errorUnresolvedClassConstructorInvoke(
+  R visitUnresolvedClassConstructorInvoke(
       NewExpression node,
       Element constructor,
-      MalformedType type,
+      DartType type,
       NodeList arguments,
       Selector selector,
       A arg) {
@@ -4810,7 +4893,7 @@
   }
 
   @override
-  R errorUnresolvedConstructorInvoke(
+  R visitUnresolvedConstructorInvoke(
       NewExpression node,
       Element constructor,
       DartType type,
@@ -4872,7 +4955,7 @@
   }
 
   @override
-  R errorAbstractClassConstructorInvoke(
+  R visitAbstractClassConstructorInvoke(
       NewExpression node,
       ConstructorElement element,
       InterfaceType type,
@@ -4884,12 +4967,24 @@
   }
 
   @override
-  R errorUnresolvedRedirectingFactoryConstructorInvoke(
+  R visitUnresolvedRedirectingFactoryConstructorInvoke(
       NewExpression node,
       ConstructorElement constructor,
       InterfaceType type,
       NodeList arguments,
-      Selector selector,
+      CallStructure callStructure,
+      A arg) {
+    apply(arguments, arg);
+    return null;
+  }
+
+  @override
+  R errorNonConstantConstructorInvoke(
+      NewExpression node,
+      Element element,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
       A arg) {
     apply(arguments, arg);
     return null;
@@ -6378,6 +6473,23 @@
       A arg,
       {bool isPrefix});
 
+  R handleUnresolvedSuperGetterIndexPostfixPrefix(
+      Send node,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg,
+      {bool isPrefix});
+
+  R handleUnresolvedSuperSetterIndexPostfixPrefix(
+      Send node,
+      FunctionElement indexFunction,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg,
+      {bool isPrefix});
+
   @override
   R visitSuperFieldFieldPostfix(
       Send node,
@@ -6533,6 +6645,52 @@
         node, indexFunction, indexSetFunction,
         index, operator, arg, isPrefix: true);
   }
+
+  @override
+  R visitUnresolvedSuperGetterIndexPostfix(
+      Send node,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return handleUnresolvedSuperGetterIndexPostfixPrefix(
+        node, element, index, operator, arg, isPrefix: false);
+  }
+
+  @override
+  R visitUnresolvedSuperGetterIndexPrefix(
+      Send node,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return handleUnresolvedSuperGetterIndexPostfixPrefix(
+        node, element, index, operator, arg, isPrefix: true);
+  }
+
+  @override
+  R visitUnresolvedSuperSetterIndexPostfix(
+      Send node,
+      MethodElement indexFunction,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return handleUnresolvedSuperSetterIndexPostfixPrefix(
+        node, indexFunction, element, index, operator, arg, isPrefix: false);
+  }
+
+  @override
+  R visitUnresolvedSuperSetterIndexPrefix(
+      Send node,
+      MethodElement indexFunction,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      A arg) {
+    return handleUnresolvedSuperSetterIndexPostfixPrefix(
+        node, indexFunction, element, index, operator, arg, isPrefix: true);
+  }
 }
 
 /// Mixin that groups the non-constant `visitXConstructorInvoke` methods by
@@ -6596,4 +6754,47 @@
     return handleConstructorInvoke(
         node, constructor, type, arguments, callStructure, arg);
   }
+
+  R visitUnresolvedConstructorInvoke(
+      NewExpression node,
+      Element constructor,
+      DartType type,
+      NodeList arguments,
+      Selector selector,
+      A arg) {
+    return handleConstructorInvoke(
+        node, constructor, type, arguments, selector.callStructure, arg);
+  }
+
+  R visitUnresolvedClassConstructorInvoke(
+      NewExpression node,
+      Element element,
+      DartType type,
+      NodeList arguments,
+      Selector selector,
+      A arg) {
+    return handleConstructorInvoke(
+        node, element, type, arguments, selector.callStructure, arg);
+  }
+
+  R visitAbstractClassConstructorInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      A arg) {
+    return handleConstructorInvoke(
+        node, constructor, type, arguments, callStructure, arg);
+  }
+  R visitUnresolvedRedirectingFactoryConstructorInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      A arg) {
+    return handleConstructorInvoke(
+        node, constructor, type, arguments, callStructure, arg);
+  }
 }
diff --git a/pkg/compiler/lib/src/resolution/send_resolver.dart b/pkg/compiler/lib/src/resolution/send_resolver.dart
index b8eeb2fe..f4bbaa5 100644
--- a/pkg/compiler/lib/src/resolution/send_resolver.dart
+++ b/pkg/compiler/lib/src/resolution/send_resolver.dart
@@ -340,11 +340,24 @@
       }
     } else if (node.isSuperCall) {
       if (Elements.isUnresolved(element)) {
-        return new StaticAccess.unresolvedSuper(element);
+        if (isCompound) {
+          if (Elements.isUnresolved(getter)) {
+            // TODO(johnniwinther): Ensure that [getter] is not null. This
+            // happens in the case of missing super getter.
+            return new CompoundAccessSemantics(
+                CompoundAccessKind.UNRESOLVED_SUPER_GETTER, getter, element);
+          } else {
+            return new CompoundAccessSemantics(
+                CompoundAccessKind.UNRESOLVED_SUPER_SETTER, getter, element);
+          }
+        } else {
+          return new StaticAccess.unresolvedSuper(element);
+        }
       } else if (isCompound && Elements.isUnresolved(getter)) {
         // TODO(johnniwinther): Ensure that [getter] is not null. This happens
         // in the case of missing super getter.
-        return new StaticAccess.unresolved(getter);
+        return new CompoundAccessSemantics(
+            CompoundAccessKind.UNRESOLVED_SUPER_GETTER, getter, element);
       } else if (element.isField) {
         if (getter != null && getter != element) {
           CompoundAccessKind accessKind;
@@ -419,8 +432,15 @@
         ConstructorElement constructor,
         DartType type) {
     if (constructor.isErroneous) {
+      if (constructor is ErroneousElement) {
+        ErroneousElement error = constructor;
+        if (error.messageKind == MessageKind.CANNOT_FIND_CONSTRUCTOR) {
+          return new ConstructorAccessSemantics(
+              ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR, constructor, type);
+        }
+      }
       return new ConstructorAccessSemantics(
-          ConstructorAccessKind.ERRONEOUS, constructor, type);
+          ConstructorAccessKind.UNRESOLVED_TYPE, constructor, type);
     } else if (constructor.isRedirectingFactory) {
       ConstructorElement effectiveTarget = constructor.effectiveTarget;
       if (effectiveTarget == constructor ||
@@ -482,7 +502,7 @@
       // This is a non-constant constant constructor invocation, like
       // `const Const(method())`.
       constructorAccessSemantics = new ConstructorAccessSemantics(
-          ConstructorAccessKind.ERRONEOUS, element, type);
+          ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR, element, type);
     } else {
       constructorAccessSemantics =
           computeConstructorAccessSemantics(element, type);
@@ -753,16 +773,15 @@
       return new RequiredParameterStructure(
           definitions, node, element, index);
     } else {
-      ConstantExpression defaultValue;
-      if (element.initializer != null) {
-        defaultValue = elements.getConstant(element.initializer);
-      }
+      // TODO(johnniwinther): Should we differentiate between implicit (null)
+      // and explicit values? What about optional parameters on redirecting
+      // factories?
       if (isNamed) {
         return new NamedParameterStructure(
-            definitions, node, element, defaultValue);
+            definitions, node, element, element.constant);
       } else {
         return new OptionalParameterStructure(
-            definitions, node, element, defaultValue, index);
+            definitions, node, element, element.constant, index);
       }
     }
   }
diff --git a/pkg/compiler/lib/src/resolution/send_structure.dart b/pkg/compiler/lib/src/resolution/send_structure.dart
index 475451f..318ede8 100644
--- a/pkg/compiler/lib/src/resolution/send_structure.dart
+++ b/pkg/compiler/lib/src/resolution/send_structure.dart
@@ -1019,8 +1019,7 @@
             arg);
       case AccessKind.UNRESOLVED_SUPER:
       case AccessKind.UNRESOLVED:
-        // TODO(johnniwinther): Support these through [AccessKind.COMPOUND].
-        return visitor.errorUnresolvedSuperIndexSet(
+        return visitor.visitUnresolvedSuperIndexSet(
             node,
             semantics.element,
             node.arguments.first,
@@ -1068,15 +1067,6 @@
             node.arguments.single,
             operator,
             arg);
-      case AccessKind.UNRESOLVED_SUPER:
-      case AccessKind.UNRESOLVED:
-        // TODO(johnniwinther): Support these through [AccessKind.COMPOUND].
-        return visitor.errorUnresolvedSuperIndexPrefix(
-            node,
-            semantics.element,
-            node.arguments.single,
-            operator,
-            arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -1088,6 +1078,21 @@
                 node.arguments.single,
                 operator,
                 arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
+            return visitor.visitUnresolvedSuperGetterIndexPrefix(
+                node,
+                compoundSemantics.getter,
+                node.arguments.single,
+                operator,
+                arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
+            return visitor.visitUnresolvedSuperSetterIndexPrefix(
+                node,
+                compoundSemantics.getter,
+                compoundSemantics.setter,
+                node.arguments.single,
+                operator,
+                arg);
           default:
             // This is not a valid case.
             break;
@@ -1133,15 +1138,6 @@
             node.arguments.single,
             operator,
             arg);
-      case AccessKind.UNRESOLVED_SUPER:
-      case AccessKind.UNRESOLVED:
-        // TODO(johnniwinther): Support these through [AccessKind.COMPOUND].
-        return visitor.errorUnresolvedSuperIndexPostfix(
-            node,
-            semantics.element,
-            node.arguments.single,
-            operator,
-            arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -1153,6 +1149,21 @@
                 node.arguments.single,
                 operator,
                 arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
+            return visitor.visitUnresolvedSuperGetterIndexPostfix(
+                node,
+                compoundSemantics.getter,
+                node.arguments.single,
+                operator,
+                arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
+            return visitor.visitUnresolvedSuperSetterIndexPostfix(
+                node,
+                compoundSemantics.getter,
+                compoundSemantics.setter,
+                node.arguments.single,
+                operator,
+                arg);
           default:
             // This is not a valid case.
             break;
@@ -1391,6 +1402,16 @@
                 operator,
                 node.arguments.single,
                 arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
+          case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
+            // TODO(johnniwinther): Handle these separately.
+            return visitor.errorUnresolvedCompound(
+                node,
+                semantics.element,
+                operator,
+                node.arguments.single,
+                arg);
+            break;
         }
         break;
     }
@@ -1430,16 +1451,6 @@
             operator,
             node.arguments.tail.head,
             arg);
-      case AccessKind.UNRESOLVED_SUPER:
-      case AccessKind.UNRESOLVED:
-        // TODO(johnniwinther): Support these through [AccessKind.COMPOUND].
-        return visitor.errorUnresolvedSuperCompoundIndexSet(
-            node,
-            semantics.element,
-            node.arguments.first,
-            operator,
-            node.arguments.tail.head,
-            arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -1452,6 +1463,23 @@
                 operator,
                 node.arguments.tail.head,
                 arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
+            return visitor.visitUnresolvedSuperGetterCompoundIndexSet(
+                node,
+                compoundSemantics.getter,
+                node.arguments.first,
+                operator,
+                node.arguments.tail.head,
+                arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
+            return visitor.visitUnresolvedSuperSetterCompoundIndexSet(
+                node,
+                compoundSemantics.getter,
+                compoundSemantics.setter,
+                node.arguments.first,
+                operator,
+                node.arguments.tail.head,
+                arg);
           default:
             // This is not a valid case.
             break;
@@ -1675,6 +1703,14 @@
                 compoundSemantics.setter,
                 operator,
                 arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
+          case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
+            // TODO(johnniwinther): Handle these directly.
+            return visitor.errorUnresolvedPrefix(
+                node,
+                semantics.element,
+                operator,
+                arg);
         }
     }
     throw new SpannableAssertionFailure(node,
@@ -1891,6 +1927,14 @@
                 compoundSemantics.setter,
                 operator,
                 arg);
+          case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
+          case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
+            // TODO(johnniwinther): Handle these directly.
+            return visitor.errorUnresolvedPostfix(
+                node,
+                semantics.element,
+                operator,
+                arg);
         }
     }
     throw new SpannableAssertionFailure(node,
@@ -1937,17 +1981,25 @@
             semantics.effectiveTargetSemantics.type,
             node.send.argumentsNode, callStructure, arg);
       case ConstructorAccessKind.ABSTRACT:
-        return visitor.errorAbstractClassConstructorInvoke(
+        return visitor.visitAbstractClassConstructorInvoke(
             node, semantics.element, semantics.type,
             node.send.argumentsNode, callStructure, arg);
-      case ConstructorAccessKind.ERRONEOUS:
-        return visitor.errorUnresolvedConstructorInvoke(
+      case ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR:
+        return visitor.visitUnresolvedConstructorInvoke(
             node, semantics.element, semantics.type,
             node.send.argumentsNode, selector, arg);
+      case ConstructorAccessKind.UNRESOLVED_TYPE:
+        return visitor.visitUnresolvedClassConstructorInvoke(
+            node, semantics.element, semantics.type,
+            node.send.argumentsNode, selector, arg);
+      case ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR:
+        return visitor.errorNonConstantConstructorInvoke(
+            node, semantics.element, semantics.type,
+            node.send.argumentsNode, callStructure, arg);
       case ConstructorAccessKind.ERRONEOUS_REDIRECTING_FACTORY:
-        return visitor.errorUnresolvedRedirectingFactoryConstructorInvoke(
+        return visitor.visitUnresolvedRedirectingFactoryConstructorInvoke(
             node, semantics.element, semantics.type,
-            node.send.argumentsNode, selector, arg);
+            node.send.argumentsNode, callStructure, arg);
     }
     throw new SpannableAssertionFailure(node,
         "Unhandled constructor invocation kind: ${semantics.kind}");
diff --git a/pkg/compiler/lib/src/scanner/class_element_parser.dart b/pkg/compiler/lib/src/scanner/class_element_parser.dart
index 9bf1523..0f49ad2 100644
--- a/pkg/compiler/lib/src/scanner/class_element_parser.dart
+++ b/pkg/compiler/lib/src/scanner/class_element_parser.dart
@@ -166,15 +166,9 @@
           method.modifiers,
           enclosingClass);
     } else {
-      ElementKind kind = ElementKind.FUNCTION;
-      if (getOrSet != null) {
-        kind = (identical(getOrSet.stringValue, 'get'))
-               ? ElementKind.GETTER : ElementKind.SETTER;
-      }
-      memberElement =
-          new PartialFunctionElement(name, beginToken, getOrSet, endToken,
-                                     kind, method.modifiers, enclosingClass,
-                                     !method.hasBody());
+      memberElement = new PartialFunctionElement(
+          name, beginToken, getOrSet, endToken,
+          method.modifiers, enclosingClass, hasBody: method.hasBody());
     }
     addMember(memberElement);
   }
@@ -228,14 +222,14 @@
     pushNode(null);
   }
 
-  void addMetadata(Element memberElement) {
+  void addMetadata(ElementX memberElement) {
     for (Link link = metadata; !link.isEmpty; link = link.tail) {
       memberElement.addMetadata(link.head);
     }
     metadata = const Link<MetadataAnnotation>();
   }
 
-  void addMember(Element memberElement) {
+  void addMember(ElementX memberElement) {
     addMetadata(memberElement);
     enclosingClass.addMember(memberElement, listener);
   }
diff --git a/pkg/compiler/lib/src/scanner/listener.dart b/pkg/compiler/lib/src/scanner/listener.dart
index 568577a..4add7ec 100644
--- a/pkg/compiler/lib/src/scanner/listener.dart
+++ b/pkg/compiler/lib/src/scanner/listener.dart
@@ -786,7 +786,7 @@
 class ElementListener extends Listener {
   final IdGenerator idGenerator;
   final DiagnosticListener listener;
-  final CompilationUnitElement compilationUnitElement;
+  final CompilationUnitElementX compilationUnitElement;
   final StringValidator stringValidator;
   Link<StringQuoting> interpolationScope;
 
@@ -1011,17 +1011,9 @@
     Identifier name = popNode();
     TypeAnnotation type = popNode();
     Modifiers modifiers = popNode();
-    ElementKind kind;
-    if (getOrSet == null) {
-      kind = ElementKind.FUNCTION;
-    } else if (identical(getOrSet.stringValue, 'get')) {
-      kind = ElementKind.GETTER;
-    } else if (identical(getOrSet.stringValue, 'set')) {
-      kind = ElementKind.SETTER;
-    }
     PartialFunctionElement element = new PartialFunctionElement(
-        name.source, beginToken, getOrSet, endToken, kind, modifiers,
-        compilationUnitElement, false);
+        name.source, beginToken, getOrSet, endToken,
+        modifiers, compilationUnitElement);
     element.hasParseError = hasParseError;
     pushElement(element);
   }
@@ -1327,7 +1319,7 @@
     compilationUnitElement.addMember(element, listener);
   }
 
-  Link<MetadataAnnotation> popMetadata(Element element) {
+  Link<MetadataAnnotation> popMetadata(ElementX element) {
     var result = const Link<MetadataAnnotation>();
     for (Link link = metadata; !link.isEmpty; link = link.tail) {
       element.addMetadata(link.head);
@@ -1346,7 +1338,9 @@
     if (!allowLibraryTags()) {
       recoverableError(tag, 'Library tags not allowed here.');
     }
-    compilationUnitElement.implementationLibrary.addTag(tag, listener);
+    LibraryElementX implementationLibrary =
+        compilationUnitElement.implementationLibrary;
+    implementationLibrary.addTag(tag, listener);
   }
 
   void pushNode(Node node) {
@@ -1563,17 +1557,10 @@
     Identifier name = popNode();
     TypeAnnotation type = popNode();
     Modifiers modifiers = popNode();
-    ElementKind kind;
-    if (getOrSet == null) {
-      kind = ElementKind.FUNCTION;
-    } else if (identical(getOrSet.stringValue, 'get')) {
-      kind = ElementKind.GETTER;
-    } else if (identical(getOrSet.stringValue, 'set')) {
-      kind = ElementKind.SETTER;
-    }
-    pushElement(new PartialFunctionElement(name.source, beginToken, getOrSet,
-                                           endToken, kind, modifiers,
-                                           compilationUnitElement, false));
+    PartialFunctionElement element = new PartialFunctionElement(
+        name.source, beginToken, getOrSet, endToken,
+        modifiers, compilationUnitElement);
+    pushElement(element);
   }
 
   void endFormalParameter(Token thisKeyword) {
@@ -2282,7 +2269,7 @@
   DeclarationSite get declarationSite => this;
 }
 
-abstract class PartialFunctionMixin implements FunctionElement {
+abstract class PartialFunctionMixin implements BaseFunctionElementX {
   FunctionExpression cachedNode;
   Modifiers get modifiers;
   Token beginToken;
@@ -2336,18 +2323,48 @@
   DeclarationSite get declarationSite;
 }
 
-class PartialFunctionElement extends FunctionElementX
-    with PartialElement, PartialFunctionMixin {
-  PartialFunctionElement(String name,
-                         Token beginToken,
-                         Token getOrSet,
-                         Token endToken,
-                         ElementKind kind,
-                         Modifiers modifiers,
-                         Element enclosing,
-                         bool hasNoBody)
-      : super(name, kind, modifiers, enclosing, hasNoBody) {
-    init(beginToken, getOrSet, endToken);
+abstract class PartialFunctionElement
+    implements PartialElement, PartialFunctionMixin {
+
+  factory PartialFunctionElement(
+      String name,
+      Token beginToken,
+      Token getOrSet,
+      Token endToken,
+      Modifiers modifiers,
+      Element enclosingElement,
+      {bool hasBody: true}) {
+    if (getOrSet == null) {
+      return new PartialMethodElement(
+          name, beginToken, endToken, modifiers,
+          enclosingElement, hasBody: hasBody);
+    } else if (identical(getOrSet.stringValue, 'get')) {
+      return new PartialGetterElement(
+          name, beginToken, getOrSet, endToken, modifiers,
+          enclosingElement, hasBody: hasBody);
+    } else {
+      assert(identical(getOrSet.stringValue, 'set'));
+      return new PartialSetterElement(
+          name, beginToken, getOrSet, endToken, modifiers,
+          enclosingElement, hasBody: hasBody);
+    }
+  }
+
+  PartialFunctionElement copyWithEnclosing(Element enclosing);
+}
+
+
+class PartialMethodElement extends MethodElementX
+    with PartialElement, PartialFunctionMixin
+    implements PartialFunctionElement {
+  PartialMethodElement(String name,
+                       Token beginToken,
+                       Token endToken,
+                       Modifiers modifiers,
+                       Element enclosing,
+                       {bool hasBody: true})
+      : super(name, ElementKind.FUNCTION, modifiers, enclosing, hasBody) {
+    init(beginToken, null, endToken);
   }
 
   void reuseElement() {
@@ -2355,10 +2372,67 @@
     reusePartialFunctionMixin();
   }
 
-  PartialFunctionElement copyWithEnclosing(Element enclosing) {
-    return new PartialFunctionElement(
-        name, beginToken, getOrSet, endToken, kind, modifiers, enclosing,
-        hasNoBody);
+  PartialMethodElement copyWithEnclosing(Element enclosing) {
+    return new PartialMethodElement(
+        name, beginToken, endToken, modifiers, enclosing, hasBody: hasBody);
+  }
+}
+
+class PartialGetterElement extends GetterElementX
+    with PartialElement, PartialFunctionMixin
+    implements GetterElement, PartialFunctionElement  {
+  PartialGetterElement(String name,
+                       Token beginToken,
+                       Token getToken,
+                       Token endToken,
+                       Modifiers modifiers,
+                       Element enclosing,
+                       {bool hasBody: true})
+      : super(name, modifiers, enclosing, hasBody) {
+    init(beginToken, getToken, endToken);
+  }
+
+  @override
+  SetterElement get setter => abstractField.setter;
+
+  void reuseElement() {
+    super.reuseElement();
+    reusePartialFunctionMixin();
+  }
+
+  PartialGetterElement copyWithEnclosing(Element enclosing) {
+    return new PartialGetterElement(
+        name, beginToken, getOrSet, endToken, modifiers, enclosing,
+        hasBody: hasBody);
+  }
+}
+
+class PartialSetterElement extends SetterElementX
+    with PartialElement, PartialFunctionMixin
+    implements SetterElement, PartialFunctionElement {
+  PartialSetterElement(String name,
+                       Token beginToken,
+                       Token setToken,
+                       Token endToken,
+                       Modifiers modifiers,
+                       Element enclosing,
+                       {bool hasBody: true})
+      : super(name, modifiers, enclosing, hasBody) {
+    init(beginToken, setToken, endToken);
+  }
+
+  @override
+  GetterElement get getter => abstractField.getter;
+
+  void reuseElement() {
+    super.reuseElement();
+    reusePartialFunctionMixin();
+  }
+
+  PartialSetterElement copyWithEnclosing(Element enclosing) {
+    return new PartialSetterElement(
+        name, beginToken, getOrSet, endToken, modifiers, enclosing,
+        hasBody: hasBody);
   }
 }
 
@@ -2506,7 +2580,7 @@
 
 Node parse(
     DiagnosticListener diagnosticListener,
-    Element element,
+    ElementX element,
     PartialElement partial,
     doParse(Parser parser)) {
   CompilationUnitElement unit = element.compilationUnit;
diff --git a/pkg/compiler/lib/src/scanner/scannerlib.dart b/pkg/compiler/lib/src/scanner/scannerlib.dart
index 7543bb5..7b6ebb7 100644
--- a/pkg/compiler/lib/src/scanner/scannerlib.dart
+++ b/pkg/compiler/lib/src/scanner/scannerlib.dart
@@ -10,6 +10,7 @@
 import '../elements/elements.dart';
 
 import '../elements/modelx.dart' show
+    BaseFunctionElementX,
     ClassElementX,
     CompilationUnitElementX,
     ConstructorElementX,
@@ -17,9 +18,12 @@
     ElementX,
     EnumClassElementX,
     FieldElementX,
-    FunctionElementX,
+    GetterElementX,
+    MethodElementX,
+    LibraryElementX,
     MetadataAnnotationX,
     MixinApplicationElementX,
+    SetterElementX,
     TypedefElementX,
     VariableElementX,
     VariableList;
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index e4b5c8b..2dca503 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -201,11 +201,33 @@
   /// variables are in scope.
   ClassElement get contextClass => executableContext.contextClass;
 
+  /// The type of the current instance, if concrete.
+  ///
+  /// This allows for handling fixed type argument in case of inlining. For
+  /// instance, checking `'foo'` against `String` instead of `T` in `main`:
+  ///
+  ///     class Foo<T> {
+  ///       T field;
+  ///       Foo(this.field);
+  ///     }
+  ///     main() {
+  ///       new Foo<String>('foo');
+  ///     }
+  ///
+  /// [instanceType] is not used if it contains type variables, since these
+  /// might not be in scope or from the current instance.
+  ///
+  final InterfaceType instanceType;
+
   SourceInformationBuilder get sourceInformationBuilder {
     return builder.sourceInformationBuilder;
   }
 
-  LocalsHandler(this.builder, this.executableContext);
+  LocalsHandler(this.builder, this.executableContext,
+                InterfaceType instanceType)
+      : this.instanceType =
+          instanceType == null || instanceType.containsTypeVariables
+              ? null : instanceType;
 
   /// Substituted type variables occurring in [type] into the context of
   /// [contextClass].
@@ -217,6 +239,9 @@
             contextClass.asInstanceOf(typeContext));
       }
     }
+    if (instanceType != null) {
+      type = type.substByContext(instanceType);
+    }
     return type;
   }
 
@@ -231,6 +256,7 @@
       : directLocals = new Map<Local, HInstruction>.from(other.directLocals),
         redirectionMapping = other.redirectionMapping,
         executableContext = other.executableContext,
+        instanceType = other.instanceType,
         builder = other.builder,
         closureData = other.closureData;
 
@@ -1094,7 +1120,7 @@
       this.work = work,
       this.rti = backend.rti,
       super(work.resolutionTree) {
-    localsHandler = new LocalsHandler(this, work.element);
+    localsHandler = new LocalsHandler(this, work.element, null);
     sourceElementStack.add(work.element);
     sourceInformationBuilder =
         sourceInformationFactory.forContext(work.element.implementation);
@@ -1272,7 +1298,8 @@
   bool tryInlineMethod(Element element,
                        Selector selector,
                        List<HInstruction> providedArguments,
-                       ast.Node currentNode) {
+                       ast.Node currentNode,
+                       {InterfaceType instanceType}) {
     // TODO(johnniwinther): Register this on the [registry]. Currently the
     // [CodegenRegistry] calls the enqueuer, but [element] should _not_ be
     // enqueued.
@@ -1293,12 +1320,6 @@
     if (cachedCanBeInlined == false) return false;
 
     bool meetsHardConstraints() {
-      // Don't inline from one output unit to another. If something is deferred
-      // it is to save space in the loading code.
-      if (!compiler.deferredLoadTask
-          .inSameOutputUnit(element,compiler.currentElement)) {
-        return false;
-      }
       if (compiler.disableInlining) return false;
 
       assert(selector != null
@@ -1348,12 +1369,18 @@
         return InlineWeeder.canBeInlined(function, -1, false);
       }
       // TODO(sra): Measure if inlining would 'reduce' the size.  One desirable
-      // case we miss my doing nothing is inlining very simple constructors
+      // case we miss by doing nothing is inlining very simple constructors
       // where all fields are initialized with values from the arguments at this
       // call site.  The code is slightly larger (`new Foo(1)` vs `Foo$(1)`) but
       // that usually means the factory constructor is left unused and not
       // emitted.
-      return false;
+      // We at least inline bodies that are empty (and thus have a size of 1).
+      return InlineWeeder.canBeInlined(function, 1, true);
+    }
+
+    bool doesNotContainCode() {
+      // A function with size 1 does not contain any code.
+      return InlineWeeder.canBeInlined(function, 1, true);
     }
 
     bool heuristicSayGoodToGo() {
@@ -1364,6 +1391,16 @@
 
       if (element.isSynthesized) return true;
 
+      // Don't inline across deferred import to prevent leaking code. The only
+      // exception is an empty function (which does not contain code).
+      bool hasOnlyNonDeferredImportPaths = compiler.deferredLoadTask
+          .hasOnlyNonDeferredImportPaths(compiler.currentElement, element);
+
+      if (!hasOnlyNonDeferredImportPaths) {
+        return doesNotContainCode();
+      }
+
+      // Do not inline code that is rarely executed unless it reduces size.
       if (inExpressionOfThrow || inLazyInitializerExpression) {
         return reductiveHeuristic();
       }
@@ -1418,7 +1455,8 @@
       }
       List<HInstruction> compiledArguments = completeSendArgumentsList(
           function, selector, providedArguments, currentNode);
-      enterInlinedMethod(function, currentNode, compiledArguments);
+      enterInlinedMethod(
+          function, currentNode, compiledArguments, instanceType: instanceType);
       inlinedFrom(function, () {
         if (!isReachable) {
           emitReturn(graph.addConstantNull(compiler), null);
@@ -1681,8 +1719,9 @@
    * stores it in the [returnLocal] field.
    */
   void setupStateForInlining(FunctionElement function,
-                             List<HInstruction> compiledArguments) {
-    localsHandler = new LocalsHandler(this, function);
+                             List<HInstruction> compiledArguments,
+                             {InterfaceType instanceType}) {
+    localsHandler = new LocalsHandler(this, function, instanceType);
     localsHandler.closureData =
         compiler.closureToClassMapper.computeClosureToClassMapping(
             function, function.node, elements);
@@ -3217,22 +3256,27 @@
     pushInvokeDynamic(send, selector, [receiver]);
   }
 
+  /// Inserts a call to checkDeferredIsLoaded for [prefixElement].
+  /// If [prefixElement] is [null] ndo nothing.
+  void generateIsDeferredLoadedCheckIfNeeded(PrefixElement prefixElement,
+                                             ast.Node location) {
+    if (prefixElement == null) return;
+    String loadId =
+        compiler.deferredLoadTask.importDeferName[prefixElement.deferredImport];
+    HInstruction loadIdConstant = addConstantString(loadId);
+    String uri = prefixElement.deferredImport.uri.dartString.slowToString();
+    HInstruction uriConstant = addConstantString(uri);
+    Element helper = backend.getCheckDeferredIsLoaded();
+    pushInvokeStatic(location, helper, [loadIdConstant, uriConstant]);
+    pop();
+  }
+
   /// Inserts a call to checkDeferredIsLoaded if the send has a prefix that
   /// resolves to a deferred library.
-  void generateIsDeferredLoadedCheckIfNeeded(ast.Send node) {
-    DeferredLoadTask deferredTask = compiler.deferredLoadTask;
-    PrefixElement prefixElement =
-         deferredTask.deferredPrefixElement(node, elements);
-    if (prefixElement != null) {
-      String loadId =
-          deferredTask.importDeferName[prefixElement.deferredImport];
-      HInstruction loadIdConstant = addConstantString(loadId);
-      String uri = prefixElement.deferredImport.uri.dartString.slowToString();
-      HInstruction uriConstant = addConstantString(uri);
-      Element helper = backend.getCheckDeferredIsLoaded();
-      pushInvokeStatic(node, helper, [loadIdConstant, uriConstant]);
-      pop();
-    }
+  void generateIsDeferredLoadedCheckOfSend(ast.Send node) {
+    generateIsDeferredLoadedCheckIfNeeded(
+        compiler.deferredLoadTask.deferredPrefixElement(node, elements),
+        node);
   }
 
   /// Generate read access of an unresolved static or top level entity.
@@ -3284,7 +3328,7 @@
 
   /// Read a static or top level [field].
   void generateStaticFieldGet(ast.Send node, FieldElement field) {
-    generateIsDeferredLoadedCheckIfNeeded(node);
+    generateIsDeferredLoadedCheckOfSend(node);
 
     ConstantExpression constant =
         backend.constants.getConstantForVariable(field);
@@ -3314,7 +3358,7 @@
     if (getter.isDeferredLoaderGetter) {
       generateDeferredLoaderGet(node, getter);
     } else {
-      generateIsDeferredLoadedCheckIfNeeded(node);
+      generateIsDeferredLoadedCheckOfSend(node);
       pushInvokeStatic(node, getter, <HInstruction>[]);
     }
   }
@@ -3328,7 +3372,7 @@
 
   /// Generate a closurization of the static or top level [function].
   void generateStaticFunctionGet(ast.Send node, MethodElement function) {
-    generateIsDeferredLoadedCheckIfNeeded(node);
+    generateIsDeferredLoadedCheckOfSend(node);
     // TODO(5346): Try to avoid the need for calling [declaration] before
     // creating an [HStatic].
     push(new HStatic(function.declaration, backend.nonNullType));
@@ -3574,7 +3618,7 @@
       HInstruction runtimeType = addTypeVariableReference(type);
       Element helper = backend.getCheckSubtypeOfRuntimeType();
       List<HInstruction> inputs = <HInstruction>[expression, runtimeType];
-      pushInvokeStatic(null, helper, inputs, backend.boolType);
+      pushInvokeStatic(null, helper, inputs, typeMask: backend.boolType);
       HInstruction call = pop();
       return new HIs.variable(type, expression, call, backend.boolType);
     } else if (RuntimeTypes.hasTypeArguments(type)) {
@@ -3592,7 +3636,7 @@
                                                  isFieldName,
                                                  representations,
                                                  asFieldName];
-      pushInvokeStatic(node, helper, inputs, backend.boolType);
+      pushInvokeStatic(node, helper, inputs, typeMask: backend.boolType);
       HInstruction call = pop();
       return new HIs.compound(type, expression, call, backend.boolType);
     } else if (type.isMalformed) {
@@ -3827,7 +3871,7 @@
         compiler.internalError(node,
             'Isolate library and compiler mismatch.');
       }
-      pushInvokeStatic(null, element, [], backend.dynamicType);
+      pushInvokeStatic(null, element, [], typeMask: backend.dynamicType);
     }
   }
 
@@ -4038,7 +4082,7 @@
       }
       List<HInstruction> inputs = <HInstruction>[];
       addGenericSendArgumentsToList(link, inputs);
-      pushInvokeStatic(node, element, inputs, backend.dynamicType);
+      pushInvokeStatic(node, element, inputs, typeMask: backend.dynamicType);
     }
   }
 
@@ -4121,9 +4165,6 @@
       handleForeignRawFunctionRef(node, 'RAW_DART_FUNCTION_REF');
     } else if (name == 'JS_SET_CURRENT_ISOLATE') {
       handleForeignSetCurrentIsolate(node);
-    } else if (name == 'JS_OPERATOR_IS_PREFIX') {
-      // TODO(floitsch): this should be a JS_NAME.
-      stack.add(addConstantString(backend.namer.operatorIsPrefix));
     } else if (name == 'JS_OBJECT_CLASS_NAME') {
       // TODO(floitsch): this should be a JS_NAME.
       String name = backend.namer.runtimeTypeName(compiler.objectClass);
@@ -4248,7 +4289,7 @@
                       graph.addConstant(kindConstant, compiler),
                       argumentsInstruction,
                       argumentNamesInstruction],
-                      backend.dynamicType);
+                      typeMask: backend.dynamicType);
 
     var inputs = <HInstruction>[pop()];
     push(buildInvokeSuper(compiler.noSuchMethodSelector, element, inputs));
@@ -4498,11 +4539,11 @@
       pushInvokeStatic(null,
                        backend.getGetRuntimeTypeArgument(),
                        [target, substitutionName, index],
-                        backend.dynamicType);
+                       typeMask: backend.dynamicType);
     } else {
       pushInvokeStatic(null, backend.getGetTypeArgumentByIndex(),
           [target, index],
-          backend.dynamicType);
+          typeMask: backend.dynamicType);
     }
     return pop();
   }
@@ -4631,7 +4672,7 @@
         null,
         typeInfoSetterElement,
         <HInstruction>[newObject, typeInfo],
-        backend.dynamicType);
+        typeMask: backend.dynamicType);
 
     // The new object will now be referenced through the
     // `setRuntimeTypeInfo` call. We therefore set the type of that
@@ -4643,7 +4684,7 @@
 
   handleNewSend(ast.NewExpression node) {
     ast.Send send = node.send;
-    generateIsDeferredLoadedCheckIfNeeded(send);
+    generateIsDeferredLoadedCheckOfSend(send);
 
     bool isFixedList = false;
     bool isFixedListConstructorCall =
@@ -4708,6 +4749,19 @@
     }
 
     bool isRedirected = constructorDeclaration.isRedirectingFactory;
+    if (!constructorDeclaration.isCyclicRedirection) {
+      // Insert a check for every deferred redirection on the path to the
+      // final target.
+      ConstructorElement target = constructorDeclaration;
+      while (target.isRedirectingFactory) {
+        if (constructorDeclaration.redirectionDeferredPrefix != null) {
+          generateIsDeferredLoadedCheckIfNeeded(
+              target.redirectionDeferredPrefix,
+              node);
+        }
+        target = target.immediateRedirectionTarget;
+      }
+    }
     InterfaceType type = elements.getType(node);
     InterfaceType expectedType =
         constructorDeclaration.computeEffectiveTargetType(type);
@@ -4781,7 +4835,8 @@
       potentiallyAddTypeArguments(inputs, cls, expectedType);
 
       addInlinedInstantiation(expectedType);
-      pushInvokeStatic(node, constructor, inputs, elementType);
+      pushInvokeStatic(node, constructor, inputs,
+          typeMask: elementType, instanceType: expectedType);
       removeInlinedInstantiation(expectedType);
     }
     HInstruction newInstance = stack.last;
@@ -4901,7 +4956,7 @@
       ast.Send node,
       FunctionElement function,
       CallStructure callStructure) {
-    generateIsDeferredLoadedCheckIfNeeded(node);
+    generateIsDeferredLoadedCheckOfSend(node);
 
     List<HInstruction> inputs = makeStaticArgumentList(
         callStructure,
@@ -5116,7 +5171,7 @@
 
   /// Generate the constant value for a constant type literal.
   void generateConstantTypeLiteral(ast.Send node) {
-    generateIsDeferredLoadedCheckIfNeeded(node);
+    generateIsDeferredLoadedCheckOfSend(node);
     // TODO(karlklose): add type representation
     if (node.isCall) {
       // The node itself is not a constant but we register the selector (the
@@ -5135,7 +5190,7 @@
     pushInvokeStatic(node,
                      backend.getRuntimeTypeToString(),
                      [value],
-                     backend.stringType);
+                     typeMask: backend.stringType);
     pushInvokeStatic(node,
                      backend.getCreateRuntimeType(),
                      [pop()]);
@@ -5364,19 +5419,23 @@
   void pushInvokeStatic(ast.Node location,
                         Element element,
                         List<HInstruction> arguments,
-                        [TypeMask type]) {
-    if (tryInlineMethod(element, null, arguments, location)) {
+                        {TypeMask typeMask,
+                         InterfaceType instanceType}) {
+    if (tryInlineMethod(element, null, arguments, location,
+                        instanceType: instanceType)) {
       return;
     }
 
-    if (type == null) {
-      type = TypeMaskFactory.inferredReturnTypeForElement(element, compiler);
+    if (typeMask == null) {
+      typeMask =
+          TypeMaskFactory.inferredReturnTypeForElement(element, compiler);
     }
     bool targetCanThrow = !compiler.world.getCannotThrow(element);
     // TODO(5346): Try to avoid the need for calling [declaration] before
     // creating an [HInvokeStatic].
     HInvokeStatic instruction = new HInvokeStatic(
-        element.declaration, arguments, type, targetCanThrow: targetCanThrow);
+        element.declaration, arguments, typeMask,
+        targetCanThrow: targetCanThrow);
     if (!currentInlinedInstantiations.isEmpty) {
       instruction.instantiatedTypes = new List<DartType>.from(
           currentInlinedInstantiations);
@@ -5440,7 +5499,7 @@
 
   @override
   handleSendSet(ast.SendSet node) {
-    generateIsDeferredLoadedCheckIfNeeded(node);
+    generateIsDeferredLoadedCheckOfSend(node);
     Element element = elements[node];
     if (!Elements.isUnresolved(element) && element.impliesType) {
       ast.Identifier selector = node.selector;
@@ -6304,7 +6363,8 @@
         mapType.intersection(returnTypeMask, compiler.world);
 
     addInlinedInstantiation(expectedType);
-    pushInvokeStatic(node, constructor, inputs, instructionType);
+    pushInvokeStatic(node, constructor, inputs,
+        typeMask: instructionType, instanceType: expectedType);
     removeInlinedInstantiation(expectedType);
   }
 
@@ -6996,7 +7056,8 @@
    */
   void enterInlinedMethod(FunctionElement function,
                           ast.Node _,
-                          List<HInstruction> compiledArguments) {
+                          List<HInstruction> compiledArguments,
+                          {InterfaceType instanceType}) {
     TypesInferrer inferrer = compiler.typesTask.typesInferrer;
     AstInliningState state = new AstInliningState(
         function, returnLocal, returnType, elements, stack, localsHandler,
@@ -7007,7 +7068,8 @@
     // Setting up the state of the (AST) builder is performed even when the
     // inlined function is in IR, because the irInliner uses the [returnElement]
     // of the AST builder.
-    setupStateForInlining(function, compiledArguments);
+    setupStateForInlining(
+        function, compiledArguments, instanceType: instanceType);
   }
 
   void leaveInlinedMethod() {
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 75bab2a..cd772ef 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -2332,6 +2332,13 @@
         checkFixedArray(input);
       }
       return;
+    } else if (element == backend.jsUnmodifiableArrayClass) {
+      if (negative) {
+        checkMutableArray(input);
+      } else {
+        checkImmutableArray(input);
+      }
+      return;
     }
     if (interceptor != null) {
       checkTypeViaProperty(interceptor, type, negative);
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index e642ede..5750445 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -900,7 +900,9 @@
     JavaScriptBackend backend = compiler.backend;
     return instructionType.contains(backend.jsArrayClass, classWorld)
         || instructionType.contains(backend.jsFixedArrayClass, classWorld)
-        || instructionType.contains(backend.jsExtendableArrayClass, classWorld);
+        || instructionType.contains(backend.jsExtendableArrayClass, classWorld)
+        || instructionType.contains(
+            backend.jsUnmodifiableArrayClass, classWorld);
   }
 
   bool isIndexablePrimitive(Compiler compiler) {
@@ -912,7 +914,9 @@
 
   bool isFixedArray(Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
-    return instructionType.containsOnly(backend.jsFixedArrayClass);
+    // TODO(sra): Recognize the union of these types as well.
+    return instructionType.containsOnly(backend.jsFixedArrayClass)
+        || instructionType.containsOnly(backend.jsUnmodifiableArrayClass);
   }
 
   bool isExtendableArray(Compiler compiler) {
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 752019a..1529104 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -99,15 +99,22 @@
   }
 }
 
+/// Returns `true` if [mask] represents only types that have a length that
+/// cannot change.  The current implementation is conservative for the purpose
+/// of identifying gvn-able lengths and mis-identifies some unions of fixed
+/// length indexables (see TODO) as not fixed length.
 bool isFixedLength(mask, Compiler compiler) {
   ClassWorld classWorld = compiler.world;
   JavaScriptBackend backend = compiler.backend;
   if (mask.isContainer && mask.length != null) {
     // A container on which we have inferred the length.
     return true;
-  } else if (mask.containsOnly(backend.jsFixedArrayClass)
-             || mask.containsOnlyString(classWorld)
-             || backend.isTypedArray(mask)) {
+  }
+  // TODO(sra): Recognize any combination of fixed length indexables.
+  if (mask.containsOnly(backend.jsFixedArrayClass) ||
+      mask.containsOnly(backend.jsUnmodifiableArrayClass) ||
+      mask.containsOnlyString(classWorld) ||
+      backend.isTypedArray(mask)) {
     return true;
   }
   return false;
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart b/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart
index a45b9f2..2a679cf 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart
@@ -314,4 +314,9 @@
   Expression visitVariableUse(VariableUse node) {
     return node;
   }
+
+  Expression visitCreateInvocationMirror(CreateInvocationMirror node) {
+    rewriteList(node.arguments);
+    return node;
+  }
 }
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
index 766d825..3bef3f0 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
@@ -270,6 +270,7 @@
     return exp is Constant ||
            exp is This ||
            exp is ReifyTypeVar ||
+           exp is CreateInvocationMirror ||
            exp is InvokeStatic && exp.isEffectivelyConstant ||
            exp is VariableUse && constantEnvironment.containsKey(exp.variable);
   }
@@ -613,7 +614,6 @@
     return node;
   }
 
-  @override
   Expression visitTypeExpression(TypeExpression node) {
     for (int i = node.arguments.length - 1; i >= 0; --i) {
       node.arguments[i] = visitExpression(node.arguments[i]);
@@ -621,6 +621,13 @@
     return node;
   }
 
+  Expression visitCreateInvocationMirror(CreateInvocationMirror node) {
+    for (int i = node.arguments.length - 1; i >= 0; --i) {
+      node.arguments[i] = visitExpression(node.arguments[i]);
+    }
+    return node;
+  }
+
   /// If [s] and [t] are similar statements we extract their subexpressions
   /// and returns a new statement of the same type using expressions combined
   /// with the [combine] callback. For example:
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
index 5a61847..127ae91 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -329,6 +329,9 @@
   visitCreateInstance(cps_ir.CreateInstance node) => unexpectedNode(node);
   visitGetField(cps_ir.GetField node) => unexpectedNode(node);
   visitCreateBox(cps_ir.CreateBox node) => unexpectedNode(node);
+  visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) {
+    return unexpectedNode(node);
+  }
 
   // Executable definitions are not visited directly.  They have 'build'
   // functions as entry points.
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
index 5c86d83..432c6c7 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
@@ -902,6 +902,21 @@
   }
 }
 
+class CreateInvocationMirror extends Expression implements JsSpecificNode {
+  final Selector selector;
+  final List<Expression> arguments;
+
+  CreateInvocationMirror(this.selector, this.arguments);
+
+  accept(ExpressionVisitor visitor) {
+    return visitor.visitCreateInvocationMirror(this);
+  }
+
+  accept1(ExpressionVisitor1 visitor, arg) {
+    return visitor.visitCreateInvocationMirror(this, arg);
+  }
+}
+
 /// Denotes the internal representation of [dartType], where all type variables
 /// are replaced by the values in [arguments].
 /// (See documentation on the TypeExpression CPS node for more details.)
@@ -946,6 +961,7 @@
   E visitReadTypeVariable(ReadTypeVariable node);
   E visitTypeExpression(TypeExpression node);
   E visitSetField(SetField node);
+  E visitCreateInvocationMirror(CreateInvocationMirror node);
 }
 
 abstract class ExpressionVisitor1<E, A> {
@@ -974,6 +990,7 @@
   E visitReadTypeVariable(ReadTypeVariable node, A arg);
   E visitTypeExpression(TypeExpression node, A arg);
   E visitSetField(SetField node, A arg);
+  E visitCreateInvocationMirror(CreateInvocationMirror node, A arg);
 }
 
 abstract class StatementVisitor<S> {
@@ -1199,6 +1216,10 @@
   visitTypeExpression(TypeExpression node) {
     node.arguments.forEach(visitExpression);
   }
+
+  visitCreateInvocationMirror(CreateInvocationMirror node) {
+    node.arguments.forEach(visitExpression);
+  }
 }
 
 abstract class Transformer implements ExpressionVisitor<Expression>,
@@ -1395,4 +1416,9 @@
     _replaceExpressions(node.arguments);
     return node;
   }
+
+  visitCreateInvocationMirror(CreateInvocationMirror node) {
+    _replaceExpressions(node.arguments);
+    return node;
+  }
 }
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
index 703885e..3a17fc9 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
@@ -360,17 +360,7 @@
   }
 
   String formatArguments(Invoke node) {
-    List<String> args = new List<String>();
-    int positionalArgumentCount = node.selector.positionalArgumentCount;
-    for (int i = 0; i < positionalArgumentCount; ++i) {
-      args.add(node.arguments[i].accept(this));
-    }
-    for (int i = 0; i < node.selector.namedArgumentCount; ++i) {
-      String name = node.selector.namedArguments[i];
-      String arg = node.arguments[positionalArgumentCount + i].accept(this);
-      args.add("$name: $arg");
-    }
-    return args.join(', ');
+    return node.arguments.map(visitExpression).join(', ');
   }
 
   String visitInvokeStatic(InvokeStatic node) {
@@ -535,6 +525,12 @@
   String visitTypeExpression(TypeExpression node) {
     return node.dartType.toString();
   }
+
+  @override
+  String visitCreateInvocationMirror(CreateInvocationMirror node) {
+    String args = node.arguments.map(visitExpression).join(', ');
+    return 'CreateInvocationMirror(${node.selector.name}, $args)';
+  }
 }
 
 /**
diff --git a/pkg/compiler/lib/src/use_unused_api.dart b/pkg/compiler/lib/src/use_unused_api.dart
index dd54759..34e5f04 100644
--- a/pkg/compiler/lib/src/use_unused_api.dart
+++ b/pkg/compiler/lib/src/use_unused_api.dart
@@ -12,6 +12,7 @@
 
 import 'colors.dart' as colors;
 import 'constants/constant_system.dart' as constants;
+import 'constants/expressions.dart' as constants;
 import 'constants/values.dart' as constants;
 import 'cps_ir/cps_ir_builder.dart' as ir_builder;
 import 'cps_ir/cps_ir_builder_task.dart' as ir_builder;
@@ -51,7 +52,7 @@
   useApi();
   dart2js.main(arguments);
   dart2jslib.isPublicName(null);
-  useConstant(null, null);
+  useConstant(null, null, null, null, null);
   useNode(null);
   useUtil(null);
   useSetlet(null);
@@ -84,9 +85,15 @@
 }
 
 void useConstant(constants.ConstantValue constant,
-                 constants.ConstantSystem cs) {
+                 constants.ConstantExpression expression,
+                 constants.ConstructedConstantExpression constructedConstant,
+                 constants.ConstantSystem cs,
+                 constants.Environment env) {
   constant.isObject;
   cs.isBool(constant);
+  constructedConstant.computeInstanceType();
+  constructedConstant.computeInstanceFields();
+  expression.evaluate(null, null);
 }
 
 void useNode(tree.Node node) {
diff --git a/pkg/compiler/lib/src/warnings.dart b/pkg/compiler/lib/src/warnings.dart
index 1b1272ee..8977b5d 100644
--- a/pkg/compiler/lib/src/warnings.dart
+++ b/pkg/compiler/lib/src/warnings.dart
@@ -1560,6 +1560,17 @@
 main() {}
 """]);
 
+  static const MessageKind INVALID_URI = const MessageKind(
+      "'#{uri}' is not a valid URI.",
+      howToFix: DONT_KNOW_HOW_TO_FIX,
+      examples: const [
+        """
+// can't have a '[' in a URI
+import '../../Udyn[mic ils/expect.dart';
+
+main() {}
+"""]);
+
   static const MessageKind READ_SCRIPT_ERROR = const MessageKind(
       "Can't read '#{uri}' (#{exception}).",
       // Don't know how to fix since the underlying error is unknown.
diff --git a/pkg/docgen/lib/src/models/model_helpers.dart b/pkg/docgen/lib/src/models/model_helpers.dart
index 816d4d3..70f158d 100644
--- a/pkg/docgen/lib/src/models/model_helpers.dart
+++ b/pkg/docgen/lib/src/models/model_helpers.dart
@@ -79,7 +79,7 @@
 }
 
 class AnnotationCreator
-    extends ConstantExpressionVisitor<AnnotationInfo, Annotation> {
+    extends ConstantExpressionVisitor<Annotation, AnnotationInfo> {
 
   const AnnotationCreator();
 
@@ -144,12 +144,6 @@
   }
 
   @override
-  Annotation visitPrimitive(PrimitiveConstantExpression exp,
-                            AnnotationInfo context) {
-    return null;
-  }
-
-  @override
   Annotation visitSymbol(SymbolConstantExpression exp,
                          AnnotationInfo context) {
     return null;
@@ -174,6 +168,67 @@
   }
 
   @override
+  Annotation visitBool(BoolConstantExpression exp,
+                       AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp,
+                                      AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitDouble(DoubleConstantExpression exp,
+                         AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitInt(IntConstantExpression exp,
+                      AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp,
+                                     AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitNamed(NamedArgumentReference exp,
+                        AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitNull(NullConstantExpression exp,
+                       AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitPositional(PositionalArgumentReference exp,
+                             AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitString(StringConstantExpression exp,
+                         AnnotationInfo context) {
+    return null;
+  }
+
+  @override
+  Annotation visitStringFromEnvironment(
+      StringFromEnvironmentConstantExpression exp,
+      AnnotationInfo context) {
+    return null;
+  }
+
+  @override
   Annotation visitDeferred(DeferredConstantExpression exp,
                            AnnotationInfo context) {
     return exp.expression.accept(this, context);
diff --git a/pkg/docgen/pubspec.yaml b/pkg/docgen/pubspec.yaml
index d3c1b29..ef3b0f9 100644
--- a/pkg/docgen/pubspec.yaml
+++ b/pkg/docgen/pubspec.yaml
@@ -4,8 +4,8 @@
 homepage: https://www.dartlang.org/
 dependencies:
   args: '>=0.9.0 <0.14.0'
-  logging: '>=0.9.0 <0.10.0'
-  markdown: 0.7.0
+  logging: '>=0.9.0 <0.12.0'
+  markdown: 0.7.1+2
   path: '>=0.9.0 <2.0.0'
   yaml: '>=0.9.0 <3.0.0'
 dev_dependencies:
diff --git a/pkg/js_ast/lib/src/builder.dart b/pkg/js_ast/lib/src/builder.dart
index 12f204e..8603b20 100644
--- a/pkg/js_ast/lib/src/builder.dart
+++ b/pkg/js_ast/lib/src/builder.dart
@@ -329,6 +329,8 @@
   /// [escapedString].
   LiteralString string(String value) => new LiteralString('"$value"');
 
+  LiteralString name(String name) => new LiteralString(name);
+
   LiteralNumber number(num value) => new LiteralNumber('$value');
 
   LiteralBool boolean(bool value) => new LiteralBool(value);
diff --git a/pkg/pkg.status b/pkg/pkg.status
index afbb77b..9ed73c8 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -92,9 +92,6 @@
 collection/test/unmodifiable_collection_test: SkipSlow # Times out. Issue 22050
 async/test/stream_zip_test: SkipSlow # Times out. Issue 22050
 
-[$compiler == dart2dart]
-*: Skip
-
 [ $runtime == ie10 ]
 analyzer/test/generated/java_core_test: Pass, Timeout # Issue 19747
 typed_data/test/typed_buffers_test/none: Fail # Issue   17607 (I put this here explicitly, since this is not the same as on ie9)
@@ -146,504 +143,51 @@
 
 [ $compiler == dart2js && $cps_ir ]
 analysis_server/tool/spec/check_all_test: Crash # unsupported element kind: context:field
-analyzer2dart/test/driver_test: Crash # cannot compile methods that need interceptor calling convention.
-analyzer2dart/test/end2end_test: Crash # Please triage this failure.
-analyzer2dart/test/identifier_semantics_test: Crash # cannot compile methods that need interceptor calling convention.
-analyzer2dart/test/sexpr_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-analyzer2dart/test/tree_shaker_test: Crash # cannot compile methods that need interceptor calling convention.
-analyzer/test/cancelable_future_test: Crash #  Unhandled node
-analyzer/test/enum_test: Crash #  Unhandled node
-analyzer/test/file_system/memory_file_system_test: Crash #  Unhandled node
-analyzer/test/file_system/physical_resource_provider_test: Crash #  Unhandled node
-analyzer/test/file_system/resource_uri_resolver_test: Crash #  Unhandled node
-analyzer/test/generated/all_the_rest_test: Crash #  Unhandled node
-analyzer/test/generated/ast_test: Crash #  Unhandled node
-analyzer/test/generated/compile_time_error_code_test: Crash #  Unhandled node
-analyzer/test/generated/element_test: Crash #  Unhandled node
-analyzer/test/generated/incremental_resolver_test: Crash #  Unhandled node
-analyzer/test/generated/incremental_scanner_test: Crash #  Unhandled node
+analyzer/test/cancelable_future_test: Crash #  try/finally
+analyzer/test/enum_test: Crash #  try/finally
+analyzer/test/file_system/memory_file_system_test: Crash #  try/finally
+analyzer/test/file_system/physical_resource_provider_test: Crash #  try/finally
+analyzer/test/file_system/resource_uri_resolver_test: Crash #  try/finally
+analyzer/test/generated/all_the_rest_test: Crash #  try/finally
+analyzer/test/generated/ast_test: Crash #  try/finally
+analyzer/test/generated/compile_time_error_code_test: Crash #  try/finally
+analyzer/test/generated/element_test: Crash #  try/finally
+analyzer/test/generated/incremental_resolver_test: Crash #  try/finally
+analyzer/test/generated/incremental_scanner_test: Crash #  try/finally
 analyzer/test/generated/java_core_test: Crash #  try/finally
 analyzer/test/generated/java_io_test: Crash #  try/finally
-analyzer/test/generated/non_error_resolver_test: Crash #  Unhandled node
-analyzer/test/generated/parser_test: Crash #  Unhandled node
-analyzer/test/generated/resolver_test: Crash #  Unhandled node
-analyzer/test/generated/scanner_test: Crash #  Unhandled node
-analyzer/test/generated/static_type_warning_code_test: Crash #  Unhandled node
-analyzer/test/generated/static_warning_code_test: Crash #  Unhandled node
-analyzer/test/generated/utilities_test: Crash #  Unhandled node
+analyzer/test/generated/non_error_resolver_test: Crash #  try/finally
+analyzer/test/generated/parser_test: Crash #  try/finally
+analyzer/test/generated/resolver_test: Crash #  try/finally
+analyzer/test/generated/scanner_test: Crash #  try/finally
+analyzer/test/generated/static_type_warning_code_test: Crash #  try/finally
+analyzer/test/generated/static_warning_code_test: Crash #  try/finally
+analyzer/test/generated/utilities_test: Crash #  try/finally
 analyzer/test/instrumentation/instrumentation_test: Crash #  try/finally
-analyzer/test/parse_compilation_unit_test: Crash # cannot compile methods that need interceptor calling convention.
-analyzer/test/plugin/plugin_impl_test: Crash #  try/finally
+analyzer/test/parse_compilation_unit_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 analyzer/test/source/package_map_provider_test: Crash #  try/finally
-analyzer/test/source/package_map_resolver_test: Crash #  Unhandled node
-analyzer/test/src/context/cache_test: Crash #  Unhandled node
+analyzer/test/source/package_map_resolver_test: Crash #  try/finally
+analyzer/test/src/context/cache_test: Crash #  try/finally
 analyzer/test/src/context/context_test: Crash #  try/finally
-analyzer/test/src/task/dart_test: Crash #  Unhandled node
-analyzer/test/src/task/driver_test: Crash #  Unhandled node
-analyzer/test/src/task/general_test: Crash #  Unhandled node
-analyzer/test/src/task/inputs_test: Crash #  Unhandled node
-analyzer/test/src/task/manager_test: Crash #  Unhandled node
-analyzer/test/src/task/model_test: Crash #  Unhandled node
-analyzer/test/src/util/asserts_test: Crash #  Unhandled node
-analyzer/test/src/util/lru_map_test: Crash #  Unhandled node
+analyzer/test/src/task/dart_test: Crash #  try/finally
+analyzer/test/src/task/dart_work_manager_test: Crash #  try/finally
+analyzer/test/src/task/driver_test: Crash #  try/finally
+analyzer/test/src/task/general_test: Crash #  try/finally
+analyzer/test/src/task/incremental_element_builder_test: Crash #  try/finally
+analyzer/test/src/task/inputs_test: Crash #  try/finally
+analyzer/test/src/task/manager_test: Crash #  try/finally
+analyzer/test/src/task/model_test: Crash #  try/finally
+analyzer/test/src/util/asserts_test: Crash #  try/finally
+analyzer/test/src/util/lru_map_test: Crash #  try/finally
+analyzer2dart/test/driver_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+analyzer2dart/test/end2end_test: Crash # (unittester): handleStaticFunctionGet: function(unittester)
+analyzer2dart/test/identifier_semantics_test: Crash # unsupported element kind: NOT_SDK:field
+analyzer2dart/test/sexpr_test: Crash # (unittester): handleStaticFunctionGet: function(unittester)
+analyzer2dart/test/tree_shaker_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 fixnum/test/int_32_test: Crash #  try/finally
 fixnum/test/int_64_test: Crash #  try/finally
-_internal/lib/pub/test/ascii_tree_test: Crash # cannot compile methods that need interceptor calling convention.
-_internal/lib/pub/test/barback/all_includes_all_default_directories_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/directory_args_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/fails_if_args_with_all_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/fails_if_dir_arg_does_not_exist_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/fails_if_dir_outside_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/fails_if_no_default_dirs_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/fails_on_all_with_no_buildable_directories_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/fails_on_disallowed_directories_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/fails_on_overlapping_directories_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/barback/subdirectories_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/allows_arbitrary_modes_test: Crash #  Unhandled node
-_internal/lib/pub/test/build/can_specify_output_directory_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/cleans_entire_build_directory_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/copies_browser_js_next_to_entrypoints_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/copies_browser_js_with_dependency_override_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/copies_browser_js_with_dev_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/copies_non_dart_files_to_build_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/defaults_to_release_mode_test: Crash #  Unhandled node
-_internal/lib/pub/test/build/handles_long_paths_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/includes_assets_from_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/includes_dart_files_from_dependencies_in_debug_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/includes_dart_files_in_debug_mode_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/outputs_error_to_json_test: Crash #  Unhandled node
-_internal/lib/pub/test/build/outputs_results_to_json_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/build/preserves_htaccess_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/adds_latest_matching_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/adds_latest_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/all_adds_all_matching_versions_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/all_with_some_versions_present_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/already_cached_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/bad_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/missing_package_arg_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/no_matching_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/package_not_found_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/add/unexpected_arguments_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/list_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/empty_cache_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/handles_corrupted_binstub_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/handles_corrupted_global_lockfile_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/handles_failure_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/handles_orphaned_binstub_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/recompiles_snapshots_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/reinstalls_git_packages_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/reinstalls_hosted_packages_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/cache/repair/updates_binstubs_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/allows_import_in_dart_code_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/compiles_entrypoints_in_root_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/compiles_generated_dart_file_test: Crash #  Unhandled node
-_internal/lib/pub/test/dart2js/compiles_generated_file_from_dependency_outside_web_test: Crash #  Unhandled node
-_internal/lib/pub/test/dart2js/compiles_generated_file_from_dependency_test: Crash #  Unhandled node
-_internal/lib/pub/test/dart2js/compiles_imported_generated_file_test: Crash #  Unhandled node
-_internal/lib/pub/test/dart2js/converts_isolate_entrypoint_in_web_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/does_not_compile_if_disabled_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/does_not_compile_until_its_output_is_requested_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/does_not_support_invalid_command_line_options_type_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/does_not_support_invalid_environment_type_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/does_not_support_invalid_option_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/ignores_entrypoint_in_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/ignores_entrypoints_in_lib_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/ignores_non_entrypoint_dart_files_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/includes_source_maps_if_sourceMaps_true_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/includes_source_maps_in_debug_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/minifies_in_release_mode_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/minify_configuration_overrides_mode_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/omits_source_map_if_sourceMaps_false_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/omits_source_map_in_release_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/outputs_deferred_libraries_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/passes_along_environment_constants_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/reports_dart_parse_errors_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/source_maps_include_core_libs_in_subdirectory_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/source_maps_include_core_libs_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/supports_configuration_with_build_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/supports_valid_options_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dart2js/unminified_in_nonrelease_mode_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dependency_computer/conservative_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dependency_computer/cycle_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dependency_computer/dev_transformers_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dependency_computer/error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dependency_computer/import_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dependency_computer/no_dependencies_test: Crash # (throw new StateError("Unexpected call to wrapFuture with no current " "schedule.")): Unhandled node
-_internal/lib/pub/test/dependency_computer/transformers_needed_by_library_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dependency_override_test: Crash #  try/finally
-_internal/lib/pub/test/deps_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/dev_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/downgrade/does_not_show_other_versions_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/downgrade/doesnt_change_git_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/downgrade/dry_run_does_not_apply_changes_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/downgrade/unlock_dependers_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/downgrade/unlock_if_necessary_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/error_group_test: Crash #  try/finally
-_internal/lib/pub/test/get/broken_symlink_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/cache_transformed_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/dry_run_does_not_apply_changes_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_and_upgrade_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_branch_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_revision_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_transitive_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_twice_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_unfetched_revision_of_cached_repo_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/check_out_with_trailing_slash_test: Crash #  try/finally
-_internal/lib/pub/test/get/git/dependency_name_match_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/different_repo_name_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/doesnt_fetch_if_nothing_changes_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/locked_revision_without_repo_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/lock_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/require_pubspec_name_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/require_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/stay_locked_if_compatible_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/git/unlock_if_incompatible_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/avoid_network_requests_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/cached_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/does_no_network_requests_when_possible_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/do_not_upgrade_on_removed_constraints_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/gets_a_package_with_busted_dev_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/get_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/get_transitive_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/resolve_constraints_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/stay_locked_if_compatible_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/stay_locked_if_new_is_satisfied_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/stay_locked_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/unlock_if_incompatible_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/unlock_if_new_is_unsatisfied_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/hosted/unlock_if_version_doesnt_exist_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/absolute_path_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/absolute_symlink_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/empty_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/nonexistent_dir_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/no_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/path_is_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/relative_path_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/relative_symlink_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/shared_dependency_symlink_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/path/shared_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/relative_symlink_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/get/switch_source_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/activate_git_after_hosted_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/activate_hosted_after_git_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/activate_hosted_after_path_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/activate_path_after_hosted_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/bad_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/cached_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/constraint_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/constraint_with_path_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/different_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/doesnt_snapshot_path_executables_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/empty_constraint_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/git_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/ignores_active_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/installs_dependencies_for_git_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/installs_dependencies_for_path_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/installs_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/missing_git_repo_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/missing_package_arg_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/outdated_binstub_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/path_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/reactivating_git_upgrades_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/removes_old_lockfile_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/snapshots_git_executables_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/snapshots_hosted_executables_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/supports_version_solver_backtracking_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/uncached_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/unexpected_arguments_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/activate/unknown_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/binstub_runs_executable_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/binstub_runs_global_run_if_no_snapshot_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/binstub_runs_precompiled_snapshot_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/creates_executables_in_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/does_not_warn_if_no_executables_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/does_not_warn_if_on_path_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/explicit_and_no_executables_options_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/explicit_executables_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/missing_script_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/name_collision_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/name_collision_with_overwrite_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/no_executables_flag_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/outdated_binstub_runs_pub_global_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/outdated_snapshot_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/path_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/reactivate_removes_old_executables_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/removes_even_if_not_in_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/removes_when_deactivated_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/unknown_explicit_executable_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/binstubs/warns_if_not_on_path_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/deactivate_and_reactivate_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/git_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/hosted_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/missing_package_arg_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/path_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/removes_precompiled_snapshots_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/unexpected_arguments_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/deactivate/unknown_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/list_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/errors_if_outside_bin_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/implicit_executable_name_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/missing_executable_arg_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/missing_path_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/mode_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/nonexistent_script_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/recompiles_if_sdk_is_out_of_date_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/reflects_changes_to_local_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/runs_git_script_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/runs_path_script_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/runs_script_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/runs_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/global/run/unknown_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/global/run/uses_old_lockfile_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/hosted/fail_gracefully_on_missing_package_test: Crash #  try/finally
-_internal/lib/pub/test/hosted/fail_gracefully_on_url_resolve_test: Crash #  try/finally
-_internal/lib/pub/test/hosted/offline_test: Crash #  try/finally
-_internal/lib/pub/test/hosted/remove_removed_dependency_test: Crash #  try/finally
-_internal/lib/pub/test/hosted/remove_removed_transitive_dependency_test: Crash #  try/finally
-_internal/lib/pub/test/hosted/version_negotiation_test: Crash #  try/finally
-_internal/lib/pub/test/implicit_barback_dependency_test: Crash #  "on T" catch block
-_internal/lib/pub/test/implicit_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/io_test: Crash #  try/finally
-_internal/lib/pub/test/lish/archives_and_uploads_a_package_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/cloud_storage_upload_doesnt_redirect_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/cloud_storage_upload_provides_an_error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/does_not_publish_if_private_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/does_not_publish_if_private_with_server_arg_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/force_cannot_be_combined_with_dry_run_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/force_does_not_publish_if_private_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/force_does_not_publish_if_there_are_errors_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/force_publishes_if_tests_are_no_warnings_or_errors_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/force_publishes_if_there_are_warnings_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/many_files_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/package_creation_provides_a_malformed_error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/package_creation_provides_a_malformed_success_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/package_creation_provides_an_error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/package_creation_provides_invalid_json_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/package_validation_has_an_error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/package_validation_has_a_warning_and_continues_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/package_validation_has_a_warning_and_is_canceled_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/preview_errors_if_private_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/preview_package_validation_has_a_warning_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/preview_package_validation_has_no_warnings_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/server_arg_does_not_override_private_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/server_arg_overrides_publish_to_url_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/upload_form_fields_has_a_non_string_value_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/upload_form_fields_is_not_a_map_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/upload_form_is_missing_fields_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/upload_form_is_missing_url_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/upload_form_provides_an_error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/upload_form_provides_invalid_json_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/upload_form_url_is_not_a_string_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lish/uses_publish_to_url_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/list_package_dirs/ignores_updated_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/list_package_dirs/includes_dev_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/list_package_dirs/lists_dependency_directories_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/list_package_dirs/lockfile_error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/list_package_dirs/missing_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/list_package_dirs/no_lockfile_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/list_package_dirs/pubspec_error_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/lock_file_test: Crash #  try/finally
-_internal/lib/pub/test/no_package_symlinks_test: Crash #  try/finally
-_internal/lib/pub/test/oauth2/with_a_malformed_credentials_authenticates_again_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/oauth2/with_an_expired_credentials_refreshes_and_saves_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/oauth2/with_an_expired_credentials_without_a_refresh_token_authenticates_again_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/oauth2/with_a_pre_existing_credentials_does_not_authenticate_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/oauth2/with_a_server_rejected_refresh_token_authenticates_again_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/oauth2/with_no_credentials_authenticates_and_saves_credentials_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/oauth2/with_server_rejected_credentials_authenticates_again_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/package_list_files_test: Crash #  try/finally
-_internal/lib/pub/test/preprocess_test: Crash #  try/finally
-_internal/lib/pub/test/pub_get_and_upgrade_test: Crash #  try/finally
-_internal/lib/pub/test/pubspec_test: Crash #  try/finally
-_internal/lib/pub/test/pub_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/pub_uploader_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/real_version_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/allows_dart_extension_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/app_can_read_from_stdin_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/displays_transformer_logs_test: Crash #  Unhandled node
-_internal/lib/pub/test/run/does_not_run_on_transformer_error_test: Crash #  Unhandled node
-_internal/lib/pub/test/run/doesnt_load_an_unnecessary_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/run/errors_if_no_executable_is_given_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/errors_if_only_transitive_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/errors_if_path_in_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/forwards_signal_posix_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/ignores_explicit_dart2js_transformer_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/includes_parent_directories_of_entrypoint_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/mode_test: Crash #  Unhandled node
-_internal/lib/pub/test/run/nonexistent_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/nonexistent_script_in_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/nonexistent_script_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/passes_along_arguments_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_a_generated_script_test: Crash #  Unhandled node
-_internal/lib/pub/test/run/runs_app_in_directory_in_entrypoint_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_app_in_entrypoint_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_app_in_entrypoint_with_warning_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_from_a_dependency_override_after_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_named_app_in_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_named_app_in_dev_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_shorthand_app_in_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_the_script_in_checked_mode_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/run/runs_transformer_in_entrypoint_test: Crash #  Unhandled node
-_internal/lib/pub/test/serve/404_page_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/allows_arbitrary_modes_test: Crash #  Unhandled node
-_internal/lib/pub/test/serve/defaults_to_debug_mode_test: Crash #  Unhandled node
-_internal/lib/pub/test/serve/does_not_crash_if_an_unused_dart_file_has_a_syntax_error_test: Crash #  Unhandled node
-_internal/lib/pub/test/serve/does_not_get_first_if_a_dependency_is_removed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/does_not_get_first_if_git_url_did_not_change_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/does_not_get_first_if_locked_matches_override_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/does_not_get_first_if_locked_version_matches_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/does_not_serve_dart_in_release_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/does_not_serve_hidden_assets_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/does_not_watch_compiled_js_files_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_dependency_added_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_dependency_is_not_installed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_dependency_version_changed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_dev_dependency_changed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_git_ref_changed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_git_url_changed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_no_lockfile_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_path_dependency_changed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_source_changed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/gets_first_if_transitive_dependency_is_not_installed_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/invalid_method_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/invalid_urls_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/missing_asset_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/missing_dependency_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/missing_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/native_watch_added_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/native_watch_modified_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/native_watch_removed_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/native_watch_replaced_file_test: Crash #  Unhandled node
-_internal/lib/pub/test/serve/serve_from_app_lib_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/serve_from_app_web_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/serve_from_dependency_lib_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/serves_file_with_space_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/serves_index_html_for_directories_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/serves_web_and_test_dirs_by_default_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/supports_cross_origin_header_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/supports_user_defined_declaring_transformers_test: Crash #  Unhandled node
-_internal/lib/pub/test/serve/supports_user_defined_lazy_transformers_test: Crash #  Unhandled node
-_internal/lib/pub/test/serve/unknown_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/uses_appropriate_mime_types_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/watch_added_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/watch_modified_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/watch_removed_file_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/exit_on_close_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/path_to_urls_errors_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/path_to_urls_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/path_to_urls_with_line_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/serve_directory_already_served_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/serve_directory_and_immediately_request_asset_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/serve_directory_and_immediately_serve_again_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/serve_directory_and_immediately_unserve_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/serve_directory_arg_errors_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/serve_directory_overlapping_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/serve_directory_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/unserve_directory_arg_errors_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/unserve_directory_not_served_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/unserve_directory_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/url_to_asset_id_errors_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/url_to_asset_id_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/serve/web_socket/url_to_asset_id_with_line_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/creates_a_snapshot_for_immediate_and_transitive_dep_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/creates_a_snapshot_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/doesnt_load_irrelevant_transformers_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/doesnt_resnapshot_when_a_dependency_is_unchanged_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/doesnt_snapshot_an_entrypoint_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/doesnt_snapshot_path_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/doesnt_snapshot_transitive_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/prints_errors_for_broken_snapshots_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/recompiles_if_the_sdk_is_out_of_date_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/snapshots_transformed_code_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/updates_snapshot_for_git_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/upgrades_snapshot_for_dependency_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/snapshot/upgrades_snapshot_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/transcript_test: Crash # cannot compile methods that need interceptor calling convention.
-_internal/lib/pub/test/transformer/asset_not_found_exceptions_are_detectable_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/a_transformer_rejects_its_config_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/cache_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/transformer/can_log_messages_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/can_use_consume_primary_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/can_use_has_input_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/can_use_read_input_as_string_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/can_use_read_input_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/configuration/configuration_defaults_to_empty_map_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/configuration/passes_configuration_to_a_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/configuration/with_configuration_only_instantiates_configurable_transformers_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/dart2js_transformer_before_another_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/does_not_run_a_transform_on_an_input_in_another_package_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/exclude_asset_glob_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/exclude_asset_list_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/exclude_asset_prefix_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/exclude_asset_string_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/include_asset_glob_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/include_asset_list_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/include_asset_prefix_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/include_asset_string_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/includes_before_excludes_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/works_on_aggregate_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/works_on_dart2js_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/works_on_lazy_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/exclusion/works_on_transformer_group_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/fails_to_load_a_file_that_defines_no_transforms_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/fails_to_load_a_non_existent_transform_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/fails_to_load_an_unconfigurable_transformer_when_config_is_passed_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/fails_to_load_a_pubspec_with_reserved_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/fails_to_load_a_transform_from_a_non_dependency_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/fails_to_load_a_transform_with_an_import_error_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/fails_to_load_a_transform_with_a_syntax_error_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/loads_a_declaring_aggregate_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/loads_a_diamond_transformer_dependency_graph_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/loads_a_lazy_aggregate_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/loads_an_aggregate_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/loads_a_transformer_defined_in_an_exported_library_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/loads_different_configurations_from_the_same_isolate_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/multiple_transformers_reject_their_config_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/prefers_transformer_to_library_name_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/prints_a_transform_error_in_apply_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/prints_a_transform_interface_error_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/runs_a_local_transform_on_the_application_package_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/runs_a_third_party_transformer_on_a_local_transformer_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/runs_a_third_party_transform_on_the_application_package_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/runs_a_transformer_group_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/runs_a_transformer_on_a_dependency_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/runs_one_third_party_transformer_on_another_test: Crash #  Unhandled node
-_internal/lib/pub/test/transformer/supports_a_transformer_that_doesnt_return_futures_test: Crash #  Unhandled node
-_internal/lib/pub/test/unknown_source_test: Crash #  try/finally
-_internal/lib/pub/test/upgrade/dry_run_does_not_apply_changes_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/git/do_not_upgrade_if_unneeded_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/git/upgrade_locked_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/git/upgrade_one_locked_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/git/upgrade_to_incompatible_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/git/upgrade_to_nonexistent_pubspec_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/hosted/unlock_dependers_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/hosted/unlock_if_necessary_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/hosted/upgrade_removed_constraints_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/report/describes_change_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/report/does_not_show_newer_versions_for_locked_packages_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/report/highlights_overrides_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/report/leading_character_shows_change_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/report/shows_newer_available_versions_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/upgrade/report/shows_number_of_changed_dependencies_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/utils_test: Crash #  try/finally
-_internal/lib/pub/test/validator/compiled_dartdoc_test: Crash #  try/finally
-_internal/lib/pub/test/validator/dependency_override_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/validator/dependency_test: Crash #  try/finally
-_internal/lib/pub/test/validator/directory_test: Crash #  try/finally
-_internal/lib/pub/test/validator/executable_test: Crash #  try/finally
-_internal/lib/pub/test/validator/license_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/validator/name_test: Crash #  try/finally
-_internal/lib/pub/test/validator/pubspec_field_test: Crash #  try/finally
-_internal/lib/pub/test/validator/sdk_constraint_test: Crash # (throw new StateError("Unexpected call to wrapFuture with no current " "schedule.")): Unhandled node
-_internal/lib/pub/test/validator/size_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/validator/utf8_readme_test: Crash # unsupported element kind: _defaultEnvironment:field
-_internal/lib/pub/test/version_solver_test: Crash #  try/finally
-js_ast/test/printer_callback_test: Crash # Please triage this failure.
-microlytics/test/dart_microlytics_test: Crash # (throw new ExpectException(message)): Unhandled node
+js_ast/test/printer_callback_test: Crash # (check): handleStaticFunctionGet: function(check)
 stub_core_library/test/stub_test: Crash #  try/finally
-third_party/di_tests/di_test: Crash #  try/finally
-typed_data/test/typed_buffers_test/01: Crash # cannot compile methods that need interceptor calling convention.
-typed_data/test/typed_buffers_test/none: Crash # cannot compile methods that need interceptor calling convention.
+typed_data/test/typed_buffers_test/01: Crash # (roundToFloat): handleStaticFunctionGet: function(roundToFloat)
+typed_data/test/typed_buffers_test/none: Crash # (roundToFloat): handleStaticFunctionGet: function(roundToFloat)
 typed_mock/test/typed_mock_test: Crash #  try/finally
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 576a0ef..ebb92c9 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -179,3 +179,63 @@
     "../vm:libdart_platform",
   ]
 }
+
+io_impl_sources_gypi =
+    exec_script("../../tools/gypi_to_gn.py",
+                [ rebase_path("io_impl_sources.gypi") ],
+                "scope",
+                [ "io_impl_sources.gypi" ])
+
+# A source set for the implementation of 'dart:io' library
+# (without secure sockets).
+source_set("embedded_dart_io") {
+  configs += ["..:dart_config",]
+
+  # Set custom sources assignment filter. The custom filters does three things:
+  # 1) Filters out unnecessary files pulled in from the gypi files.
+  # 2) Filters out secure socket support.
+  # 3) Enables dart:io by filtering out _unsupported.cc implementations.
+  custom_sources_filter = [
+    "*net/nss_memio.cc",
+    "*net/nss_memio.h",
+    "*secure_socket.cc",
+    "*secure_socket.h",
+    "*filter_unsupported.cc",
+    "*io_service_unsupported.cc",
+    "*_test.cc",
+    "*_test.h",
+    "*dbg*",
+    "builtin.cc",
+    "builtin_gen_snapshot.cc",
+  ]
+  if (!is_mac) {
+    # Dart tree uses *_macos.* instead of *_mac.*
+    custom_sources_filter += [
+      "*_macos.h",
+      "*_macos.cc",
+    ]
+  }
+  set_sources_assignment_filter(custom_sources_filter)
+
+  defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ]
+
+  sources = io_impl_sources_gypi.sources + builtin_impl_sources_gypi.sources
+  sources += [
+    "builtin_nolib.cc",
+    "builtin_natives.cc",
+    "io_natives.cc",
+    "io_natives.h",
+    "embedded_dart_io.cc",
+    "embedded_dart_io.h",
+    "log_android.cc",
+    "log_linux.cc",
+    "log_macos.cc",
+    "log_win.cc",
+    "log.h",
+  ]
+
+  include_dirs = [
+    "..",
+    "//third_party"
+  ]
+}
diff --git a/runtime/bin/bin.gypi b/runtime/bin/bin.gypi
index 1137354..a2638a7 100644
--- a/runtime/bin/bin.gypi
+++ b/runtime/bin/bin.gypi
@@ -349,12 +349,12 @@
       },
     },
     {
-      'target_name': 'libdart_withcore',
+      'target_name': 'libdart_nosnapshot',
       'type': 'static_library',
       'toolsets':['target','host'],
       'dependencies': [
-        'libdart_lib_withcore',
-        'libdart_vm',
+        'libdart_lib_nosnapshot',
+        'libdart_vm_nosnapshot',
         'libdouble_conversion',
         'generate_version_cc_file#host',
       ],
@@ -382,7 +382,7 @@
       'type': 'executable',
       'toolsets':['host'],
       'dependencies': [
-        'libdart_withcore',
+        'libdart_nosnapshot',
         'libdart_builtin',
       ],
       'include_dirs': [
@@ -498,7 +498,7 @@
             '../tools/create_resources.py',
             # The following two files are used to trigger a rebuild.
             '<(PRODUCT_DIR)/observatory/deployed/web/index.html',
-            '<(PRODUCT_DIR)/observatory/deployed/web/index.html_bootstrap.dart.js',
+            '<(PRODUCT_DIR)/observatory/deployed/web/index.html.polymer.bootstrap.dart.js',
             '<@(_sources)',
           ],
           'outputs': [
@@ -609,7 +609,7 @@
       'type': 'executable',
       'toolsets':['host'],
       'dependencies': [
-        'libdart_withcore',
+        'libdart_nosnapshot',
         'libdart_builtin',
         'libdart_io',
         'generate_bootstrap_resources_cc_file#host',
@@ -662,7 +662,7 @@
       'target_name': 'dart_no_snapshot',
       'type': 'executable',
       'dependencies': [
-        'libdart_withcore',
+        'libdart_nosnapshot',
         'libdart_builtin',
         'libdart_io',
         'generate_resources_cc_file#host',
@@ -721,7 +721,7 @@
       'target_name': 'run_vm_tests',
       'type': 'executable',
       'dependencies': [
-        'libdart_withcore',
+        'libdart',
         'libdart_builtin',
         'libdart_io',
         'generate_snapshot_file#host',
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 59338260..fe18de3 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -4,67 +4,97 @@
 
 library builtin;
 // NOTE: Do not import 'dart:io' in builtin.
-import 'dart:async';
-import 'dart:convert';
 import 'dart:isolate';
-
-
-/* See Dart_LibraryTag in dart_api.h */
-const Dart_kScriptTag = null;
-const Dart_kImportTag = 0;
-const Dart_kSourceTag = 1;
-const Dart_kCanonicalizeUrl = 2;
-
-// Dart native extension scheme.
-const _DART_EXT = 'dart-ext:';
-
-// import 'root_library'; happens here from C Code
+import 'dart:typed_data';
 
 // The root library (aka the script) is imported into this library. The
 // standalone embedder uses this to lookup the main entrypoint in the
 // root library's namespace.
 Function _getMainClosure() => main;
 
-// A port for communicating with the service isolate for I/O.
-SendPort _loadPort;
 
-const _logBuiltin = false;
+// 'print' implementation.
+// The standalone embedder registers the closurized _print function with the
+// dart:core library.
+void _printString(String s) native "Builtin_PrintString";
 
-// Corelib 'print' implementation.
+
 void _print(arg) {
-  _Logger._printString(arg.toString());
+  _printString(arg.toString());
 }
 
-class _Logger {
-  static void _printString(String s) native "Logger_PrintString";
-}
 
 _getPrintClosure() => _print;
 
-_getCurrentDirectoryPath() native "Builtin_GetCurrentDirectory";
 
 // Corelib 'Uri.base' implementation.
+// Uri.base is susceptible to changes in the current working directory.
+_getCurrentDirectoryPath() native "Builtin_GetCurrentDirectory";
+
+
 Uri _uriBase() {
   // We are not using Dircetory.current here to limit the dependency
   // on dart:io. This code is the same as:
   //   return new Uri.file(Directory.current.path + "/");
   var result = _getCurrentDirectoryPath();
-  return new Uri.file(result + "/");
+  return new Uri.file("$result/");
 }
 
+
 _getUriBaseClosure() => _uriBase;
 
 
-// Are we running on Windows?
-var _isWindows;
-var _workingWindowsDrivePrefix;
-// The current working directory
-var _workingDirectoryUri;
-// The URI that the entry point script was loaded from. Remembered so that
-// package imports can be resolved relative to it.
-var _entryPointScript;
-// The directory to look in to resolve "package:" scheme URIs.
-var _packageRoot;
+// Asynchronous loading of resources.
+// The embedder forwards most loading requests to this library.
+
+// See Dart_LibraryTag in dart_api.h
+const Dart_kScriptTag = null;
+const Dart_kImportTag = 0;
+const Dart_kSourceTag = 1;
+const Dart_kCanonicalizeUrl = 2;
+
+// Embedder sets this to true if the --trace-loading flag was passed on the
+// command line.
+bool _traceLoading = false;
+
+// A port for communicating with the service isolate for I/O.
+SendPort _loadPort;
+// Maintain a number of outstanding load requests. Current loading request is
+// finished once there are no outstanding requests.
+int _numOutstandingLoadRequests = 0;
+
+// The current working directory when the embedder was launched.
+Uri _workingDirectory;
+// The URI that the root script was loaded from. Remembered so that
+// package imports can be resolved relative to it. The root script is the basis
+// for the root library in the VM.
+Uri _rootScript;
+// The directory to look in to resolve "package:" scheme URIs. By detault it is
+// the 'packages' directory right next to the script.
+Uri _packageRoot = _rootScript.resolve('packages/');
+
+// Special handling for Windows paths so that they are compatible with URI
+// handling.
+// Embedder sets this to true if we are running on Windows.
+bool _isWindows = false;
+
+
+// A class wrapping the load error message in an Error object.
+class LoadError extends Error {
+  final String message;
+  LoadError(this.message);
+
+  String toString() => 'Load Error: $message';
+}
+
+
+// Native calls provided by the embedder.
+void _signalDoneLoading() native "Builtin_DoneLoading";
+void _loadScriptCallback(int tag, String uri, String libraryUri, Uint8List data)
+    native "Builtin_LoadSource";
+void _asyncLoadErrorCallback(uri, libraryUri, error)
+    native "Builtin_AsyncLoadError";
+
 
 _sanitizeWindowsPath(path) {
   // For Windows we need to massage the paths a bit according to
@@ -90,6 +120,7 @@
   return fixedPath;
 }
 
+
 _trimWindowsPath(path) {
   // Convert /X:/ to X:/.
   if (_isWindows == false) {
@@ -107,8 +138,9 @@
   return path;
 }
 
+
+// Ensure we have a trailing slash character.
 _enforceTrailingSlash(uri) {
-  // Ensure we have a trailing slash character.
   if (!uri.endsWith('/')) {
     return '$uri/';
   }
@@ -116,41 +148,37 @@
 }
 
 
-_extractDriveLetterPrefix(cwd) {
-  if (!_isWindows) {
-    return null;
-  }
-  if (cwd.length > 1 && cwd[1] == ':') {
-    return '/${cwd[0]}:';
-  }
-  return null;
-}
-
-
+// Embedder Entrypoint:
+// The embedder calls this method with the current working directory.
 void _setWorkingDirectory(cwd) {
-  _workingWindowsDrivePrefix = _extractDriveLetterPrefix(cwd);
-  cwd = _sanitizeWindowsPath(cwd);
-  cwd = _enforceTrailingSlash(cwd);
-  _workingDirectoryUri = new Uri(scheme: 'file', path: cwd);
-  if (_logBuiltin) {
-    _print('# Working Directory: $cwd');
+  if (_traceLoading) {
+    _print('# Setting working directory: $cwd');
+  }
+  _workingDirectory = new Uri.directory(cwd);
+  if (_traceLoading) {
+    _print('# Working directory URI: $_workingDirectory');
   }
 }
 
 
+// Embedder Entrypoint:
+// The embedder calls this method with a custom package root.
 _setPackageRoot(String packageRoot) {
+  if (_traceLoading) {
+    _print('# Setting package root: $packageRoot');
+  }
   packageRoot = _enforceTrailingSlash(packageRoot);
   if (packageRoot.startsWith('file:') ||
       packageRoot.startsWith('http:') ||
       packageRoot.startsWith('https:')) {
-    _packageRoot = _workingDirectoryUri.resolve(packageRoot);
+    _packageRoot = _workingDirectory.resolve(packageRoot);
   } else {
     packageRoot = _sanitizeWindowsPath(packageRoot);
     packageRoot = _trimWindowsPath(packageRoot);
-    _packageRoot = _workingDirectoryUri.resolveUri(new Uri.file(packageRoot));
+    _packageRoot = _workingDirectory.resolveUri(new Uri.file(packageRoot));
   }
-  if (_logBuiltin) {
-    _print('# Package root: $packageRoot -> $_packageRoot');
+  if (_traceLoading) {
+    _print('# Package root URI: $_packageRoot');
   }
 }
 
@@ -167,76 +195,44 @@
           "'$right', not '$wrong'.";
   }
 
-  var packageRoot = _packageRoot == null ?
-                    _entryPointScript.resolve('packages/') :
-                    _packageRoot;
-  return packageRoot.resolve(uri.path);
+  if (_traceLoading) {
+    _print('# Package root: $_packageRoot');
+    _print('# uri path: ${uri.path}');
+  }
+  return _packageRoot.resolve(uri.path);
 }
 
 
-
-String _resolveScriptUri(String scriptName) {
-  if (_workingDirectoryUri == null) {
+// Resolves the script uri in the current working directory iff the given uri
+// did not specify a scheme (e.g. a path to a script file on the command line).
+Uri _resolveScriptUri(String scriptName) {
+  if (_workingDirectory == null) {
     throw 'No current working directory set.';
   }
   scriptName = _sanitizeWindowsPath(scriptName);
 
   var scriptUri = Uri.parse(scriptName);
-  if (scriptUri.scheme != '') {
-    // Script has a scheme, assume that it is fully formed.
-    _entryPointScript = scriptUri;
-  } else {
+  if (scriptUri.scheme == '') {
     // Script does not have a scheme, assume that it is a path,
     // resolve it against the working directory.
-    _entryPointScript = _workingDirectoryUri.resolve(scriptName);
+    scriptUri = _workingDirectory.resolveUri(scriptUri);
   }
-  if (_logBuiltin) {
-    _print('# Resolved entry point to: $_entryPointScript');
+
+  // Remember the root script URI so that we can resolve packages based on
+  // this location.
+  _rootScript = scriptUri;
+
+  if (_traceLoading) {
+    _print('# Resolved entry point to: $_rootScript');
   }
-  return _entryPointScript.toString();
+  return scriptUri;
 }
 
 
-// Function called by standalone embedder to resolve uris.
-String _resolveUri(String base, String userString) {
-  if (_logBuiltin) {
-    _print('# Resolving: $userString from $base');
-  }
-  var baseUri = Uri.parse(base);
-  if (userString.startsWith(_DART_EXT)) {
-    var uri = userString.substring(_DART_EXT.length);
-    return '$_DART_EXT${baseUri.resolve(uri)}';
-  } else {
-    return baseUri.resolve(userString).toString();
-  }
-}
-
-Uri _createUri(String userUri) {
-  var uri = Uri.parse(userUri);
-  switch (uri.scheme) {
-    case '':
-    case 'data':
-    case 'file':
-    case 'http':
-    case 'https':
-      return uri;
-    case 'package':
-      return _resolvePackageUri(uri);
-    default:
-      // Only handling file, http[s], and package URIs
-      // in standalone binary.
-      if (_logBuiltin) {
-        _print('# Unknown scheme (${uri.scheme}) in $uri.');
-      }
-      throw 'Not a known scheme: $uri';
-  }
-}
-
-int _numOutstandingLoadRequests = 0;
-void _finishedOneLoadRequest(String uri) {
+void _finishLoadRequest(String uri) {
   assert(_numOutstandingLoadRequests > 0);
   _numOutstandingLoadRequests--;
-  if (_logBuiltin) {
+  if (_traceLoading) {
     _print("Loading of $uri finished, "
            "${_numOutstandingLoadRequests} requests remaining");
   }
@@ -245,38 +241,28 @@
   }
 }
 
-void _startingOneLoadRequest(String uri) {
+
+void _startLoadRequest(String uri, Uri resourceUri) {
   assert(_numOutstandingLoadRequests >= 0);
   _numOutstandingLoadRequests++;
-  if (_logBuiltin) {
-    _print("Loading of $uri started, "
+  if (_traceLoading) {
+    _print("Loading of $resourceUri for $uri started, "
            "${_numOutstandingLoadRequests} requests outstanding");
   }
 }
 
-class LoadError extends Error {
-  final String message;
-  LoadError(this.message);
 
-  String toString() => 'Load Error: $message';
-}
-
-void _signalDoneLoading() native "Builtin_DoneLoading";
-void _loadScriptCallback(int tag, String uri, String libraryUri, List<int> data)
-    native "Builtin_LoadScript";
-void _asyncLoadErrorCallback(uri, libraryUri, error)
-    native "Builtin_AsyncLoadError";
-
-void _loadScript(int tag, String uri, String libraryUri, List<int> data) {
+void _loadScript(int tag, String uri, String libraryUri, Uint8List data) {
   // TODO: Currently a compilation error while loading the script is
   // fatal for the isolate. _loadScriptCallback() does not return and
   // the _numOutstandingLoadRequests counter remains out of sync.
   _loadScriptCallback(tag, uri, libraryUri, data);
-  _finishedOneLoadRequest(uri);
+  _finishLoadRequest(uri);
 }
 
+
 void _asyncLoadError(int tag, String uri, String libraryUri, LoadError error) {
-  if (_logBuiltin) {
+  if (_traceLoading) {
     _print("_asyncLoadError($uri), error: $error");
   }
   if (tag == Dart_kImportTag) {
@@ -285,18 +271,18 @@
     libraryUri = uri;
   }
   _asyncLoadErrorCallback(uri, libraryUri, error);
-  _finishedOneLoadRequest(uri);
+  _finishLoadRequest(uri);
 }
 
 
-_loadDataAsyncLoadPort(int tag,
-                       String uri,
-                       String libraryUri,
-                       Uri resourceUri) {
+_loadDataFromLoadPort(int tag,
+                      String uri,
+                      String libraryUri,
+                      Uri resourceUri) {
   var receivePort = new ReceivePort();
   receivePort.first.then((dataOrError) {
     receivePort.close();
-    if (dataOrError is List<int>) {
+    if (dataOrError is Uint8List) {
       _loadScript(tag, uri, libraryUri, dataOrError);
     } else {
       assert(dataOrError is String);
@@ -314,9 +300,9 @@
   try {
     var msg = [receivePort.sendPort, resourceUri.toString()];
     _loadPort.send(msg);
-    _startingOneLoadRequest(uri);
+    _startLoadRequest(uri, resourceUri);
   } catch (e) {
-    if (_logBuiltin) {
+    if (_traceLoading) {
       _print("Exception when communicating with service isolate: $e");
     }
     // Wrap inside a LoadError unless we are already propagating a previously
@@ -327,47 +313,77 @@
   }
 }
 
+
+// Embedder Entrypoint:
 // Asynchronously loads script data through a http[s] or file uri.
 _loadDataAsync(int tag, String uri, String libraryUri) {
+  var resourceUri;
   if (tag == Dart_kScriptTag) {
-    uri = _resolveScriptUri(uri);
+    resourceUri = _resolveScriptUri(uri);
+    uri = resourceUri.toString();
+  } else {
+    resourceUri = Uri.parse(uri);
   }
 
-  Uri resourceUri = _createUri(uri);
+  // package based uris need to be resolved to the correct loadable location.
+  if (resourceUri.scheme == 'package') {
+    resourceUri = _resolvePackageUri(resourceUri);
+  }
 
-  _loadDataAsyncLoadPort(tag, uri, libraryUri, resourceUri);
+  _loadDataFromLoadPort(tag, uri, libraryUri, resourceUri);
 }
 
-// Returns either a file path or a URI starting with http[s]:, as a String.
-String _filePathFromUri(String userUri) {
-  var uri = Uri.parse(userUri);
-  if (_logBuiltin) {
-    _print('# Getting file path from: $uri');
-  }
 
-  var path;
-  switch (uri.scheme) {
-    case '':
-    case 'file':
-      return uri.toFilePath();
-    case 'package':
-      return _filePathFromUri(_resolvePackageUri(uri).toString());
-    case 'data':
-    case 'http':
-    case 'https':
-      return uri.toString();
-    default:
-      // Only handling file, http, and package URIs
-      // in standalone binary.
-      if (_logBuiltin) {
-        _print('# Unknown scheme (${uri.scheme}) in $uri.');
-      }
-      throw 'Not a known scheme: $uri';
+// Embedder Entrypoint:
+// Function called by standalone embedder to resolve uris when the VM requests
+// Dart_kCanonicalizeUrl from the tag handler.
+String _resolveUri(String base, String userString) {
+  if (_traceLoading) {
+    _print('# Resolving: $userString from $base');
   }
+  var baseUri = Uri.parse(base);
+  var result;
+  if (userString.startsWith(_DART_EXT)) {
+    var uri = userString.substring(_DART_EXT.length);
+    result = '$_DART_EXT${baseUri.resolve(uri)}';
+  } else {
+    result = baseUri.resolve(userString).toString();
+  }
+  if (_traceLoading) {
+    _print('Resolved $userString in $base to $result');
+  }
+  return result;
 }
 
+
+// Embedder Entrypoint (gen_snapshot):
+// Resolve relative paths relative to working directory.
+String _resolveInWorkingDirectory(String fileName) {
+  if (_workingDirectory == null) {
+    throw 'No current working directory set.';
+  }
+  var name = _sanitizeWindowsPath(fileName);
+
+  var uri = Uri.parse(name);
+  if (uri.scheme != '') {
+    throw 'Schemes are not supported when resolving filenames.';
+  }
+  uri = _workingDirectory.resolveUri(uri);
+
+  if (_traceLoading) {
+    _print('# Resolved in working directory: $fileName -> $uri');
+  }
+  return uri.toString();
+}
+
+
+// Handling of dart-ext loading.
+// Dart native extension scheme.
+const _DART_EXT = 'dart-ext:';
+
 String _nativeLibraryExtension() native "Builtin_NativeLibraryExtension";
 
+
 String _platformExtensionFileName(String name) {
   var extension = _nativeLibraryExtension();
 
@@ -378,6 +394,39 @@
   }
 }
 
+
+// Returns either a file path or a URI starting with http[s]:, as a String.
+String _filePathFromUri(String userUri) {
+  var uri = Uri.parse(userUri);
+  if (_traceLoading) {
+    _print('# Getting file path from: $uri');
+  }
+
+  var path;
+  switch (uri.scheme) {
+    case '':
+    case 'file':
+    return uri.toFilePath();
+    case 'package':
+    return _filePathFromUri(_resolvePackageUri(uri).toString());
+    case 'data':
+    case 'http':
+    case 'https':
+    return uri.toString();
+    default:
+    // Only handling file, http, and package URIs
+    // in standalone binary.
+    if (_traceLoading) {
+      _print('# Unknown scheme (${uri.scheme}) in $uri.');
+    }
+    throw 'Not a known scheme: $uri';
+  }
+}
+
+
+// Embedder Entrypoint:
+// When loading an extension the embedder calls this method to get the
+// different components.
 // Returns the directory part, the filename part, and the name
 // of a native extension URL as a list [directory, filename, name].
 // The directory part is either a file system path or an HTTP(S) URL.
@@ -393,7 +442,6 @@
     throw 'Unexpected internal error: Extension URI $userUri contains \\';
   }
 
-
   String name;
   String path;  // Will end in '/'.
   int index = userUri.lastIndexOf('/');
diff --git a/runtime/bin/builtin_gen_snapshot.cc b/runtime/bin/builtin_gen_snapshot.cc
index 3e25004..2852464 100644
--- a/runtime/bin/builtin_gen_snapshot.cc
+++ b/runtime/bin/builtin_gen_snapshot.cc
@@ -15,7 +15,7 @@
 
 // Lists the native function implementing basic logging facility.
 #define BUILTIN_NATIVE_LIST(V)                                                 \
-  V(Logger_PrintString, 1)
+  V(Builtin_PrintString, 1)
 
 BUILTIN_NATIVE_LIST(DECLARE_FUNCTION);
 
@@ -63,7 +63,7 @@
 
 // Implementation of native functions which are used for some
 // test/debug functionality in standalone dart mode.
-void FUNCTION_NAME(Logger_PrintString)(Dart_NativeArguments args) {
+void FUNCTION_NAME(Builtin_PrintString)(Dart_NativeArguments args) {
   Dart_EnterScope();
   intptr_t length = 0;
   uint8_t* chars = NULL;
diff --git a/runtime/bin/builtin_natives.cc b/runtime/bin/builtin_natives.cc
index a7bb6d2..80a03cf 100644
--- a/runtime/bin/builtin_natives.cc
+++ b/runtime/bin/builtin_natives.cc
@@ -64,8 +64,8 @@
   V(File_GetStdioHandleType, 1)                                                \
   V(File_GetType, 2)                                                           \
   V(File_AreIdentical, 2)                                                      \
-  V(Logger_PrintString, 1)                                                     \
-  V(Builtin_LoadScript, 4)                                                     \
+  V(Builtin_PrintString, 1)                                                    \
+  V(Builtin_LoadSource, 4)                                                     \
   V(Builtin_AsyncLoadError, 3)                                                 \
   V(Builtin_DoneLoading, 0)                                                    \
   V(Builtin_NativeLibraryExtension, 0)                                         \
@@ -121,7 +121,7 @@
 
 // Implementation of native functions which are used for some
 // test/debug functionality in standalone dart mode.
-void FUNCTION_NAME(Logger_PrintString)(Dart_NativeArguments args) {
+void FUNCTION_NAME(Builtin_PrintString)(Dart_NativeArguments args) {
   intptr_t length = 0;
   uint8_t* chars = NULL;
   Dart_Handle str = Dart_GetNativeArgument(args, 0);
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index fc8b0c5..745efbe 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -283,13 +283,13 @@
 }
 
 
-Dart_Handle DartUtils::ResolveScriptUri(Dart_Handle script_uri,
-                                        Dart_Handle builtin_lib) {
+Dart_Handle DartUtils::ResolveUriInWorkingDirectory(Dart_Handle script_uri,
+                                                    Dart_Handle builtin_lib) {
   const int kNumArgs = 1;
   Dart_Handle dart_args[kNumArgs];
   dart_args[0] = script_uri;
   return Dart_Invoke(builtin_lib,
-                     NewString("_resolveScriptUri"),
+                     NewString("_resolveInWorkingDirectory"),
                      kNumArgs,
                      dart_args);
 }
@@ -515,7 +515,7 @@
 
 // Callback function that gets called from dartutils when the library
 // source has been read. Loads the library or part into the VM.
-void FUNCTION_NAME(Builtin_LoadScript)(Dart_NativeArguments args) {
+void FUNCTION_NAME(Builtin_LoadSource)(Dart_NativeArguments args) {
   Dart_Handle tag_in = Dart_GetNativeArgument(args, 0);
   Dart_Handle resolved_script_uri = Dart_GetNativeArgument(args, 1);
   Dart_Handle library_uri = Dart_GetNativeArgument(args, 2);
@@ -624,6 +624,7 @@
 void DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
                                       Dart_Handle internal_lib,
                                       bool is_service_isolate,
+                                      bool trace_loading,
                                       const char* package_root) {
   // Setup the internal library's 'internalPrint' function.
   Dart_Handle print = Dart_Invoke(
@@ -634,10 +635,15 @@
   DART_CHECK_VALID(result);
 
   if (!is_service_isolate) {
-    result =
-        Dart_SetField(builtin_lib, NewString("_isWindows"),
-                      IsWindowsHost() ? Dart_True() : Dart_False());
-    DART_CHECK_VALID(result);
+    if (IsWindowsHost()) {
+      result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True());
+      DART_CHECK_VALID(result);
+    }
+    if (trace_loading) {
+      result = Dart_SetField(builtin_lib,
+                             NewString("_traceLoading"), Dart_True());
+      DART_CHECK_VALID(result);
+    }
   }
 
   if (!is_service_isolate) {
@@ -702,6 +708,7 @@
 
 Dart_Handle DartUtils::PrepareForScriptLoading(const char* package_root,
                                                bool is_service_isolate,
+                                               bool trace_loading,
                                                Dart_Handle builtin_lib) {
   // First ensure all required libraries are available.
   Dart_Handle url = NewString(kCoreLibURL);
@@ -731,6 +738,7 @@
   PrepareBuiltinLibrary(builtin_lib,
                         internal_lib,
                         is_service_isolate,
+                        trace_loading,
                         package_root);
   PrepareAsyncLibrary(async_lib, isolate_lib);
   PrepareCoreLibrary(core_lib, builtin_lib, is_service_isolate);
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index 0b3e817..0c9ac19 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -127,6 +127,7 @@
   static void PrepareBuiltinLibrary(Dart_Handle builtin_lib,
                                     Dart_Handle internal_lib,
                                     bool is_service_isolate,
+                                    bool trace_loading,
                                     const char* package_root);
   static void PrepareCoreLibrary(Dart_Handle core_lib,
                                  Dart_Handle builtin_lib,
@@ -137,6 +138,7 @@
   static void PrepareIsolateLibrary(Dart_Handle isolate_lib);
   static Dart_Handle PrepareForScriptLoading(const char* package_root,
                                              bool is_service_isolate,
+                                             bool trace_loading,
                                              Dart_Handle builtin_lib);
   static void SetupIOLibrary(const char* script_uri);
 
@@ -181,8 +183,8 @@
 
   static Dart_Handle SetWorkingDirectory(Dart_Handle builtin_lib);
 
-  static Dart_Handle ResolveScriptUri(Dart_Handle script_uri,
-                                      Dart_Handle builtin_lib);
+  static Dart_Handle ResolveUriInWorkingDirectory(Dart_Handle script_uri,
+                                                  Dart_Handle builtin_lib);
 
   static Dart_Handle FilePathFromUri(Dart_Handle script_uri,
                                      Dart_Handle builtin_lib);
diff --git a/runtime/bin/embedded_dart_io.cc b/runtime/bin/embedded_dart_io.cc
new file mode 100644
index 0000000..1b3f40b
--- /dev/null
+++ b/runtime/bin/embedded_dart_io.cc
@@ -0,0 +1,20 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "bin/embedded_dart_io.h"
+
+#include "bin/eventhandler.h"
+#include "bin/thread.h"
+
+namespace dart {
+namespace bin {
+
+void BootstrapDartIo() {
+  // Bootstrap 'dart:io' event handler.
+  Thread::InitOnce();
+  EventHandler::Start();
+}
+
+}  // namespace bin
+}  // namespace dart
diff --git a/runtime/bin/embedded_dart_io.h b/runtime/bin/embedded_dart_io.h
new file mode 100644
index 0000000..e19b21a
--- /dev/null
+++ b/runtime/bin/embedded_dart_io.h
@@ -0,0 +1,17 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef BIN_EMBEDDED_DART_IO_H_
+#define BIN_EMBEDDED_DART_IO_H_
+
+namespace dart {
+namespace bin {
+
+// Bootstraps 'dart:io'.
+void BootstrapDartIo();
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // BIN_EMBEDDED_DART_IO_H_
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index be575c1..b55575d 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -196,19 +196,20 @@
 Dart_Isolate UriResolverIsolateScope::isolate = NULL;
 
 
-static Dart_Handle ResolveScriptUri(const char* script_uri) {
+static Dart_Handle ResolveUriInWorkingDirectory(const char* script_uri) {
   bool failed = false;
   char* result_string = NULL;
 
   {
     UriResolverIsolateScope scope;
 
-    // Run DartUtils::ResolveScriptUri in context of uri resolver isolate.
+    // Run DartUtils::ResolveUriInWorkingDirectory in context of uri resolver
+    // isolate.
     Dart_Handle builtin_lib =
         Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
     CHECK_RESULT(builtin_lib);
 
-    Dart_Handle result = DartUtils::ResolveScriptUri(
+    Dart_Handle result = DartUtils::ResolveUriInWorkingDirectory(
         DartUtils::NewString(script_uri), builtin_lib);
     if (Dart_IsError(result)) {
       failed = true;
@@ -310,7 +311,7 @@
   const char* mapped_library_url_string = DartUtils::MapLibraryUrl(
       url_mapping, library_url_string);
   if (mapped_library_url_string != NULL) {
-    library_url = ResolveScriptUri(mapped_library_url_string);
+    library_url = ResolveUriInWorkingDirectory(mapped_library_url_string);
     library_url_string = DartUtils::GetStringValue(library_url);
   }
 
@@ -356,7 +357,7 @@
   Dart_Handle resolved_url = url;
   if (mapped_url_string != NULL) {
     // Mapped urls are relative to working directory.
-    resolved_url = ResolveScriptUri(mapped_url_string);
+    resolved_url = ResolveUriInWorkingDirectory(mapped_url_string);
     if (Dart_IsError(resolved_url)) {
       return resolved_url;
     }
@@ -383,7 +384,7 @@
 
 
 static Dart_Handle LoadSnapshotCreationScript(const char* script_name) {
-  Dart_Handle resolved_script_uri = ResolveScriptUri(script_name);
+  Dart_Handle resolved_script_uri = ResolveUriInWorkingDirectory(script_name);
   if (Dart_IsError(resolved_script_uri)) {
     return resolved_script_uri;
   }
@@ -584,7 +585,10 @@
     // Prepare for script loading by setting up the 'print' and 'timer'
     // closures and setting up 'package root' for URI resolution.
     result =
-        DartUtils::PrepareForScriptLoading(package_root, false, builtin_lib);
+        DartUtils::PrepareForScriptLoading(package_root,
+                                           false,
+                                           false,
+                                           builtin_lib);
     CHECK_RESULT(result);
     Dart_ExitScope();
     Dart_ExitIsolate();
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index ef61bb4..db47bbc 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -65,9 +65,9 @@
 // dart functions and not run anything.
 static bool has_compile_all = false;
 
-// Global flag that is used to indicate that we want to print the source code
-// for script that is being run.
-static bool has_print_script = false;
+// Global flag that is used to indicate that we want to trace resolution of
+// URIs and the loading of libraries, parts and scripts.
+static bool has_trace_loading = false;
 
 
 static const char* DEFAULT_VM_SERVICE_SERVER_IP = "127.0.0.1";
@@ -282,17 +282,6 @@
 }
 
 
-static bool ProcessPrintScriptOption(const char* arg,
-                                     CommandLineOptions* vm_options) {
-  ASSERT(arg != NULL);
-  if (*arg != '\0') {
-    return false;
-  }
-  has_print_script = true;
-  return true;
-}
-
-
 static bool ProcessGenScriptSnapshotOption(const char* filename,
                                            CommandLineOptions* vm_options) {
   if (filename != NULL && strlen(filename) != 0) {
@@ -361,6 +350,16 @@
 }
 
 
+static bool ProcessTraceLoadingOption(const char* arg,
+                                      CommandLineOptions* vm_options) {
+  if (*arg != '\0') {
+    return false;
+  }
+  has_trace_loading = true;
+  return true;
+}
+
+
 static struct {
   const char* option_name;
   bool (*process)(const char* option, CommandLineOptions* vm_options);
@@ -378,10 +377,10 @@
   { "--compile_all", ProcessCompileAllOption },
   { "--debug", ProcessDebugOption },
   { "--snapshot=", ProcessGenScriptSnapshotOption },
-  { "--print-script", ProcessPrintScriptOption },
   { "--enable-vm-service", ProcessEnableVmServiceOption },
   { "--observe", ProcessObserveOption },
   { "--trace-debug-protocol", ProcessTraceDebugProtocolOption },
+  { "--trace-loading", ProcessTraceLoadingOption},
   { NULL, NULL }
 };
 
@@ -634,7 +633,10 @@
 
   // Prepare for script loading by setting up the 'print' and 'timer'
   // closures and setting up 'package root' for URI resolution.
-  result = DartUtils::PrepareForScriptLoading(package_root, false, builtin_lib);
+  result = DartUtils::PrepareForScriptLoading(package_root,
+                                              false,
+                                              has_trace_loading,
+                                              builtin_lib);
   CHECK_RESULT(result);
 
   result = Dart_SetEnvironmentCallback(EnvironmentCallback);
@@ -748,12 +750,13 @@
 "--snapshot=<file_name>\n"
 "  loads Dart script and generates a snapshot in the specified file\n"
 "\n"
-"--print-script\n"
-"  generates Dart source code back and prints it after parsing a Dart script\n"
+"--trace-loading\n"
+"  enables tracing of library and script loading\n"
 "\n"
 "--enable-vm-service[:<port number>]\n"
 "  enables the VM service and listens on specified port for connections\n"
 "  (default port number is 8181)\n"
+"\n"
 "--noopt\n"
 "  run unoptimized code only\n"
 "\n"
@@ -816,40 +819,6 @@
 }
 
 
-static Dart_Handle GenerateScriptSource() {
-  Dart_Handle library_url = Dart_LibraryUrl(Dart_RootLibrary());
-  if (Dart_IsError(library_url)) {
-    return library_url;
-  }
-  Dart_Handle script_urls = Dart_GetScriptURLs(library_url);
-  if (Dart_IsError(script_urls)) {
-    return script_urls;
-  }
-  intptr_t length;
-  Dart_Handle result = Dart_ListLength(script_urls, &length);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  for (intptr_t i = 0; i < length; i++) {
-    Dart_Handle script_url = Dart_ListGetAt(script_urls, i);
-    if (Dart_IsError(script_url)) {
-      return script_url;
-    }
-    result = Dart_GenerateScriptSource(library_url, script_url);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-    const char* script_source = NULL;
-    result = Dart_StringToCString(result, &script_source);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-    Log::Print("%s\n", script_source);
-  }
-  return Dart_True();
-}
-
-
 static const char* ServiceRequestError(Dart_Handle error) {
   TextBuffer buffer(128);
   buffer.Printf("{\"type\":\"Error\",\"text\":\"Internal error %s\"}",
@@ -1053,47 +1022,43 @@
                 "Unable to find root library for '%s'\n",
                 script_name);
     }
-    if (has_print_script) {
-      result = GenerateScriptSource();
-      DartExitOnError(result);
-    } else {
-      // The helper function _getMainClosure creates a closure for the main
-      // entry point which is either explicitly or implictly exported from the
-      // root library.
-      Dart_Handle main_closure = Dart_Invoke(
-          builtin_lib, Dart_NewStringFromCString("_getMainClosure"), 0, NULL);
-      DartExitOnError(main_closure);
 
-      // Set debug breakpoint if specified on the command line before calling
-      // the main function.
-      if (breakpoint_at != NULL) {
-        result = SetBreakpoint(breakpoint_at, root_lib);
-        if (Dart_IsError(result)) {
-          ErrorExit(kErrorExitCode,
-                    "Error setting breakpoint at '%s': %s\n",
-                    breakpoint_at,
-                    Dart_GetError(result));
-        }
+    // The helper function _getMainClosure creates a closure for the main
+    // entry point which is either explicitly or implictly exported from the
+    // root library.
+    Dart_Handle main_closure = Dart_Invoke(
+        builtin_lib, Dart_NewStringFromCString("_getMainClosure"), 0, NULL);
+    DartExitOnError(main_closure);
+
+    // Set debug breakpoint if specified on the command line before calling
+    // the main function.
+    if (breakpoint_at != NULL) {
+      result = SetBreakpoint(breakpoint_at, root_lib);
+      if (Dart_IsError(result)) {
+        ErrorExit(kErrorExitCode,
+                  "Error setting breakpoint at '%s': %s\n",
+                  breakpoint_at,
+                  Dart_GetError(result));
       }
-
-      // Call _startIsolate in the isolate library to enable dispatching the
-      // initial startup message.
-      const intptr_t kNumIsolateArgs = 2;
-      Dart_Handle isolate_args[kNumIsolateArgs];
-      isolate_args[0] = main_closure;                         // entryPoint
-      isolate_args[1] = CreateRuntimeOptions(&dart_options);  // args
-
-      Dart_Handle isolate_lib = Dart_LookupLibrary(
-          Dart_NewStringFromCString("dart:isolate"));
-      result = Dart_Invoke(isolate_lib,
-                           Dart_NewStringFromCString("_startMainIsolate"),
-                           kNumIsolateArgs, isolate_args);
-      DartExitOnError(result);
-
-      // Keep handling messages until the last active receive port is closed.
-      result = Dart_RunLoop();
-      DartExitOnError(result);
     }
+
+    // Call _startIsolate in the isolate library to enable dispatching the
+    // initial startup message.
+    const intptr_t kNumIsolateArgs = 2;
+    Dart_Handle isolate_args[kNumIsolateArgs];
+    isolate_args[0] = main_closure;                         // entryPoint
+    isolate_args[1] = CreateRuntimeOptions(&dart_options);  // args
+
+    Dart_Handle isolate_lib = Dart_LookupLibrary(
+        Dart_NewStringFromCString("dart:isolate"));
+    result = Dart_Invoke(isolate_lib,
+                         Dart_NewStringFromCString("_startMainIsolate"),
+                         kNumIsolateArgs, isolate_args);
+    DartExitOnError(result);
+
+    // Keep handling messages until the last active receive port is closed.
+    result = Dart_RunLoop();
+    DartExitOnError(result);
   }
 
   Dart_ExitScope();
diff --git a/runtime/bin/vmservice/loader.dart b/runtime/bin/vmservice/loader.dart
index 1c4ae95..2e04455 100644
--- a/runtime/bin/vmservice/loader.dart
+++ b/runtime/bin/vmservice/loader.dart
@@ -88,6 +88,6 @@
   } else if ((uri.scheme == 'data')) {
     _loadDataUri(sp, uri);
   } else {
-    sp.send('Unknown scheme for $uri');
+    sp.send('Unknown scheme (${uri.scheme}) for $uri');
   }
-}
\ No newline at end of file
+}
diff --git a/runtime/bin/vmservice_dartium.cc b/runtime/bin/vmservice_dartium.cc
index 725d204..a84365c 100644
--- a/runtime/bin/vmservice_dartium.cc
+++ b/runtime/bin/vmservice_dartium.cc
@@ -67,7 +67,7 @@
 
   // Prepare for script loading by setting up the 'print' and 'timer'
   // closures and setting up 'package root' for URI resolution.
-  result = DartUtils::PrepareForScriptLoading(NULL, true, builtin_lib);
+  result = DartUtils::PrepareForScriptLoading(NULL, true, false, builtin_lib);
   CHECK_RESULT(result);
 
   ASSERT(Dart_IsServiceIsolate(isolate));
diff --git a/runtime/bin/vmservice_impl.cc b/runtime/bin/vmservice_impl.cc
index 4a54291..e830389 100644
--- a/runtime/bin/vmservice_impl.cc
+++ b/runtime/bin/vmservice_impl.cc
@@ -172,7 +172,7 @@
 
   // Prepare for script loading by setting up the 'print' and 'timer'
   // closures and setting up 'package root' for URI resolution.
-  result = DartUtils::PrepareForScriptLoading(NULL, true, builtin_lib);
+  result = DartUtils::PrepareForScriptLoading(NULL, true, false, builtin_lib);
   SHUTDOWN_ON_ERROR(result);
 
   // Load main script.
diff --git a/runtime/dart-runtime.gyp b/runtime/dart-runtime.gyp
index d64b9a9..f9795a8 100644
--- a/runtime/dart-runtime.gyp
+++ b/runtime/dart-runtime.gyp
@@ -15,7 +15,8 @@
     'version_in_cc_file': 'vm/version_in.cc',
     'version_cc_file': '<(gen_source_dir)/version.cc',
 
-    'libdart_deps': ['libdart_lib_withcore', 'libdart_lib', 'libdart_vm',
+    'libdart_deps': ['libdart_lib_nosnapshot', 'libdart_lib',
+                     'libdart_vm_nosnapshot', 'libdart_vm',
                      'libdouble_conversion',],
   },
   'targets': [
@@ -93,7 +94,7 @@
       'type': 'executable',
       'toolsets':['target'],
       # The dependencies here are the union of the dependencies of libdart and
-      # libdart_withcore.
+      # libdart_nosnapshot.
       'dependencies': ['<@(libdart_deps)'],
       'sources': [
         'vm/libdart_dependency_helper.cc',
@@ -104,7 +105,7 @@
       'type': 'executable',
       'toolsets':['host'],
       # The dependencies here are the union of the dependencies of libdart and
-      # libdart_withcore.
+      # libdart_nosnapshot.
       'dependencies': ['<@(libdart_deps)'],
       'sources': [
         'vm/libdart_dependency_helper.cc',
diff --git a/runtime/lib/array_patch.dart b/runtime/lib/array_patch.dart
index 109938b..e422e30 100644
--- a/runtime/lib/array_patch.dart
+++ b/runtime/lib/array_patch.dart
@@ -33,7 +33,7 @@
   }
 
   /* patch */ factory List.from(Iterable elements, { bool growable: true }) {
-    if (elements is EfficientLength) {
+    if (elements is EfficientLengthIterable) {
       int length = elements.length;
       var list = growable ? new _GrowableList<E>(length) : new _List<E>(length);
       int i = 0;
diff --git a/runtime/lib/collection_patch.dart b/runtime/lib/collection_patch.dart
index 8ed4e91..be2a2dd 100644
--- a/runtime/lib/collection_patch.dart
+++ b/runtime/lib/collection_patch.dart
@@ -432,8 +432,8 @@
   _HashMapEntry(this.key, this.value, this.hashCode, this.next);
 }
 
-abstract class _HashMapIterable<E> extends IterableBase<E>
-                                   implements EfficientLength {
+abstract class _HashMapIterable<E> extends Iterable<E>
+                                   implements EfficientLengthIterable<E> {
   final HashMap _map;
   _HashMapIterable(this._map);
   int get length => _map.length;
@@ -835,8 +835,8 @@
   }
 }
 
-class _LinkedHashMapKeyIterable<K> extends IterableBase<K>
-                                   implements EfficientLength {
+class _LinkedHashMapKeyIterable<K> extends Iterable<K>
+                                   implements EfficientLengthIterable<K> {
   LinkedHashMap<K, dynamic> _map;
   _LinkedHashMapKeyIterable(this._map);
   Iterator<K> get iterator => new _LinkedHashMapKeyIterator<K>(_map);
@@ -847,8 +847,8 @@
   Set<K> toSet() => _map._newKeySet()..addAll(this);
 }
 
-class _LinkedHashMapValueIterable<V> extends IterableBase<V>
-                                     implements EfficientLength {
+class _LinkedHashMapValueIterable<V> extends Iterable<V>
+                                     implements EfficientLengthIterable<V> {
   LinkedHashMap<dynamic, V> _map;
   _LinkedHashMapValueIterable(this._map);
   Iterator<V> get iterator => new _LinkedHashMapValueIterator<V>(_map);
diff --git a/runtime/lib/developer.cc b/runtime/lib/developer.cc
new file mode 100644
index 0000000..786e5de
--- /dev/null
+++ b/runtime/lib/developer.cc
@@ -0,0 +1,40 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "vm/bootstrap_natives.h"
+
+#include "include/dart_api.h"
+
+#include "vm/debugger.h"
+#include "vm/exceptions.h"
+#include "vm/native_entry.h"
+#include "vm/object.h"
+#include "vm/object_store.h"
+#include "vm/service.h"
+
+namespace dart {
+
+// Native implementations for the dart:developer library.
+
+DEFINE_NATIVE_ENTRY(Developer_debugger, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Bool, when, arguments->NativeArgAt(0));
+  GET_NATIVE_ARGUMENT(String, msg, arguments->NativeArgAt(1));
+  Debugger* debugger = isolate->debugger();
+  if (!debugger) {
+    return when.raw();
+  }
+  if (when.value()) {
+    debugger->BreakHere(msg);
+  }
+  return when.raw();
+}
+
+
+DEFINE_NATIVE_ENTRY(Developer_inspect, 1) {
+  GET_NATIVE_ARGUMENT(Instance, inspectee, arguments->NativeArgAt(0));
+  Service::SendInspectEvent(isolate, inspectee);
+  return inspectee.raw();
+}
+
+}  // namespace dart
diff --git a/runtime/lib/developer.dart b/runtime/lib/developer.dart
new file mode 100644
index 0000000..689f23e
--- /dev/null
+++ b/runtime/lib/developer.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+patch bool debugger({bool when: true, String msg}) native "Developer_debugger";
+
+patch inspect(object) native "Developer_inspect";
diff --git a/runtime/lib/developer_sources.gypi b/runtime/lib/developer_sources.gypi
new file mode 100644
index 0000000..4bedb67
--- /dev/null
+++ b/runtime/lib/developer_sources.gypi
@@ -0,0 +1,13 @@
+# Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Sources visible via dart:developer library.
+
+{
+  'sources': [
+    'developer.cc',
+    'developer.dart',
+  ],
+}
+
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index bd79837..482e9c0 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -157,7 +157,7 @@
         (cid == ClassID.cidArray) ||
         (cid == ClassID.cidGrowableObjectArray) ||
         (cid == ClassID.cidImmutableArray);
-    if (isVMList || (iterable is EfficientLength)) {
+    if (isVMList || (iterable is EfficientLengthIterable)) {
       var cap = _capacity;
       // Pregrow if we know iterable.length.
       var iterLen = iterable.length;
diff --git a/runtime/lib/immutable_map.dart b/runtime/lib/immutable_map.dart
index 2377c8c..b4fcbcf 100644
--- a/runtime/lib/immutable_map.dart
+++ b/runtime/lib/immutable_map.dart
@@ -84,8 +84,8 @@
   }
 }
 
-class _ImmutableMapKeyIterable<E> extends IterableBase<E>
-                                  implements EfficientLength {
+class _ImmutableMapKeyIterable<E> extends Iterable<E>
+                                  implements EfficientLengthIterable<E> {
   final ImmutableMap _map;
   _ImmutableMapKeyIterable(this._map);
 
@@ -96,8 +96,8 @@
   int get length => _map.length;
 }
 
-class _ImmutableMapValueIterable<E> extends IterableBase<E>
-                                    implements EfficientLength {
+class _ImmutableMapValueIterable<E> extends Iterable<E>
+                                    implements EfficientLengthIterable<E> {
   final ImmutableMap _map;
   _ImmutableMapValueIterable(this._map);
 
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index 56a3872..d67dafc 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -16,7 +16,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, trace_type_checks);
 DECLARE_FLAG(bool, warn_on_javascript_compatibility);
 
diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart
index 11db8fe..4547fa5 100644
--- a/runtime/lib/string_patch.dart
+++ b/runtime/lib/string_patch.dart
@@ -157,7 +157,7 @@
   static String _createStringFromIterable(Iterable<int> charCodes,
                                           int start, int end) {
     // Treat charCodes as Iterable.
-    if (charCodes is EfficientLength) {
+    if (charCodes is EfficientLengthIterable) {
       int length = charCodes.length;
       end = RangeError.checkValidRange(start, end, length);
       List charCodeList = new List.from(charCodes.take(end).skip(start),
diff --git a/runtime/observatory/lib/service.dart b/runtime/observatory/lib/service.dart
index c1af206..7715717 100644
--- a/runtime/observatory/lib/service.dart
+++ b/runtime/observatory/lib/service.dart
@@ -6,6 +6,7 @@
 
 import 'dart:async';
 import 'dart:typed_data';
+import 'dart:math' as math;
 
 import 'package:logging/logging.dart';
 import 'package:observatory/cpu_profile.dart';
diff --git a/runtime/observatory/lib/src/app/application.dart b/runtime/observatory/lib/src/app/application.dart
index 3aad424..0f37816 100644
--- a/runtime/observatory/lib/src/app/application.dart
+++ b/runtime/observatory/lib/src/app/application.dart
@@ -107,6 +107,10 @@
         notifications.add(event);
         break;
 
+      case ServiceEvent.kInspect:
+        notifications.add(event);
+        break;
+
       default:
         // Ignore unrecognized events.
         Logger.root.severe('Unrecognized event: $event');
diff --git a/runtime/observatory/lib/src/elements/class_view.html b/runtime/observatory/lib/src/elements/class_view.html
index eadd09b..0dddf08 100644
--- a/runtime/observatory/lib/src/elements/class_view.html
+++ b/runtime/observatory/lib/src/elements/class_view.html
@@ -199,18 +199,16 @@
         </template>
     </div>
 
-    <hr>
-
-    <div class="content">
+    <div class="content-centered-big">
+      <hr>
       <eval-box callback="{{ eval }}"></eval-box>
+      <hr>
+      <script-inset script="{{ cls.script }}"
+                    startPos="{{ cls.tokenPos }}"
+                    endPos="{{ cls.endTokenPos }}">
+      </script-inset>
     </div>
 
-    <hr>
-    <script-inset script="{{ cls.script }}"
-                  startPos="{{ cls.tokenPos }}"
-                  endPos="{{ cls.endTokenPos }}">
-    </script-inset>
-
     <view-footer></view-footer>
   </template>
 </polymer-element>
diff --git a/runtime/observatory/lib/src/elements/debugger.dart b/runtime/observatory/lib/src/elements/debugger.dart
index 7b8364b..b0efa0f 100644
--- a/runtime/observatory/lib/src/elements/debugger.dart
+++ b/runtime/observatory/lib/src/elements/debugger.dart
@@ -1086,6 +1086,7 @@
       case ServiceEvent.kIsolateStart:
       case ServiceEvent.kGraph:
       case ServiceEvent.kGC:
+      case ServiceEvent.kInspect:
         break;
 
       default:
diff --git a/runtime/observatory/lib/src/elements/debugger.html b/runtime/observatory/lib/src/elements/debugger.html
index b2a2b65..e31dda9 100644
--- a/runtime/observatory/lib/src/elements/debugger.html
+++ b/runtime/observatory/lib/src/elements/debugger.html
@@ -250,11 +250,12 @@
           <div class="flex-row">
             <div class="flex-item-60-percent">
               <script-inset height="{{ scriptHeight }}"
-			    script="{{ frame['function'].script }}"
+                            script="{{ frame['function'].script }}"
                             startPos="{{ frame['function'].tokenPos }}"
                             endPos="{{ frame['function'].endTokenPos }}"
                             currentPos="{{ frame['tokenPos'] }}"
-                            inDebuggerContext="{{ true }}">
+                            inDebuggerContext="{{ true }}"
+                            variables="{{ frame['vars'] }}">
               </script-inset>
             </div>
             <div class="flex-item-40-percent">
diff --git a/runtime/observatory/lib/src/elements/function_view.html b/runtime/observatory/lib/src/elements/function_view.html
index 8f4eab3..47342f4 100644
--- a/runtime/observatory/lib/src/elements/function_view.html
+++ b/runtime/observatory/lib/src/elements/function_view.html
@@ -96,11 +96,13 @@
        </div>
     </div>
 
-    <hr>
-    <script-inset script="{{ function.script }}"
-                  startPos="{{ function.tokenPos }}"
-                  endPos="{{ function.endTokenPos }}">
-    </script-inset>
+    <div class="content-centered-big">
+      <hr>
+      <script-inset script="{{ function.script }}"
+                    startPos="{{ function.tokenPos }}"
+                    endPos="{{ function.endTokenPos }}">
+      </script-inset>
+    </div>
 
     <view-footer></view-footer>
   </template>
diff --git a/runtime/observatory/lib/src/elements/nav_bar.html b/runtime/observatory/lib/src/elements/nav_bar.html
index 218b75d..e9c782e 100644
--- a/runtime/observatory/lib/src/elements/nav_bar.html
+++ b/runtime/observatory/lib/src/elements/nav_bar.html
@@ -333,6 +333,13 @@
         <a class="boxclose" on-click="{{ closeItem }}">&times;</a>
       </div>
     </template>
+    <template if="{{ event.eventType == 'Inspect' }}">
+      <div class="item">
+        Inspect <any-service-ref ref="{{ event.inspectee }}"></any-service-ref>
+        <br><br>
+        <a class="boxclose" on-click="{{ closeItem }}">&times;</a>
+      </div>
+    </template>
   </template>
 </polymer-element>
 
diff --git a/runtime/observatory/lib/src/elements/observatory_element.dart b/runtime/observatory/lib/src/elements/observatory_element.dart
index f516bac..8efc7b5 100644
--- a/runtime/observatory/lib/src/elements/observatory_element.dart
+++ b/runtime/observatory/lib/src/elements/observatory_element.dart
@@ -196,4 +196,35 @@
     anchorElement.onClick.listen(onClickGoto);
     shadowRoot.children.add(anchorElement);
   }
+
+
+  var _onCopySubscription;
+  /// Exclude nodes from being copied, for example the line numbers and
+  /// breakpoint toggles in script insets. Must be called after [root]'s
+  /// children have been added, and only supports one node at a time.
+  void makeCssClassUncopyable(Element root, String className) {
+    var noCopyNodes = root.getElementsByClassName(className);
+    for (var node in noCopyNodes) {
+      node.style.setProperty('-moz-user-select', 'none');
+      node.style.setProperty('-khtml-user-select', 'none');
+      node.style.setProperty('-webkit-user-select', 'none');
+      node.style.setProperty('-ms-user-select', 'none');
+      node.style.setProperty('user-select', 'none');
+    }
+    if (_onCopySubscription != null) {
+      _onCopySubscription.cancel();
+    }
+    _onCopySubscription = root.onCopy.listen((event) {
+      // Mark the nodes as hidden before the copy happens, then mark them as
+      // visible on the next event loop turn.
+      for (var node in noCopyNodes) {
+        node.style.visibility = 'hidden';
+      }
+      Timer.run(() {
+        for (var node in noCopyNodes) {
+          node.style.visibility = 'visible';
+        }
+      });
+    });
+  }
 }
diff --git a/runtime/observatory/lib/src/elements/script_inset.dart b/runtime/observatory/lib/src/elements/script_inset.dart
index 1c158c0..f2610bc 100644
--- a/runtime/observatory/lib/src/elements/script_inset.dart
+++ b/runtime/observatory/lib/src/elements/script_inset.dart
@@ -9,6 +9,7 @@
 import 'observatory_element.dart';
 import 'service_ref.dart';
 import 'package:observatory/service.dart';
+import 'package:observatory/utils.dart';
 import 'package:polymer/polymer.dart';
 
 const nbsp = "\u00A0";
@@ -95,6 +96,24 @@
   }
 }
 
+class LocalVariableAnnotation extends Annotation {
+  final value;
+
+  LocalVariableAnnotation(LocalVarLocation location, this.value) {
+    line = location.line;
+    columnStart = location.column;
+    columnStop = location.endColumn;
+  }
+
+  void applyStyleTo(element) {
+    if (element == null) {
+      return;  // TODO(rmacnak): Handling overlapping annotations.
+    }
+    element.style.fontWeight = "bold";
+    element.title = "${value.shortName}";
+  }
+}
+
 class CallSiteAnnotation extends Annotation {
   CallSite callSite;
 
@@ -219,6 +238,7 @@
   @published int startPos;
   @published int endPos;
   @published bool inDebuggerContext = false;
+  @published ObservableList variables;
 
   int _currentLine;
   int _currentCol;
@@ -251,20 +271,24 @@
   }
 
   void currentPosChanged(oldValue) {
-    update();
+    _updateTask.queue();
     _scrollToCurrentPos();
   }
 
   void startPosChanged(oldValue) {
-    update();
+    _updateTask.queue();
   }
 
   void endPosChanged(oldValue) {
-    update();
+    _updateTask.queue();
   }
 
   void scriptChanged(oldValue) {
-    update();
+    _updateTask.queue();
+  }
+
+  void variablesChanged(oldValue) {
+    _updateTask.queue();
   }
 
   Element a(String text) => new AnchorElement()..text = text;
@@ -288,7 +312,9 @@
 
   Element container;
 
+  Task _updateTask;
   void update() {
+    assert(_updateTask != null);
     if (script == null) {
       // We may have previously had a script.
       if (container != null) {
@@ -315,6 +341,7 @@
     }
     container.children.clear();
     container.children.add(table);
+    makeCssClassUncopyable(table, "noCopy");
   }
 
   void loadFunctionsOf(Library lib) {
@@ -376,6 +403,22 @@
       }
     }
 
+    // We have local variable information.
+    if (variables != null) {
+      // For each variable.
+      for (var variable in variables) {
+        // Find variable usage locations.
+        var locations = script.scanForLocalVariableLocations(
+              variable['name'], variable['tokenPos'], variable['endTokenPos']);
+
+        // Annotate locations.
+        for (var location in locations) {
+          annotations.add(new LocalVariableAnnotation(location,
+                                                      variable['value']));
+        }
+      }
+    }
+
     annotations.sort();
   }
 
@@ -449,25 +492,25 @@
     var busy = false;
     if (line == null || !line.possibleBpt) {
       e.classes.add("emptyBreakpoint");
+      e.classes.add('noCopy');
       e.text = nbsp;
       return e;
     }
     e.text = 'B';
     update() {
+      e.classes.clear();
+      e.classes.add('noCopy');
+
       if (busy) {
-        e.classes.clear();
         e.classes.add("busyBreakpoint");
       } else {
         if (line.breakpoints != null) {
           if (line.breakpointResolved) {
-            e.classes.clear();
             e.classes.add("resolvedBreakpoint");
           } else {
-            e.classes.clear();
             e.classes.add("unresolvedBreakpoint");
           }
         } else {
-          e.classes.clear();
           e.classes.add("possibleBreakpoint");
         }
       }
@@ -504,6 +547,7 @@
   Element lineNumberElement(ScriptLine line) {
     var lineNumber = line == null ? "..." : line.line;
     var e = span("$nbsp$lineNumber$nbsp");
+    e.classes.add('noCopy');
 
     if ((line == null) || (line.hits == null)) {
       hitsUnknown(e);
@@ -553,8 +597,14 @@
       consumeUntil(line.text.length);
     }
 
+    // So blank lines are included when copying script to the clipboard.
+    e.append(span('\n'));
+
     return e;
   }
 
-  ScriptInsetElement.created() : super.created();
+  ScriptInsetElement.created()
+      : super.created() {
+    _updateTask = new Task(update);
+  }
 }
diff --git a/runtime/observatory/lib/src/elements/script_inset.html b/runtime/observatory/lib/src/elements/script_inset.html
index 313a84f..7fdbcbf 100644
--- a/runtime/observatory/lib/src/elements/script_inset.html
+++ b/runtime/observatory/lib/src/elements/script_inset.html
@@ -7,50 +7,51 @@
       .sourceInset {
       }
       .sourceTable {
-      display: table;
-      background-color: #f5f5f5;
-      border: 1px solid #ccc;
-      padding: 10px;
-      overflow-y: auto;
-      width: 100%;
-      box-sizing: border-box;
+        display: table;
+        background-color: #f5f5f5;
+        border: 1px solid #ccc;
+        padding: 10px;
+        width: 100%;
+        box-sizing: border-box;
       }
       .sourceRow {
-      display: table-row;
+        display: table-row;
       }
       .sourceItem, .sourceItemCurrent {
-      display: table-cell;
-      vertical-align: top;
-      font: 400 14px consolas, courier, monospace;
-      line-height: 125%;
-      white-space: pre;
+        display: table-cell;
+        vertical-align: top;
+        font: 400 14px consolas, courier, monospace;
+        line-height: 125%;
+        white-space: pre;
+        max-width: 0;
+	overflow-x: hidden;
       }
       .currentLine {
-      background-color: #fff;
+        background-color: #fff;
       }
       .currentCol {
-      background-color: #6cf;
+        background-color: #6cf;
       }
       .hitsNone, .hitsNotExecuted, .hitsExecuted {
-      display: table-cell;
-      vertical-align: top;
-      font: 400 14px consolas, courier, monospace;
-      min-width: 32px;
-      text-align: right;
-      color: #a8a8a8;
+        display: table-cell;
+        vertical-align: top;
+        font: 400 14px consolas, courier, monospace;
+        width: 4em;
+        text-align: right;
+        color: #a8a8a8;
       }
       .hitsNotExecuted {
-      background-color: #EEA7A7;
+        background-color: #EEA7A7;
       }
       .hitsExecuted {
-      background-color: #9BDD9B;
+        background-color: #9BDD9B;
       }
-
+      .noCopy {}
       .emptyBreakpoint, .possibleBreakpoint, .busyBreakpoint, .unresolvedBreakpoint, .resolvedBreakpoint  {
         display: table-cell;
         vertical-align: top;
         font: 400 14px consolas, courier, monospace;
-        min-width: 1em;
+        width: 1em;
         text-align: center;
         cursor: pointer;
       }
diff --git a/runtime/observatory/lib/src/elements/script_view.html b/runtime/observatory/lib/src/elements/script_view.html
index a4aa02d..575a1ce 100644
--- a/runtime/observatory/lib/src/elements/script_view.html
+++ b/runtime/observatory/lib/src/elements/script_view.html
@@ -17,18 +17,13 @@
     <nav-refresh callback="{{ refresh }}"></nav-refresh>
   </nav-bar>
 
-  <template if="{{ app.locationManager.internalArguments['pos'] == null }}">
-    <script-inset id="scriptInset" script="{{ script }}">
-      <h1>script {{ script.name }}</h1>
-    </script-inset>
-  </template>
-
-  <template if="{{ app.locationManager.internalArguments['pos'] != null }}">
+  <div class="content-centered-big">
+    <h1>script {{ script.name }}</h1>
+    <hr>
     <script-inset id="scriptInset" script="{{ script }}"
                   currentPos="{{ app.locationManager.internalArguments['pos'] | parseInt }}">
-      <h1>script {{ script.name }}</h1>
     </script-inset>
-  </template>
+  </div>
 
   <view-footer></view-footer>
 </template>
diff --git a/runtime/observatory/lib/src/elements/view_footer.html b/runtime/observatory/lib/src/elements/view_footer.html
index f5816d5..aa82cca 100644
--- a/runtime/observatory/lib/src/elements/view_footer.html
+++ b/runtime/observatory/lib/src/elements/view_footer.html
@@ -5,16 +5,18 @@
   <template><link rel="stylesheet" href="css/shared.css">
     <br><br><br><br>
     <br><br><br><br>
-    <p align="right">
-      <a href="https://www.dartlang.org/tools/observatory/">
+    <div align="right" style="padding: 1em">
+    <p>
+      <a href="https://www.dartlang.org/tools/observatory/" style="font-size:90%">
 	View documentation
       </a>
     </p>
-    <p align="right">
-      <a href="https://code.google.com/p/dart/issues/entry?template=Observatory">
+    <p>
+      <a href="https://code.google.com/p/dart/issues/entry?template=Observatory" style="font-size:90%">
         File a bug report
       </a>
     </p>
+   </div>
   </template>
 </polymer-element>
 
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 44d7d65..fb119f8 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -1067,6 +1067,7 @@
     switch(event.eventType) {
       case ServiceEvent.kIsolateStart:
       case ServiceEvent.kIsolateExit:
+      case ServiceEvent.kInspect:
         // Handled elsewhere.
         break;
 
@@ -1455,6 +1456,7 @@
   static const kBreakpointRemoved  = 'BreakpointRemoved';
   static const kGraph              = '_Graph';
   static const kGC                 = 'GC';
+  static const kInspect            = 'Inspect';
   static const kConnectionClosed   = 'ConnectionClosed';
 
   ServiceEvent._empty(ServiceObjectOwner owner) : super._empty(owner);
@@ -1467,6 +1469,7 @@
   @observable Breakpoint breakpoint;
   @observable ServiceMap topFrame;
   @observable ServiceMap exception;
+  @observable ServiceObject inspectee;
   @observable ByteData data;
   @observable int count;
   @observable String reason;
@@ -1487,6 +1490,9 @@
     if (map['exception'] != null) {
       exception = map['exception'];
     }
+    if (map['inspectee'] != null) {
+      inspectee = map['inspectee'];
+    }
     if (map['_data'] != null) {
       data = map['_data'];
     }
@@ -1824,7 +1830,15 @@
     _loaded = true;
   }
 
-  String get shortName => valueAsString != null ? valueAsString : 'a ${clazz.name}';
+  String get shortName {
+    if (isClosure) {
+      return closureFunc.qualifiedName;
+    }
+    if (valueAsString != null) {
+      return valueAsString;
+    }
+    return 'a ${clazz.name}';
+  }
 
   String toString() => 'Instance($shortName)';
 }
@@ -2062,6 +2076,8 @@
   }
   bool _isBlank;
 
+  bool get isTrivialLine => !possibleBpt;
+
   static bool _isTrivialToken(String token) {
     if (token == 'else') {
       return true;
@@ -2082,6 +2098,9 @@
   }
 
   static bool _isTrivialLine(String text) {
+    if (text.trimLeft().startsWith('//')) {
+      return true;
+    }
     var wsTokens = text.split(new RegExp(r"(\s)+"));
     for (var wsToken in wsTokens) {
       var tokens = wsToken.split(new RegExp(r"(\b)"));
@@ -2169,6 +2188,14 @@
   String toString() => "CallSiteEntry(${receiverContainer.name}, $count)";
 }
 
+/// The location of a local variable reference in a script.
+class LocalVarLocation {
+  final int line;
+  final int column;
+  final int endColumn;
+  LocalVarLocation(this.line, this.column, this.endColumn);
+}
+
 class Script extends ServiceObject with Coverage {
   Set<CallSite> callSites = new Set<CallSite>();
   final lines = new ObservableList<ScriptLine>();
@@ -2325,6 +2352,120 @@
       getLine(line).removeBreakpoint(bpt);
     }
   }
+
+  List<LocalVarLocation> scanLineForLocalVariableLocations(Pattern pattern,
+                                                            String name,
+                                                            String lineContents,
+                                                            int lineNumber,
+                                                            int columnOffset) {
+    var r = <LocalVarLocation>[];
+
+    pattern.allMatches(lineContents).forEach((Match match) {
+      // We have a match but our regular expression may have matched extra
+      // characters on either side of the name. Tighten the location.
+      var nameStart = match.input.indexOf(name, match.start);
+      var column = nameStart + columnOffset;
+      var endColumn = column + name.length;
+      var localVarLocation = new LocalVarLocation(lineNumber,
+                                                  column,
+                                                  endColumn);
+      r.add(localVarLocation);
+    });
+
+    return r;
+  }
+
+  List<LocalVarLocation> scanForLocalVariableLocations(String name,
+                                                       int tokenPos,
+                                                       int endTokenPos) {
+    // A pattern that matches:
+    // start of line OR non-(alpha numeric OR period) character followed by
+    // name followed by
+    // a non-alpha numerc character.
+    //
+    // NOTE: This pattern can over match on both ends. This is corrected for
+    // [scanLineForLocalVariableLocationse].
+    var pattern = new RegExp("(^|[^A-Za-z0-9\.])$name[^A-Za-z0-9]");
+
+    // Result.
+    var r = <LocalVarLocation>[];
+
+    // Limits.
+    final lastLine = tokenToLine(endTokenPos);
+    if (lastLine == null) {
+      return r;
+    }
+    
+    final lastColumn = tokenToCol(endTokenPos);
+    if (lastColumn == null) {
+      return r;
+    }
+    // Current scan position.
+    var line = tokenToLine(tokenPos);
+    if (line == null) {
+      return r;
+    }
+    var column = tokenToCol(tokenPos);
+    if (column == null) {
+      return r;
+    }
+
+    // Move back by name length.
+    // TODO(johnmccutchan): Fix LocalVarDescriptor to set column before the
+    // identifier name.
+    column = math.max(0, column - name.length);
+
+    var lineContents;
+
+    if (line == lastLine) {
+      // Only one line.
+      if (!getLine(line).isTrivialLine) {
+        lineContents = getLine(line).text.substring(column, lastColumn - 1);
+        return scanLineForLocalVariableLocations(pattern,
+                                                  name,
+                                                  lineContents,
+                                                  line,
+                                                  column);
+      }
+    }
+
+    // Scan first line.
+    if (!getLine(line).isTrivialLine) {
+      lineContents = getLine(line).text.substring(column);
+      r.addAll(scanLineForLocalVariableLocations(pattern,
+                                                  name,
+                                                  lineContents,
+                                                  line++,
+                                                  column));
+    }
+
+    // Scan middle lines.
+    while (line < (lastLine - 1)) {
+      if (getLine(line).isTrivialLine) {
+        line++;
+        continue;
+      }
+      lineContents = getLine(line).text;
+      r.addAll(
+          scanLineForLocalVariableLocations(pattern,
+                                             name,
+                                             lineContents,
+                                             line++,
+                                             0));
+    }
+
+    // Scan last line.
+    if (!getLine(line).isTrivialLine) {
+      lineContents = getLine(line).text.substring(0, lastColumn - 1);
+      r.addAll(
+          scanLineForLocalVariableLocations(pattern,
+                                             name,
+                                             lineContents,
+                                             line,
+                                             0));
+    }
+    return r;
+  }
 }
 
 class PcDescriptor extends Observable {
diff --git a/runtime/observatory/lib/utils.dart b/runtime/observatory/lib/utils.dart
index 522a11e..c696529 100644
--- a/runtime/observatory/lib/utils.dart
+++ b/runtime/observatory/lib/utils.dart
@@ -4,6 +4,7 @@
 
 library utils;
 
+import 'dart:async';
 import 'dart:math';
 
 class Utils {
@@ -140,3 +141,24 @@
 
   static bool runningInJavaScript() => identical(1.0, 1);
 }
+
+/// A [Task] that can be scheduled on the Dart event queue.
+class Task {
+  Timer _timer;
+  final Function callback;
+
+  Task(this.callback);
+
+  /// Queue [this] to run on the next Dart event queue pump. Does nothing
+  /// if [this] is already queued.
+  queue() {
+    if (_timer != null) {
+      // Already scheduled.
+      return;
+    }
+    _timer = new Timer(Duration.ZERO, () {
+     _timer = null;
+     callback();
+    });
+  }
+}
diff --git a/runtime/observatory/maintainers/pubspec.template b/runtime/observatory/maintainers/pubspec.template
index c6b306c..daed864 100644
--- a/runtime/observatory/maintainers/pubspec.template
+++ b/runtime/observatory/maintainers/pubspec.template
@@ -12,6 +12,7 @@
     commandLineOptions: [--show-package-warnings]
 dependencies:
   args: any
+  charted: any
   polymer: any
-  unittest: any
+  unittest: < 0.12.0
   usage: any
diff --git a/runtime/observatory/observatory.gypi b/runtime/observatory/observatory.gypi
index a53185f..156caad 100644
--- a/runtime/observatory/observatory.gypi
+++ b/runtime/observatory/observatory.gypi
@@ -63,7 +63,7 @@
           ],
           'outputs': [
             '<(PRODUCT_DIR)/observatory/build/web/index.html',
-            '<(PRODUCT_DIR)/observatory/build/web/index.html_bootstrap.dart.js',
+            '<(PRODUCT_DIR)/observatory/build/web/index.html.polymer.bootstrap.dart.js',
           ],
           'action': [
             'python',
@@ -81,11 +81,11 @@
           'inputs': [
             '../../tools/observatory_tool.py',
             '<(PRODUCT_DIR)/observatory/build/web/index.html',
-            '<(PRODUCT_DIR)/observatory/build/web/index.html_bootstrap.dart.js',
+            '<(PRODUCT_DIR)/observatory/build/web/index.html.polymer.bootstrap.dart.js',
           ],
           'outputs': [
             '<(PRODUCT_DIR)/observatory/deployed/web/index.html',
-            '<(PRODUCT_DIR)/observatory/deployed/web/index.html_bootstrap.dart.js',
+            '<(PRODUCT_DIR)/observatory/deployed/web/index.html.polymer.bootstrap.dart.js',
           ],
           'action': [
             'python',
diff --git a/runtime/observatory/pubspec.yaml b/runtime/observatory/pubspec.yaml
index ccdc3f7..294aa1d 100644
--- a/runtime/observatory/pubspec.yaml
+++ b/runtime/observatory/pubspec.yaml
@@ -7,13 +7,14 @@
     inline_stylesheets:
       lib/src/elements/css/shared.css: false
 - $dart2js:
+    $include: "**/*.polymer.bootstrap.dart"
     suppressWarnings: false
-    $exclude: web/main.dart
     commandLineOptions: [--show-package-warnings]
 dependencies:
   args: any
+  charted: any
   polymer: any
-  unittest: any
+  unittest: < 0.12.0
   usage: any
 dependency_overrides:
   analyzer:
@@ -24,6 +25,8 @@
     path: ../../third_party/observatory_pub_packages/barback
   browser:
     path: ../../third_party/observatory_pub_packages/browser
+  charted:
+    path: ../../third_party/observatory_pub_packages/charted
   cli_util:
     path: ../../third_party/observatory_pub_packages/cli_util
   code_transformers:
@@ -36,10 +39,12 @@
     path: ../../third_party/observatory_pub_packages/dart_style
   glob:
     path: ../../third_party/observatory_pub_packages/glob
-  html5lib:
-    path: ../../third_party/observatory_pub_packages/html5lib
+  html:
+    path: ../../third_party/observatory_pub_packages/html
   initialize:
     path: ../../third_party/observatory_pub_packages/initialize
+  intl:
+    path: ../../third_party/observatory_pub_packages/intl
   logging:
     path: ../../third_party/observatory_pub_packages/logging
   matcher:
@@ -48,12 +53,18 @@
     path: ../../third_party/observatory_pub_packages/observe
   path:
     path: ../../third_party/observatory_pub_packages/path
+  petitparser:
+    path: ../../third_party/observatory_pub_packages/petitparser
   polymer:
     path: ../../third_party/observatory_pub_packages/polymer
   polymer_expressions:
     path: ../../third_party/observatory_pub_packages/polymer_expressions
+  polymer_interop:
+    path: ../../third_party/observatory_pub_packages/polymer_interop
   pool:
     path: ../../third_party/observatory_pub_packages/pool
+  quiver:
+    path: ../../third_party/observatory_pub_packages/quiver
   smoke:
     path: ../../third_party/observatory_pub_packages/smoke
   source_maps:
diff --git a/runtime/observatory/tests/service/debugger_inspect_test.dart b/runtime/observatory/tests/service/debugger_inspect_test.dart
new file mode 100644
index 0000000..5960665
--- /dev/null
+++ b/runtime/observatory/tests/service/debugger_inspect_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// VMOptions=--compile-all --error_on_bad_type --error_on_bad_override
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+import 'dart:async';
+import 'dart:developer';
+
+class Point {
+  int x, y;
+  Point(this.x, this.y);
+}
+
+void testeeDo() {
+  inspect(new Point(3, 4));
+}
+
+var tests = [
+
+(Isolate isolate) async {
+  Completer completer = new Completer();
+  var subscription;
+  subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
+    print(event);
+    if (event.eventType == ServiceEvent.kInspect) {
+      expect((event.inspectee as Instance).clazz.name, equals('Point'));
+
+      subscription.cancel();
+      completer.complete();
+    }
+  });
+
+  // Start listening for events first.
+  await isolate.eval(isolate.rootLib, 'testeeDo();');
+  return completer.future;
+},
+
+];
+
+main(args) => runIsolateTests(args, tests);
diff --git a/runtime/observatory/tests/service/get_stack_rpc_test.dart b/runtime/observatory/tests/service/get_stack_rpc_test.dart
index e503527..7c253aa 100644
--- a/runtime/observatory/tests/service/get_stack_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_stack_rpc_test.dart
@@ -8,19 +8,18 @@
 import 'test_helper.dart';
 import 'dart:async';
 import 'dart:isolate' as isolate;
+import 'dart:developer' as developer;
 
 int counter = 0;
 const stoppedAtLine = 23;
 var port = new isolate.RawReceivePort(msgHandler);
 
 // This name is used in a test below.
-void msgHandler(_) {
-}
+void msgHandler(_) { }
 
 void periodicTask(_) {
-  counter++;
   port.sendPort.send(34);
-  counter++;  // Line 23.  We set our breakpoint here.
+  developer.debugger(msg: "foo", when: true); // We will be at the next line.
   counter++;
   if (counter % 300 == 0) {
     print('counter = $counter');
@@ -33,34 +32,14 @@
 
 var tests = [
 
-// Add breakpoint
+// Initial data fetch and verify we've hit the breakpoint.
 (Isolate isolate) async {
   await isolate.rootLib.load();
-
-  // Set up a listener to wait for breakpoint events.
-  Completer completer = new Completer();
-  var subscription;
-  subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
-    if (event.eventType == ServiceEvent.kPauseBreakpoint) {
-      print('Breakpoint reached');
-      subscription.cancel();
-      completer.complete();
-    }
-  });
-
   var script = isolate.rootLib.scripts[0];
   await script.load();
-
-  // Add the breakpoint.
-  var result = await isolate.addBreakpoint(script, stoppedAtLine);
-  expect(result is Breakpoint, isTrue);
-  Breakpoint bpt = result;
-  expect(bpt.type, equals('Breakpoint'));
-  expect(bpt.script.id, equals(script.id));
-  expect(bpt.script.tokenToLine(bpt.tokenPos), equals(stoppedAtLine));
-  expect(isolate.breakpoints.length, equals(1));
-
-  await completer.future;  // Wait for breakpoint events.
+  await hasStoppedAtBreakpoint(isolate);
+  // Sanity check.
+  expect(isolate.pauseEvent.eventType, equals(ServiceEvent.kPauseBreakpoint));
 },
 
 // Get stack
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 415f062..ce688fb 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -26,11 +26,6 @@
 [ $arch == simarm || $arch == simmips || $arch == simarm64]
 *: SkipSlow
 
-# The transformations of dart2dart are not guaranteed to preserve the
-# state/properties of the VM that the Observatory tests are inspecting.
-[ $compiler == dart2dart ]
-*: Skip
-
 # All tests use dart:io
 [ $browser || $compiler == dart2js ]
 *: SkipByDesign
diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
index 5fd2344..fd63933 100644
--- a/runtime/observatory/tests/service/test_helper.dart
+++ b/runtime/observatory/tests/service/test_helper.dart
@@ -151,6 +151,28 @@
 }
 
 
+Future<Isolate> hasStoppedAtBreakpoint(Isolate isolate) {
+  if ((isolate.pauseEvent != null) &&
+      (isolate.pauseEvent.eventType == ServiceEvent.kPauseBreakpoint)) {
+    // Already waiting at a breakpoint.
+    print('Breakpoint reached');
+    return new Future.value(isolate);
+  }
+
+  // Set up a listener to wait for breakpoint events.
+  Completer completer = new Completer();
+  var subscription;
+  subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
+    if (event.eventType == ServiceEvent.kPauseBreakpoint) {
+      print('Breakpoint reached');
+      subscription.cancel();
+      completer.complete(isolate);
+    }
+  });
+
+  return completer.future;  // Will complete when breakpoint hit.
+}
+
 /// Runs [tests] in sequence, each of which should take an [Isolate] and
 /// return a [Future]. Code for setting up state can run before and/or
 /// concurrently with the tests. Uses [mainArgs] to determine whether
diff --git a/runtime/observatory/web/main.dart b/runtime/observatory/web/main.dart
index 09ad356..8e316d9 100644
--- a/runtime/observatory/web/main.dart
+++ b/runtime/observatory/web/main.dart
@@ -21,7 +21,7 @@
   Logger.root.info('Starting Observatory');
   GoogleChart.initOnce().then((_) {
     // Charts loaded, initialize polymer.
-    initPolymer().run(() {
+    initPolymer().then((zone) {
       Logger.root.info('Polymer initialized');
       // Code here is in the polymer Zone, which ensures that
       // @observable properties work correctly.
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index e04f9c2..52f40f1 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -69,21 +69,12 @@
 # Data uri's not supported by dart2js or the analyzer.
 dart/data_uri*test: Skip
 
-[ $compiler == dart2js && $cps_ir ]
-dart/error_stacktrace_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dart/inline_stack_frame_test: Crash # (throw new ExpectException(message)): Unhandled node
-dart/optimized_stacktrace_test: Crash # (throw new ExpectException(message)): Unhandled node
-
 [ $runtime == vm ]
 dart/data_uri_failures_test/wrongmime: RuntimeError, OK # VM is more restrictive than the browser
 dart/data_uri_failures_test/nomime: RuntimeError, OK
 dart/data_uri_failures_test/nocharset: RuntimeError, OK
 dart/data_uri_failures_test/base64: RuntimeError, OK
 
-[ $compiler == dart2dart ]
-# Skip until we stabilize language tests.
-*: Skip
-
 [ $arch == mips ]
 cc/StaticNonNullSumCallCodegen: Crash, Pass # Issue 17440
 cc/ArrayLengthMaxElements: Crash  # Issue 23275
@@ -99,3 +90,6 @@
 
 [ $runtime == vm && $mode == debug && $builder_tag == asan ]
 cc/Dart2JSCompileAll: Skip  # Timeout.
+
+[ $compiler == dart2js && $cps_ir ]
+dart/error_stacktrace_test: RuntimeError # Please triage this failure.
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index bbb204c..27189b0 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -8,10 +8,11 @@
   ]
 
   if (!is_android) {
-    libs += [
-      "pthread",
-      "rt",
-    ]
+    libs += [ "pthread" ]
+
+    if (is_linux) {
+      libs += [ "rt" ]
+    }
   }
 }
 
@@ -171,12 +172,13 @@
     ["core", "core"],
     ["collection", "collection"],
     ["convert", "convert"],
+    ["debugger", "debugger"],
     ["_internal", "internal"],
     ["isolate", "isolate"],
     ["math", "math"],
     ["mirrors", "mirrors"],
-    ["typed_data", "typed_data"],
     ["profiler", "profiler"],
+    ["typed_data", "typed_data"],
   ]
 }
 
diff --git a/runtime/vm/assembler_arm64.h b/runtime/vm/assembler_arm64.h
index 90334b9..7876345 100644
--- a/runtime/vm/assembler_arm64.h
+++ b/runtime/vm/assembler_arm64.h
@@ -660,6 +660,11 @@
     EmitLogicalShiftOp(BICS, rd, rn, o, kDoubleWord);
   }
 
+  // Count leading zero bits.
+  void clz(Register rd, Register rn) {
+    EmitMiscDP1Source(CLZ, rd, rn, kDoubleWord);
+  }
+
   // Misc. arithmetic.
   void udiv(Register rd, Register rn, Register rm) {
     EmitMiscDP2Source(UDIV, rd, rn, rm, kDoubleWord);
@@ -1782,6 +1787,21 @@
     Emit(encoding);
   }
 
+  void EmitMiscDP1Source(MiscDP1SourceOp op,
+                         Register rd, Register rn,
+                         OperandSize sz) {
+    ASSERT((rd != CSP) && (rn != CSP));
+    ASSERT((sz == kDoubleWord) || (sz == kWord) || (sz == kUnsignedWord));
+    const Register crd = ConcreteRegister(rd);
+    const Register crn = ConcreteRegister(rn);
+    const int32_t size = (sz == kDoubleWord) ? B31 : 0;
+    const int32_t encoding =
+        op | size |
+        (static_cast<int32_t>(crd) << kRdShift) |
+        (static_cast<int32_t>(crn) << kRnShift);
+    Emit(encoding);
+  }
+
   void EmitMiscDP2Source(MiscDP2SourceOp op,
                          Register rd, Register rn, Register rm,
                          OperandSize sz) {
diff --git a/runtime/vm/assembler_arm64_test.cc b/runtime/vm/assembler_arm64_test.cc
index fe7f15d..a23abd3 100644
--- a/runtime/vm/assembler_arm64_test.cc
+++ b/runtime/vm/assembler_arm64_test.cc
@@ -723,6 +723,38 @@
 }
 
 
+ASSEMBLER_TEST_GENERATE(Clz, assembler) {
+  Label error;
+
+  __ clz(R1, ZR);
+  __ cmp(R1, Operand(64));
+  __ b(&error, NE);
+  __ LoadImmediate(R2, 42, kNoPP);
+  __ clz(R2, R2);
+  __ cmp(R2, Operand(58));
+  __ b(&error, NE);
+  __ LoadImmediate(R0, -1, kNoPP);
+  __ clz(R1, R0);
+  __ cmp(R1, Operand(0));
+  __ b(&error, NE);
+  __ add(R0, ZR, Operand(R0, LSR, 3));
+  __ clz(R1, R0);
+  __ cmp(R1, Operand(3));
+  __ b(&error, NE);
+  __ mov(R0, ZR);
+  __ ret();
+  __ Bind(&error);
+  __ LoadImmediate(R0, 1, kNoPP);
+  __ ret();
+}
+
+
+ASSEMBLER_TEST_RUN(Clz, test) {
+  typedef int64_t (*Int64Return)() DART_UNUSED;
+  EXPECT_EQ(0, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+}
+
+
 // Comparisons, branching.
 ASSEMBLER_TEST_GENERATE(BranchALForward, assembler) {
   Label l;
diff --git a/runtime/vm/ast.cc b/runtime/vm/ast.cc
index b66ad44..613b46c 100644
--- a/runtime/vm/ast.cc
+++ b/runtime/vm/ast.cc
@@ -12,8 +12,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
-
 #define DEFINE_VISIT_FUNCTION(BaseName)                                        \
 void BaseName##Node::Visit(AstNodeVisitor* visitor) {                          \
   visitor->Visit##BaseName##Node(this);                                        \
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index 1ac1186..eb5f16d 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -280,7 +280,7 @@
   const char* path_separator = File::PathSeparator();
   OS::SNPrint(buffer, 2048, packages_path,
               executable_path, path_separator, path_separator);
-  bin::DartUtils::PrepareForScriptLoading(buffer, false, builtin_lib);
+  bin::DartUtils::PrepareForScriptLoading(buffer, false, false, builtin_lib);
 }
 
 BENCHMARK(Dart2JSCompileAll) {
diff --git a/runtime/vm/bootstrap.cc b/runtime/vm/bootstrap.cc
index b66e18c..c76ea3a 100644
--- a/runtime/vm/bootstrap.cc
+++ b/runtime/vm/bootstrap.cc
@@ -47,6 +47,10 @@
                collection,
                Bootstrap::collection_source_paths_,
                Bootstrap::collection_patch_paths_),
+  INIT_LIBRARY(ObjectStore::kDeveloper,
+               developer,
+               Bootstrap::developer_source_paths_,
+               Bootstrap::developer_patch_paths_),
   INIT_LIBRARY(ObjectStore::kInternal,
                _internal,
                Bootstrap::_internal_source_paths_,
@@ -63,16 +67,14 @@
                mirrors,
                Bootstrap::mirrors_source_paths_,
                Bootstrap::mirrors_patch_paths_),
-  INIT_LIBRARY(ObjectStore::kTypedData,
-               typed_data,
-               Bootstrap::typed_data_source_paths_,
-               Bootstrap::typed_data_patch_paths_),
-
   INIT_LIBRARY(ObjectStore::kProfiler,
                profiler,
                Bootstrap::profiler_source_paths_,
                Bootstrap::profiler_patch_paths_),
-
+  INIT_LIBRARY(ObjectStore::kTypedData,
+               typed_data,
+               Bootstrap::typed_data_source_paths_,
+               Bootstrap::typed_data_patch_paths_),
   { ObjectStore::kNone, NULL, NULL, NULL, NULL }
 };
 
diff --git a/runtime/vm/bootstrap.h b/runtime/vm/bootstrap.h
index 3419828..76758b6 100644
--- a/runtime/vm/bootstrap.h
+++ b/runtime/vm/bootstrap.h
@@ -24,13 +24,14 @@
   static const char* core_source_paths_[];
   static const char* collection_source_paths_[];
   static const char* convert_source_paths_[];
+  static const char* developer_source_paths_[];
   static const char* _internal_source_paths_[];
   static const char* isolate_source_paths_[];
   static const char* json_source_paths_[];
   static const char* math_source_paths_[];
   static const char* mirrors_source_paths_[];
-  static const char* typed_data_source_paths_[];
   static const char* profiler_source_paths_[];
+  static const char* typed_data_source_paths_[];
   static const char* utf_source_paths_[];
 
   // Source path mapping for patch URI and 'parts'.
@@ -38,12 +39,13 @@
   static const char* core_patch_paths_[];
   static const char* collection_patch_paths_[];
   static const char* convert_patch_paths_[];
+  static const char* developer_patch_paths_[];
   static const char* _internal_patch_paths_[];
   static const char* isolate_patch_paths_[];
   static const char* math_patch_paths_[];
   static const char* mirrors_patch_paths_[];
-  static const char* typed_data_patch_paths_[];
   static const char* profiler_patch_paths_[];
+  static const char* typed_data_patch_paths_[];
 };
 
 }  // namespace dart
diff --git a/runtime/vm/bootstrap_natives.cc b/runtime/vm/bootstrap_natives.cc
index 7167252..07c4928 100644
--- a/runtime/vm/bootstrap_natives.cc
+++ b/runtime/vm/bootstrap_natives.cc
@@ -95,12 +95,7 @@
   library.set_native_entry_resolver(resolver);
   library.set_native_entry_symbol_resolver(symbol_resolver);
 
-  library = Library::MathLibrary();
-  ASSERT(!library.IsNull());
-  library.set_native_entry_resolver(resolver);
-  library.set_native_entry_symbol_resolver(symbol_resolver);
-
-  library = Library::MirrorsLibrary();
+  library = Library::DeveloperLibrary();
   ASSERT(!library.IsNull());
   library.set_native_entry_resolver(resolver);
   library.set_native_entry_symbol_resolver(symbol_resolver);
@@ -115,7 +110,12 @@
   library.set_native_entry_resolver(resolver);
   library.set_native_entry_symbol_resolver(symbol_resolver);
 
-  library = Library::TypedDataLibrary();
+  library = Library::MathLibrary();
+  ASSERT(!library.IsNull());
+  library.set_native_entry_resolver(resolver);
+  library.set_native_entry_symbol_resolver(symbol_resolver);
+
+  library = Library::MirrorsLibrary();
   ASSERT(!library.IsNull());
   library.set_native_entry_resolver(resolver);
   library.set_native_entry_symbol_resolver(symbol_resolver);
@@ -124,6 +124,11 @@
   ASSERT(!library.IsNull());
   library.set_native_entry_resolver(resolver);
   library.set_native_entry_symbol_resolver(symbol_resolver);
+
+  library = Library::TypedDataLibrary();
+  ASSERT(!library.IsNull());
+  library.set_native_entry_resolver(resolver);
+  library.set_native_entry_symbol_resolver(symbol_resolver);
 }
 
 
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 33d401e..78edd2f 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -63,6 +63,8 @@
   V(Bigint_getUsed, 1)                                                         \
   V(Bigint_getDigits, 1)                                                       \
   V(Bigint_allocate, 4)                                                        \
+  V(Developer_debugger, 2)                                                     \
+  V(Developer_inspect, 1)                                                      \
   V(Double_getIsNegative, 1)                                                   \
   V(Double_getIsInfinite, 1)                                                   \
   V(Double_getIsNaN, 1)                                                        \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 5c59b2e..23c0d52 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -22,7 +22,6 @@
 DEFINE_FLAG(bool, print_classes, false, "Prints details about loaded classes.");
 DEFINE_FLAG(bool, trace_class_finalization, false, "Trace class finalization.");
 DEFINE_FLAG(bool, trace_type_finalization, false, "Trace type finalization.");
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, use_cha);
 
 
@@ -184,6 +183,7 @@
 }
 
 
+#if defined(DART_NO_SNAPSHOT)
 void ClassFinalizer::VerifyBootstrapClasses() {
   if (FLAG_trace_class_finalization) {
     OS::Print("VerifyBootstrapClasses START.\n");
@@ -247,6 +247,7 @@
   }
   Isolate::Current()->heap()->Verify();
 }
+#endif  // defined(DART_NO_SNAPSHOT).
 
 
 // Resolve unresolved_class in the library of cls, or return null.
@@ -1683,6 +1684,13 @@
           param ^= mixin_type_args.TypeAt(i);
           param_bound = param.bound();
           if (!param_bound.IsInstantiated()) {
+            // Make sure the bound is finalized before instantiating it.
+            if (!param_bound.IsFinalized() &&
+                !param_bound.IsBeingFinalized()) {
+              param_bound =
+                  FinalizeType(mixin_app_class, param_bound, kCanonicalize);
+              param.set_bound(param_bound);  // In case part of recursive type.
+            }
             param_bound = param_bound.InstantiateFrom(mixin_type_args,
                                                       &bound_error);
             // The instantiator contains only TypeParameter objects and no
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index 5515404..7a11b24 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.h
@@ -93,9 +93,11 @@
   // Finalize the class including its fields and functions.
   static void FinalizeClass(const Class& cls);
 
+#if defined(DART_NO_SNAPSHOT)
   // Verify that the classes have been properly prefinalized. This is
   // needed during bootstrapping where the classes have been preloaded.
   static void VerifyBootstrapClasses();
+#endif  // defined(DART_NO_SNAPSHOT).
 
   // Resolve the class of the type, but not the type's type arguments.
   static void ResolveTypeClass(const Class& cls, const AbstractType& type);
diff --git a/runtime/vm/code_descriptors.cc b/runtime/vm/code_descriptors.cc
index 233d1b6..cc5ad3e 100644
--- a/runtime/vm/code_descriptors.cc
+++ b/runtime/vm/code_descriptors.cc
@@ -9,38 +9,31 @@
 void DescriptorList::AddDescriptor(RawPcDescriptors::Kind kind,
                                    intptr_t pc_offset,
                                    intptr_t deopt_id,
-                                   intptr_t token_index,
+                                   intptr_t token_pos,
                                    intptr_t try_index) {
   ASSERT((kind == RawPcDescriptors::kRuntimeCall) ||
          (kind == RawPcDescriptors::kOther) ||
          (deopt_id != Isolate::kNoDeoptId));
-  struct PcDesc data;
-  data.pc_offset = pc_offset;
-  data.kind = kind;
-  data.deopt_id = deopt_id;
-  data.SetTokenPos(token_index);
-  data.try_index = try_index;
-  list_.Add(data);
-  if (try_index >= 0) {
-    has_try_index_ = true;
-  }
+
+  PcDescriptors::EncodeInteger(&delta_encoded_data_,
+                               static_cast<intptr_t>(kind));
+  PcDescriptors::EncodeInteger(&delta_encoded_data_,
+                               try_index);
+  PcDescriptors::EncodeInteger(&delta_encoded_data_,
+                               pc_offset - prev_pc_offset);
+  PcDescriptors::EncodeInteger(&delta_encoded_data_,
+                               deopt_id - prev_deopt_id);
+  PcDescriptors::EncodeInteger(&delta_encoded_data_,
+                               token_pos - prev_token_pos);
+
+  prev_pc_offset = pc_offset;
+  prev_deopt_id = deopt_id;
+  prev_token_pos = token_pos;
 }
 
 
 RawPcDescriptors* DescriptorList::FinalizePcDescriptors(uword entry_point) {
-  intptr_t num_descriptors = Length();
-  const PcDescriptors& descriptors =
-      PcDescriptors::Handle(PcDescriptors::New(num_descriptors,
-                                               has_try_index_));
-  for (intptr_t i = 0; i < num_descriptors; i++) {
-    descriptors.AddDescriptor(i,
-                              PcOffset(i),
-                              Kind(i),
-                              DeoptId(i),
-                              TokenPos(i),
-                              TryIndex(i));
-  }
-  return descriptors.raw();
+  return PcDescriptors::New(&delta_encoded_data_);
 }
 
 
diff --git a/runtime/vm/code_descriptors.h b/runtime/vm/code_descriptors.h
index 796f290..5354fe2 100644
--- a/runtime/vm/code_descriptors.h
+++ b/runtime/vm/code_descriptors.h
@@ -15,59 +15,29 @@
 
 class DescriptorList : public ZoneAllocated {
  public:
-  struct PcDesc {
-    intptr_t pc_offset;        // PC offset value of the descriptor.
-    RawPcDescriptors::Kind kind;  // Descriptor kind (kDeopt, kOther).
-    intptr_t deopt_id;         // Deoptimization id.
-    intptr_t data;             // Token position or deopt reason.
-    intptr_t try_index;        // Try block index of PC or deopt array index.
-    void SetTokenPos(intptr_t value) { data = value; }
-    intptr_t TokenPos() const { return data; }
-    void SetDeoptReason(ICData::DeoptReasonId value) { data = value; }
-    ICData::DeoptReasonId DeoptReason() const {
-      ASSERT((0 <= data) && (data < ICData::kDeoptNumReasons));
-      return static_cast<ICData::DeoptReasonId>(data);
-    }
-  };
-
   explicit DescriptorList(intptr_t initial_capacity)
-      : list_(initial_capacity), has_try_index_(false) {}
+    : delta_encoded_data_(initial_capacity),
+      prev_pc_offset(0),
+      prev_deopt_id(0),
+      prev_token_pos(0) {}
+
   ~DescriptorList() { }
 
-  intptr_t Length() const {
-    return list_.length();
-  }
-
-  intptr_t PcOffset(intptr_t index) const {
-    return list_[index].pc_offset;
-  }
-  RawPcDescriptors::Kind Kind(intptr_t index) const {
-    return list_[index].kind;
-  }
-  intptr_t DeoptId(intptr_t index) const {
-    return list_[index].deopt_id;
-  }
-  intptr_t TokenPos(intptr_t index) const {
-    return list_[index].TokenPos();
-  }
-  ICData::DeoptReasonId DeoptReason(intptr_t index) const {
-    return list_[index].DeoptReason();
-  }
-  intptr_t TryIndex(intptr_t index) const {
-    return (has_try_index_) ? list_[index].try_index : -1;
-  }
-
   void AddDescriptor(RawPcDescriptors::Kind kind,
                      intptr_t pc_offset,
                      intptr_t deopt_id,
-                     intptr_t token_index,
+                     intptr_t token_pos,
                      intptr_t try_index);
 
   RawPcDescriptors* FinalizePcDescriptors(uword entry_point);
 
  private:
-  GrowableArray<struct PcDesc> list_;
-  bool has_try_index_;
+  GrowableArray<uint8_t> delta_encoded_data_;
+
+  intptr_t prev_pc_offset;
+  intptr_t prev_deopt_id;
+  intptr_t prev_token_pos;
+
   DISALLOW_COPY_AND_ASSIGN(DescriptorList);
 };
 
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 1cd7e14..666b13c 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -56,8 +56,6 @@
 DEFINE_FLAG(bool, trace_type_checks, false, "Trace runtime type checks.");
 
 DECLARE_FLAG(int, deoptimization_counter_threshold);
-DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, warn_on_javascript_compatibility);
 
 DEFINE_FLAG(bool, use_osr, true, "Use on-stack replacement.");
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 88f20af..86a2a0f 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -890,7 +890,7 @@
   ISL_Print("Variable Descriptors for function '%s' {\n",
             function_fullname);
   const LocalVarDescriptors& var_descriptors =
-      LocalVarDescriptors::Handle(code.var_descriptors());
+      LocalVarDescriptors::Handle(code.GetLocalVarDescriptors());
   intptr_t var_desc_length =
       var_descriptors.IsNull() ? 0 : var_descriptors.Length();
   String& var_name = String::Handle();
@@ -1129,6 +1129,26 @@
 }
 
 
+void Compiler::ComputeLocalVarDescriptors(const Code& code) {
+  ASSERT(!code.is_optimized());
+  const Function& function = Function::Handle(code.function());
+  ParsedFunction* parsed_function = new ParsedFunction(
+      Thread::Current(), Function::ZoneHandle(function.raw()));
+  LocalVarDescriptors& var_descs =
+      LocalVarDescriptors::Handle(code.var_descriptors());
+  ASSERT(var_descs.IsNull());
+  // IsIrregexpFunction have eager var descriptors generation.
+  ASSERT(!function.IsIrregexpFunction());
+  // Parser should not produce any errors, therefore no LongJumpScope needed.
+  Parser::ParseFunction(parsed_function);
+  parsed_function->AllocateVariables();
+  var_descs = parsed_function->node_sequence()->scope()->
+      GetVarDescriptors(function);
+  ASSERT(!var_descs.IsNull());
+  code.set_var_descriptors(var_descs);
+}
+
+
 RawError* Compiler::CompileAllFunctions(const Class& cls) {
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
@@ -1176,6 +1196,14 @@
 }
 
 
+static void CreateLocalVarDescriptors(const ParsedFunction& parsed_function) {
+  const Function& func = parsed_function.function();
+  LocalVarDescriptors& var_descs = LocalVarDescriptors::Handle();
+  var_descs = parsed_function.node_sequence()->scope()->GetVarDescriptors(func);
+  Code::Handle(func.unoptimized_code()).set_var_descriptors(var_descs);
+}
+
+
 RawObject* Compiler::EvaluateStaticInitializer(const Field& field) {
   ASSERT(field.is_static());
   // The VM sets the field's value to transiton_sentinel prior to
@@ -1195,6 +1223,8 @@
                                 parsed_function,
                                 false,
                                 Isolate::kNoDeoptId);
+    // Eagerly create local var descriptors.
+    CreateLocalVarDescriptors(*parsed_function);
 
     // Invoke the function to evaluate the expression.
     const Function& initializer = parsed_function->function();
@@ -1264,6 +1294,8 @@
                                 false,
                                 Isolate::kNoDeoptId);
 
+    // Eagerly create local var descriptors.
+    CreateLocalVarDescriptors(*parsed_function);
     const Object& result = PassiveObject::Handle(
         DartEntry::InvokeFunction(func, Object::empty_array()));
     return result.raw();
diff --git a/runtime/vm/compiler.h b/runtime/vm/compiler.h
index e319956..1e92e71 100644
--- a/runtime/vm/compiler.h
+++ b/runtime/vm/compiler.h
@@ -73,6 +73,10 @@
   // on compilation failure.
   static RawObject* EvaluateStaticInitializer(const Field& field);
 
+  // Generates local var descriptors and sets it in 'code'. Do not call if the
+  // local var descriptor already exists.
+  static void ComputeLocalVarDescriptors(const Code& code);
+
   // Eagerly compiles all functions in a class.
   //
   // Returns Error::null() if there is no compilation error.
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 85f98d0..2d74ef3 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -438,6 +438,13 @@
   CSINV = ConditionalSelectFixed | B30,
 };
 
+// C3.5.7
+enum MiscDP1SourceOp {
+  MiscDP1SourceMask = 0x5fe00000,
+  MiscDP1SourceFixed = DPRegisterFixed | B30 | B28 | B23 | B22,
+  CLZ = MiscDP1SourceFixed | B12,
+};
+
 // C3.5.8
 enum MiscDP2SourceOp {
   MiscDP2SourceMask = 0x5fe00000,
@@ -609,6 +616,7 @@
 _V(AddSubShiftExt)                                                             \
 _V(AddSubWithCarry)                                                            \
 _V(ConditionalSelect)                                                          \
+_V(MiscDP1Source)                                                              \
 _V(MiscDP2Source)                                                              \
 _V(MiscDP3Source)                                                              \
 _V(LogicalShift)                                                               \
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index a19208a..1f2ac88 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -224,15 +224,12 @@
   // Setup for profiling.
   Profiler::InitProfilingForIsolate(isolate);
 
-  if (snapshot_buffer == NULL) {
-    const Error& error = Error::Handle(Object::Init(isolate));
-    if (!error.IsNull()) {
-      return error.raw();
-    }
-  } else {
-    // Initialize from snapshot (this should replicate the functionality
-    // of Object::Init(..) in a regular isolate creation path.
-    Object::InitFromSnapshot(isolate);
+  const Error& error = Error::Handle(Object::Init(isolate));
+  if (!error.IsNull()) {
+    return error.raw();
+  }
+  if (snapshot_buffer != NULL) {
+    // Read the snapshot and setup the initial state.
 
     // TODO(turnidge): Remove once length is not part of the snapshot.
     const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer);
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index e9b7fec..9783558 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -19,7 +19,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, verify_acquired_data);
 
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 05ecbcb..60059ee 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -478,7 +478,7 @@
       }
     }
     var_descriptors_ =
-        Code::Handle(function().unoptimized_code()).var_descriptors();
+        Code::Handle(function().unoptimized_code()).GetLocalVarDescriptors();
     ASSERT(!var_descriptors_.IsNull());
   }
 }
@@ -910,10 +910,13 @@
       JSONObject jsvar(&jsvars);
       String& var_name = String::Handle();
       Instance& var_value = Instance::Handle();
-      intptr_t unused;
-      VariableAt(v, &var_name, &unused, &unused, &var_value);
+      intptr_t token_pos;
+      intptr_t end_token_pos;
+      VariableAt(v, &var_name, &token_pos, &end_token_pos, &var_value);
       jsvar.AddProperty("name", var_name.ToCString());
       jsvar.AddProperty("value", var_value, !full);
+      jsvar.AddProperty("tokenPos", token_pos);
+      jsvar.AddProperty("endTokenPos", end_token_pos);
     }
   }
 }
@@ -2275,6 +2278,31 @@
 }
 
 
+void Debugger::BreakHere(const String& msg) {
+  // We ignore this breakpoint when the VM is executing code invoked
+  // by the debugger to evaluate variables values, or when we see a nested
+  // breakpoint or exception event.
+  if (ignore_breakpoints_ || IsPaused() || !HasEventHandler()) {
+    return;
+  }
+
+  DebuggerStackTrace* stack_trace = CollectStackTrace();
+  ASSERT(stack_trace->Length() > 0);
+  ASSERT(stack_trace_ == NULL);
+  stack_trace_ = stack_trace;
+
+  // TODO(johnmccutchan): Send |msg| to Observatory.
+
+  // We are in the native call to Debugger_breakHere or Debugger_breakHereIf,
+  // the developer gets a better experience by not seeing this call. To
+  // accomplish this, we continue execution until the call exits (step out).
+  SetStepOut();
+  HandleSteppingRequest(stack_trace_);
+
+  stack_trace_ = NULL;
+}
+
+
 void Debugger::Initialize(Isolate* isolate) {
   if (initialized_) {
     return;
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 3796297..c95deb4 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -442,6 +442,8 @@
   void SignalBpReached();
   void DebuggerStepCallback();
 
+  void BreakHere(const String& msg);
+
   void SignalExceptionThrown(const Instance& exc);
   void SignalIsolateEvent(DebuggerEvent::EventType type);
   static void SignalIsolateInterrupted();
diff --git a/runtime/vm/debugger_api_impl_test.cc b/runtime/vm/debugger_api_impl_test.cc
index 4bbc7e8..a516a99 100644
--- a/runtime/vm/debugger_api_impl_test.cc
+++ b/runtime/vm/debugger_api_impl_test.cc
@@ -2147,7 +2147,6 @@
   Dart_Handle object_name = Dart_NewStringFromCString("Object");
   Dart_Handle int_name = Dart_NewStringFromCString("int");
   Dart_Handle set_name = Dart_NewStringFromCString("Set");
-  Dart_Handle iterable_name = Dart_NewStringFromCString("Iterable");
   Dart_Handle list_name = Dart_NewStringFromCString("List");
 
   Dart_Handle object_type = Dart_GetType(core_lib, object_name, 0, NULL);
@@ -2208,7 +2207,7 @@
   {
     Dart_Handle set_type = Dart_GetType(core_lib, set_name, 0, NULL);
     Dart_Handle super_type = Dart_GetSupertype(set_type);
-    Dart_Handle iterable_type = Dart_GetType(core_lib, iterable_name, 0, NULL);
+    Dart_Handle iterable_type = Dart_GetType(core_lib, object_name, 0, NULL);
     const Type& expected_type = Api::UnwrapTypeHandle(isolate, iterable_type);
     const Type& actual_type = Api::UnwrapTypeHandle(isolate, super_type);
     EXPECT(expected_type.raw() == actual_type.raw());
diff --git a/runtime/vm/disassembler_arm64.cc b/runtime/vm/disassembler_arm64.cc
index c6d6087..193d5b1 100644
--- a/runtime/vm/disassembler_arm64.cc
+++ b/runtime/vm/disassembler_arm64.cc
@@ -1036,6 +1036,23 @@
 }
 
 
+void ARM64Decoder::DecodeMiscDP1Source(Instr* instr) {
+  if (instr->Bit(29) != 0) {
+    Unknown(instr);
+  }
+
+  const int op = instr->Bits(10, 10);
+  switch (op) {
+    case 4:
+      Format(instr, "clz'sf 'rd, 'rn");
+      break;
+    default:
+      Unknown(instr);
+      break;
+  }
+}
+
+
 void ARM64Decoder::DecodeMiscDP2Source(Instr* instr) {
   if (instr->Bit(29) != 0) {
     Unknown(instr);
@@ -1111,6 +1128,8 @@
     DecodeAddSubWithCarry(instr);
   } else if (instr->IsLogicalShiftOp()) {
     DecodeLogicalShift(instr);
+  } else if (instr->IsMiscDP1SourceOp()) {
+    DecodeMiscDP1Source(instr);
   } else if (instr->IsMiscDP2SourceOp()) {
     DecodeMiscDP2Source(instr);
   } else if (instr->IsMiscDP3SourceOp()) {
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 551e372..cfd44dd 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -35,11 +35,10 @@
             "Eliminate type checks when allowed by static type analysis.");
 DEFINE_FLAG(bool, print_ast, false, "Print abstract syntax tree.");
 DEFINE_FLAG(bool, print_scopes, false, "Print scopes of local variables.");
+DEFINE_FLAG(bool, support_debugger, true, "Emit code needed for debugging");
 DEFINE_FLAG(bool, trace_type_check_elimination, false,
             "Trace type check elimination at compile time.");
 
-DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, warn_on_javascript_compatibility);
 DECLARE_FLAG(bool, use_field_guards);
@@ -1042,7 +1041,8 @@
   // No debugger check is done in native functions or for return
   // statements for which there is no associated source position.
   const Function& function = owner()->function();
-  if ((node->token_pos() != Scanner::kNoSourcePos) && !function.is_native()) {
+  if (FLAG_support_debugger &&
+      (node->token_pos() != Scanner::kNoSourcePos) && !function.is_native()) {
     AddInstruction(new(Z) DebugStepCheckInstr(node->token_pos(),
                                               RawPcDescriptors::kRuntimeCall));
   }
@@ -3268,6 +3268,23 @@
 }
 
 
+LoadFieldInstr* EffectGraphVisitor::BuildNativeGetter(
+    NativeBodyNode* node,
+    MethodRecognizer::Kind kind,
+    intptr_t offset,
+    const Type& type,
+    intptr_t class_id) {
+  Value* receiver = Bind(BuildLoadThisVar(node->scope()));
+  LoadFieldInstr* load = new(Z) LoadFieldInstr(receiver,
+                                               offset,
+                                               type,
+                                               node->token_pos());
+  load->set_result_cid(class_id);
+  load->set_recognized_kind(kind);
+  return load;
+}
+
+
 void EffectGraphVisitor::VisitNativeBodyNode(NativeBodyNode* node) {
   const Function& function = owner()->function();
   if (!function.IsClosureFunction()) {
@@ -3291,18 +3308,13 @@
       }
       case MethodRecognizer::kStringBaseLength:
       case MethodRecognizer::kStringBaseIsEmpty: {
-        Value* receiver = Bind(BuildLoadThisVar(node->scope()));
         // Treat length loads as mutable (i.e. affected by side effects) to
         // avoid hoisting them since we can't hoist the preceding class-check.
         // This is because of externalization of strings that affects their
         // class-id.
-        LoadFieldInstr* load = new(Z) LoadFieldInstr(
-            receiver,
-            String::length_offset(),
-            Type::ZoneHandle(Z, Type::SmiType()),
-            node->token_pos());
-        load->set_result_cid(kSmiCid);
-        load->set_recognized_kind(MethodRecognizer::kStringBaseLength);
+        LoadFieldInstr* load = BuildNativeGetter(
+            node, MethodRecognizer::kStringBaseLength, String::length_offset(),
+            Type::ZoneHandle(Z, Type::SmiType()), kSmiCid);
         if (kind == MethodRecognizer::kStringBaseLength) {
           return ReturnDefinition(load);
         }
@@ -3322,15 +3334,10 @@
       case MethodRecognizer::kObjectArrayLength:
       case MethodRecognizer::kImmutableArrayLength:
       case MethodRecognizer::kTypedDataLength: {
-        Value* receiver = Bind(BuildLoadThisVar(node->scope()));
-        LoadFieldInstr* load = new(Z) LoadFieldInstr(
-            receiver,
-            OffsetForLengthGetter(kind),
-            Type::ZoneHandle(Z, Type::SmiType()),
-            node->token_pos());
+        LoadFieldInstr* load = BuildNativeGetter(
+            node, kind, OffsetForLengthGetter(kind),
+            Type::ZoneHandle(Z, Type::SmiType()), kSmiCid);
         load->set_is_immutable(kind != MethodRecognizer::kGrowableArrayLength);
-        load->set_result_cid(kSmiCid);
-        load->set_recognized_kind(kind);
         return ReturnDefinition(load);
       }
       case MethodRecognizer::kClassIDgetID: {
@@ -3371,37 +3378,20 @@
         return ReturnDefinition(create_array);
       }
       case MethodRecognizer::kBigint_getDigits: {
-        Value* receiver = Bind(BuildLoadThisVar(node->scope()));
-        LoadFieldInstr* load = new(Z) LoadFieldInstr(
-            receiver,
-            Bigint::digits_offset(),
+        return ReturnDefinition(BuildNativeGetter(
+            node, kind, Bigint::digits_offset(),
             Type::ZoneHandle(Z, Type::DynamicType()),
-            node->token_pos());
-        load->set_result_cid(kTypedDataUint32ArrayCid);
-        load->set_recognized_kind(kind);
-        return ReturnDefinition(load);
+            kTypedDataUint32ArrayCid));
       }
       case MethodRecognizer::kBigint_getUsed: {
-        Value* receiver = Bind(BuildLoadThisVar(node->scope()));
-        LoadFieldInstr* load = new(Z) LoadFieldInstr(
-            receiver,
-            Bigint::used_offset(),
-            Type::ZoneHandle(Z, Type::SmiType()),
-            node->token_pos());
-        load->set_result_cid(kSmiCid);
-        load->set_recognized_kind(kind);
-        return ReturnDefinition(load);
+        return ReturnDefinition(BuildNativeGetter(
+            node, kind, Bigint::used_offset(),
+            Type::ZoneHandle(Z, Type::SmiType()), kSmiCid));
       }
       case MethodRecognizer::kBigint_getNeg: {
-        Value* receiver = Bind(BuildLoadThisVar(node->scope()));
-        LoadFieldInstr* load = new(Z) LoadFieldInstr(
-            receiver,
-            Bigint::neg_offset(),
-            Type::ZoneHandle(Z, Type::BoolType()),
-            node->token_pos());
-        load->set_result_cid(kBoolCid);
-        load->set_recognized_kind(kind);
-        return ReturnDefinition(load);
+        return ReturnDefinition(BuildNativeGetter(
+            node, kind, Bigint::neg_offset(),
+            Type::ZoneHandle(Z, Type::BoolType()), kBoolCid));
       }
       default:
         break;
@@ -3438,14 +3428,16 @@
   // a safe point for the debugger to stop, add an explicit stub
   // call. Exception: don't do this when assigning to or from internal
   // variables, or for generated code that has no source position.
-  if ((node->value()->IsLiteralNode() ||
-      (node->value()->IsLoadLocalNode() &&
-          !node->value()->AsLoadLocalNode()->local().IsInternal()) ||
-      node->value()->IsClosureNode()) &&
-      !node->local().IsInternal() &&
-      (node->token_pos() != Scanner::kNoSourcePos)) {
-    AddInstruction(new(Z) DebugStepCheckInstr(
-        node->token_pos(), RawPcDescriptors::kRuntimeCall));
+  if (FLAG_support_debugger) {
+    if ((node->value()->IsLiteralNode() ||
+        (node->value()->IsLoadLocalNode() &&
+            !node->value()->AsLoadLocalNode()->local().IsInternal()) ||
+        node->value()->IsClosureNode()) &&
+        !node->local().IsInternal() &&
+        (node->token_pos() != Scanner::kNoSourcePos)) {
+      AddInstruction(new(Z) DebugStepCheckInstr(
+          node->token_pos(), RawPcDescriptors::kRuntimeCall));
+    }
   }
 
   ValueGraphVisitor for_value(owner());
@@ -4249,11 +4241,13 @@
 
 
 void EffectGraphVisitor::BuildThrowNode(ThrowNode* node) {
-  if (node->exception()->IsLiteralNode() ||
-      node->exception()->IsLoadLocalNode() ||
-      node->exception()->IsClosureNode()) {
-    AddInstruction(new(Z) DebugStepCheckInstr(
-        node->token_pos(), RawPcDescriptors::kRuntimeCall));
+  if (FLAG_support_debugger) {
+    if (node->exception()->IsLiteralNode() ||
+        node->exception()->IsLoadLocalNode() ||
+        node->exception()->IsClosureNode()) {
+      AddInstruction(new(Z) DebugStepCheckInstr(
+          node->token_pos(), RawPcDescriptors::kRuntimeCall));
+    }
   }
   ValueGraphVisitor for_exception(owner());
   node->exception()->Visit(&for_exception);
diff --git a/runtime/vm/flow_graph_builder.h b/runtime/vm/flow_graph_builder.h
index 1ecd7f5..f3d00bc 100644
--- a/runtime/vm/flow_graph_builder.h
+++ b/runtime/vm/flow_graph_builder.h
@@ -355,6 +355,12 @@
   Definition* BuildStoreLocal(const LocalVariable& local, Value* value);
   Definition* BuildLoadLocal(const LocalVariable& local);
   LoadLocalInstr* BuildLoadThisVar(LocalScope* scope);
+  LoadFieldInstr* BuildNativeGetter(
+      NativeBodyNode* node,
+      MethodRecognizer::Kind kind,
+      intptr_t offset,
+      const Type& type,
+      intptr_t class_id);
 
   // Helpers for translating parts of the AST.
   void BuildPushArguments(const ArgumentListNode& node,
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index e1ce9bb..86cd660 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -31,6 +31,8 @@
     "Instance call always as megamorphic.");
 DEFINE_FLAG(bool, trace_inlining_intervals, false,
     "Inlining interval diagnostics");
+DEFINE_FLAG(bool, eager_info_computation, false,
+    "TRANSITIONAL: Eagerly compute local var descriptors.");
 DEFINE_FLAG(bool, enable_simd_inline, true,
     "Enable inlining of SIMD related method calls.");
 DEFINE_FLAG(int, min_optimization_counter_threshold, 5000,
@@ -38,6 +40,7 @@
 DEFINE_FLAG(int, optimization_counter_scale, 2000,
     "The scale of invocation count, by size of the function.");
 DEFINE_FLAG(bool, source_lines, false, "Emit source line as assembly comment.");
+DEFINE_FLAG(bool, use_megamorphic_stub, true, "Out of line megamorphic lookup");
 
 DECLARE_FLAG(bool, code_comments);
 DECLARE_FLAG(int, deoptimize_every);
@@ -45,7 +48,6 @@
 DECLARE_FLAG(bool, disassemble);
 DECLARE_FLAG(bool, disassemble_optimized);
 DECLARE_FLAG(bool, emit_edge_counters);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, intrinsify);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, propagate_ic_data);
@@ -53,10 +55,12 @@
 DECLARE_FLAG(int, reoptimization_counter_threshold);
 DECLARE_FLAG(int, stacktrace_every);
 DECLARE_FLAG(charp, stacktrace_filter);
+DECLARE_FLAG(bool, support_debugger);
 DECLARE_FLAG(bool, use_cha);
 DECLARE_FLAG(bool, use_field_guards);
 DECLARE_FLAG(bool, use_osr);
 DECLARE_FLAG(bool, warn_on_javascript_compatibility);
+DECLARE_FLAG(bool, ic_range_profiling);
 
 static void NooptModeHandler(bool value) {
   if (value) {
@@ -65,6 +69,9 @@
     FLAG_use_field_guards = false;
     FLAG_use_osr = false;
     FLAG_emit_edge_counters = false;
+    FLAG_support_debugger = false;
+    FLAG_ic_range_profiling = false;
+    FLAG_collect_code = false;
   }
 }
 
@@ -657,6 +664,8 @@
 void FlowGraphCompiler::AddCurrentDescriptor(RawPcDescriptors::Kind kind,
                                              intptr_t deopt_id,
                                              intptr_t token_pos) {
+  // When running with optimizations disabled, don't emit deopt-descriptors.
+  if (!CanOptimize() && (kind == RawPcDescriptors::kDeopt)) return;
   pc_descriptors_list()->AddDescriptor(kind,
                                        assembler()->CodeSize(),
                                        deopt_id,
@@ -920,6 +929,10 @@
   }
   LocalVarDescriptors& var_descs = LocalVarDescriptors::Handle();
   if (parsed_function().node_sequence() == NULL) {
+    // Eager local var descriptors computation for Irregexp function as it is
+    // complicated to factor out.
+    // TODO(srdjan): Consider canonicalizing and reusing the local var
+    // descriptor for IrregexpFunction.
     ASSERT(flow_graph().IsIrregexpFunction());
     var_descs = LocalVarDescriptors::New(1);
     RawLocalVarDescriptors::VarInfo info;
@@ -929,10 +942,6 @@
     info.end_pos = 0;
     info.set_index(parsed_function().current_context_var()->index());
     var_descs.SetVar(0, Symbols::CurrentContextVar(), &info);
-  } else {
-    var_descs =
-        parsed_function_.node_sequence()->scope()->GetVarDescriptors(
-            parsed_function_.function());
   }
   code.set_var_descriptors(var_descs);
 }
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index 8334bb0..741bd96 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -26,8 +26,8 @@
 DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization.");
 DEFINE_FLAG(bool, unbox_mints, true, "Optimize 64-bit integer arithmetic.");
 DEFINE_FLAG(bool, unbox_doubles, true, "Optimize double arithmetic.");
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, enable_simd_inline);
+DECLARE_FLAG(bool, use_megamorphic_stub);
 
 
 FlowGraphCompiler::~FlowGraphCompiler() {
@@ -1288,47 +1288,21 @@
   ASSERT(!arguments_descriptor.IsNull() && (arguments_descriptor.Length() > 0));
   const MegamorphicCache& cache =
       MegamorphicCache::ZoneHandle(table->Lookup(name, arguments_descriptor));
-  __ LoadFromOffset(kWord, R0, SP, (argument_count - 1) * kWordSize);
-  __ LoadTaggedClassIdMayBeSmi(R0, R0);
+  const Register receiverR = R0;
+  const Register cacheR = R1;
+  const Register targetR = R1;
+  __ LoadFromOffset(kWord, receiverR, SP, (argument_count - 1) * kWordSize);
+  __ LoadObject(cacheR, cache);
 
-  // R0: class ID of the receiver (smi).
-  __ LoadObject(R1, cache);
-  __ ldr(R2, FieldAddress(R1, MegamorphicCache::buckets_offset()));
-  __ ldr(R1, FieldAddress(R1, MegamorphicCache::mask_offset()));
-  // R2: cache buckets array.
-  // R1: mask.
-  __ mov(R3, Operand(R0));
-
-  Label loop, update, call_target_function;
-  __ b(&loop);
-
-  __ Bind(&update);
-  __ add(R3, R3, Operand(Smi::RawValue(1)));
-  __ Bind(&loop);
-  __ and_(R3, R3, Operand(R1));
-  const intptr_t base = Array::data_offset();
-  // R3 is smi tagged, but table entries are two words, so LSL 2.
-  __ add(IP, R2, Operand(R3, LSL, 2));
-  __ ldr(R4, FieldAddress(IP, base));
-
-  ASSERT(kIllegalCid == 0);
-  __ tst(R4, Operand(R4));
-  __ b(&call_target_function, EQ);
-  __ cmp(R4, Operand(R0));
-  __ b(&update, NE);
-
-  __ Bind(&call_target_function);
-  // Call the target found in the cache.  For a class id match, this is a
-  // proper target for the given name and arguments descriptor.  If the
-  // illegal class id was found, the target is a cache miss handler that can
-  // be invoked as a normal Dart function.
-  __ add(IP, R2, Operand(R3, LSL, 2));
-  __ ldr(R0, FieldAddress(IP, base + kWordSize));
-  __ ldr(R1, FieldAddress(R0, Function::instructions_offset()));
+  if (FLAG_use_megamorphic_stub) {
+    StubCode* stub_code = isolate()->stub_code();
+    __ BranchLink(&stub_code->MegamorphicLookupLabel());
+  } else  {
+    StubCode::EmitMegamorphicLookup(assembler(), receiverR, cacheR, targetR);
+  }
   __ LoadObject(R5, ic_data);
   __ LoadObject(R4, arguments_descriptor);
-  __ AddImmediate(R1, Instructions::HeaderSize() - kHeapObjectTag);
-  __ blx(R1);
+  __ blx(targetR);
   AddCurrentDescriptor(RawPcDescriptors::kOther,
       Isolate::kNoDeoptId, token_pos);
   RecordSafepoint(locs);
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc
index 3a7f574..dec7a2b 100644
--- a/runtime/vm/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/flow_graph_compiler_arm64.cc
@@ -24,6 +24,7 @@
 
 DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization.");
 DECLARE_FLAG(bool, enable_simd_inline);
+DECLARE_FLAG(bool, use_megamorphic_stub);
 
 
 FlowGraphCompiler::~FlowGraphCompiler() {
@@ -1269,47 +1270,21 @@
   ASSERT(!arguments_descriptor.IsNull() && (arguments_descriptor.Length() > 0));
   const MegamorphicCache& cache =
       MegamorphicCache::ZoneHandle(table->Lookup(name, arguments_descriptor));
-  __ LoadFromOffset(R0, SP, (argument_count - 1) * kWordSize, PP);
-  __ LoadTaggedClassIdMayBeSmi(R0, R0);
+  const Register receiverR = R0;
+  const Register cacheR = R1;
+  const Register targetR = R1;
+  __ LoadFromOffset(receiverR, SP, (argument_count - 1) * kWordSize, PP);
+  __ LoadObject(cacheR, cache, PP);
 
-  // R0: class ID of the receiver (smi).
-  __ LoadObject(R1, cache, PP);
-  __ LoadFieldFromOffset(R2, R1, MegamorphicCache::buckets_offset(), PP);
-  __ LoadFieldFromOffset(R1, R1, MegamorphicCache::mask_offset(), PP);
-  // R2: cache buckets array.
-  // R1: mask.
-  __ mov(R3, R0);
-
-  Label loop, update, call_target_function;
-  __ b(&loop);
-
-  __ Bind(&update);
-  __ add(R3, R3, Operand(Smi::RawValue(1)));
-  __ Bind(&loop);
-  __ and_(R3, R3, Operand(R1));
-  const intptr_t base = Array::data_offset();
-  // R3 is smi tagged, but table entries are 16 bytes, so LSL 3.
-  __ add(TMP, R2, Operand(R3, LSL, 3));
-  __ LoadFieldFromOffset(R4, TMP, base, PP);
-
-  ASSERT(kIllegalCid == 0);
-  __ tst(R4, Operand(R4));
-  __ b(&call_target_function, EQ);
-  __ CompareRegisters(R4, R0);
-  __ b(&update, NE);
-
-  __ Bind(&call_target_function);
-  // Call the target found in the cache.  For a class id match, this is a
-  // proper target for the given name and arguments descriptor.  If the
-  // illegal class id was found, the target is a cache miss handler that can
-  // be invoked as a normal Dart function.
-  __ add(TMP, R2, Operand(R3, LSL, 3));
-  __ LoadFieldFromOffset(R0, TMP, base + kWordSize, PP);
-  __ LoadFieldFromOffset(R1, R0, Function::instructions_offset(), PP);
+  if (FLAG_use_megamorphic_stub) {
+    StubCode* stub_code = isolate()->stub_code();
+    __ BranchLink(&stub_code->MegamorphicLookupLabel(), PP);
+  } else  {
+    StubCode::EmitMegamorphicLookup(assembler(), receiverR, cacheR, targetR);
+  }
   __ LoadObject(R5, ic_data, PP);
   __ LoadObject(R4, arguments_descriptor, PP);
-  __ AddImmediate(R1, R1, Instructions::HeaderSize() - kHeapObjectTag, PP);
-  __ blr(R1);
+  __ blr(targetR);
   AddCurrentDescriptor(RawPcDescriptors::kOther,
       Isolate::kNoDeoptId, token_pos);
   RecordSafepoint(locs);
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index e99ebd6..b389d5d 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -27,8 +27,9 @@
 
 DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization.");
 DEFINE_FLAG(bool, unbox_mints, true, "Optimize 64-bit integer arithmetic.");
-DECLARE_FLAG(bool, enable_type_checks);
+
 DECLARE_FLAG(bool, enable_simd_inline);
+DECLARE_FLAG(bool, use_megamorphic_stub);
 
 
 FlowGraphCompiler::~FlowGraphCompiler() {
@@ -1303,54 +1304,29 @@
     intptr_t deopt_id,
     intptr_t token_pos,
     LocationSummary* locs) {
-  MegamorphicCacheTable* table = Isolate::Current()->megamorphic_cache_table();
+  MegamorphicCacheTable* table = isolate()->megamorphic_cache_table();
   const String& name = String::Handle(ic_data.target_name());
   const Array& arguments_descriptor =
       Array::ZoneHandle(ic_data.arguments_descriptor());
   ASSERT(!arguments_descriptor.IsNull() && (arguments_descriptor.Length() > 0));
   const MegamorphicCache& cache =
       MegamorphicCache::ZoneHandle(table->Lookup(name, arguments_descriptor));
-  Label load_cache;
-  __ movl(EBX, Address(ESP, (argument_count - 1) * kWordSize));
-  __ LoadTaggedClassIdMayBeSmi(EAX, EBX);
+  const Register receiverR = EDI;
+  const Register cacheR = EBX;
+  const Register targetR = EBX;
+  __ movl(receiverR, Address(ESP, (argument_count - 1) * kWordSize));
+  __ LoadObject(cacheR, cache);
 
-  // EAX: class ID of the receiver (smi).
-  __ Bind(&load_cache);
-  __ LoadObject(EBX, cache);
-  __ movl(EDI, FieldAddress(EBX, MegamorphicCache::buckets_offset()));
-  __ movl(EBX, FieldAddress(EBX, MegamorphicCache::mask_offset()));
-  // EDI: cache buckets array.
-  // EBX: mask.
-  __ movl(ECX, EAX);
+  if (FLAG_use_megamorphic_stub) {
+    StubCode* stub_code = isolate()->stub_code();
+    __ call(&stub_code->MegamorphicLookupLabel());
+  } else  {
+    StubCode::EmitMegamorphicLookup(assembler(), receiverR, cacheR, targetR);
+  }
 
-  Label loop, update, call_target_function;
-  __ jmp(&loop);
-
-  __ Bind(&update);
-  __ addl(ECX, Immediate(Smi::RawValue(1)));
-  __ Bind(&loop);
-  __ andl(ECX, EBX);
-  const intptr_t base = Array::data_offset();
-  // ECX is smi tagged, but table entries are two words, so TIMES_4.
-  __ movl(EDX, FieldAddress(EDI, ECX, TIMES_4, base));
-
-  ASSERT(kIllegalCid == 0);
-  __ testl(EDX, EDX);
-  __ j(ZERO, &call_target_function, Assembler::kNearJump);
-  __ cmpl(EDX, EAX);
-  __ j(NOT_EQUAL, &update, Assembler::kNearJump);
-
-  __ Bind(&call_target_function);
-  // Call the target found in the cache.  For a class id match, this is a
-  // proper target for the given name and arguments descriptor.  If the
-  // illegal class id was found, the target is a cache miss handler that can
-  // be invoked as a normal Dart function.
-  __ movl(EAX, FieldAddress(EDI, ECX, TIMES_4, base + kWordSize));
-  __ movl(EBX, FieldAddress(EAX, Function::instructions_offset()));
   __ LoadObject(ECX, ic_data);
   __ LoadObject(EDX, arguments_descriptor);
-  __ addl(EBX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
-  __ call(EBX);
+  __ call(targetR);
   AddCurrentDescriptor(RawPcDescriptors::kOther,
       Isolate::kNoDeoptId, token_pos);
   RecordSafepoint(locs);
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
index 847048e..556a673 100644
--- a/runtime/vm/flow_graph_compiler_mips.cc
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -22,7 +22,7 @@
 namespace dart {
 
 DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization.");
-DECLARE_FLAG(bool, enable_type_checks);
+DECLARE_FLAG(bool, use_megamorphic_stub);
 
 
 FlowGraphCompiler::~FlowGraphCompiler() {
@@ -1292,48 +1292,21 @@
   const MegamorphicCache& cache =
       MegamorphicCache::ZoneHandle(table->Lookup(name, arguments_descriptor));
   __ Comment("MegamorphicInstanceCall");
-  __ lw(T0, Address(SP, (argument_count - 1) * kWordSize));
-  __ LoadTaggedClassIdMayBeSmi(T0, T0);
+  const Register receiverR = T0;
+  const Register cacheR = T1;
+  const Register targetR = T1;
+  __ lw(receiverR, Address(SP, (argument_count - 1) * kWordSize));
+  __ LoadObject(cacheR, cache);
 
-  // T0: class ID of the receiver (smi).
-  __ LoadObject(T1, cache);
-  __ lw(T2, FieldAddress(T1, MegamorphicCache::buckets_offset()));
-  __ lw(T1, FieldAddress(T1, MegamorphicCache::mask_offset()));
-  // T2: cache buckets array.
-  // T1: mask.
-  __ mov(T3, T0);
-
-  Label loop, update, call_target_function;
-  __ b(&loop);
-
-  __ Bind(&update);
-  __ addiu(T3, T3, Immediate(Smi::RawValue(1)));
-  __ Bind(&loop);
-  __ and_(T3, T3, T1);
-  const intptr_t base = Array::data_offset();
-  // T3 is smi tagged, but table entries are two words, so LSL 2.
-  __ sll(TMP, T3, 2);
-  __ addu(TMP, T2, TMP);
-  __ lw(T4, FieldAddress(TMP, base));
-
-  ASSERT(kIllegalCid == 0);
-  __ beq(T4, ZR, &call_target_function);
-  __ bne(T4, T0, &update);
-
-  __ Bind(&call_target_function);
-  // Call the target found in the cache.  For a class id match, this is a
-  // proper target for the given name and arguments descriptor.  If the
-  // illegal class id was found, the target is a cache miss handler that can
-  // be invoked as a normal Dart function.
-  __ sll(T1, T3, 2);
-  __ addu(T1, T2, T1);
-  __ lw(T0, FieldAddress(T1, base + kWordSize));
-
-  __ lw(T1, FieldAddress(T0, Function::instructions_offset()));
+  if (FLAG_use_megamorphic_stub) {
+    StubCode* stub_code = isolate()->stub_code();
+    __ BranchLink(&stub_code->MegamorphicLookupLabel());
+  } else  {
+    StubCode::EmitMegamorphicLookup(assembler(), receiverR, cacheR, targetR);
+  }
   __ LoadObject(S5, ic_data);
   __ LoadObject(S4, arguments_descriptor);
-  __ AddImmediate(T1, Instructions::HeaderSize() - kHeapObjectTag);
-  __ jalr(T1);
+  __ jalr(targetR);
   AddCurrentDescriptor(RawPcDescriptors::kOther,
       Isolate::kNoDeoptId, token_pos);
   RecordSafepoint(locs);
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index b0cc219..a590735 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -24,8 +24,8 @@
 
 DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization.");
 DEFINE_FLAG(bool, unbox_mints, true, "Optimize 64-bit integer arithmetic.");
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, enable_simd_inline);
+DECLARE_FLAG(bool, use_megamorphic_stub);
 
 
 FlowGraphCompiler::~FlowGraphCompiler() {
@@ -1311,53 +1311,28 @@
     intptr_t deopt_id,
     intptr_t token_pos,
     LocationSummary* locs) {
-  MegamorphicCacheTable* table = Isolate::Current()->megamorphic_cache_table();
+  MegamorphicCacheTable* table = isolate()->megamorphic_cache_table();
   const String& name = String::Handle(ic_data.target_name());
   const Array& arguments_descriptor =
       Array::ZoneHandle(ic_data.arguments_descriptor());
   ASSERT(!arguments_descriptor.IsNull() && (arguments_descriptor.Length() > 0));
   const MegamorphicCache& cache =
       MegamorphicCache::ZoneHandle(table->Lookup(name, arguments_descriptor));
-  __ movq(RBX, Address(RSP, (argument_count - 1) * kWordSize));
-  __ LoadTaggedClassIdMayBeSmi(RAX, RBX);
+  const Register receiverR = RDI;
+  const Register cacheR = RBX;
+  const Register targetR = RCX;
+  __ movq(receiverR, Address(RSP, (argument_count - 1) * kWordSize));
+  __ LoadObject(cacheR, cache, PP);
 
-  // RAX: class ID of the receiver (smi).
-  __ LoadObject(RBX, cache, PP);
-  __ movq(RDI, FieldAddress(RBX, MegamorphicCache::buckets_offset()));
-  __ movq(RBX, FieldAddress(RBX, MegamorphicCache::mask_offset()));
-  // RDI: cache buckets array.
-  // RBX: mask.
-  __ movq(RCX, RAX);
-
-  Label loop, update, call_target_function;
-  __ jmp(&loop);
-
-  __ Bind(&update);
-  __ AddImmediate(RCX, Immediate(Smi::RawValue(1)), PP);
-  __ Bind(&loop);
-  __ andq(RCX, RBX);
-  const intptr_t base = Array::data_offset();
-  // RCX is smi tagged, but table entries are two words, so TIMES_8.
-  __ movq(RDX, FieldAddress(RDI, RCX, TIMES_8, base));
-
-  ASSERT(kIllegalCid == 0);
-  __ testq(RDX, RDX);
-  __ j(ZERO, &call_target_function, Assembler::kNearJump);
-  __ cmpq(RDX, RAX);
-  __ j(NOT_EQUAL, &update, Assembler::kNearJump);
-
-  __ Bind(&call_target_function);
-  // Call the target found in the cache.  For a class id match, this is a
-  // proper target for the given name and arguments descriptor.  If the
-  // illegal class id was found, the target is a cache miss handler that can
-  // be invoked as a normal Dart function.
-  __ movq(RAX, FieldAddress(RDI, RCX, TIMES_8, base + kWordSize));
-  __ movq(RCX, FieldAddress(RAX, Function::instructions_offset()));
+  if (FLAG_use_megamorphic_stub) {
+    StubCode* stub_code = isolate()->stub_code();
+    __ call(&stub_code->MegamorphicLookupLabel());
+  } else  {
+    StubCode::EmitMegamorphicLookup(assembler(), receiverR, cacheR, targetR);
+  }
   __ LoadObject(RBX, ic_data, PP);
   __ LoadObject(R10, arguments_descriptor, PP);
-  __ AddImmediate(
-      RCX, Immediate(Instructions::HeaderSize() - kHeapObjectTag), PP);
-  __ call(RCX);
+  __ call(targetR);
   AddCurrentDescriptor(RawPcDescriptors::kOther,
       Isolate::kNoDeoptId, token_pos);
   RecordSafepoint(locs);
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index 567e18c..6877f06 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -58,7 +58,6 @@
             "Enable inlining annotations");
 
 DECLARE_FLAG(bool, compiler_stats);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, deoptimization_counter_threshold);
 DECLARE_FLAG(bool, print_flow_graph);
 DECLARE_FLAG(bool, print_flow_graph_optimized);
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 1b33345..ee53c720 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -43,7 +43,6 @@
 #if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_IA32)
 DEFINE_FLAG(bool, trace_smi_widening, false, "Trace Smi->Int32 widening pass.");
 #endif
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, source_lines);
 DECLARE_FLAG(bool, trace_type_check_elimination);
 DECLARE_FLAG(bool, warn_on_javascript_compatibility);
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index 0d646b8..bbf8d64 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -14,7 +14,6 @@
 DEFINE_FLAG(bool, trace_type_propagation, false,
             "Trace flow graph type propagation");
 
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, propagate_types);
 DECLARE_FLAG(bool, use_cha);
 
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index eea43c4..47e7dab 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -37,7 +37,6 @@
     "for binary and unary arithmetic operations");
 DEFINE_FLAG(bool, unbox_numeric_fields, true,
     "Support unboxed double and float32x4 fields.");
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, eliminate_type_checks);
 DECLARE_FLAG(bool, trace_optimization);
 DECLARE_FLAG(bool, throw_on_javascript_int_overflow);
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index bc38b17..eac606c 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -26,7 +26,6 @@
 
 DECLARE_FLAG(bool, emit_edge_counters);
 DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, use_osr);
 
@@ -2368,7 +2367,8 @@
   ASSERT(locs()->in(kElementTypePos).reg() == kElemTypeReg);
   ASSERT(locs()->in(kLengthPos).reg() == kLengthReg);
 
-  if (num_elements()->BindsToConstant() &&
+  if (compiler->is_optimizing() &&
+      num_elements()->BindsToConstant() &&
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if ((length >= 0) && (length <= Array::kMaxElements)) {
diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc
index 5eecb10..92c25d8 100644
--- a/runtime/vm/intermediate_language_arm64.cc
+++ b/runtime/vm/intermediate_language_arm64.cc
@@ -25,7 +25,6 @@
 
 DECLARE_FLAG(bool, emit_edge_counters);
 DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, use_osr);
 
@@ -2106,7 +2105,8 @@
   ASSERT(locs()->in(kElementTypePos).reg() == kElemTypeReg);
   ASSERT(locs()->in(kLengthPos).reg() == kLengthReg);
 
-  if (num_elements()->BindsToConstant() &&
+  if (compiler->is_optimizing() &&
+      num_elements()->BindsToConstant() &&
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if ((length >= 0) && (length <= Array::kMaxElements)) {
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 8505364..e88e35e 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -24,7 +24,6 @@
 
 DECLARE_FLAG(bool, emit_edge_counters);
 DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, use_osr);
 DECLARE_FLAG(bool, throw_on_javascript_int_overflow);
@@ -2104,7 +2103,8 @@
   ASSERT(locs()->in(1).reg() == kLengthReg);
 
   Label slow_path, done;
-  if (num_elements()->BindsToConstant() &&
+  if (compiler->is_optimizing() &&
+      num_elements()->BindsToConstant() &&
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if ((length >= 0) && (length <= Array::kMaxElements)) {
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 602a4e2..302c5e1 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -25,7 +25,6 @@
 
 DECLARE_FLAG(bool, emit_edge_counters);
 DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, use_osr);
 
@@ -2225,7 +2224,8 @@
   ASSERT(locs()->in(1).reg() == kLengthReg);
 
   Label slow_path, done;
-  if (num_elements()->BindsToConstant() &&
+  if (compiler->is_optimizing() &&
+      num_elements()->BindsToConstant() &&
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if ((length >= 0) && (length <= Array::kMaxElements)) {
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 433d67d..fa08bfb 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -24,7 +24,6 @@
 
 DECLARE_FLAG(bool, emit_edge_counters);
 DECLARE_FLAG(bool, enable_asserts);
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(int, optimization_counter_threshold);
 DECLARE_FLAG(bool, throw_on_javascript_int_overflow);
 DECLARE_FLAG(bool, use_osr);
@@ -2101,7 +2100,8 @@
   ASSERT(locs()->in(1).reg() == kLengthReg);
 
   Label slow_path, done;
-  if (num_elements()->BindsToConstant() &&
+  if (compiler->is_optimizing() &&
+      num_elements()->BindsToConstant() &&
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if ((length >= 0) && (length <= Array::kMaxElements)) {
diff --git a/runtime/vm/intrinsifier.cc b/runtime/vm/intrinsifier.cc
index d2df9ee..37ff3d7 100644
--- a/runtime/vm/intrinsifier.cc
+++ b/runtime/vm/intrinsifier.cc
@@ -24,7 +24,6 @@
 DECLARE_FLAG(bool, code_comments);
 DECLARE_FLAG(bool, print_flow_graph);
 DECLARE_FLAG(bool, print_flow_graph_optimized);
-DECLARE_FLAG(bool, enable_type_checks);
 
 bool Intrinsifier::CanIntrinsify(const Function& function) {
   if (!FLAG_intrinsify) return false;
@@ -35,6 +34,7 @@
 }
 
 
+#if defined(DART_NO_SNAPSHOT)
 void Intrinsifier::InitializeState() {
   Isolate* isolate = Isolate::Current();
   Library& lib = Library::Handle(isolate);
@@ -91,6 +91,7 @@
 
 #undef SETUP_FUNCTION
 }
+#endif  // defined(DART_NO_SNAPSHOT).
 
 
 static void EmitCodeFor(FlowGraphCompiler* compiler,
@@ -144,7 +145,6 @@
   switch (function.recognized_kind()) {
 #define EMIT_CASE(class_name, function_name, enum_name, fp)                    \
     case MethodRecognizer::k##enum_name:                                       \
-      CHECK_FINGERPRINT3(function, class_name, function_name, enum_name, fp);  \
       if (!Build_##enum_name(graph)) return false;                             \
       break;
 
@@ -188,23 +188,21 @@
 
 #define EMIT_CASE(class_name, function_name, enum_name, fp)                    \
     case MethodRecognizer::k##enum_name:                                       \
-      CHECK_FINGERPRINT3(function, class_name, function_name, enum_name, fp);  \
       compiler->assembler()->Comment("Intrinsic");                             \
       enum_name(compiler->assembler());                                        \
       break;
 
-  if (FLAG_throw_on_javascript_int_overflow && (Smi::kBits >= 32)) {
-    // Integer intrinsics are in the core library, but we don't want to
-    // intrinsify when Smi > 32 bits if we are looking for javascript integer
-    // overflow.
+  switch (function.recognized_kind()) {
+    ALL_INTRINSICS_NO_INTEGER_LIB_LIST(EMIT_CASE);
+    default:
+      break;
+  }
+  // Integer intrinsics are in the core library, but we don't want to
+  // intrinsify when Smi > 32 bits if we are looking for javascript integer
+  // overflow.
+  if (!(FLAG_throw_on_javascript_int_overflow && (Smi::kBits >= 32))) {
     switch (function.recognized_kind()) {
-      ALL_INTRINSICS_NO_INTEGER_LIB_LIST(EMIT_CASE);
-      default:
-        break;
-    }
-  } else {
-    switch (function.recognized_kind()) {
-      ALL_INTRINSICS_LIST(EMIT_CASE);
+      CORE_INTEGER_LIB_INTRINSIC_LIST(EMIT_CASE)
       default:
         break;
     }
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index f334446..0203632 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -23,7 +23,9 @@
  public:
   static void Intrinsify(const ParsedFunction& parsed_function,
                          FlowGraphCompiler* compiler);
+#if defined(DART_NO_SNAPSHOT)
   static void InitializeState();
+#endif
 
   static bool GraphIntrinsify(const ParsedFunction& parsed_function,
                               FlowGraphCompiler* compiler);
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
index f81581b..3cf09c5 100644
--- a/runtime/vm/intrinsifier_arm.cc
+++ b/runtime/vm/intrinsifier_arm.cc
@@ -18,8 +18,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
-
 // When entering intrinsics code:
 // R5: IC Data
 // R4: Arguments descriptor
@@ -793,7 +791,14 @@
 
 
 void Intrinsifier::Smi_bitLength(Assembler* assembler) {
-  // TODO(sra): Implement as word-length - CLZ.
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ SmiUntag(R0);
+  // XOR with sign bit to complement bits if value is negative.
+  __ eor(R0, R0, Operand(R0, ASR, 31));
+  __ clz(R0, R0);
+  __ rsb(R0, R0, Operand(32));
+  __ SmiTag(R0);
+  __ Ret();
 }
 
 
@@ -875,7 +880,7 @@
   __ Bind(&loop_entry);
   __ teq(R8, Operand(R6));
   __ b(&loop, NE);
-  __ str(R1, Address(R8, Bigint::kBytesPerDigit, Address::PostIndex));
+  __ str(R1, Address(R8, 0));
   // Returning Object::null() is not required, since this method is private.
   __ Ret();
 }
diff --git a/runtime/vm/intrinsifier_arm64.cc b/runtime/vm/intrinsifier_arm64.cc
index a877dc9..9e44953 100644
--- a/runtime/vm/intrinsifier_arm64.cc
+++ b/runtime/vm/intrinsifier_arm64.cc
@@ -17,8 +17,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
-
 // When entering intrinsics code:
 // R5: IC Data
 // R4: Arguments descriptor
@@ -692,17 +690,107 @@
 
 
 void Intrinsifier::Smi_bitLength(Assembler* assembler) {
-  // TODO(sra): Implement as word-length - CLZ.
+  __ ldr(R0, Address(SP, 0 * kWordSize));
+  __ SmiUntag(R0);
+  // XOR with sign bit to complement bits if value is negative.
+  __ eor(R0, R0, Operand(R0, ASR, 63));
+  __ clz(R0, R0);
+  __ LoadImmediate(R1, 64, kNoPP);
+  __ sub(R0, R1, Operand(R0));
+  __ SmiTag(R0);
+  __ ret();
 }
 
 
 void Intrinsifier::Bigint_lsh(Assembler* assembler) {
-  // TODO(regis): Implement.
+  // static void _lsh(Uint32List x_digits, int x_used, int n,
+  //                  Uint32List r_digits)
+
+  // R2 = x_used, R3 = x_digits, x_used > 0, x_used is Smi.
+  __ ldp(R2, R3, Address(SP, 2 * kWordSize, Address::PairOffset));
+  __ add(R2, R2, Operand(2));  // x_used > 0, Smi. R2 = x_used + 1, round up.
+  __ AsrImmediate(R2, R2, 2);  // R2 = num of digit pairs to read.
+  // R4 = r_digits, R5 = n, n is Smi, n % _DIGIT_BITS != 0.
+  __ ldp(R4, R5, Address(SP, 0 * kWordSize, Address::PairOffset));
+  __ SmiUntag(R5);
+  // R0 = n ~/ (2*_DIGIT_BITS)
+  __ AsrImmediate(R0, R5, 6);
+  // R6 = &x_digits[0]
+  __ add(R6, R3, Operand(TypedData::data_offset() - kHeapObjectTag));
+  // R7 = &x_digits[2*R2]
+  __ add(R7, R6, Operand(R2, LSL, 3));
+  // R8 = &r_digits[2*1]
+  __ add(R8, R4, Operand(TypedData::data_offset() - kHeapObjectTag +
+                         2 * Bigint::kBytesPerDigit));
+  // R8 = &r_digits[2*(R2 + n ~/ (2*_DIGIT_BITS) + 1)]
+  __ add(R0, R0, Operand(R2));
+  __ add(R8, R8, Operand(R0, LSL, 3));
+  // R3 = n % (2 * _DIGIT_BITS)
+  __ AndImmediate(R3, R5, 63, kNoPP);
+  // R2 = 64 - R3
+  __ LoadImmediate(R2, 64, kNoPP);
+  __ sub(R2, R2, Operand(R3));
+  __ mov(R1, ZR);
+  Label loop;
+  __ Bind(&loop);
+  __ ldr(R0, Address(R7, -2 * Bigint::kBytesPerDigit, Address::PreIndex));
+  __ lsrv(R4, R0, R2);
+  __ orr(R1, R1, Operand(R4));
+  __ str(R1, Address(R8, -2 * Bigint::kBytesPerDigit, Address::PreIndex));
+  __ lslv(R1, R0, R3);
+  __ cmp(R7, Operand(R6));
+  __ b(&loop, NE);
+  __ str(R1, Address(R8, -2 * Bigint::kBytesPerDigit, Address::PreIndex));
+  // Returning Object::null() is not required, since this method is private.
+  __ ret();
 }
 
 
 void Intrinsifier::Bigint_rsh(Assembler* assembler) {
-  // TODO(regis): Implement.
+  // static void _lsh(Uint32List x_digits, int x_used, int n,
+  //                  Uint32List r_digits)
+
+  // R2 = x_used, R3 = x_digits, x_used > 0, x_used is Smi.
+  __ ldp(R2, R3, Address(SP, 2 * kWordSize, Address::PairOffset));
+  __ add(R2, R2, Operand(2));  // x_used > 0, Smi. R2 = x_used + 1, round up.
+  __ AsrImmediate(R2, R2, 2);  // R2 = num of digit pairs to read.
+  // R4 = r_digits, R5 = n, n is Smi, n % _DIGIT_BITS != 0.
+  __ ldp(R4, R5, Address(SP, 0 * kWordSize, Address::PairOffset));
+  __ SmiUntag(R5);
+  // R0 = n ~/ (2*_DIGIT_BITS)
+  __ AsrImmediate(R0, R5, 6);
+  // R8 = &r_digits[0]
+  __ add(R8, R4, Operand(TypedData::data_offset() - kHeapObjectTag));
+  // R7 = &x_digits[2*(n ~/ (2*_DIGIT_BITS))]
+  __ add(R7, R3, Operand(TypedData::data_offset() - kHeapObjectTag));
+  __ add(R7, R7, Operand(R0, LSL, 3));
+  // R6 = &r_digits[2*(R2 - n ~/ (2*_DIGIT_BITS) - 1)]
+  __ add(R0, R0, Operand(1));
+  __ sub(R0, R2, Operand(R0));
+  __ add(R6, R8, Operand(R0, LSL, 3));
+  // R3 = n % (2*_DIGIT_BITS)
+  __ AndImmediate(R3, R5, 63, kNoPP);
+  // R2 = 64 - R3
+  __ LoadImmediate(R2, 64, kNoPP);
+  __ sub(R2, R2, Operand(R3));
+  // R1 = x_digits[n ~/ (2*_DIGIT_BITS)] >> (n % (2*_DIGIT_BITS))
+  __ ldr(R1, Address(R7, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ lsrv(R1, R1, R3);
+  Label loop_entry;
+  __ b(&loop_entry);
+  Label loop;
+  __ Bind(&loop);
+  __ ldr(R0, Address(R7, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ lslv(R4, R0, R2);
+  __ orr(R1, R1, Operand(R4));
+  __ str(R1, Address(R8, 2 * Bigint::kBytesPerDigit, Address::PostIndex));
+  __ lsrv(R1, R0, R3);
+  __ Bind(&loop_entry);
+  __ cmp(R8, Operand(R6));
+  __ b(&loop, NE);
+  __ str(R1, Address(R8, 0));
+  // Returning Object::null() is not required, since this method is private.
+  __ ret();
 }
 
 
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index 66ea7d0..7bc8fd6 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -24,8 +24,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
-
 // When entering intrinsics code:
 // ECX: IC Data
 // EDX: Arguments descriptor
@@ -789,7 +787,7 @@
 
 // Argument is Smi (receiver).
 void Intrinsifier::Smi_bitNegate(Assembler* assembler) {
-  __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Index.
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Receiver.
   __ notl(EAX);
   __ andl(EAX, Immediate(~kSmiTagMask));  // Remove inverted smi-tag.
   __ ret();
@@ -798,7 +796,7 @@
 
 void Intrinsifier::Smi_bitLength(Assembler* assembler) {
   ASSERT(kSmiTagShift == 1);
-  __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Index.
+  __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Receiver.
   // XOR with sign bit to complement bits if value is negative.
   __ movl(ECX, EAX);
   __ sarl(ECX, Immediate(31));  // All 0 or all 1.
diff --git a/runtime/vm/intrinsifier_mips.cc b/runtime/vm/intrinsifier_mips.cc
index 330c589..2163bbe 100644
--- a/runtime/vm/intrinsifier_mips.cc
+++ b/runtime/vm/intrinsifier_mips.cc
@@ -17,8 +17,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
-
 // When entering intrinsics code:
 // S5: IC Data
 // S4: Arguments descriptor
@@ -788,17 +786,115 @@
 
 
 void Intrinsifier::Smi_bitLength(Assembler* assembler) {
-  // TODO(sra): Implement.
+  __ lw(V0, Address(SP, 0 * kWordSize));
+  __ SmiUntag(V0);
+  // XOR with sign bit to complement bits if value is negative.
+  __ sra(T0, V0, 31);
+  __ xor_(V0, V0, T0);
+  __ clz(V0, V0);
+  __ LoadImmediate(T0, 32);
+  __ subu(V0, T0, V0);
+  __ Ret();
+  __ delay_slot()->SmiTag(V0);
 }
 
 
 void Intrinsifier::Bigint_lsh(Assembler* assembler) {
-  // TODO(regis): Implement.
+  // static void _lsh(Uint32List x_digits, int x_used, int n,
+  //                  Uint32List r_digits)
+
+  // T2 = x_used, T3 = x_digits, x_used > 0, x_used is Smi.
+  __ lw(T2, Address(SP, 2 * kWordSize));
+  __ lw(T3, Address(SP, 3 * kWordSize));
+  // T4 = r_digits, T5 = n, n is Smi, n % _DIGIT_BITS != 0.
+  __ lw(T4, Address(SP, 0 * kWordSize));
+  __ lw(T5, Address(SP, 1 * kWordSize));
+  __ SmiUntag(T5);
+  // T0 = n ~/ _DIGIT_BITS
+  __ sra(T0, T5, 5);
+  // T6 = &x_digits[0]
+  __ addiu(T6, T3, Immediate(TypedData::data_offset() - kHeapObjectTag));
+  // V0 = &x_digits[x_used]
+  __ sll(T2, T2, 1);
+  __ addu(V0, T6, T2);
+  // V1 = &r_digits[1]
+  __ addiu(V1, T4, Immediate(TypedData::data_offset() - kHeapObjectTag +
+                             Bigint::kBytesPerDigit));
+  // V1 = &r_digits[x_used + n ~/ _DIGIT_BITS + 1]
+  __ addu(V1, V1, T2);
+  __ sll(T1, T0, 2);
+  __ addu(V1, V1, T1);
+  // T3 = n % _DIGIT_BITS
+  __ andi(T3, T5, Immediate(31));
+  // T2 = 32 - T3
+  __ subu(T2, ZR, T3);
+  __ addiu(T2, T2, Immediate(32));
+  __ mov(T1, ZR);
+  Label loop;
+  __ Bind(&loop);
+  __ addiu(V0, V0, Immediate(-Bigint::kBytesPerDigit));
+  __ lw(T0, Address(V0, 0));
+  __ srlv(AT, T0, T2);
+  __ or_(T1, T1, AT);
+  __ addiu(V1, V1, Immediate(-Bigint::kBytesPerDigit));
+  __ sw(T1, Address(V1, 0));
+  __ bne(V0, T6, &loop);
+  __ delay_slot()->sllv(T1, T0, T3);
+  __ sw(T1, Address(V1, -Bigint::kBytesPerDigit));
+  // Returning Object::null() is not required, since this method is private.
+  __ Ret();
 }
 
 
 void Intrinsifier::Bigint_rsh(Assembler* assembler) {
-  // TODO(regis): Implement.
+  // static void _lsh(Uint32List x_digits, int x_used, int n,
+  //                  Uint32List r_digits)
+
+  // T2 = x_used, T3 = x_digits, x_used > 0, x_used is Smi.
+  __ lw(T2, Address(SP, 2 * kWordSize));
+  __ lw(T3, Address(SP, 3 * kWordSize));
+  // T4 = r_digits, T5 = n, n is Smi, n % _DIGIT_BITS != 0.
+  __ lw(T4, Address(SP, 0 * kWordSize));
+  __ lw(T5, Address(SP, 1 * kWordSize));
+  __ SmiUntag(T5);
+  // T0 = n ~/ _DIGIT_BITS
+  __ sra(T0, T5, 5);
+  // V1 = &r_digits[0]
+  __ addiu(V1, T4, Immediate(TypedData::data_offset() - kHeapObjectTag));
+  // V0 = &x_digits[n ~/ _DIGIT_BITS]
+  __ addiu(V0, T3, Immediate(TypedData::data_offset() - kHeapObjectTag));
+  __ sll(T1, T0, 2);
+  __ addu(V0, V0, T1);
+  // T6 = &r_digits[x_used - n ~/ _DIGIT_BITS - 1]
+  __ sll(T2, T2, 1);
+  __ addu(T6, V1, T2);
+  __ subu(T6, T6, T1);
+  __ addiu(T6, T6, Immediate(-4));
+  // T3 = n % _DIGIT_BITS
+  __ andi(T3, T5, Immediate(31));
+  // T2 = 32 - T3
+  __ subu(T2, ZR, T3);
+  __ addiu(T2, T2, Immediate(32));
+  // T1 = x_digits[n ~/ _DIGIT_BITS] >> (n % _DIGIT_BITS)
+  __ lw(T1, Address(V0, 0));
+  __ addiu(V0, V0, Immediate(Bigint::kBytesPerDigit));
+  Label loop_exit;
+  __ beq(V1, T6, &loop_exit);
+  __ delay_slot()->srlv(T1, T1, T3);
+  Label loop;
+  __ Bind(&loop);
+  __ lw(T0, Address(V0, 0));
+  __ addiu(V0, V0, Immediate(Bigint::kBytesPerDigit));
+  __ sllv(AT, T0, T2);
+  __ or_(T1, T1, AT);
+  __ sw(T1, Address(V1, 0));
+  __ addiu(V1, V1, Immediate(Bigint::kBytesPerDigit));
+  __ bne(V1, T6, &loop);
+  __ delay_slot()->srlv(T1, T0, T3);
+  __ Bind(&loop_exit);
+  __ sw(T1, Address(V1, 0));
+  // Returning Object::null() is not required, since this method is private.
+  __ Ret();
 }
 
 
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
index d34759f..2f0655d 100644
--- a/runtime/vm/intrinsifier_x64.cc
+++ b/runtime/vm/intrinsifier_x64.cc
@@ -17,8 +17,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, enable_type_checks);
-
 // When entering intrinsics code:
 // RBX: IC Data
 // R10: Arguments descriptor
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 9f503b1..fb48273 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -937,13 +937,13 @@
 
   MutexLocker ml(mutex_);
   // Check if we are in a valid state to make the isolate runnable.
-  if (is_runnable_ == true) {
+  if (is_runnable() == true) {
     return false;  // Already runnable.
   }
   // Set the isolate as runnable and if we are being spawned schedule
   // isolate on thread pool for execution.
   ASSERT(object_store()->root_library() != Library::null());
-  is_runnable_ = true;
+  set_is_runnable(true);
   if (!ServiceIsolate::IsServiceIsolate(this)) {
     message_handler()->set_pause_on_start(FLAG_pause_isolates_on_start);
     message_handler()->set_pause_on_exit(FLAG_pause_isolates_on_exit);
diff --git a/runtime/vm/method_recognizer.cc b/runtime/vm/method_recognizer.cc
index fcfbdd6..1aff186 100644
--- a/runtime/vm/method_recognizer.cc
+++ b/runtime/vm/method_recognizer.cc
@@ -25,15 +25,21 @@
 }
 
 
-const char* MethodRecognizer::KindToCString(Kind kind) {
 #define KIND_TO_STRING(class_name, function_name, enum_name, fp)               \
-  if (kind == k##enum_name) return #enum_name;
+  #enum_name,
+static const char* recognized_list_method_name[] = {
 RECOGNIZED_LIST(KIND_TO_STRING)
+};
 #undef KIND_TO_STRING
+
+const char* MethodRecognizer::KindToCString(Kind kind) {
+  if (kind > kUnknown && kind < kNumRecognizedMethods)
+    return recognized_list_method_name[kind];
   return "?";
 }
 
 
+#if defined(DART_NO_SNAPSHOT)
 void MethodRecognizer::InitializeState() {
   GrowableArray<Library*> libs(3);
   libs.Add(&Library::ZoneHandle(Library::CoreLibrary()));
@@ -83,5 +89,6 @@
 #undef SET_IS_POLYMORPHIC_TARGET
 #undef SET_FUNCTION_BIT
 }
+#endif  // defined(DART_NO_SNAPSHOT).
 
 }  // namespace dart
diff --git a/runtime/vm/method_recognizer.h b/runtime/vm/method_recognizer.h
index d62c588..17dbb1b 100644
--- a/runtime/vm/method_recognizer.h
+++ b/runtime/vm/method_recognizer.h
@@ -455,7 +455,9 @@
   static bool AlwaysInline(const Function& function);
   static bool PolymorphicTarget(const Function& function);
   static const char* KindToCString(Kind kind);
+#if defined(DART_NO_SNAPSHOT)
   static void InitializeState();
+#endif  // defined(DART_NO_SNAPSHOT).
 };
 
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 401a2e4..f4f90c6 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -66,7 +66,6 @@
 DEFINE_FLAG(bool, use_lib_cache, true, "Use library name cache");
 DEFINE_FLAG(bool, trace_field_guards, false, "Trace changes in field's cids.");
 
-DECLARE_FLAG(bool, enable_type_checks);
 DECLARE_FLAG(bool, error_on_bad_override);
 DECLARE_FLAG(bool, trace_compiler);
 DECLARE_FLAG(bool, trace_deoptimization);
@@ -627,11 +626,9 @@
 
   // Allocate and initialize the empty_descriptors instance.
   {
-    uword address = heap->Allocate(
-        PcDescriptors::InstanceSize(0, RawPcDescriptors::kCompressedRecSize),
-        Heap::kOld);
+    uword address = heap->Allocate(PcDescriptors::InstanceSize(0), Heap::kOld);
     InitializeObject(address, kPcDescriptorsCid,
-        PcDescriptors::InstanceSize(0, RawPcDescriptors::kCompressedRecSize));
+                     PcDescriptors::InstanceSize(0));
     PcDescriptors::initializeHandle(
         empty_descriptors_,
         reinterpret_cast<RawPcDescriptors*>(address + kHeapObjectTag));
@@ -928,6 +925,10 @@
 
 RawError* Object::Init(Isolate* isolate) {
   TIMERSCOPE(isolate, time_bootstrap);
+
+#if defined(DART_NO_SNAPSHOT)
+  // Object::Init version when we are running in a version of dart that does
+  // not have a full snapshot linked in.
   ObjectStore* object_store = isolate->object_store();
 
   Class& cls = Class::Handle(isolate);
@@ -1427,11 +1428,10 @@
   isolate->object_store()->InitKnownObjects();
 
   return Error::null();
-}
-
-
-void Object::InitFromSnapshot(Isolate* isolate) {
-  TIMERSCOPE(isolate, time_bootstrap);
+#else  // defined(DART_NO_SNAPSHOT).
+  // Object::Init version when we are running in a version of dart that has
+  // a full snapshot linked in and an isolate is initialized using the full
+  // snapshot.
   ObjectStore* object_store = isolate->object_store();
 
   Class& cls = Class::Handle();
@@ -1541,6 +1541,9 @@
   object_store->set_empty_context(context);
 
   StubCode::InitBootstrapStubs(isolate);
+#endif  // defined(DART_NO_SNAPSHOT).
+
+  return Error::null();
 }
 
 
@@ -6973,8 +6976,6 @@
 
 RawString* Field::GetterName(const String& field_name) {
   CompilerStats::make_accessor_name++;
-  // TODO(koda): Avoid most of these allocations by adding prefix-based lookup
-  // to Class::Lookup*.
   return String::Concat(Symbols::GetterPrefix(), field_name);
 }
 
@@ -6986,8 +6987,6 @@
 
 RawString* Field::SetterName(const String& field_name) {
   CompilerStats::make_accessor_name++;
-  // TODO(koda): Avoid most of these allocations by adding prefix-based lookup
-  // to Class::Lookup*.
   return String::Concat(Symbols::SetterPrefix(), field_name);
 }
 
@@ -8914,6 +8913,19 @@
 }
 
 
+static bool ShouldBePrivate(const String& name) {
+  return
+      (name.Length() >= 1 &&
+       name.CharAt(0) == '_') ||
+      (name.Length() >= 5 &&
+       (name.CharAt(4) == '_' &&
+        (name.CharAt(0) == 'g' || name.CharAt(0) == 's') &&
+        name.CharAt(1) == 'e' &&
+        name.CharAt(2) == 't' &&
+        name.CharAt(3) == ':'));
+}
+
+
 RawObject* Library::ResolveName(const String& name) const {
   Object& obj = Object::Handle();
   if (FLAG_use_lib_cache && LookupResolvedNamesCache(name, &obj)) {
@@ -8930,7 +8942,7 @@
   if (obj.IsNull()) {
     accessor_name = Field::SetterName(name);
     obj = LookupLocalObject(accessor_name);
-    if (obj.IsNull()) {
+    if (obj.IsNull() && !ShouldBePrivate(name)) {
       obj = LookupImportedObject(name);
     }
   }
@@ -9266,19 +9278,6 @@
 }
 
 
-static bool ShouldBePrivate(const String& name) {
-  return
-      (name.Length() >= 1 &&
-       name.CharAt(0) == '_') ||
-      (name.Length() >= 5 &&
-       (name.CharAt(4) == '_' &&
-        (name.CharAt(0) == 'g' || name.CharAt(0) == 's') &&
-        name.CharAt(1) == 'e' &&
-        name.CharAt(2) == 't' &&
-        name.CharAt(3) == ':'));
-}
-
-
 RawField* Library::LookupFieldAllowPrivate(const String& name) const {
   Object& obj = Object::Handle(LookupObjectAllowPrivate(name));
   if (obj.IsField()) {
@@ -9352,6 +9351,7 @@
   String& first_import_lib_url = String::Handle();
   Object& found_obj = Object::Handle();
   String& found_obj_name = String::Handle();
+  ASSERT(!ShouldBePrivate(name));
   for (intptr_t i = 0; i < num_imports(); i++) {
     import ^= ImportAt(i);
     obj = import.Lookup(name);
@@ -9841,6 +9841,11 @@
 }
 
 
+RawLibrary* Library::DeveloperLibrary() {
+  return Isolate::Current()->object_store()->developer_library();
+}
+
+
 RawLibrary* Library::InternalLibrary() {
   return Isolate::Current()->object_store()->internal_library();
 }
@@ -9866,13 +9871,13 @@
 }
 
 
-RawLibrary* Library::TypedDataLibrary() {
-  return Isolate::Current()->object_store()->typed_data_library();
+RawLibrary* Library::ProfilerLibrary() {
+  return Isolate::Current()->object_store()->profiler_library();
 }
 
 
-RawLibrary* Library::ProfilerLibrary() {
-  return Isolate::Current()->object_store()->profiler_library();
+RawLibrary* Library::TypedDataLibrary() {
+  return Isolate::Current()->object_store()->typed_data_library();
 }
 
 
@@ -10356,18 +10361,13 @@
   intptr_t ignore = 0;
 
   // Lookup the name in the library's symbols.
-  const String* filter_name = &name;
   Object& obj = Object::Handle(isolate, lib.LookupEntry(name, &ignore));
-  if (Field::IsGetterName(name)) {
-    filter_name = &String::Handle(Field::NameFromGetter(name));
-  } else if (Field::IsSetterName(name)) {
-    filter_name = &String::Handle(Field::NameFromSetter(name));
-  } else {
-    if (obj.IsNull() || obj.IsLibraryPrefix()) {
-      obj = lib.LookupEntry(String::Handle(Field::GetterName(name)), &ignore);
-      if (obj.IsNull()) {
-        obj = lib.LookupEntry(String::Handle(Field::SetterName(name)), &ignore);
-      }
+  if (!Field::IsGetterName(name) &&
+      !Field::IsSetterName(name) &&
+      (obj.IsNull() || obj.IsLibraryPrefix())) {
+    obj = lib.LookupEntry(String::Handle(Field::GetterName(name)), &ignore);
+    if (obj.IsNull()) {
+      obj = lib.LookupEntry(String::Handle(Field::SetterName(name)), &ignore);
     }
   }
 
@@ -10376,7 +10376,7 @@
     // Lookup in the re-exported symbols.
     obj = lib.LookupReExport(name);
   }
-  if (obj.IsNull() || HidesName(*filter_name) || obj.IsLibraryPrefix()) {
+  if (obj.IsNull() || HidesName(name) || obj.IsLibraryPrefix()) {
     return Object::null();
   }
   return obj.raw();
@@ -10492,13 +10492,13 @@
   MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
 
   all_libs.Clear();
-  all_libs.Add(&Library::ZoneHandle(Library::TypedDataLibrary()));
-  TYPED_DATA_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
-
-  all_libs.Clear();
   all_libs.Add(&Library::ZoneHandle(Library::ProfilerLibrary()));
   PROFILER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
 
+  all_libs.Clear();
+  all_libs.Add(&Library::ZoneHandle(Library::TypedDataLibrary()));
+  TYPED_DATA_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS);
+
 #undef CHECK_FINGERPRINTS
 
 Class& cls = Class::Handle();
@@ -10554,6 +10554,45 @@
 }
 
 
+// Encode integer in SLEB128 format.
+void PcDescriptors::EncodeInteger(GrowableArray<uint8_t>* data,
+                                  intptr_t value) {
+  bool is_last_part = false;
+  while (!is_last_part) {
+    intptr_t part = value & 0x7f;
+    value >>= 7;
+    if ((value == 0 && (part & 0x40) == 0) ||
+        (value == -1 && (part & 0x40) != 0)) {
+      is_last_part = true;
+    } else {
+      part |= 0x80;
+    }
+    data->Add(part);
+  }
+}
+
+
+// Decode SLEB128 encoded integer. Update byte_index to the next integer.
+intptr_t PcDescriptors::DecodeInteger(intptr_t* byte_index) const {
+  NoSafepointScope no_safepoint;
+  const uint8_t* data = raw_ptr()->data();
+  ASSERT(*byte_index < Length());
+  uword shift = 0;
+  intptr_t value = 0;
+  intptr_t part = 0;
+  do {
+    part = data[(*byte_index)++];
+    value |= (part & 0x7f) << shift;
+    shift += 7;
+  } while ((part & 0x80) != 0);
+
+  if (shift < sizeof(value) * 8 && (part & 0x40) != 0) {
+    value |= -(1 << shift);
+  }
+  return value;
+}
+
+
 intptr_t PcDescriptors::Length() const {
   return raw_ptr()->length_;
 }
@@ -10564,35 +10603,27 @@
 }
 
 
-intptr_t PcDescriptors::RecordSizeInBytes() const {
-  return raw_ptr()->record_size_in_bytes_;
-}
-
-
-void PcDescriptors::SetRecordSizeInBytes(intptr_t value) const {
-  StoreNonPointer(&raw_ptr()->record_size_in_bytes_, value);
-}
-
-
-RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors,
-                                     bool has_try_index) {
-  ASSERT(Object::pc_descriptors_class() != Class::null());
-  if (num_descriptors < 0 || num_descriptors > kMaxElements) {
-    // This should be caught before we reach here.
-    FATAL1("Fatal error in PcDescriptors::New: "
-           "invalid num_descriptors %" Pd "\n", num_descriptors);
+void PcDescriptors::CopyData(GrowableArray<uint8_t>* delta_encoded_data) {
+  NoSafepointScope no_safepoint;
+  uint8_t* data = UnsafeMutableNonPointer(&raw_ptr()->data()[0]);
+  for (intptr_t i = 0; i < delta_encoded_data->length(); ++i) {
+    data[i] = (*delta_encoded_data)[i];
   }
+}
+
+
+RawPcDescriptors* PcDescriptors::New(GrowableArray<uint8_t>* data) {
+  ASSERT(Object::pc_descriptors_class() != Class::null());
   PcDescriptors& result = PcDescriptors::Handle();
   {
-    const intptr_t rec_size =  RawPcDescriptors::RecordSize(has_try_index);
-    uword size = PcDescriptors::InstanceSize(num_descriptors, rec_size);
+    uword size = PcDescriptors::InstanceSize(data->length());
     RawObject* raw = Object::Allocate(PcDescriptors::kClassId,
                                       size,
                                       Heap::kOld);
     NoSafepointScope no_safepoint;
     result ^= raw;
-    result.SetLength(num_descriptors);
-    result.SetRecordSizeInBytes(rec_size);
+    result.SetLength(data->length());
+    result.CopyData(data);
   }
   return result.raw();
 }
@@ -12050,6 +12081,18 @@
 }
 
 
+RawLocalVarDescriptors* Code::GetLocalVarDescriptors() const {
+  const LocalVarDescriptors& v = LocalVarDescriptors::Handle(var_descriptors());
+  if (v.IsNull()) {
+    ASSERT(!is_optimized());
+    const Function& f = Function::Handle(function());
+    ASSERT(!f.IsIrregexpFunction());  // Not yet implemented.
+    Compiler::ComputeLocalVarDescriptors(*this);
+  }
+  return var_descriptors();
+}
+
+
 void Code::set_state_bits(intptr_t bits) const {
   StoreNonPointer(&raw_ptr()->state_bits_, bits);
 }
@@ -15093,41 +15136,39 @@
 
 
 const char* Type::ToCString() const {
-  if (IsResolved()) {
-    const TypeArguments& type_arguments = TypeArguments::Handle(arguments());
-    const char* class_name;
-    if (HasResolvedTypeClass()) {
-      class_name = String::Handle(
-          Class::Handle(type_class()).Name()).ToCString();
-    } else {
-      class_name = UnresolvedClass::Handle(unresolved_class()).ToCString();
-    }
-    if (type_arguments.IsNull()) {
-      const char* format = "Type: class '%s'";
-      const intptr_t len = OS::SNPrint(NULL, 0, format, class_name) + 1;
-      char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
-      OS::SNPrint(chars, len, format, class_name);
-      return chars;
-    } else if (IsFinalized() && IsRecursive()) {
-      const char* format = "Type: (@%" Px " H%" Px ") class '%s', args:[%s]";
-      const intptr_t hash = Hash();
-      const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
-      const intptr_t len =
-          OS::SNPrint(NULL, 0, format, raw(), hash, class_name, args_cstr) + 1;
-      char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
-      OS::SNPrint(chars, len, format, raw(), hash, class_name, args_cstr);
-      return chars;
-    } else {
-      const char* format = "Type: class '%s', args:[%s]";
-      const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
-      const intptr_t len =
-          OS::SNPrint(NULL, 0, format, class_name, args_cstr) + 1;
-      char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
-      OS::SNPrint(chars, len, format, class_name, args_cstr);
-      return chars;
-    }
+  const char* unresolved = IsResolved() ? "" : "Unresolved ";
+  const TypeArguments& type_arguments = TypeArguments::Handle(arguments());
+  const char* class_name;
+  if (HasResolvedTypeClass()) {
+    class_name = String::Handle(
+        Class::Handle(type_class()).Name()).ToCString();
   } else {
-    return "Unresolved Type";
+    class_name = UnresolvedClass::Handle(unresolved_class()).ToCString();
+  }
+  if (type_arguments.IsNull()) {
+    const char* format = "%sType: class '%s'";
+    const intptr_t len =
+        OS::SNPrint(NULL, 0, format, unresolved, class_name) + 1;
+    char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+    OS::SNPrint(chars, len, format, unresolved, class_name);
+    return chars;
+  } else if (IsResolved() && IsFinalized() && IsRecursive()) {
+    const char* format = "Type: (@%" Px " H%" Px ") class '%s', args:[%s]";
+    const intptr_t hash = Hash();
+    const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
+    const intptr_t len =
+        OS::SNPrint(NULL, 0, format, raw(), hash, class_name, args_cstr) + 1;
+    char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+    OS::SNPrint(chars, len, format, raw(), hash, class_name, args_cstr);
+    return chars;
+  } else {
+    const char* format = "%sType: class '%s', args:[%s]";
+    const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
+    const intptr_t len =
+        OS::SNPrint(NULL, 0, format, unresolved, class_name, args_cstr) + 1;
+    char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+    OS::SNPrint(chars, len, format, unresolved, class_name, args_cstr);
+    return chars;
   }
 }
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 4233887..69d0827 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -26,8 +26,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, use_jscre);
-
 // Forward declarations.
 #define DEFINE_FORWARD_DECLARATION(clazz)                                      \
   class clazz;
@@ -527,7 +525,6 @@
 
   // Initialize a new isolate either from source or from a snapshot.
   static RawError* Init(Isolate* isolate);
-  static void InitFromSnapshot(Isolate* isolate);
 
   static void MakeUnusedSpaceTraversable(const Object& obj,
                                          intptr_t original_size,
@@ -3048,13 +3045,14 @@
   static RawLibrary* ConvertLibrary();
   static RawLibrary* CoreLibrary();
   static RawLibrary* CollectionLibrary();
+  static RawLibrary* DeveloperLibrary();
   static RawLibrary* InternalLibrary();
   static RawLibrary* IsolateLibrary();
   static RawLibrary* MathLibrary();
   static RawLibrary* MirrorsLibrary();
   static RawLibrary* NativeWrappersLibrary();
-  static RawLibrary* TypedDataLibrary();
   static RawLibrary* ProfilerLibrary();
+  static RawLibrary* TypedDataLibrary();
 
   // Eagerly compile all classes and functions in the library.
   static RawError* CompileAll();
@@ -3274,43 +3272,20 @@
 
 class PcDescriptors : public Object {
  public:
-  void AddDescriptor(intptr_t index,
-                     uword pc_offset,
-                     RawPcDescriptors::Kind kind,
-                     int64_t deopt_id,
-                     int64_t token_pos,  // Or deopt reason.
-                     intptr_t try_index) const {  // Or deopt index.
-    NoSafepointScope no_safepoint;
-    RawPcDescriptors::PcDescriptorRec* rec = recAt(index);
-    rec->set_pc_offset(pc_offset);
-    rec->set_kind(kind);
-    ASSERT(Utils::IsInt(32, deopt_id));
-    rec->set_deopt_id(static_cast<int32_t>(deopt_id));
-    ASSERT(Utils::IsInt(32, token_pos));
-    rec->set_token_pos(static_cast<int32_t>(token_pos),
-        RecordSizeInBytes() == RawPcDescriptors::kCompressedRecSize);
-    ASSERT(Utils::IsInt(16, try_index));
-    rec->set_try_index(try_index);
-    ASSERT(rec->try_index() == try_index);
-    ASSERT(rec->token_pos() == token_pos);
-  }
-
-  static const intptr_t kMaxBytesPerElement =
-      sizeof(RawPcDescriptors::PcDescriptorRec);
-  static const intptr_t kMaxElements = kMaxInt32 / kMaxBytesPerElement;
+  static const intptr_t kBytesPerElement = 1;
+  static const intptr_t kMaxElements = kMaxInt32 / kBytesPerElement;
 
   static intptr_t InstanceSize() {
     ASSERT(sizeof(RawPcDescriptors) ==
            OFFSET_OF_RETURNED_VALUE(RawPcDescriptors, data));
     return 0;
   }
-  static intptr_t InstanceSize(intptr_t len, intptr_t record_size_in_bytes) {
+  static intptr_t InstanceSize(intptr_t len) {
     ASSERT(0 <= len && len <= kMaxElements);
-    return RoundedAllocationSize(
-        sizeof(RawPcDescriptors) + (len * record_size_in_bytes));
+    return RoundedAllocationSize(sizeof(RawPcDescriptors) + len);
   }
 
-  static RawPcDescriptors* New(intptr_t num_descriptors, bool has_try_index);
+  static RawPcDescriptors* New(GrowableArray<uint8_t>* delta_encoded_data);
 
   // Verify (assert) assumptions about pc descriptors in debug mode.
   void Verify(const Function& function) const;
@@ -3319,6 +3294,12 @@
 
   void PrintToJSONObject(JSONObject* jsobj, bool ref) const;
 
+  // Encode integer in SLEB128 format.
+  static void EncodeInteger(GrowableArray<uint8_t>* data, intptr_t value);
+
+  // Decode SLEB128 encoded integer. Update byte_index to the next integer.
+  intptr_t DecodeInteger(intptr_t* byte_index) const;
+
   // We would have a VisitPointers function here to traverse the
   // pc descriptors table to visit objects if any in the table.
   // Note: never return a reference to a RawPcDescriptors::PcDescriptorRec
@@ -3328,73 +3309,62 @@
     Iterator(const PcDescriptors& descriptors, intptr_t kind_mask)
         : descriptors_(descriptors),
           kind_mask_(kind_mask),
-          next_ix_(0),
-          current_ix_(-1) {
-      MoveToMatching();
+          byte_index_(0),
+          cur_pc_offset_(0),
+          cur_kind_(0),
+          cur_deopt_id_(0),
+          cur_token_pos_(0),
+          cur_try_index_(0) {
     }
 
     bool MoveNext() {
-      if (HasNext()) {
-        current_ix_ = next_ix_++;
-        MoveToMatching();
-        return true;
-      } else {
-        return false;
+      // Moves to record that matches kind_mask_.
+      while (byte_index_ < descriptors_.Length()) {
+        cur_kind_ = descriptors_.DecodeInteger(&byte_index_);
+        cur_try_index_ = descriptors_.DecodeInteger(&byte_index_);
+        cur_pc_offset_ += descriptors_.DecodeInteger(&byte_index_);
+        cur_deopt_id_ += descriptors_.DecodeInteger(&byte_index_);
+        cur_token_pos_ += descriptors_.DecodeInteger(&byte_index_);
+
+        if ((cur_kind_ & kind_mask_) != 0) {
+          return true;  // Current is valid.
+        }
       }
+      return false;
     }
 
-    uword PcOffset() const {
-      NoSafepointScope no_safepoint;
-      return descriptors_.recAt(current_ix_)->pc_offset();
-    }
-    intptr_t DeoptId() const {
-      NoSafepointScope no_safepoint;
-      return descriptors_.recAt(current_ix_)->deopt_id();
-    }
-    intptr_t TokenPos() const {
-      NoSafepointScope no_safepoint;
-      return descriptors_.recAt(current_ix_)->token_pos();
-    }
-    intptr_t TryIndex() const {
-      NoSafepointScope no_safepoint;
-      return descriptors_.recAt(current_ix_)->try_index();
-    }
+    uword PcOffset() const { return cur_pc_offset_; }
+    intptr_t DeoptId() const { return cur_deopt_id_; }
+    intptr_t TokenPos() const { return cur_token_pos_; }
+    intptr_t TryIndex() const { return cur_try_index_; }
     RawPcDescriptors::Kind Kind() const {
-      NoSafepointScope no_safepoint;
-      return descriptors_.recAt(current_ix_)->kind();
+      return static_cast<RawPcDescriptors::Kind>(cur_kind_);
     }
 
    private:
     friend class PcDescriptors;
 
-    bool HasNext() const { return next_ix_ < descriptors_.Length(); }
-
     // For nested iterations, starting at element after.
     explicit Iterator(const Iterator& iter)
         : ValueObject(),
           descriptors_(iter.descriptors_),
           kind_mask_(iter.kind_mask_),
-          next_ix_(iter.next_ix_),
-          current_ix_(iter.current_ix_) {}
-
-    // Moves to record that matches kind_mask_.
-    void MoveToMatching() {
-      NoSafepointScope no_safepoint;
-      while (next_ix_ < descriptors_.Length()) {
-        const RawPcDescriptors::PcDescriptorRec& rec =
-            *descriptors_.recAt(next_ix_);
-        if ((rec.kind() & kind_mask_) != 0) {
-          return;  // Current is valid.
-        } else {
-          ++next_ix_;
-        }
-      }
-    }
+          byte_index_(iter.byte_index_),
+          cur_pc_offset_(iter.cur_pc_offset_),
+          cur_kind_(iter.cur_kind_),
+          cur_deopt_id_(iter.cur_deopt_id_),
+          cur_token_pos_(iter.cur_token_pos_),
+          cur_try_index_(iter.cur_try_index_) {}
 
     const PcDescriptors& descriptors_;
     const intptr_t kind_mask_;
-    intptr_t next_ix_;
-    intptr_t current_ix_;
+    intptr_t byte_index_;
+
+    intptr_t cur_pc_offset_;
+    intptr_t cur_kind_;
+    intptr_t cur_deopt_id_;
+    intptr_t cur_token_pos_;
+    intptr_t cur_try_index_;
   };
 
  private:
@@ -3402,16 +3372,7 @@
 
   intptr_t Length() const;
   void SetLength(intptr_t value) const;
-
-  void SetRecordSizeInBytes(intptr_t value) const;
-  intptr_t RecordSizeInBytes() const;
-
-  RawPcDescriptors::PcDescriptorRec* recAt(intptr_t ix) const {
-    ASSERT((0 <= ix) && (ix < Length()));
-    uint8_t* d = UnsafeMutableNonPointer(raw_ptr()->data()) +
-        (ix * RecordSizeInBytes());
-    return reinterpret_cast<RawPcDescriptors::PcDescriptorRec*>(d);
-  }
+  void CopyData(GrowableArray<uint8_t>* data);
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object);
   friend class Class;
@@ -4039,6 +4000,9 @@
     StorePointer(&raw_ptr()->var_descriptors_, value.raw());
   }
 
+  // Will compute local var descriptors is necessary.
+  RawLocalVarDescriptors* GetLocalVarDescriptors() const;
+
   RawExceptionHandlers* exception_handlers() const {
     return raw_ptr()->exception_handlers_;
   }
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 7ba0aba..c2c14d539 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -62,14 +62,15 @@
     core_library_(Library::null()),
     collection_library_(Library::null()),
     convert_library_(Library::null()),
+    developer_library_(Library::null()),
     internal_library_(Library::null()),
     isolate_library_(Library::null()),
     math_library_(Library::null()),
     mirrors_library_(Library::null()),
     native_wrappers_library_(Library::null()),
+    profiler_library_(Library::null()),
     root_library_(Library::null()),
     typed_data_library_(Library::null()),
-    profiler_library_(Library::null()),
     libraries_(GrowableObjectArray::null()),
     pending_classes_(GrowableObjectArray::null()),
     pending_functions_(GrowableObjectArray::null()),
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 8d1519a..c1d7312 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -25,12 +25,13 @@
     kCore,
     kCollection,
     kConvert,
+    kDeveloper,
     kInternal,
     kIsolate,
     kMath,
     kMirrors,
-    kTypedData,
     kProfiler,
+    kTypedData,
   };
 
   ~ObjectStore();
@@ -257,12 +258,14 @@
   RawLibrary* core_library() const { return core_library_; }
   RawLibrary* collection_library() const { return collection_library_; }
   RawLibrary* convert_library() const { return convert_library_; }
+  RawLibrary* developer_library() const { return developer_library_; }
   RawLibrary* internal_library() const { return internal_library_; }
   RawLibrary* isolate_library() const { return isolate_library_; }
   RawLibrary* math_library() const { return math_library_; }
   RawLibrary* mirrors_library() const { return mirrors_library_; }
-  RawLibrary* typed_data_library() const { return typed_data_library_; }
   RawLibrary* profiler_library() const { return profiler_library_; }
+  RawLibrary* typed_data_library() const { return typed_data_library_; }
+
   void set_bootstrap_library(BootstrapLibraryId index, const Library& value) {
     switch (index) {
       case kAsync:
@@ -277,6 +280,9 @@
       case kConvert:
         convert_library_ = value.raw();
         break;
+      case kDeveloper:
+        developer_library_ = value.raw();
+        break;
       case kInternal:
         internal_library_ = value.raw();
         break;
@@ -289,12 +295,12 @@
       case kMirrors:
         mirrors_library_ = value.raw();
         break;
-      case kTypedData:
-        typed_data_library_ = value.raw();
-        break;
       case kProfiler:
         profiler_library_ = value.raw();
         break;
+      case kTypedData:
+        typed_data_library_ = value.raw();
+        break;
       default:
         UNREACHABLE();
     }
@@ -483,14 +489,15 @@
   RawLibrary* core_library_;
   RawLibrary* collection_library_;
   RawLibrary* convert_library_;
+  RawLibrary* developer_library_;
   RawLibrary* internal_library_;
   RawLibrary* isolate_library_;
   RawLibrary* math_library_;
   RawLibrary* mirrors_library_;
   RawLibrary* native_wrappers_library_;
+  RawLibrary* profiler_library_;
   RawLibrary* root_library_;
   RawLibrary* typed_data_library_;
-  RawLibrary* profiler_library_;
   RawGrowableObjectArray* libraries_;
   RawGrowableObjectArray* pending_classes_;
   RawGrowableObjectArray* pending_functions_;
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index e76ce3a..5e72ebf 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -15,6 +15,7 @@
 #include "vm/simulator.h"
 #include "vm/symbols.h"
 #include "vm/unit_test.h"
+#include "vm/code_descriptors.h"
 
 namespace dart {
 
@@ -2865,16 +2866,18 @@
 
 
 TEST_CASE(PcDescriptors) {
-  const int kNumEntries = 6;
-  // Add PcDescriptors to the code.
+  DescriptorList* builder = new DescriptorList(0);
+
+  // kind, pc_offset, deopt_id, token_pos, try_index
+  builder->AddDescriptor(RawPcDescriptors::kOther, 10, 1, 20, 1);
+  builder->AddDescriptor(RawPcDescriptors::kDeopt, 20, 2, 30, 0);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 30, 3, 40, 1);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 10, 4, 40, 2);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 10, 5, 80, 3);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 80, 6, 150, 3);
+
   PcDescriptors& descriptors = PcDescriptors::Handle();
-  descriptors ^= PcDescriptors::New(kNumEntries, true);
-  descriptors.AddDescriptor(0, 10, RawPcDescriptors::kOther, 1, 20, 1);
-  descriptors.AddDescriptor(1, 20, RawPcDescriptors::kDeopt, 2, 30, 0);
-  descriptors.AddDescriptor(2, 30, RawPcDescriptors::kOther, 3, 40, 1);
-  descriptors.AddDescriptor(3, 10, RawPcDescriptors::kOther, 4, 40, 2);
-  descriptors.AddDescriptor(4, 10, RawPcDescriptors::kOther, 5, 80, 3);
-  descriptors.AddDescriptor(5, 80, RawPcDescriptors::kOther, 6, 150, 3);
+  descriptors ^= builder->FinalizePcDescriptors(0);
 
   extern void GenerateIncrement(Assembler* assembler);
   Assembler _assembler_;
@@ -2919,18 +2922,19 @@
 }
 
 
-TEST_CASE(PcDescriptorsCompressed) {
-  const int kNumEntries = 6;
-  // Add PcDescriptors to the code.
+TEST_CASE(PcDescriptorsLargeDeltas) {
+  DescriptorList* builder = new DescriptorList(0);
+
+  // kind, pc_offset, deopt_id, token_pos, try_index
+  builder->AddDescriptor(RawPcDescriptors::kOther, 100, 1, 200, 1);
+  builder->AddDescriptor(RawPcDescriptors::kDeopt, 200, 2, 300, 0);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 300, 3, 400, 1);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 100, 4, 0, 2);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 100, 5, 800, 3);
+  builder->AddDescriptor(RawPcDescriptors::kOther, 800, 6, 150, 3);
+
   PcDescriptors& descriptors = PcDescriptors::Handle();
-  // PcDescritpors have no try-index.
-  descriptors ^= PcDescriptors::New(kNumEntries, false);
-  descriptors.AddDescriptor(0, 10, RawPcDescriptors::kOther, 1, 20, -1);
-  descriptors.AddDescriptor(1, 20, RawPcDescriptors::kDeopt, 2, 30, -1);
-  descriptors.AddDescriptor(2, 30, RawPcDescriptors::kOther, 3, 40, -1);
-  descriptors.AddDescriptor(3, 10, RawPcDescriptors::kOther, 4, 40, -1);
-  descriptors.AddDescriptor(4, 10, RawPcDescriptors::kOther, 5, 80, -1);
-  descriptors.AddDescriptor(5, 80, RawPcDescriptors::kOther, 6, 150, -1);
+  descriptors ^= builder->FinalizePcDescriptors(0);
 
   extern void GenerateIncrement(Assembler* assembler);
   Assembler _assembler_;
@@ -2944,26 +2948,37 @@
   PcDescriptors::Iterator iter(pc_descs, RawPcDescriptors::kAnyKind);
 
   EXPECT_EQ(true, iter.MoveNext());
-  EXPECT_EQ(static_cast<uword>(10), iter.PcOffset());
-  EXPECT_EQ(-1, iter.TryIndex());
+  EXPECT_EQ(200, iter.TokenPos());
+  EXPECT_EQ(1, iter.TryIndex());
+  EXPECT_EQ(static_cast<uword>(100), iter.PcOffset());
   EXPECT_EQ(1, iter.DeoptId());
-  EXPECT_EQ(20, iter.TokenPos());
+  EXPECT_EQ(RawPcDescriptors::kOther, iter.Kind());
 
   EXPECT_EQ(true, iter.MoveNext());
-  EXPECT_EQ(true, iter.MoveNext());
-  EXPECT_EQ(true, iter.MoveNext());
-  EXPECT_EQ(true, iter.MoveNext());
-  EXPECT_EQ(true, iter.MoveNext());
+  EXPECT_EQ(300, iter.TokenPos());
+  EXPECT_EQ(RawPcDescriptors::kDeopt, iter.Kind());
 
-  EXPECT_EQ(-1, iter.TryIndex());
-  EXPECT_EQ(static_cast<uword>(80), iter.PcOffset());
+  EXPECT_EQ(true, iter.MoveNext());
+  EXPECT_EQ(400, iter.TokenPos());
+
+  EXPECT_EQ(true, iter.MoveNext());
+  EXPECT_EQ(0, iter.TokenPos());
+
+  EXPECT_EQ(true, iter.MoveNext());
+  EXPECT_EQ(800, iter.TokenPos());
+
+  EXPECT_EQ(true, iter.MoveNext());
   EXPECT_EQ(150, iter.TokenPos());
 
+  EXPECT_EQ(3, iter.TryIndex());
+  EXPECT_EQ(static_cast<uword>(800), iter.PcOffset());
+  EXPECT_EQ(150, iter.TokenPos());
+  EXPECT_EQ(RawPcDescriptors::kOther, iter.Kind());
+
   EXPECT_EQ(false, iter.MoveNext());
 }
 
 
-
 static RawClass* CreateTestClass(const char* name) {
   const String& class_name = String::Handle(Symbols::New(name));
   const Class& cls = Class::Handle(
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 25e7fa9..049dbf2 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -5279,8 +5279,7 @@
     // or final field implies a setter which throws a NoSuchMethodError,
     // thus we need to check for conflicts with existing setters and
     // getters.
-    String& accessor_name = String::Handle(Z,
-                                           Field::GetterName(var_name));
+    String& accessor_name = String::Handle(Z, Field::GetterName(var_name));
     if (library_.LookupLocalObject(accessor_name) != Object::null()) {
       ReportError(name_pos, "getter for '%s' is already defined",
                   var_name.ToCString());
@@ -5302,8 +5301,7 @@
     }
     if (CurrentToken() == Token::kASSIGN) {
       ConsumeToken();
-      Instance& field_value = Instance::Handle(Z,
-                                               Object::sentinel().raw());
+      Instance& field_value = Instance::Handle(Z, Object::sentinel().raw());
       bool has_simple_literal = false;
       if (LookaheadToken(1) == Token::kSEMICOLON) {
         has_simple_literal = IsSimpleLiteral(type, &field_value);
@@ -5312,8 +5310,7 @@
       field.set_value(field_value);
       if (!has_simple_literal) {
         // Create a static final getter.
-        String& getter_name = String::Handle(Z,
-                                             Field::GetterSymbol(var_name));
+        String& getter_name = String::Handle(Z, Field::GetterSymbol(var_name));
         getter = Function::New(getter_name,
                                RawFunction::kImplicitStaticFinalGetter,
                                is_static,
@@ -5411,8 +5408,7 @@
     ReportError(name_pos, "missing '%s' cannot be patched",
                 func_name.ToCString());
   }
-  String& accessor_name = String::Handle(Z,
-                                         Field::GetterName(func_name));
+  String& accessor_name = String::Handle(Z, Field::GetterName(func_name));
   if (library_.LookupLocalObject(accessor_name) != Object::null()) {
     ReportError(name_pos, "'%s' is already defined as getter",
                 func_name.ToCString());
diff --git a/runtime/vm/parser_test.cc b/runtime/vm/parser_test.cc
index b2819b0..c65cbca 100644
--- a/runtime/vm/parser_test.cc
+++ b/runtime/vm/parser_test.cc
@@ -213,7 +213,7 @@
   LocalVarDescriptors& var_desc = LocalVarDescriptors::Handle();
   for (intptr_t i = 0; i < num_frames; i++) {
     ActivationFrame* frame = stack->FrameAt(i);
-    var_desc = frame->code().var_descriptors();
+    var_desc = frame->code().GetLocalVarDescriptors();
     const char* var_str = SkipIndex(var_desc.ToCString());
     const char* function_str = String::Handle(
         frame->function().QualifiedUserVisibleName()).ToCString();
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 29eb1e1..8226d93 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -37,7 +37,7 @@
 #endif
 DEFINE_FLAG(int, profile_depth, 8,
             "Maximum number stack frames walked. Minimum 1. Maximum 255.");
-#if defined(PROFILE_NATIVE_CODE) || defined(USING_SIMULATOR)
+#if defined(USING_SIMULATOR)
 DEFINE_FLAG(bool, profile_vm, true,
             "Always collect native stack traces.");
 #else
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 2d83e8f..c45af8f 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -142,11 +142,8 @@
     case kPcDescriptorsCid: {
       const RawPcDescriptors* raw_descriptors =
           reinterpret_cast<const RawPcDescriptors*>(this);
-      const intptr_t num_descriptors = raw_descriptors->ptr()->length_;
-      const intptr_t rec_size_in_bytes =
-          raw_descriptors->ptr()->record_size_in_bytes_;
-      instance_size = PcDescriptors::InstanceSize(num_descriptors,
-                                                  rec_size_in_bytes);
+      intptr_t length = raw_descriptors->ptr()->length_;
+      instance_size = PcDescriptors::InstanceSize(length);
       break;
     }
     case kStackmapCid: {
@@ -563,8 +560,7 @@
 
 intptr_t RawPcDescriptors::VisitPcDescriptorsPointers(
     RawPcDescriptors* raw_obj, ObjectPointerVisitor* visitor) {
-  return PcDescriptors::InstanceSize(raw_obj->ptr()->length_,
-                                     raw_obj->ptr()->record_size_in_bytes_);
+  return PcDescriptors::InstanceSize(raw_obj->ptr()->length_);
 }
 
 
diff --git a/runtime/vm/regexp.cc b/runtime/vm/regexp.cc
index 47e296d..fcfa02c 100644
--- a/runtime/vm/regexp.cc
+++ b/runtime/vm/regexp.cc
@@ -5063,10 +5063,10 @@
 
   IRRegExpMacroAssembler* macro_assembler =
       new(zone) IRRegExpMacroAssembler(specialization_cid,
-                                          data->capture_count,
-                                          parsed_function,
-                                          ic_data_array,
-                                          zone);
+                                       data->capture_count,
+                                       parsed_function,
+                                       ic_data_array,
+                                       zone);
 
   // Inserted here, instead of in Assembler, because it depends on information
   // in the AST that isn't replicated in the Node structure.
diff --git a/runtime/vm/regexp_test.cc b/runtime/vm/regexp_test.cc
index a0f5621..4796279 100644
--- a/runtime/vm/regexp_test.cc
+++ b/runtime/vm/regexp_test.cc
@@ -11,8 +11,6 @@
 
 namespace dart {
 
-DECLARE_FLAG(bool, use_jscre);
-
 static RawArray* Match(const String& pat, const String& str) {
   Zone* zone = Thread::Current()->zone();
   const JSRegExp& regexp = JSRegExp::Handle(
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 2acbfe4..f17949f 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -38,8 +38,6 @@
 
 DECLARE_FLAG(bool, trace_service);
 DECLARE_FLAG(bool, trace_service_pause_events);
-DECLARE_FLAG(bool, enable_type_checks);
-DECLARE_FLAG(bool, enable_asserts);
 
 // TODO(johnmccutchan): Unify embedder service handler lists and their APIs.
 EmbedderServiceHandler* Service::isolate_service_handler_head_ = NULL;
@@ -2256,6 +2254,13 @@
 }
 
 
+void Service::SendInspectEvent(Isolate* isolate, const Object& inspectee) {
+  ServiceEvent event(isolate, ServiceEvent::kInspect);
+  event.set_inspectee(&inspectee);
+  Service::HandleEvent(&event);
+}
+
+
 class ContainsAddressVisitor : public FindObjectVisitor {
  public:
   ContainsAddressVisitor(Isolate* isolate, uword addr)
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index dfc6a21..a635dc3 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -47,6 +47,7 @@
 
   static void SendEchoEvent(Isolate* isolate, const char* text);
   static void SendGraphEvent(Isolate* isolate);
+  static void SendInspectEvent(Isolate* isolate, const Object& inspectee);
 
  private:
   static void InvokeMethod(Isolate* isolate, const Array& message);
diff --git a/runtime/vm/service_event.cc b/runtime/vm/service_event.cc
index c1be690..070125d 100644
--- a/runtime/vm/service_event.cc
+++ b/runtime/vm/service_event.cc
@@ -37,6 +37,7 @@
       breakpoint_(NULL),
       top_frame_(NULL),
       exception_(NULL),
+      inspectee_(NULL),
       gc_stats_(NULL) {
   DebuggerEvent::EventType type = debugger_event->type();
   if (type == DebuggerEvent::kBreakpointReached) {
@@ -81,6 +82,8 @@
       return "BreakpointRemoved";
     case kGC:
       return "GC";  // TODO(koda): Change to GarbageCollected.
+    case kInspect:
+      return "Inspect";
     default:
       UNREACHABLE();
       return "Unknown";
@@ -103,6 +106,9 @@
   if (exception() != NULL) {
     jsobj.AddProperty("exception", *(exception()));
   }
+  if (inspectee() != NULL) {
+    jsobj.AddProperty("inspectee", *(inspectee()));
+  }
   if (gc_stats() != NULL) {
     jsobj.AddProperty("reason", Heap::GCReasonToString(gc_stats()->reason_));
     isolate()->heap()->PrintToJSONObject(Heap::kNew, &jsobj);
diff --git a/runtime/vm/service_event.h b/runtime/vm/service_event.h
index 4de7aa4..e74ee66 100644
--- a/runtime/vm/service_event.h
+++ b/runtime/vm/service_event.h
@@ -30,6 +30,7 @@
     kBreakpointRemoved,
 
     kGC,
+    kInspect,
 
     kIllegal,
   };
@@ -40,6 +41,7 @@
         breakpoint_(NULL),
         top_frame_(NULL),
         exception_(NULL),
+        inspectee_(NULL),
         gc_stats_(NULL) {}
 
   explicit ServiceEvent(const DebuggerEvent* debugger_event);
@@ -78,6 +80,14 @@
     exception_ = exception;
   }
 
+  const Object* inspectee() const {
+    return inspectee_;
+  }
+  void set_inspectee(const Object* inspectee) {
+    ASSERT(type_ == kInspect);
+    inspectee_ = inspectee;
+  }
+
   const Heap::GCStats* gc_stats() const {
     return gc_stats_;
   }
@@ -96,6 +106,7 @@
   SourceBreakpoint* breakpoint_;
   ActivationFrame* top_frame_;
   const Object* exception_;
+  const Object* inspectee_;
   const Heap::GCStats* gc_stats_;
 };
 
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index d177304..fd3ec23 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -367,7 +367,7 @@
   EXPECT(!code_c.IsNull());
 
   const LocalVarDescriptors& descriptors =
-      LocalVarDescriptors::Handle(code_c.var_descriptors());
+      LocalVarDescriptors::Handle(code_c.GetLocalVarDescriptors());
   // Generate an ID for this object.
   ObjectIdRing* ring = isolate->object_id_ring();
   intptr_t id = ring->GetIdForObject(descriptors.raw());
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index 992b3c0..2d0cbd3 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -2420,6 +2420,43 @@
 }
 
 
+void Simulator::DecodeMiscDP1Source(Instr* instr) {
+  if (instr->Bit(29) != 0) {
+    UnimplementedInstruction(instr);
+  }
+
+  const Register rd = instr->RdField();
+  const Register rn = instr->RnField();
+  const int op = instr->Bits(10, 10);
+  const int64_t rn_val64 = get_register(rn, R31IsZR);
+  const int32_t rn_val32 = get_wregister(rn, R31IsZR);
+  switch (op) {
+    case 4: {
+      // Format(instr, "clz'sf 'rd, 'rn");
+      int64_t rd_val = 0;
+      int64_t rn_val = (instr->SFField() == 1) ? rn_val64 : rn_val32;
+      if (rn_val != 0) {
+        while (rn_val > 0) {
+          rd_val++;
+          rn_val <<= 1;
+        }
+      } else {
+        rd_val = (instr->SFField() == 1) ? 64 : 32;
+      }
+      if (instr->SFField() == 1) {
+        set_register(instr, rd, rd_val, R31IsZR);
+      } else {
+        set_wregister(rd, rd_val, R31IsZR);
+      }
+      break;
+    }
+    default:
+      UnimplementedInstruction(instr);
+      break;
+  }
+}
+
+
 void Simulator::DecodeMiscDP2Source(Instr* instr) {
   if (instr->Bit(29) != 0) {
     UnimplementedInstruction(instr);
@@ -2428,7 +2465,7 @@
   const Register rd = instr->RdField();
   const Register rn = instr->RnField();
   const Register rm = instr->RmField();
-  const int op = instr->Bits(10, 6);
+  const int op = instr->Bits(10, 5);
   const int64_t rn_val64 = get_register(rn, R31IsZR);
   const int64_t rm_val64 = get_register(rm, R31IsZR);
   const int32_t rn_val32 = get_wregister(rn, R31IsZR);
@@ -2612,6 +2649,8 @@
     DecodeAddSubWithCarry(instr);
   } else if (instr->IsLogicalShiftOp()) {
     DecodeLogicalShift(instr);
+  } else if (instr->IsMiscDP1SourceOp()) {
+    DecodeMiscDP1Source(instr);
   } else if (instr->IsMiscDP2SourceOp()) {
     DecodeMiscDP2Source(instr);
   } else if (instr->IsMiscDP3SourceOp()) {
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 0c17653..2f41ba0 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -151,6 +151,7 @@
     stub.set_owner(cls);
     cls.set_allocation_stub(stub);
     if (FLAG_disassemble_stubs) {
+      LogBlock lb(Isolate::Current());
       ISL_Print("Code for allocation stub '%s': {\n", name);
       DisassembleToStdout formatter;
       stub.Disassemble(&formatter);
@@ -184,6 +185,7 @@
   GenerateStub(&assembler);
   const Code& code = Code::Handle(Code::FinalizeCode(name, &assembler));
   if (FLAG_disassemble_stubs) {
+    LogBlock lb(Isolate::Current());
     ISL_Print("Code for stub '%s': {\n", name);
     DisassembleToStdout formatter;
     code.Disassemble(&formatter);
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index f058a29..a45216d 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -75,6 +75,7 @@
   V(UnoptimizedIdenticalWithNumberCheck)                                       \
   V(OptimizedIdenticalWithNumberCheck)                                         \
   V(DebugStepCheck)                                                            \
+  V(MegamorphicLookup)                                                         \
 
 #define STUB_CODE_LIST(V)                                                      \
   BOOTSTRAP_STUB_CODE_LIST(V)                                                  \
@@ -183,6 +184,9 @@
 
   static const intptr_t kNoInstantiator = 0;
 
+  static void EmitMegamorphicLookup(
+      Assembler*, Register recv, Register cache, Register target);
+
  private:
   void GenerateBootstrapStubsFor(Isolate* isolate);
   void GenerateStubsFor(Isolate* isolate);
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 84f251e..1d438ec 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -26,6 +26,8 @@
 DEFINE_FLAG(bool, use_slow_path, false,
     "Set to true for debugging & verifying the slow paths.");
 DECLARE_FLAG(bool, trace_optimized_ic_calls);
+DECLARE_FLAG(int, optimization_counter_threshold);
+DECLARE_FLAG(bool, support_debugger);
 
 // Input parameters:
 //   LR : return address.
@@ -1238,14 +1240,16 @@
 // Loads function into 'temp_reg'.
 void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
                                              Register temp_reg) {
-  Register ic_reg = R5;
-  Register func_reg = temp_reg;
-  ASSERT(temp_reg == R6);
-  __ Comment("Increment function counter");
-  __ ldr(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
-  __ ldr(R7, FieldAddress(func_reg, Function::usage_counter_offset()));
-  __ add(R7, R7, Operand(1));
-  __ str(R7, FieldAddress(func_reg, Function::usage_counter_offset()));
+  if (FLAG_optimization_counter_threshold >= 0) {
+    Register ic_reg = R5;
+    Register func_reg = temp_reg;
+    ASSERT(temp_reg == R6);
+    __ Comment("Increment function counter");
+    __ ldr(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
+    __ ldr(R7, FieldAddress(func_reg, Function::usage_counter_offset()));
+    __ add(R7, R7, Operand(1));
+    __ str(R7, FieldAddress(func_reg, Function::usage_counter_offset()));
+  }
 }
 
 
@@ -1301,12 +1305,14 @@
   __ Stop("Incorrect IC data");
   __ Bind(&ok);
 #endif
-  // Update counter.
-  const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
-  __ LoadFromOffset(kWord, R1, R6, count_offset);
-  __ adds(R1, R1, Operand(Smi::RawValue(1)));
-  __ LoadImmediate(R1, Smi::RawValue(Smi::kMaxValue), VS);  // Overflow.
-  __ StoreIntoSmiField(Address(R6, count_offset), R1);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Update counter.
+    const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
+    __ LoadFromOffset(kWord, R1, R6, count_offset);
+    __ adds(R1, R1, Operand(Smi::RawValue(1)));
+    __ LoadImmediate(R1, Smi::RawValue(Smi::kMaxValue), VS);  // Overflow.
+    __ StoreIntoSmiField(Address(R6, count_offset), R1);
+  }
   __ Ret();
 }
 
@@ -1342,14 +1348,15 @@
   }
 #endif  // DEBUG
 
-
-  __ Comment("Check single stepping");
   Label stepping, done_stepping;
-  __ LoadIsolate(R6);
-  __ ldrb(R6, Address(R6, Isolate::single_step_offset()));
-  __ CompareImmediate(R6, 0);
-  __ b(&stepping, NE);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Comment("Check single stepping");
+    __ LoadIsolate(R6);
+    __ ldrb(R6, Address(R6, Isolate::single_step_offset()));
+    __ CompareImmediate(R6, 0);
+    __ b(&stepping, NE);
+    __ Bind(&done_stepping);
+  }
 
   __ Comment("Range feedback collection");
   Label not_smi_or_overflow;
@@ -1460,11 +1467,13 @@
   const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
   __ LoadFromOffset(kWord, R0, R6, target_offset);
 
-  __ Comment("Update caller's counter");
-  __ LoadFromOffset(kWord, R1, R6, count_offset);
-  __ adds(R1, R1, Operand(Smi::RawValue(1)));
-  __ LoadImmediate(R1, Smi::RawValue(Smi::kMaxValue), VS);  // Overflow.
-  __ StoreIntoSmiField(Address(R6, count_offset), R1);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    __ Comment("Update caller's counter");
+    __ LoadFromOffset(kWord, R1, R6, count_offset);
+    __ adds(R1, R1, Operand(Smi::RawValue(1)));
+    __ LoadImmediate(R1, Smi::RawValue(Smi::kMaxValue), VS);  // Overflow.
+    __ StoreIntoSmiField(Address(R6, count_offset), R1);
+  }
 
   __ Comment("Call target");
   __ Bind(&call_target_function);
@@ -1494,13 +1503,15 @@
     __ bx(R2);
   }
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ Push(R5);  // Preserve IC data.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ Pop(R5);
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ Push(R5);  // Preserve IC data.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ Pop(R5);
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -1638,11 +1649,13 @@
 
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(R6);
-  __ ldrb(R6, Address(R6, Isolate::single_step_offset()));
-  __ CompareImmediate(R6, 0);
-  __ b(&stepping, NE);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(R6);
+    __ ldrb(R6, Address(R6, Isolate::single_step_offset()));
+    __ CompareImmediate(R6, 0);
+    __ b(&stepping, NE);
+    __ Bind(&done_stepping);
+  }
 
   // R5: IC data object (preserved).
   __ ldr(R6, FieldAddress(R5, ICData::ic_data_offset()));
@@ -1652,11 +1665,13 @@
   const intptr_t target_offset = ICData::TargetIndexFor(0) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(0) * kWordSize;
 
-  // Increment count for this call.
-  __ LoadFromOffset(kWord, R1, R6, count_offset);
-  __ adds(R1, R1, Operand(Smi::RawValue(1)));
-  __ LoadImmediate(R1, Smi::RawValue(Smi::kMaxValue), VS);  // Overflow.
-  __ StoreIntoSmiField(Address(R6, count_offset), R1);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Increment count for this call.
+    __ LoadFromOffset(kWord, R1, R6, count_offset);
+    __ adds(R1, R1, Operand(Smi::RawValue(1)));
+    __ LoadImmediate(R1, Smi::RawValue(Smi::kMaxValue), VS);  // Overflow.
+    __ StoreIntoSmiField(Address(R6, count_offset), R1);
+  }
 
   // Load arguments descriptor into R4.
   __ ldr(R4, FieldAddress(R5, ICData::arguments_descriptor_offset()));
@@ -1670,13 +1685,15 @@
   __ AddImmediate(R2, Instructions::HeaderSize() - kHeapObjectTag);
   __ bx(R2);
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ Push(R5);  // Preserve IC data.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ Pop(R5);
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ Push(R5);  // Preserve IC data.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ Pop(R5);
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -2021,11 +2038,13 @@
     Assembler* assembler) {
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(R1);
-  __ ldrb(R1, Address(R1, Isolate::single_step_offset()));
-  __ CompareImmediate(R1, 0);
-  __ b(&stepping, NE);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(R1);
+    __ ldrb(R1, Address(R1, Isolate::single_step_offset()));
+    __ CompareImmediate(R1, 0);
+    __ b(&stepping, NE);
+    __ Bind(&done_stepping);
+  }
 
   const Register temp = R2;
   const Register left = R1;
@@ -2035,11 +2054,13 @@
   GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp);
   __ Ret();
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -2059,6 +2080,60 @@
   __ Ret();
 }
 
+
+void StubCode::EmitMegamorphicLookup(
+    Assembler* assembler, Register receiver, Register cache, Register target) {
+  ASSERT((cache != R0) && (cache != R2));
+  __ LoadTaggedClassIdMayBeSmi(R0, receiver);
+  // R0: class ID of the receiver (smi).
+  __ ldr(R2, FieldAddress(cache, MegamorphicCache::buckets_offset()));
+  __ ldr(R1, FieldAddress(R1, MegamorphicCache::mask_offset()));
+  // R2: cache buckets array.
+  // R1: mask.
+  __ mov(R3, Operand(R0));
+
+  Label loop, update, call_target_function;
+  __ b(&loop);
+
+  __ Bind(&update);
+  __ add(R3, R3, Operand(Smi::RawValue(1)));
+  __ Bind(&loop);
+  __ and_(R3, R3, Operand(R1));
+  const intptr_t base = Array::data_offset();
+  // R3 is smi tagged, but table entries are two words, so LSL 2.
+  __ add(IP, R2, Operand(R3, LSL, 2));
+  __ ldr(R4, FieldAddress(IP, base));
+
+  ASSERT(kIllegalCid == 0);
+  __ tst(R4, Operand(R4));
+  __ b(&call_target_function, EQ);
+  __ cmp(R4, Operand(R0));
+  __ b(&update, NE);
+
+  __ Bind(&call_target_function);
+  // Call the target found in the cache.  For a class id match, this is a
+  // proper target for the given name and arguments descriptor.  If the
+  // illegal class id was found, the target is a cache miss handler that can
+  // be invoked as a normal Dart function.
+  __ add(IP, R2, Operand(R3, LSL, 2));
+  __ ldr(R0, FieldAddress(IP, base + kWordSize));
+  __ ldr(target, FieldAddress(R0, Function::instructions_offset()));
+  // TODO(srdjan): Evaluate performance impact of moving the instruction below
+  // to the call site, instead of having it here.
+  __ AddImmediate(target, Instructions::HeaderSize() - kHeapObjectTag);
+}
+
+
+// Called from megamorphic calls.
+//  R0: receiver.
+//  R1: lookup cache.
+// Result:
+//  R1: entry point.
+void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
+  EmitMegamorphicLookup(assembler, R0, R1, R1);
+  __ Ret();
+}
+
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
index e2ae703..745c8cd 100644
--- a/runtime/vm/stub_code_arm64.cc
+++ b/runtime/vm/stub_code_arm64.cc
@@ -25,6 +25,8 @@
 DEFINE_FLAG(bool, use_slow_path, false,
     "Set to true for debugging & verifying the slow paths.");
 DECLARE_FLAG(bool, trace_optimized_ic_calls);
+DECLARE_FLAG(int, optimization_counter_threshold);
+DECLARE_FLAG(bool, support_debugger);
 
 // Input parameters:
 //   LR : return address.
@@ -1265,16 +1267,18 @@
 // Loads function into 'temp_reg'.
 void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
                                              Register temp_reg) {
-  Register ic_reg = R5;
-  Register func_reg = temp_reg;
-  ASSERT(temp_reg == R6);
-  __ Comment("Increment function counter");
-  __ LoadFieldFromOffset(func_reg, ic_reg, ICData::owner_offset(), kNoPP);
-  __ LoadFieldFromOffset(
-      R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord);
-  __ AddImmediate(R7, R7, 1, kNoPP);
-  __ StoreFieldToOffset(
-      R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    Register ic_reg = R5;
+    Register func_reg = temp_reg;
+    ASSERT(temp_reg == R6);
+    __ Comment("Increment function counter");
+    __ LoadFieldFromOffset(func_reg, ic_reg, ICData::owner_offset(), kNoPP);
+    __ LoadFieldFromOffset(
+        R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord);
+    __ AddImmediate(R7, R7, 1, kNoPP);
+    __ StoreFieldToOffset(
+        R7, func_reg, Function::usage_counter_offset(), kNoPP, kWord);
+  }
 }
 
 
@@ -1343,13 +1347,15 @@
   __ Stop("Incorrect IC data");
   __ Bind(&ok);
 #endif
-  const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
-  // Update counter.
-  __ LoadFromOffset(R1, R6, count_offset, kNoPP);
-  __ adds(R1, R1, Operand(Smi::RawValue(1)));
-  __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP);
-  __ csel(R1, R2, R1, VS);  // Overflow.
-  __ StoreToOffset(R1, R6, count_offset, kNoPP);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
+    // Update counter.
+    __ LoadFromOffset(R1, R6, count_offset, kNoPP);
+    __ adds(R1, R1, Operand(Smi::RawValue(1)));
+    __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP);
+    __ csel(R1, R2, R1, VS);  // Overflow.
+    __ StoreToOffset(R1, R6, count_offset, kNoPP);
+  }
 
   __ ret();
 }
@@ -1387,14 +1393,16 @@
   }
 #endif  // DEBUG
 
-  __ Comment("Check single stepping");
   Label stepping, done_stepping;
-  __ LoadIsolate(R6, kNoPP);
-  __ LoadFromOffset(
-      R6, R6, Isolate::single_step_offset(), kNoPP, kUnsignedByte);
-  __ CompareRegisters(R6, ZR);
-  __ b(&stepping, NE);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Comment("Check single stepping");
+    __ LoadIsolate(R6, kNoPP);
+    __ LoadFromOffset(
+        R6, R6, Isolate::single_step_offset(), kNoPP, kUnsignedByte);
+    __ CompareRegisters(R6, ZR);
+    __ b(&stepping, NE);
+    __ Bind(&done_stepping);
+  }
 
   __ Comment("Range feedback collection");
   Label not_smi_or_overflow;
@@ -1520,12 +1528,14 @@
   const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
   __ LoadFromOffset(R0, R6, target_offset, kNoPP);
 
-  // Update counter.
-  __ LoadFromOffset(R1, R6, count_offset, kNoPP);
-  __ adds(R1, R1, Operand(Smi::RawValue(1)));
-  __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP);
-  __ csel(R1, R2, R1, VS);  // Overflow.
-  __ StoreToOffset(R1, R6, count_offset, kNoPP);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Update counter.
+    __ LoadFromOffset(R1, R6, count_offset, kNoPP);
+    __ adds(R1, R1, Operand(Smi::RawValue(1)));
+    __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP);
+    __ csel(R1, R2, R1, VS);  // Overflow.
+    __ StoreToOffset(R1, R6, count_offset, kNoPP);
+  }
 
   __ Comment("Call target");
   __ Bind(&call_target_function);
@@ -1556,13 +1566,15 @@
     __ br(R2);
   }
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ Push(R5);  // Preserve IC data.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ Pop(R5);
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ Push(R5);  // Preserve IC data.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ Pop(R5);
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -1690,12 +1702,14 @@
 
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(R6, kNoPP);
-  __ LoadFromOffset(
-      R6, R6, Isolate::single_step_offset(), kNoPP, kUnsignedByte);
-  __ CompareImmediate(R6, 0, kNoPP);
-  __ b(&stepping, NE);
-  __ Bind(&done_stepping);
+    if (FLAG_support_debugger) {
+    __ LoadIsolate(R6, kNoPP);
+    __ LoadFromOffset(
+        R6, R6, Isolate::single_step_offset(), kNoPP, kUnsignedByte);
+    __ CompareImmediate(R6, 0, kNoPP);
+    __ b(&stepping, NE);
+    __ Bind(&done_stepping);
+  }
 
   // R5: IC data object (preserved).
   __ LoadFieldFromOffset(R6, R5, ICData::ic_data_offset(), kNoPP);
@@ -1705,12 +1719,14 @@
   const intptr_t target_offset = ICData::TargetIndexFor(0) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(0) * kWordSize;
 
-  // Increment count for this call.
-  __ LoadFromOffset(R1, R6, count_offset, kNoPP);
-  __ adds(R1, R1, Operand(Smi::RawValue(1)));
-  __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP);
-  __ csel(R1, R2, R1, VS);  // Overflow.
-  __ StoreToOffset(R1, R6, count_offset, kNoPP);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Increment count for this call.
+    __ LoadFromOffset(R1, R6, count_offset, kNoPP);
+    __ adds(R1, R1, Operand(Smi::RawValue(1)));
+    __ LoadImmediate(R2, Smi::RawValue(Smi::kMaxValue), kNoPP);
+    __ csel(R1, R2, R1, VS);  // Overflow.
+    __ StoreToOffset(R1, R6, count_offset, kNoPP);
+  }
 
   // Load arguments descriptor into R4.
   __ LoadFieldFromOffset(R4, R5, ICData::arguments_descriptor_offset(), kNoPP);
@@ -1725,13 +1741,15 @@
       R2, R2, Instructions::HeaderSize() - kHeapObjectTag, kNoPP);
   __ br(R2);
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ Push(R5);  // Preserve IC data.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ Pop(R5);
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ Push(R5);  // Preserve IC data.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ Pop(R5);
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -2070,12 +2088,14 @@
     Assembler* assembler) {
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(R1, kNoPP);
-  __ LoadFromOffset(
-      R1, R1, Isolate::single_step_offset(), kNoPP, kUnsignedByte);
-  __ CompareImmediate(R1, 0, kNoPP);
-  __ b(&stepping, NE);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(R1, kNoPP);
+    __ LoadFromOffset(
+        R1, R1, Isolate::single_step_offset(), kNoPP, kUnsignedByte);
+    __ CompareImmediate(R1, 0, kNoPP);
+    __ b(&stepping, NE);
+    __ Bind(&done_stepping);
+  }
 
   const Register left = R1;
   const Register right = R0;
@@ -2084,11 +2104,13 @@
   GenerateIdenticalWithNumberCheckStub(assembler, left, right);
   __ ret();
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -2108,6 +2130,60 @@
   __ ret();
 }
 
+
+void StubCode::EmitMegamorphicLookup(
+    Assembler* assembler, Register receiver, Register cache, Register target) {
+  ASSERT((cache != R0) && (cache != R2));
+  __ LoadTaggedClassIdMayBeSmi(R0, receiver);
+  // R0: class ID of the receiver (smi).
+  __ LoadFieldFromOffset(R2, cache, MegamorphicCache::buckets_offset(), PP);
+  __ LoadFieldFromOffset(R1, cache, MegamorphicCache::mask_offset(), PP);
+  // R2: cache buckets array.
+  // R1: mask.
+  __ mov(R3, R0);
+
+  Label loop, update, call_target_function;
+  __ b(&loop);
+
+  __ Bind(&update);
+  __ add(R3, R3, Operand(Smi::RawValue(1)));
+  __ Bind(&loop);
+  __ and_(R3, R3, Operand(R1));
+  const intptr_t base = Array::data_offset();
+  // R3 is smi tagged, but table entries are 16 bytes, so LSL 3.
+  __ add(TMP, R2, Operand(R3, LSL, 3));
+  __ LoadFieldFromOffset(R4, TMP, base, PP);
+
+  ASSERT(kIllegalCid == 0);
+  __ tst(R4, Operand(R4));
+  __ b(&call_target_function, EQ);
+  __ CompareRegisters(R4, R0);
+  __ b(&update, NE);
+
+  __ Bind(&call_target_function);
+  // Call the target found in the cache.  For a class id match, this is a
+  // proper target for the given name and arguments descriptor.  If the
+  // illegal class id was found, the target is a cache miss handler that can
+  // be invoked as a normal Dart function.
+  __ add(TMP, R2, Operand(R3, LSL, 3));
+  __ LoadFieldFromOffset(R0, TMP, base + kWordSize, PP);
+  __ LoadFieldFromOffset(R1, R0, Function::instructions_offset(), PP);
+  // TODO(srdjan): Evaluate performance impact of moving the instruction below
+  // to the call site, instead of having it here.
+  __ AddImmediate(target, R1, Instructions::HeaderSize() - kHeapObjectTag, PP);
+}
+
+
+// Called from megamorphic calls.
+//  R0: receiver.
+//  R1: lookup cache.
+// Result:
+//  R1: entry point.
+void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
+  EmitMegamorphicLookup(assembler, R0, R1, R1);
+  __ ret();
+}
+
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM64
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 6e35450..e8b0245 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -27,7 +27,8 @@
 DEFINE_FLAG(bool, use_slow_path, false,
     "Set to true for debugging & verifying the slow paths.");
 DECLARE_FLAG(bool, trace_optimized_ic_calls);
-DEFINE_FLAG(bool, verify_incoming_contexts, false, "");
+DECLARE_FLAG(int, optimization_counter_threshold);
+DECLARE_FLAG(bool, support_debugger);
 
 #define INT32_SIZEOF(x) static_cast<int32_t>(sizeof(x))
 
@@ -1185,12 +1186,14 @@
 // Loads function into 'temp_reg'.
 void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
                                              Register temp_reg) {
-  Register ic_reg = ECX;
-  Register func_reg = temp_reg;
-  ASSERT(ic_reg != func_reg);
-  __ Comment("Increment function counter");
-  __ movl(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
-  __ incl(FieldAddress(func_reg, Function::usage_counter_offset()));
+  if (FLAG_optimization_counter_threshold >= 0) {
+    Register ic_reg = ECX;
+    Register func_reg = temp_reg;
+    ASSERT(ic_reg != func_reg);
+    __ Comment("Increment function counter");
+    __ movl(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
+    __ incl(FieldAddress(func_reg, Function::usage_counter_offset()));
+  }
 }
 
 
@@ -1258,14 +1261,15 @@
   __ Stop("Incorrect IC data");
   __ Bind(&ok);
 #endif
-  // Update counter.
-  const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
-  __ movl(ECX, Address(EBX, count_offset));
-  __ addl(ECX, Immediate(Smi::RawValue(1)));
-  __ movl(EDI, Immediate(Smi::RawValue(Smi::kMaxValue)));
-  __ cmovno(EDI, ECX);
-  __ StoreIntoSmiField(Address(EBX, count_offset), EDI);
-
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Update counter.
+    const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
+    __ movl(ECX, Address(EBX, count_offset));
+    __ addl(ECX, Immediate(Smi::RawValue(1)));
+    __ movl(EDI, Immediate(Smi::RawValue(Smi::kMaxValue)));
+    __ cmovno(EDI, ECX);
+    __ StoreIntoSmiField(Address(EBX, count_offset), EDI);
+  }
   __ ret();
 }
 
@@ -1301,14 +1305,15 @@
   }
 #endif  // DEBUG
 
-  __ Comment("Check single stepping");
   Label stepping, done_stepping;
-  uword single_step_address = reinterpret_cast<uword>(Isolate::Current()) +
-      Isolate::single_step_offset();
-  __ cmpb(Address::Absolute(single_step_address), Immediate(0));
-  __ j(NOT_EQUAL, &stepping);
-  __ Bind(&done_stepping);
-
+  if (FLAG_support_debugger) {
+    __ Comment("Check single stepping");
+    uword single_step_address = reinterpret_cast<uword>(Isolate::Current()) +
+        Isolate::single_step_offset();
+    __ cmpb(Address::Absolute(single_step_address), Immediate(0));
+    __ j(NOT_EQUAL, &stepping);
+    __ Bind(&done_stepping);
+  }
   __ Comment("Range feedback collection");
   Label not_smi_or_overflow;
   if (range_collection_mode == kCollectRanges) {
@@ -1422,13 +1427,14 @@
   // EBX: Pointer to an IC data check group.
   const intptr_t target_offset = ICData::TargetIndexFor(num_args) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
-
-  __ Comment("Update caller's counter");
-  __ movl(EAX, Address(EBX, count_offset));
-  __ addl(EAX, Immediate(Smi::RawValue(1)));
-  __ movl(EDI, Immediate(Smi::RawValue(Smi::kMaxValue)));
-  __ cmovno(EDI, EAX);
-  __ StoreIntoSmiField(Address(EBX, count_offset), EDI);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    __ Comment("Update caller's counter");
+    __ movl(EAX, Address(EBX, count_offset));
+    __ addl(EAX, Immediate(Smi::RawValue(1)));
+    __ movl(EDI, Immediate(Smi::RawValue(Smi::kMaxValue)));
+    __ cmovno(EDI, EAX);
+    __ StoreIntoSmiField(Address(EBX, count_offset), EDI);
+  }
 
   __ movl(EAX, Address(EBX, target_offset));
   __ Bind(&call_target_function);
@@ -1459,13 +1465,15 @@
     __ jmp(EBX);
   }
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ pushl(ECX);
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ popl(ECX);
-  __ LeaveFrame();
-  __ jmp(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ pushl(ECX);
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ popl(ECX);
+    __ LeaveFrame();
+    __ jmp(&done_stepping);
+  }
 }
 
 
@@ -1615,11 +1623,13 @@
 #endif  // DEBUG
   // Check single stepping.
   Label stepping, done_stepping;
-  uword single_step_address = reinterpret_cast<uword>(Isolate::Current()) +
-      Isolate::single_step_offset();
-  __ cmpb(Address::Absolute(single_step_address), Immediate(0));
-  __ j(NOT_EQUAL, &stepping, Assembler::kNearJump);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    uword single_step_address = reinterpret_cast<uword>(Isolate::Current()) +
+        Isolate::single_step_offset();
+    __ cmpb(Address::Absolute(single_step_address), Immediate(0));
+    __ j(NOT_EQUAL, &stepping, Assembler::kNearJump);
+    __ Bind(&done_stepping);
+  }
 
   // ECX: IC data object (preserved).
   __ movl(EBX, FieldAddress(ECX, ICData::ic_data_offset()));
@@ -1629,12 +1639,14 @@
   const intptr_t target_offset = ICData::TargetIndexFor(0) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(0) * kWordSize;
 
-  // Increment count for this call.
-  __ movl(EAX, Address(EBX, count_offset));
-  __ addl(EAX, Immediate(Smi::RawValue(1)));
-  __ movl(EDI, Immediate(Smi::RawValue(Smi::kMaxValue)));
-  __ cmovno(EDI, EAX);
-  __ StoreIntoSmiField(Address(EBX, count_offset), EDI);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Increment count for this call.
+    __ movl(EAX, Address(EBX, count_offset));
+    __ addl(EAX, Immediate(Smi::RawValue(1)));
+    __ movl(EDI, Immediate(Smi::RawValue(Smi::kMaxValue)));
+    __ cmovno(EDI, EAX);
+    __ StoreIntoSmiField(Address(EBX, count_offset), EDI);
+  }
 
   // Load arguments descriptor into EDX.
   __ movl(EDX, FieldAddress(ECX, ICData::arguments_descriptor_offset()));
@@ -1647,13 +1659,15 @@
   __ addl(EBX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ jmp(EBX);
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ pushl(ECX);
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ popl(ECX);
-  __ LeaveFrame();
-  __ jmp(&done_stepping, Assembler::kNearJump);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ pushl(ECX);
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ popl(ECX);
+    __ LeaveFrame();
+    __ jmp(&done_stepping, Assembler::kNearJump);
+  }
 }
 
 
@@ -2016,11 +2030,13 @@
     Assembler* assembler) {
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(EAX);
-  __ movzxb(EAX, Address(EAX, Isolate::single_step_offset()));
-  __ cmpl(EAX, Immediate(0));
-  __ j(NOT_EQUAL, &stepping);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(EAX);
+    __ movzxb(EAX, Address(EAX, Isolate::single_step_offset()));
+    __ cmpl(EAX, Immediate(0));
+    __ j(NOT_EQUAL, &stepping);
+    __ Bind(&done_stepping);
+  }
 
   const Register left = EAX;
   const Register right = EDX;
@@ -2030,11 +2046,13 @@
   GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp);
   __ ret();
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ LeaveFrame();
-  __ jmp(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ LeaveFrame();
+    __ jmp(&done_stepping);
+  }
 }
 
 
@@ -2054,6 +2072,60 @@
   __ ret();
 }
 
+
+void StubCode::EmitMegamorphicLookup(
+    Assembler* assembler, Register receiver, Register cache, Register target) {
+  ASSERT((cache != EAX) && (cache != EDI));
+  __ LoadTaggedClassIdMayBeSmi(EAX, receiver);
+
+  // EAX: class ID of the receiver (smi).
+  __ movl(EDI, FieldAddress(cache, MegamorphicCache::buckets_offset()));
+  __ movl(EBX, FieldAddress(cache, MegamorphicCache::mask_offset()));
+  // EDI: cache buckets array.
+  // EBX: mask.
+  __ movl(ECX, EAX);
+
+  Label loop, update, call_target_function;
+  __ jmp(&loop);
+
+  __ Bind(&update);
+  __ addl(ECX, Immediate(Smi::RawValue(1)));
+  __ Bind(&loop);
+  __ andl(ECX, EBX);
+  const intptr_t base = Array::data_offset();
+  // ECX is smi tagged, but table entries are two words, so TIMES_4.
+  __ movl(EDX, FieldAddress(EDI, ECX, TIMES_4, base));
+
+  ASSERT(kIllegalCid == 0);
+  __ testl(EDX, EDX);
+  __ j(ZERO, &call_target_function, Assembler::kNearJump);
+  __ cmpl(EDX, EAX);
+  __ j(NOT_EQUAL, &update, Assembler::kNearJump);
+
+  __ Bind(&call_target_function);
+  // Call the target found in the cache.  For a class id match, this is a
+  // proper target for the given name and arguments descriptor.  If the
+  // illegal class id was found, the target is a cache miss handler that can
+  // be invoked as a normal Dart function.
+  __ movl(EAX, FieldAddress(EDI, ECX, TIMES_4, base + kWordSize));
+  __ movl(target, FieldAddress(EAX, Function::instructions_offset()));
+  // TODO(srdjan): Evaluate performance impact of moving the instruction below
+  // to the call site, instead of having it here.
+  __ addl(target, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
+}
+
+
+// Called from megamorphic calls.
+//  EDI: receiver.
+//  EBX: lookup cache.
+// Result:
+//  EBX: entry point.
+void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
+  EmitMegamorphicLookup(assembler, EDI, EBX, EBX);
+  __ ret();
+}
+
+
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_IA32
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index 91abd0a..503a3f1 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -25,6 +25,8 @@
 DEFINE_FLAG(bool, use_slow_path, false,
     "Set to true for debugging & verifying the slow paths.");
 DECLARE_FLAG(bool, trace_optimized_ic_calls);
+DECLARE_FLAG(int, optimization_counter_threshold);
+DECLARE_FLAG(bool, support_debugger);
 
 // Input parameters:
 //   RA : return address.
@@ -1337,15 +1339,17 @@
 // Loads function into 'temp_reg'.
 void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
                                              Register temp_reg) {
-  __ Comment("UsageCounterIncrement");
-  Register ic_reg = S5;
-  Register func_reg = temp_reg;
-  ASSERT(temp_reg == T0);
-  __ Comment("Increment function counter");
-  __ lw(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
-  __ lw(T1, FieldAddress(func_reg, Function::usage_counter_offset()));
-  __ addiu(T1, T1, Immediate(1));
-  __ sw(T1, FieldAddress(func_reg, Function::usage_counter_offset()));
+  if (FLAG_optimization_counter_threshold >= 0) {
+    __ Comment("UsageCounterIncrement");
+    Register ic_reg = S5;
+    Register func_reg = temp_reg;
+    ASSERT(temp_reg == T0);
+    __ Comment("Increment function counter");
+    __ lw(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
+    __ lw(T1, FieldAddress(func_reg, Function::usage_counter_offset()));
+    __ addiu(T1, T1, Immediate(1));
+    __ sw(T1, FieldAddress(func_reg, Function::usage_counter_offset()));
+  }
 }
 
 
@@ -1404,14 +1408,16 @@
   __ Stop("Incorrect IC data");
   __ Bind(&ok);
 #endif
-  // Update counter.
-  const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
-  __ lw(T4, Address(T0, count_offset));
-  __ AddImmediateDetectOverflow(T7, T4, Smi::RawValue(1), T5, T6);
-  __ slt(CMPRES1, T5, ZR);  // T5 is < 0 if there was overflow.
-  __ LoadImmediate(T4, Smi::RawValue(Smi::kMaxValue));
-  __ movz(T4, T7, CMPRES1);
-  __ sw(T4, Address(T0, count_offset));
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Update counter.
+    const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
+    __ lw(T4, Address(T0, count_offset));
+    __ AddImmediateDetectOverflow(T7, T4, Smi::RawValue(1), T5, T6);
+    __ slt(CMPRES1, T5, ZR);  // T5 is < 0 if there was overflow.
+    __ LoadImmediate(T4, Smi::RawValue(Smi::kMaxValue));
+    __ movz(T4, T7, CMPRES1);
+    __ sw(T4, Address(T0, count_offset));
+  }
 
   __ Ret();
 }
@@ -1449,12 +1455,14 @@
 #endif  // DEBUG
 
 
-  __ Comment("Check single stepping");
   Label stepping, done_stepping;
-  __ LoadIsolate(T0);
-  __ lbu(T0, Address(T0, Isolate::single_step_offset()));
-  __ BranchNotEqual(T0, Immediate(0), &stepping);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Comment("Check single stepping");
+    __ LoadIsolate(T0);
+    __ lbu(T0, Address(T0, Isolate::single_step_offset()));
+    __ BranchNotEqual(T0, Immediate(0), &stepping);
+    __ Bind(&done_stepping);
+  }
 
   __ Comment("Range feedback collection");
   Label not_smi_or_overflow;
@@ -1593,13 +1601,15 @@
   const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
   __ lw(T3, Address(T0, target_offset));
 
-  // Update counter.
-  __ lw(T4, Address(T0, count_offset));
-  __ AddImmediateDetectOverflow(T7, T4, Smi::RawValue(1), T5, T6);
-  __ slt(CMPRES1, T5, ZR);  // T5 is < 0 if there was overflow.
-  __ LoadImmediate(T4, Smi::RawValue(Smi::kMaxValue));
-  __ movz(T4, T7, CMPRES1);
-  __ sw(T4, Address(T0, count_offset));
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Update counter.
+    __ lw(T4, Address(T0, count_offset));
+    __ AddImmediateDetectOverflow(T7, T4, Smi::RawValue(1), T5, T6);
+    __ slt(CMPRES1, T5, ZR);  // T5 is < 0 if there was overflow.
+    __ LoadImmediate(T4, Smi::RawValue(Smi::kMaxValue));
+    __ movz(T4, T7, CMPRES1);
+    __ sw(T4, Address(T0, count_offset));
+  }
 
   __ Comment("Call target");
   __ Bind(&call_target_function);
@@ -1636,17 +1646,19 @@
   }
 
   // Call single step callback in debugger.
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ addiu(SP, SP, Immediate(-2 * kWordSize));
-  __ sw(S5, Address(SP, 1 * kWordSize));  // Preserve IC data.
-  __ sw(RA, Address(SP, 0 * kWordSize));  // Return address.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ lw(RA, Address(SP, 0 * kWordSize));
-  __ lw(S5, Address(SP, 1 * kWordSize));
-  __ addiu(SP, SP, Immediate(2 * kWordSize));
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ addiu(SP, SP, Immediate(-2 * kWordSize));
+    __ sw(S5, Address(SP, 1 * kWordSize));  // Preserve IC data.
+    __ sw(RA, Address(SP, 0 * kWordSize));  // Return address.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ lw(RA, Address(SP, 0 * kWordSize));
+    __ lw(S5, Address(SP, 1 * kWordSize));
+    __ addiu(SP, SP, Immediate(2 * kWordSize));
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -1776,10 +1788,12 @@
 
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(T0);
-  __ lbu(T0, Address(T0, Isolate::single_step_offset()));
-  __ BranchNotEqual(T0, Immediate(0), &stepping);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(T0);
+    __ lbu(T0, Address(T0, Isolate::single_step_offset()));
+    __ BranchNotEqual(T0, Immediate(0), &stepping);
+    __ Bind(&done_stepping);
+  }
 
   // S5: IC data object (preserved).
   __ lw(T0, FieldAddress(S5, ICData::ic_data_offset()));
@@ -1789,13 +1803,15 @@
   const intptr_t target_offset = ICData::TargetIndexFor(0) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(0) * kWordSize;
 
-  // Increment count for this call.
-  __ lw(T4, Address(T0, count_offset));
-  __ AddImmediateDetectOverflow(T7, T4, Smi::RawValue(1), T5, T6);
-  __ slt(CMPRES1, T5, ZR);  // T5 is < 0 if there was overflow.
-  __ LoadImmediate(T4, Smi::RawValue(Smi::kMaxValue));
-  __ movz(T4, T7, CMPRES1);
-  __ sw(T4, Address(T0, count_offset));
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Increment count for this call.
+    __ lw(T4, Address(T0, count_offset));
+    __ AddImmediateDetectOverflow(T7, T4, Smi::RawValue(1), T5, T6);
+    __ slt(CMPRES1, T5, ZR);  // T5 is < 0 if there was overflow.
+    __ LoadImmediate(T4, Smi::RawValue(Smi::kMaxValue));
+    __ movz(T4, T7, CMPRES1);
+    __ sw(T4, Address(T0, count_offset));
+  }
 
   // Load arguments descriptor into S4.
   __ lw(S4,  FieldAddress(S5, ICData::arguments_descriptor_offset()));
@@ -1809,17 +1825,19 @@
   __ jr(T4);
 
   // Call single step callback in debugger.
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ addiu(SP, SP, Immediate(-2 * kWordSize));
-  __ sw(S5, Address(SP, 1 * kWordSize));  // Preserve IC data.
-  __ sw(RA, Address(SP, 0 * kWordSize));  // Return address.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ lw(RA, Address(SP, 0 * kWordSize));
-  __ lw(S5, Address(SP, 1 * kWordSize));
-  __ addiu(SP, SP, Immediate(2 * kWordSize));
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ addiu(SP, SP, Immediate(-2 * kWordSize));
+    __ sw(S5, Address(SP, 1 * kWordSize));  // Preserve IC data.
+    __ sw(RA, Address(SP, 0 * kWordSize));  // Return address.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ lw(RA, Address(SP, 0 * kWordSize));
+    __ lw(S5, Address(SP, 1 * kWordSize));
+    __ addiu(SP, SP, Immediate(2 * kWordSize));
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -2212,10 +2230,12 @@
     Assembler* assembler) {
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(T0);
-  __ lbu(T0, Address(T0, Isolate::single_step_offset()));
-  __ BranchNotEqual(T0, Immediate(0), &stepping);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(T0);
+    __ lbu(T0, Address(T0, Isolate::single_step_offset()));
+    __ BranchNotEqual(T0, Immediate(0), &stepping);
+    __ Bind(&done_stepping);
+  }
 
   const Register temp1 = T2;
   const Register temp2 = T3;
@@ -2227,15 +2247,17 @@
   __ Ret();
 
   // Call single step callback in debugger.
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ addiu(SP, SP, Immediate(-1 * kWordSize));
-  __ sw(RA, Address(SP, 0 * kWordSize));  // Return address.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ lw(RA, Address(SP, 0 * kWordSize));
-  __ addiu(SP, SP, Immediate(1 * kWordSize));
-  __ LeaveStubFrame();
-  __ b(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ addiu(SP, SP, Immediate(-1 * kWordSize));
+    __ sw(RA, Address(SP, 0 * kWordSize));  // Return address.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ lw(RA, Address(SP, 0 * kWordSize));
+    __ addiu(SP, SP, Immediate(1 * kWordSize));
+    __ LeaveStubFrame();
+    __ b(&done_stepping);
+  }
 }
 
 
@@ -2255,6 +2277,61 @@
   __ Ret();
 }
 
+
+void StubCode::EmitMegamorphicLookup(
+    Assembler* assembler, Register receiver, Register cache, Register target) {
+  ASSERT((cache != T0) && (cache != T2));
+  __ LoadTaggedClassIdMayBeSmi(T0, receiver);
+  // T0: class ID of the receiver (smi).
+  __ lw(T2, FieldAddress(cache, MegamorphicCache::buckets_offset()));
+  __ lw(T1, FieldAddress(cache, MegamorphicCache::mask_offset()));
+  // T2: cache buckets array.
+  // T1: mask.
+  __ mov(T3, T0);
+
+  Label loop, update, call_target_function;
+  __ b(&loop);
+
+  __ Bind(&update);
+  __ addiu(T3, T3, Immediate(Smi::RawValue(1)));
+  __ Bind(&loop);
+  __ and_(T3, T3, T1);
+  const intptr_t base = Array::data_offset();
+  // T3 is smi tagged, but table entries are two words, so LSL 2.
+  __ sll(TMP, T3, 2);
+  __ addu(TMP, T2, TMP);
+  __ lw(T4, FieldAddress(TMP, base));
+
+  ASSERT(kIllegalCid == 0);
+  __ beq(T4, ZR, &call_target_function);
+  __ bne(T4, T0, &update);
+
+  __ Bind(&call_target_function);
+  // Call the target found in the cache.  For a class id match, this is a
+  // proper target for the given name and arguments descriptor.  If the
+  // illegal class id was found, the target is a cache miss handler that can
+  // be invoked as a normal Dart function.
+  __ sll(T1, T3, 2);
+  __ addu(T1, T2, T1);
+  __ lw(T0, FieldAddress(T1, base + kWordSize));
+
+  __ lw(target, FieldAddress(T0, Function::instructions_offset()));
+  // TODO(srdjan): Evaluate performance impact of moving the instruction below
+  // to the call site, instead of having it here.
+  __ AddImmediate(target, Instructions::HeaderSize() - kHeapObjectTag);
+}
+
+
+// Called from megamorphic calls.
+//  T0: receiver.
+//  T1: lookup cache.
+// Result:
+//  T1: entry point.
+void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
+  EmitMegamorphicLookup(assembler, T0, T1, T1);
+  __ Ret();
+}
+
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 0961ef7..77da070 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -26,6 +26,8 @@
 DEFINE_FLAG(bool, use_slow_path, false,
     "Set to true for debugging & verifying the slow paths.");
 DECLARE_FLAG(bool, trace_optimized_ic_calls);
+DECLARE_FLAG(int, optimization_counter_threshold);
+DECLARE_FLAG(bool, support_debugger);
 
 // Input parameters:
 //   RSP : points to return address.
@@ -1214,12 +1216,14 @@
 // Loads function into 'temp_reg', preserves 'ic_reg'.
 void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
                                              Register temp_reg) {
-  Register ic_reg = RBX;
-  Register func_reg = temp_reg;
-  ASSERT(ic_reg != func_reg);
-  __ Comment("Increment function counter");
-  __ movq(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
-  __ incl(FieldAddress(func_reg, Function::usage_counter_offset()));
+  if (FLAG_optimization_counter_threshold >= 0) {
+    Register ic_reg = RBX;
+    Register func_reg = temp_reg;
+    ASSERT(ic_reg != func_reg);
+    __ Comment("Increment function counter");
+    __ movq(func_reg, FieldAddress(ic_reg, ICData::owner_offset()));
+    __ incl(FieldAddress(func_reg, Function::usage_counter_offset()));
+  }
 }
 
 
@@ -1296,13 +1300,15 @@
   __ Bind(&ok);
 #endif
 
-  const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
-  // Update counter.
-  __ movq(R8, Address(R12, count_offset));
-  __ addq(R8, Immediate(Smi::RawValue(1)));
-  __ movq(R9, Immediate(Smi::RawValue(Smi::kMaxValue)));
-  __ cmovnoq(R9, R8);
-  __ StoreIntoSmiField(Address(R12, count_offset), R9);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
+    // Update counter.
+    __ movq(R8, Address(R12, count_offset));
+    __ addq(R8, Immediate(Smi::RawValue(1)));
+    __ movq(R9, Immediate(Smi::RawValue(Smi::kMaxValue)));
+    __ cmovnoq(R9, R8);
+    __ StoreIntoSmiField(Address(R12, count_offset), R9);
+  }
 
   __ ret();
 }
@@ -1339,12 +1345,14 @@
   }
 #endif  // DEBUG
 
-  __ Comment("Check single stepping");
   Label stepping, done_stepping;
-  __ LoadIsolate(RAX);
-  __ cmpb(Address(RAX, Isolate::single_step_offset()), Immediate(0));
-  __ j(NOT_EQUAL, &stepping);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Comment("Check single stepping");
+    __ LoadIsolate(RAX);
+    __ cmpb(Address(RAX, Isolate::single_step_offset()), Immediate(0));
+    __ j(NOT_EQUAL, &stepping);
+    __ Bind(&done_stepping);
+  }
 
   __ Comment("Range feedback collection");
   Label not_smi_or_overflow;
@@ -1453,18 +1461,20 @@
   __ jmp(&call_target_function);
 
   __ Bind(&found);
-  __ Comment("Update caller's counter");
   // R12: Pointer to an IC data check group.
   const intptr_t target_offset = ICData::TargetIndexFor(num_args) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
   __ movq(RAX, Address(R12, target_offset));
 
-  // Update counter.
-  __ movq(R8, Address(R12, count_offset));
-  __ addq(R8, Immediate(Smi::RawValue(1)));
-  __ movq(R9, Immediate(Smi::RawValue(Smi::kMaxValue)));
-  __ cmovnoq(R9, R8);
-  __ StoreIntoSmiField(Address(R12, count_offset), R9);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Update counter.
+    __ Comment("Update caller's counter");
+    __ movq(R8, Address(R12, count_offset));
+    __ addq(R8, Immediate(Smi::RawValue(1)));
+    __ movq(R9, Immediate(Smi::RawValue(Smi::kMaxValue)));
+    __ cmovnoq(R9, R8);
+    __ StoreIntoSmiField(Address(R12, count_offset), R9);
+  }
 
   __ Comment("Call target");
   __ Bind(&call_target_function);
@@ -1496,13 +1506,15 @@
     __ jmp(RCX);
   }
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ pushq(RBX);
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ popq(RBX);
-  __ LeaveStubFrame();
-  __ jmp(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ pushq(RBX);
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ popq(RBX);
+    __ LeaveStubFrame();
+    __ jmp(&done_stepping);
+  }
 }
 
 
@@ -1652,16 +1664,18 @@
 
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(RAX);
-  __ movzxb(RAX, Address(RAX, Isolate::single_step_offset()));
-  __ cmpq(RAX, Immediate(0));
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(RAX);
+    __ movzxb(RAX, Address(RAX, Isolate::single_step_offset()));
+    __ cmpq(RAX, Immediate(0));
 #if defined(DEBUG)
       static const bool kJumpLength = Assembler::kFarJump;
 #else
       static const bool kJumpLength = Assembler::kNearJump;
 #endif  // DEBUG
-  __ j(NOT_EQUAL, &stepping, kJumpLength);
-  __ Bind(&done_stepping);
+    __ j(NOT_EQUAL, &stepping, kJumpLength);
+    __ Bind(&done_stepping);
+  }
 
   // RBX: IC data object (preserved).
   __ movq(R12, FieldAddress(RBX, ICData::ic_data_offset()));
@@ -1671,12 +1685,14 @@
   const intptr_t target_offset = ICData::TargetIndexFor(0) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(0) * kWordSize;
 
-  // Increment count for this call.
-  __ movq(R8, Address(R12, count_offset));
-  __ addq(R8, Immediate(Smi::RawValue(1)));
-  __ movq(R9, Immediate(Smi::RawValue(Smi::kMaxValue)));
-  __ cmovnoq(R9, R8);
-  __ StoreIntoSmiField(Address(R12, count_offset), R9);
+  if (FLAG_optimization_counter_threshold >= 0) {
+    // Increment count for this call.
+    __ movq(R8, Address(R12, count_offset));
+    __ addq(R8, Immediate(Smi::RawValue(1)));
+    __ movq(R9, Immediate(Smi::RawValue(Smi::kMaxValue)));
+    __ cmovnoq(R9, R8);
+    __ StoreIntoSmiField(Address(R12, count_offset), R9);
+  }
 
   // Load arguments descriptor into R10.
   __ movq(R10, FieldAddress(RBX, ICData::arguments_descriptor_offset()));
@@ -1688,13 +1704,15 @@
   __ addq(RCX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ jmp(RCX);
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ pushq(RBX);  // Preserve IC data object.
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ popq(RBX);
-  __ LeaveStubFrame();
-  __ jmp(&done_stepping, Assembler::kNearJump);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ pushq(RBX);  // Preserve IC data object.
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ popq(RBX);
+    __ LeaveStubFrame();
+    __ jmp(&done_stepping, Assembler::kNearJump);
+  }
 }
 
 
@@ -2065,11 +2083,13 @@
     Assembler* assembler) {
   // Check single stepping.
   Label stepping, done_stepping;
-  __ LoadIsolate(RAX);
-  __ movzxb(RAX, Address(RAX, Isolate::single_step_offset()));
-  __ cmpq(RAX, Immediate(0));
-  __ j(NOT_EQUAL, &stepping);
-  __ Bind(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ LoadIsolate(RAX);
+    __ movzxb(RAX, Address(RAX, Isolate::single_step_offset()));
+    __ cmpq(RAX, Immediate(0));
+    __ j(NOT_EQUAL, &stepping);
+    __ Bind(&done_stepping);
+  }
 
   const Register left = RAX;
   const Register right = RDX;
@@ -2079,11 +2099,13 @@
   GenerateIdenticalWithNumberCheckStub(assembler, left, right);
   __ ret();
 
-  __ Bind(&stepping);
-  __ EnterStubFrame();
-  __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
-  __ LeaveStubFrame();
-  __ jmp(&done_stepping);
+  if (FLAG_support_debugger) {
+    __ Bind(&stepping);
+    __ EnterStubFrame();
+    __ CallRuntime(kSingleStepHandlerRuntimeEntry, 0);
+    __ LeaveStubFrame();
+    __ jmp(&done_stepping);
+  }
 }
 
 
@@ -2103,6 +2125,59 @@
   __ ret();
 }
 
+
+void StubCode::EmitMegamorphicLookup(
+    Assembler* assembler, Register receiver, Register cache, Register target) {
+  ASSERT((cache != RAX) && (cache != RDI));
+  __ LoadTaggedClassIdMayBeSmi(RAX, receiver);
+  // RAX: class ID of the receiver (smi).
+  __ movq(RDI, FieldAddress(cache, MegamorphicCache::buckets_offset()));
+  __ movq(RBX, FieldAddress(cache, MegamorphicCache::mask_offset()));
+  // RDI: cache buckets array.
+  // RBX: mask.
+  __ movq(RCX, RAX);
+
+  Label loop, update, call_target_function;
+  __ jmp(&loop);
+
+  __ Bind(&update);
+  __ AddImmediate(RCX, Immediate(Smi::RawValue(1)), PP);
+  __ Bind(&loop);
+  __ andq(RCX, RBX);
+  const intptr_t base = Array::data_offset();
+  // RCX is smi tagged, but table entries are two words, so TIMES_8.
+  __ movq(RDX, FieldAddress(RDI, RCX, TIMES_8, base));
+
+  ASSERT(kIllegalCid == 0);
+  __ testq(RDX, RDX);
+  __ j(ZERO, &call_target_function, Assembler::kNearJump);
+  __ cmpq(RDX, RAX);
+  __ j(NOT_EQUAL, &update, Assembler::kNearJump);
+
+  __ Bind(&call_target_function);
+  // Call the target found in the cache.  For a class id match, this is a
+  // proper target for the given name and arguments descriptor.  If the
+  // illegal class id was found, the target is a cache miss handler that can
+  // be invoked as a normal Dart function.
+  __ movq(RAX, FieldAddress(RDI, RCX, TIMES_8, base + kWordSize));
+  __ movq(target, FieldAddress(RAX, Function::instructions_offset()));
+  // TODO(srdjan): Evaluate performance impact of moving the instruction below
+  // to the call site, instead of having it here.
+  __ AddImmediate(
+      target, Immediate(Instructions::HeaderSize() - kHeapObjectTag), PP);
+}
+
+
+// Called from megamorphic calls.
+//  RDI: receiver.
+//  RBX: lookup cache.
+// Result:
+//  RCX: entry point.
+void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
+  EmitMegamorphicLookup(assembler, RDI, RBX, RCX);
+  __ ret();
+}
+
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_X64
diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc
index cb23091..eadd9ff 100644
--- a/runtime/vm/symbols.cc
+++ b/runtime/vm/symbols.cc
@@ -30,8 +30,8 @@
 
   "",  // matches kKwTableStart.
 
-#define DEFINE_KEYWORD_SYMBOL_INDEX(token, chars, ignore1, ignore2)            \
-  chars,
+#define DEFINE_KEYWORD_SYMBOL_INDEX(t, s, p, a)                                \
+  s,
   DART_KEYWORD_LIST(DEFINE_KEYWORD_SYMBOL_INDEX)
 #undef DEFINE_KEYWORD_SYMBOL_INDEX
 };
@@ -65,23 +65,17 @@
   // Create all predefined symbols.
   ASSERT((sizeof(names) / sizeof(const char*)) == Symbols::kNullCharId);
 
-  // First set up all the predefined string symbols.
-  for (intptr_t i = 1; i < Symbols::kKwTableStart; i++) {
+  // Set up all the predefined string symbols and create symbols for language
+  // keywords. We don't expect to find any overlaps between the predefined
+  // string symbols and the language keywords. If an overlap is introduced
+  // inadvertantly the ASSERT in AddToVMIsolate while fail.
+  for (intptr_t i = 1; i < Symbols::kNullCharId; i++) {
     String* str = String::ReadOnlyHandle();
     *str = OneByteString::New(names[i], Heap::kOld);
     AddToVMIsolate(*str);
     symbol_handles_[i] = str;
   }
 
-  // Create symbols for language keywords. Some keywords are equal to
-  // symbols we already created, so use New() instead of Add() to ensure
-  // that the symbols are canonicalized.
-  for (intptr_t i = Symbols::kKwTableStart; i < Symbols::kNullCharId; i++) {
-    String* str = String::ReadOnlyHandle();
-    *str = New(names[i]);
-    symbol_handles_[i] = str;
-  }
-
   // Add Latin1 characters as Symbols, so that Symbols::FromCharCode is fast.
   for (intptr_t c = 0; c < kNumberOfOneCharCodeSymbols; c++) {
     intptr_t idx = (kNullCharId + c);
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index f52e20a..a5a4383 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -396,13 +396,13 @@
 
 #define DEFINE_SYMBOL_INDEX(symbol, literal)                                   \
     k##symbol##Id,
-PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_INDEX)
+    PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_INDEX)
 #undef DEFINE_SYMBOL_INDEX
 
     kKwTableStart,  // First keyword at kKwTableStart + 1.
 
-#define DEFINE_KEYWORD_SYMBOL_INDEX(token, chars, ignore1, ignore2)            \
-    token##Id,
+#define DEFINE_KEYWORD_SYMBOL_INDEX(t, s, p, a)                            \
+    t##Id,
     DART_KEYWORD_LIST(DEFINE_KEYWORD_SYMBOL_INDEX)
 #undef DEFINE_KEYWORD_SYMBOL_INDEX
 
@@ -514,10 +514,17 @@
   static const String& True() { return *(symbol_handles_[kTRUEId]); }
   static const String& Void() { return *(symbol_handles_[kVOIDId]); }
 
-  // Access methods for symbol handles stored in the vm isolate.
+  // Access methods for symbol handles stored in the vm isolate for predefined
+  // symbols.
 #define DEFINE_SYMBOL_HANDLE_ACCESSOR(symbol, literal)                         \
   static const String& symbol() { return *(symbol_handles_[k##symbol##Id]); }
-PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
+  PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
+#undef DEFINE_SYMBOL_HANDLE_ACCESSOR
+
+  // Access methods for symbol handles stored in the vm isolate for keywords.
+#define DEFINE_SYMBOL_HANDLE_ACCESSOR(t, s, p, a)                              \
+  static const String& t() { return *(symbol_handles_[t##Id]); }
+  DART_KEYWORD_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
 #undef DEFINE_SYMBOL_HANDLE_ACCESSOR
 
   // Get symbol for scanner keyword.
diff --git a/runtime/vm/vm.gypi b/runtime/vm/vm.gypi
index c38c55b..211950f 100644
--- a/runtime/vm/vm.gypi
+++ b/runtime/vm/vm.gypi
@@ -15,6 +15,8 @@
     'collection_patch_cc_file': '<(gen_source_dir)/collection_patch_gen.cc',
     'convert_cc_file': '<(gen_source_dir)/convert_gen.cc',
     'convert_patch_cc_file': '<(gen_source_dir)/convert_patch_gen.cc',
+    'developer_cc_file': '<(gen_source_dir)/developer_gen.cc',
+    'developer_patch_cc_file': '<(gen_source_dir)/developer_patch_gen.cc',
     'internal_cc_file': '<(gen_source_dir)/internal_gen.cc',
     'internal_patch_cc_file': '<(gen_source_dir)/internal_patch_gen.cc',
     'isolate_cc_file': '<(gen_source_dir)/isolate_gen.cc',
@@ -23,14 +25,14 @@
     'math_patch_cc_file': '<(gen_source_dir)/math_patch_gen.cc',
     'mirrors_cc_file': '<(gen_source_dir)/mirrors_gen.cc',
     'mirrors_patch_cc_file': '<(gen_source_dir)/mirrors_patch_gen.cc',
+    'profiler_cc_file': '<(gen_source_dir)/profiler_gen.cc',
+    'profiler_patch_cc_file': '<(gen_source_dir)/profiler_patch_gen.cc',
     'service_cc_file': '<(gen_source_dir)/service_gen.cc',
     'snapshot_test_dat_file': '<(gen_source_dir)/snapshot_test.dat',
     'snapshot_test_in_dat_file': 'snapshot_test_in.dat',
     'snapshot_test_dart_file': 'snapshot_test.dart',
     'typed_data_cc_file': '<(gen_source_dir)/typed_data_gen.cc',
     'typed_data_patch_cc_file': '<(gen_source_dir)/typed_data_patch_gen.cc',
-    'profiler_cc_file': '<(gen_source_dir)/profiler_gen.cc',
-    'profiler_patch_cc_file': '<(gen_source_dir)/profiler_patch_gen.cc',
   },
   'targets': [
     {
@@ -101,7 +103,77 @@
         }]],
     },
     {
-      'target_name': 'libdart_lib_withcore',
+      'target_name': 'libdart_vm_nosnapshot',
+      'type': 'static_library',
+      'toolsets':['host', 'target'],
+      'dependencies': [
+        'generate_service_cc_file#host'
+      ],
+      'includes': [
+        'vm_sources.gypi',
+        '../platform/platform_headers.gypi',
+        '../platform/platform_sources.gypi',
+      ],
+      'sources': [
+        # Include generated source files.
+        '<(service_cc_file)',
+      ],
+      'sources/': [
+        # Exclude all _test.[cc|h] files.
+        ['exclude', '_test\\.(cc|h)$'],
+      ],
+      'include_dirs': [
+        '..',
+      ],
+      'defines': [
+        'DART_NO_SNAPSHOT',
+      ],
+      'conditions': [
+        ['OS=="linux"', {
+          'link_settings': {
+            'libraries': [
+              '-lpthread',
+              '-lrt',
+              '-ldl',
+            ],
+          },
+        }],
+        ['OS=="android" and _toolset=="host"', {
+          'link_settings': {
+            'libraries': [
+              '-lpthread',
+              '-lrt',
+              '-ldl',
+            ],
+          },
+        }],
+        ['OS=="win"', {
+          'sources/' : [
+            ['exclude', 'gdbjit.cc'],
+          ],
+       }],
+       ['dart_vtune_support==0', {
+          'sources/' : [
+            ['exclude', 'vtune\\.(cc|h)$'],
+          ],
+       }],
+       ['dart_vtune_support==1', {
+          'include_dirs': ['<(dart_vtune_root)/include'],
+          'defines': ['DART_VTUNE_SUPPORT'],
+          'link_settings': {
+            'conditions': [
+              ['OS=="linux"', {
+                 'libraries': ['-ljitprofiling'],
+              }],
+              ['OS=="win"', {
+                 'libraries': ['-ljitprofiling.lib'],
+              }],
+            ],
+          },
+        }]],
+    },
+    {
+      'target_name': 'libdart_lib_nosnapshot',
       'type': 'static_library',
       'toolsets':['host', 'target'],
       'dependencies': [
@@ -113,6 +185,8 @@
         'generate_collection_patch_cc_file#host',
         'generate_convert_cc_file#host',
         'generate_convert_patch_cc_file#host',
+        'generate_developer_cc_file#host',
+        'generate_developer_patch_cc_file#host',
         'generate_internal_cc_file#host',
         'generate_internal_patch_cc_file#host',
         'generate_isolate_cc_file#host',
@@ -121,21 +195,22 @@
         'generate_math_patch_cc_file#host',
         'generate_mirrors_cc_file#host',
         'generate_mirrors_patch_cc_file#host',
-        'generate_typed_data_cc_file#host',
-        'generate_typed_data_patch_cc_file#host',
         'generate_profiler_cc_file#host',
         'generate_profiler_patch_cc_file#host',
+        'generate_typed_data_cc_file#host',
+        'generate_typed_data_patch_cc_file#host',
       ],
       'includes': [
         '../lib/async_sources.gypi',
         '../lib/collection_sources.gypi',
         '../lib/core_sources.gypi',
+        '../lib/developer_sources.gypi',
+        '../lib/internal_sources.gypi',
         '../lib/isolate_sources.gypi',
         '../lib/math_sources.gypi',
         '../lib/mirrors_sources.gypi',
-        '../lib/typed_data_sources.gypi',
         '../lib/profiler_sources.gypi',
-        '../lib/internal_sources.gypi',
+        '../lib/typed_data_sources.gypi',
       ],
       'sources': [
         'bootstrap.cc',
@@ -148,6 +223,8 @@
         '<(collection_patch_cc_file)',
         '<(convert_cc_file)',
         '<(convert_patch_cc_file)',
+        '<(developer_cc_file)',
+        '<(developer_patch_cc_file)',
         '<(internal_cc_file)',
         '<(internal_patch_cc_file)',
         '<(isolate_cc_file)',
@@ -156,10 +233,10 @@
         '<(math_patch_cc_file)',
         '<(mirrors_cc_file)',
         '<(mirrors_patch_cc_file)',
-        '<(typed_data_cc_file)',
-        '<(typed_data_patch_cc_file)',
         '<(profiler_cc_file)',
         '<(profiler_patch_cc_file)',
+        '<(typed_data_cc_file)',
+        '<(typed_data_patch_cc_file)',
       ],
       'include_dirs': [
         '..',
@@ -173,12 +250,13 @@
         '../lib/async_sources.gypi',
         '../lib/collection_sources.gypi',
         '../lib/core_sources.gypi',
+        '../lib/developer_sources.gypi',
+        '../lib/internal_sources.gypi',
         '../lib/isolate_sources.gypi',
         '../lib/math_sources.gypi',
         '../lib/mirrors_sources.gypi',
-        '../lib/typed_data_sources.gypi',
         '../lib/profiler_sources.gypi',
-        '../lib/internal_sources.gypi',
+        '../lib/typed_data_sources.gypi',
       ],
       'sources': [
         'bootstrap_nocore.cc',
@@ -987,6 +1065,86 @@
       ]
     },
     {
+      'target_name': 'generate_developer_cc_file',
+      'type': 'none',
+      'toolsets':['host'],
+      'includes': [
+        # Load the shared library sources.
+        '../../sdk/lib/developer/developer_sources.gypi',
+      ],
+      'sources/': [
+        # Exclude all .[cc|h] files.
+        # This is only here for reference. Excludes happen after
+        # variable expansion, so the script has to do its own
+        # exclude processing of the sources being passed.
+        ['exclude', '\\.cc|h$'],
+      ],
+      'actions': [
+        {
+          'action_name': 'generate_developer_cc',
+          'inputs': [
+            '../tools/gen_library_src_paths.py',
+            '<(libgen_in_cc_file)',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(developer_cc_file)',
+          ],
+          'action': [
+            'python',
+            'tools/gen_library_src_paths.py',
+            '--output', '<(developer_cc_file)',
+            '--input_cc', '<(libgen_in_cc_file)',
+            '--include', 'vm/bootstrap.h',
+            '--var_name', 'dart::Bootstrap::developer_source_paths_',
+            '--library_name', 'dart:developer',
+            '<@(_sources)',
+          ],
+          'message': 'Generating ''<(developer_cc_file)'' file.'
+        },
+      ]
+    },
+    {
+      'target_name': 'generate_developer_patch_cc_file',
+      'type': 'none',
+      'toolsets':['host'],
+      'includes': [
+        # Load the runtime implementation sources.
+        '../lib/developer_sources.gypi',
+      ],
+      'sources/': [
+        # Exclude all .[cc|h] files.
+        # This is only here for reference. Excludes happen after
+        # variable expansion, so the script has to do its own
+        # exclude processing of the sources being passed.
+        ['exclude', '\\.cc|h$'],
+      ],
+      'actions': [
+        {
+          'action_name': 'generate_developer_patch_cc',
+          'inputs': [
+            '../tools/gen_library_src_paths.py',
+            '<(libgen_in_cc_file)',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(developer_patch_cc_file)',
+          ],
+          'action': [
+            'python',
+            'tools/gen_library_src_paths.py',
+            '--output', '<(developer_patch_cc_file)',
+            '--input_cc', '<(libgen_in_cc_file)',
+            '--include', 'vm/bootstrap.h',
+            '--var_name', 'dart::Bootstrap::developer_patch_paths_',
+            '--library_name', 'dart:developer',
+            '<@(_sources)',
+          ],
+          'message': 'Generating ''<(developer_patch_cc_file)'' file.'
+        },
+      ]
+    },
+    {
       'target_name': 'generate_snapshot_test_dat_file',
       'type': 'none',
       'toolsets':['host'],
diff --git a/sdk/lib/_internal/compiler/js_lib/collection_patch.dart b/sdk/lib/_internal/compiler/js_lib/collection_patch.dart
index 9df7c99..06d944a 100644
--- a/sdk/lib/_internal/compiler/js_lib/collection_patch.dart
+++ b/sdk/lib/_internal/compiler/js_lib/collection_patch.dart
@@ -430,7 +430,7 @@
 }
 
 class HashMapKeyIterable<E> extends Iterable<E>
-                            implements EfficientLength {
+                            implements EfficientLengthIterable<E> {
   final _map;
   HashMapKeyIterable(this._map);
 
diff --git a/sdk/lib/_internal/compiler/js_lib/constant_map.dart b/sdk/lib/_internal/compiler/js_lib/constant_map.dart
index e716cf1..dcaef2a 100644
--- a/sdk/lib/_internal/compiler/js_lib/constant_map.dart
+++ b/sdk/lib/_internal/compiler/js_lib/constant_map.dart
@@ -23,8 +23,7 @@
   void addAll(Map<K, V> other) => _throwUnmodifiable();
 }
 
-class ConstantStringMap<K, V> extends ConstantMap<K, V>
-                              implements _symbol_dev.EfficientLength {
+class ConstantStringMap<K, V> extends ConstantMap<K, V> {
 
   // This constructor is not used.  The instantiation is shortcut by the
   // compiler. It is here to make the uninitialized final fields legal.
diff --git a/sdk/lib/_internal/compiler/js_lib/developer_patch.dart b/sdk/lib/_internal/compiler/js_lib/developer_patch.dart
new file mode 100644
index 0000000..a6087a1
--- /dev/null
+++ b/sdk/lib/_internal/compiler/js_lib/developer_patch.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Patch file for dart:developer library.
+
+import 'dart:_js_helper' show patch;
+import 'dart:_foreign_helper' show JS;
+
+/// If [when] is true, stop the program as if a breakpoint where hit at the
+/// following statement. Returns the value of [when]. Some debuggers may
+/// display [msg].
+/// NOTE: When invoked, the isolate will not return until a debugger
+/// continues execution. When running in the Dart VM the behaviour is the same
+/// regardless of whether or not a debugger is connected. When compiled to
+/// JavaScript, this uses the "debugger" statement, and behaves exactly as
+/// that does.
+@patch
+@ForceInline()
+bool debugger({bool when: true, String msg}) {
+  if (when) {
+    JS('', 'debugger');
+  }
+  return when;
+}
+
+/// Send a reference to [object] to any attached debuggers so they may open an
+/// inspector on the object. Returns the argument.
+@patch
+inspect(object) {
+  return object;
+}
diff --git a/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart b/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
index 6b58793..e5e7f6f 100644
--- a/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
+++ b/sdk/lib/_internal/compiler/js_lib/foreign_helper.dart
@@ -198,11 +198,6 @@
 JS_INTERCEPTOR_CONSTANT(Type type) {}
 
 /**
- * Returns the prefix used for generated is checks on classes.
- */
-String JS_OPERATOR_IS_PREFIX() {}
-
-/**
  * Returns the prefix used for generated type argument substitutions on classes.
  */
 String JS_OPERATOR_AS_PREFIX() {}
diff --git a/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
index 2619c35..ad6883c 100644
--- a/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
+++ b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart
@@ -753,29 +753,20 @@
   static final Expando<int> workerIds = new Expando<int>();
 
   /**
-   * The src url for the script tag that loaded this Used to create
-   * JavaScript workers.
+   * The src url for the script tag that loaded this function.
+   *
+   * Used to create JavaScript workers and load deferred libraries.
    */
   static String computeThisScript() {
     var currentScript = JS_EMBEDDED_GLOBAL('', CURRENT_SCRIPT);
     if (currentScript != null) {
       return JS('String', 'String(#.src)', currentScript);
     }
-    if (Primitives.isD8) return computeThisScriptD8();
-    if (Primitives.isJsshell) return computeThisScriptJsshell();
     // A worker has no script tag - so get an url from a stack-trace.
     if (_globalState.isWorker) return computeThisScriptFromTrace();
     return null;
   }
 
-  static String computeThisScriptJsshell() {
-    return JS('String|Null', 'thisFilename()');
-  }
-
-  // TODO(ahe): The following is for supporting D8.  We should move this code
-  // to a helper library that is only loaded when testing on D8.
-  static String computeThisScriptD8() => computeThisScriptFromTrace();
-
   static String computeThisScriptFromTrace() {
     var stack = JS('String|Null', 'new Error().stack');
     if (stack == null) {
diff --git a/sdk/lib/_internal/compiler/js_lib/js_array.dart b/sdk/lib/_internal/compiler/js_lib/js_array.dart
index 2afabdd..bef5026 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_array.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_array.dart
@@ -83,8 +83,7 @@
     // to know if the property exists.
     JS('void', r'#.fixed$length = Array', list);
     JS('void', r'#.immutable$list = Array', list);
-    // TODO(23309): Make it detectable that the list has fixed length.
-    return JS('JSArray', '#', list);
+    return JS('JSUnmodifiableArray', '#', list);
   }
 
   checkMutable(reason) {
@@ -125,7 +124,7 @@
   void insertAll(int index, Iterable<E> iterable) {
     checkGrowable('insertAll');
     RangeError.checkValueInInterval(index, 0, this.length, "index");
-    if (iterable is! EfficientLength) {
+    if (iterable is! EfficientLengthIterable) {
       iterable = iterable.toList();
     }
     int insertionLength = iterable.length;
@@ -440,7 +439,7 @@
   void replaceRange(int start, int end, Iterable<E> replacement) {
     checkGrowable('replace range');
     RangeError.checkValidRange(start, end, this.length);
-    if (replacement is! EfficientLength) {
+    if (replacement is! EfficientLengthIterable) {
       replacement = replacement.toList();
     }
     int removeLength = end - start;
@@ -613,6 +612,7 @@
 class JSMutableArray<E> extends JSArray<E> implements JSMutableIndexable {}
 class JSFixedArray<E> extends JSMutableArray<E> {}
 class JSExtendableArray<E> extends JSMutableArray<E> {}
+class JSUnmodifiableArray<E> extends JSArray<E> {} // Already is JSIndexable.
 
 
 /// An [Iterator] that iterates a JSArray.
diff --git a/sdk/lib/_internal/compiler/js_lib/js_helper.dart b/sdk/lib/_internal/compiler/js_lib/js_helper.dart
index 58ead91..f0d7ebf 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_helper.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_helper.dart
@@ -19,9 +19,7 @@
     JsBuiltin,
     JsGetName,
     LEAF_TAGS,
-    METADATA,
-    NATIVE_SUPERCLASS_TAG_NAME,
-    TYPES;
+    NATIVE_SUPERCLASS_TAG_NAME;
 
 import 'dart:collection';
 
@@ -62,14 +60,13 @@
     JS_NULL_CLASS_NAME,
     JS_OBJECT_CLASS_NAME,
     JS_OPERATOR_AS_PREFIX,
-    JS_OPERATOR_IS_PREFIX,
     JS_SIGNATURE_NAME,
     JS_STRING_CONCAT,
     RAW_DART_FUNCTION_REF;
 
 import 'dart:_interceptors';
 import 'dart:_internal' as _symbol_dev;
-import 'dart:_internal' show EfficientLength, MappedIterable;
+import 'dart:_internal' show MappedIterable;
 
 import 'dart:_native_typed_data';
 
@@ -92,6 +89,15 @@
 abstract class InternalMap {
 }
 
+/// Extracts the classname from the isCheckProperty.
+// TODO(floitsch): move this to foreign_helper.dart or similar.
+@ForceInline()
+String classNameFromIsCheckProperty(String isCheckProperty) {
+  return JS_BUILTIN('returns:String;depends:none;effects:none',
+                    JsBuiltin.classNameFromIsCheckProperty,
+                    isCheckProperty);
+}
+
 /// Returns true if the given [type] is a function type object.
 // TODO(floitsch): move this to foreign_helper.dart or similar.
 @ForceInline()
@@ -137,6 +143,28 @@
   return JS_BUILTIN('', JsBuiltin.rawRuntimeType, o);
 }
 
+/// Returns whether the given [type] is a subtype of [other].
+///
+/// The argument [other] is the name of the other type, as computed by
+/// [runtimeTypeToString].
+bool builtinIsSubtype(type, String other) {
+  return JS_BUILTIN('returns:bool;effects:none;depends:none',
+                    JsBuiltin.isSubtype, other, type);
+}
+
+/// Returns the metadata of the given [index].
+@ForceInline()
+getMetadata(int index) {
+  return JS_BUILTIN('returns:var;effects:none;depends:none',
+                    JsBuiltin.getMetadata, index);
+}
+
+/// Returns the type of the given [index].
+@ForceInline()
+getType(int index) {
+  return JS_BUILTIN('returns:var;effects:none;depends:none',
+                    JsBuiltin.getType, index);
+}
 
 /// No-op method that is called to inform the compiler that preambles might
 /// be needed when executing the resulting JS file in a command-line
@@ -513,8 +541,8 @@
       metadataIndex = JS('int', '#[# + # + #]', data,
           parameter, optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
     }
-    var metadata = JS_EMBEDDED_GLOBAL('', METADATA);
-    return JS('String', '#[#]', metadata, metadataIndex);
+    var name = getMetadata(metadataIndex);
+    return JS('String', '#', name);
   }
 
   List<int> parameterMetadataAnnotations(int parameter) {
@@ -597,16 +625,6 @@
   String get reflectionName => JS('String', r'#.$reflectionName', jsFunction);
 }
 
-getMetadata(int index) {
-  var metadata = JS_EMBEDDED_GLOBAL('', METADATA);
-  return JS('', '#[#]', metadata, index);
-}
-
-getType(int index) {
-  var types = JS_EMBEDDED_GLOBAL('', TYPES);
-  return JS('', '#[#]', types, index);
-}
-
 class Primitives {
   /// Isolate-unique ID for caching [JsClosureMirror.function].
   /// Note the initial value is used by the first isolate (or if there are no
@@ -2266,14 +2284,20 @@
 
     var signatureFunction;
     if (JS('bool', 'typeof # == "number"', functionType)) {
-      var types = JS_EMBEDDED_GLOBAL('', TYPES);
-      // It is ok, if the access is inlined into the JS. The access is safe in
-      // and outside the function. In fact we prefer if there is a textual
-      // inlining.
+      // We cannot call [getType] here, since the types-metadata might not be
+      // set yet. This is, because fromTearOff might be called for constants
+      // when the program isn't completely set up yet.
+      //
+      // Note that we cannot just textually inline the call
+      // `getType(functionType)` since we cannot guarantee that the (then)
+      // captured variable `functionType` isn't reused.
       signatureFunction =
-          JS('', '(function(s){return function(){return #[s]}})(#)',
-              types,
-              functionType);
+          JS('',
+             '''(function(t) {
+                    return function(){ return #(t); };
+                })(#)''',
+             RAW_DART_FUNCTION_REF(getType),
+             functionType);
     } else if (!isStatic
                && JS('bool', 'typeof # == "function"', functionType)) {
       var getReceiver = isIntercepted
@@ -2823,8 +2847,7 @@
 }
 
 void propertyTypeError(value, property) {
-  // Cuts the property name to the class name.
-  String name = property.substring(3, property.length);
+  String name = classNameFromIsCheckProperty(property);
   throw new TypeErrorImplementation(value, name);
 }
 
diff --git a/sdk/lib/_internal/compiler/js_lib/js_rti.dart b/sdk/lib/_internal/compiler/js_lib/js_rti.dart
index ed75bc8..ec6ae53 100644
--- a/sdk/lib/_internal/compiler/js_lib/js_rti.dart
+++ b/sdk/lib/_internal/compiler/js_lib/js_rti.dart
@@ -271,14 +271,9 @@
 ///
 /// In minified mode, uses the unminified names if available.
 String computeTypeName(String isField, List arguments) {
-  // Shorten the field name to the class name and append the textual
+  // Extract the class name from the is field and append the textual
   // representation of the type arguments.
-  // TODO(floitsch): change this to:
-  // String className = JS_BUILTIN('depends:none;effects:none;returns:String',
-  //                               JsBuiltin.classNameFroIsCheckProperty,
-  //                               isField);
-  int prefixLength = JS_OPERATOR_IS_PREFIX().length;
-  return Primitives.formatType(isField.substring(prefixLength, isField.length),
+  return Primitives.formatType(classNameFromIsCheckProperty(isField),
                                arguments);
 }
 
@@ -456,20 +451,15 @@
   // constructed from the type of [t].
   var typeOfS = isJsArray(s) ? getIndex(s, 0) : s;
   var typeOfT = isJsArray(t) ? getIndex(t, 0) : t;
+
   // Check for a subtyping flag.
-  var name = runtimeTypeToString(typeOfT);
   // Get the necessary substitution of the type arguments, if there is one.
   var substitution;
   if (isNotIdentical(typeOfT, typeOfS)) {
-    // TODO(floitsch): change this to:
-    // if (!JS_BUILTIN('depends:none;effects:none;returns:bool',
-    //                JsBuiltin.implementsType,
-    //                typeOfSPrototype, name)) {
-    //  return false;
-    // }
-    var test = '${JS_OPERATOR_IS_PREFIX()}${name}';
+    if (!builtinIsSubtype(typeOfS, runtimeTypeToString(typeOfT))) {
+      return false;
+    }
     var typeOfSPrototype = JS('', '#.prototype', typeOfS);
-    if (hasNoField(typeOfSPrototype, test)) return false;
     var field = '${JS_OPERATOR_AS_PREFIX()}${runtimeTypeToString(typeOfT)}';
     substitution = getField(typeOfSPrototype, field);
   }
diff --git a/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart b/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart
index bbf76d3..eb5f295 100644
--- a/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart
+++ b/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart
@@ -370,7 +370,7 @@
 }
 
 class LinkedHashMapKeyIterable<E> extends Iterable<E>
-                                  implements EfficientLength {
+                                  implements EfficientLengthIterable<E> {
   final _map;
   LinkedHashMapKeyIterable(this._map);
 
diff --git a/sdk/lib/_internal/compiler/js_lib/preambles/d8.js b/sdk/lib/_internal/compiler/js_lib/preambles/d8.js
index a48f918..18823e1 100644
--- a/sdk/lib/_internal/compiler/js_lib/preambles/d8.js
+++ b/sdk/lib/_internal/compiler/js_lib/preambles/d8.js
@@ -281,6 +281,43 @@
   self.clearInterval = cancelTimer;
   self.scheduleImmediate = addTask;
 
+  function computeCurrentScript() {
+    try {
+      throw new Error();
+    } catch(e) {
+      var stack = e.stack;
+      // The V8 stack looks like:
+      //    at computeCurrentScript (preambles/d8.js:286:13)
+      //    at Object.currentScript (preambles/d8.js:308:31)
+      //    at init.currentScript (/tmp/foo.js:308:19)
+      //    at /tmp/foo.js:320:7
+      //    at /tmp/foo.js:331:4
+      var re = new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$", "mg");
+      var lastMatch = null;
+      do {
+        var match = re.exec(stack);
+        if (match != null) lastMatch = match;
+      } while (match != null);
+      return lastMatch[1];
+    }
+  }
+
+  // Adding a 'document' is dangerous since it invalidates the 'typeof document'
+  // test to see if we are running in the browser. It means that the runtime
+  // needs to do more precise checks.
+  // Note that we can't run "currentScript" right away, since that would give
+  // us the location of the preamble file. Instead we wait for the first access
+  // which should happen just before invoking main. At this point we are in
+  // the main file and setting the currentScript property is correct.
+  var cachedCurrentScript = null;
+  self.document = { get currentScript() {
+      if (cachedCurrentScript == null) {
+        cachedCurrentScript = {src: computeCurrentScript()};
+      }
+      return cachedCurrentScript;
+    }
+  };
+
   // Support for deferred loading.
   self.dartDeferredLibraryLoader = function(uri, successCallback, errorCallback) {
     try {
diff --git a/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js b/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
index 0012539..a33a58f 100644
--- a/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
+++ b/sdk/lib/_internal/compiler/js_lib/preambles/jsshell.js
@@ -18,6 +18,46 @@
 
   self.location = { href: "file://" + workingDirectory + "/" };
 
+   function computeCurrentScript() {
+    try {
+      throw new Error();
+    } catch(e) {
+      var stack = e.stack;
+      print(stack);
+      // The jsshell stack looks like:
+      //   computeCurrentScript@...preambles/jsshell.js:23:13
+      //   self.document.currentScript@...preambles/jsshell.js:53:37
+      //   @/tmp/foo.js:308:1
+      //   @/tmp/foo.js:303:1
+      //   @/tmp/foo.js:5:1
+      var re = new RegExp("^.*@(.*):[0-9]*:[0-9]*$", "mg");
+      var lastMatch = null;
+      do {
+        var match = re.exec(stack);
+        if (match != null) lastMatch = match;
+      } while (match != null);
+      return lastMatch[1];
+    }
+  }
+
+  // Adding a 'document' is dangerous since it invalidates the 'typeof document'
+  // test to see if we are running in the browser. It means that the runtime
+  // needs to do more precise checks.
+  // Note that we can't run "currentScript" right away, since that would give
+  // us the location of the preamble file. Instead we wait for the first access
+  // which should happen just before invoking main. At this point we are in
+  // the main file and setting the currentScript property is correct.
+  // Note that we cannot use `thisFileName()`, since that would give us the
+  // preamble and not the script file.
+  var cachedCurrentScript = null;
+  self.document = { get currentScript() {
+      if (cachedCurrentScript == null) {
+        cachedCurrentScript = {src: computeCurrentScript()};
+      }
+      return cachedCurrentScript;
+    }
+  };
+
   // Support for deferred loading.
   self.dartDeferredLibraryLoader = function(uri, successCallback, errorCallback) {
     try {
diff --git a/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart b/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
index 8976873..0e45562 100644
--- a/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
+++ b/sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart
@@ -31,7 +31,6 @@
 const LIBRARIES = 'libraries';
 const FINISHED_CLASSES = 'finishedClasses';
 const ALL_CLASSES = 'allClasses';
-const METADATA = 'metadata';
 const INTERCEPTORS_BY_TAG = 'interceptorsByTag';
 const LEAF_TAGS = 'leafTags';
 const LAZIES = 'lazies';
@@ -46,8 +45,16 @@
 const DEFERRED_INITIALIZED = 'deferredInitialized';
 const PRECOMPILED = 'precompiled';
 
+/// The name of the embedded global for metadata.
+///
+/// Use [JsBuiltin.getMetadata] instead of directly accessing this embedded
+/// global.
+const METADATA = 'metadata';
+
 /// A list of types used in the program e.g. for reflection or encoding of
 /// function types.
+///
+/// Use [JsBuiltin.getType] instead of directly accessing this embedded global.
 const TYPES = 'types';
 
 /// Returns a function that creates a new Isolate (its static state).
@@ -89,14 +96,25 @@
 }
 
 enum JsBuiltin {
-   /// Returns the JavaScript constructor function for Dart's Object class.
-   /// This can be used for type tests, as in
-   ///
-   ///     var constructor = JS_BUILTIN('', JsBuiltin.dartObjectContructor);
-   ///     if (JS('bool', '# instanceof #', obj, constructor))
-   ///       ...
+  /// Returns the JavaScript constructor function for Dart's Object class.
+  /// This can be used for type tests, as in
+  ///
+  ///     var constructor = JS_BUILTIN('', JsBuiltin.dartObjectContructor);
+  ///     if (JS('bool', '# instanceof #', obj, constructor))
+  ///       ...
   dartObjectConstructor,
 
+  /// Returns the class name given an [isCheckProperty].
+  ///
+  /// This relies on a deterministic encoding of is-check properties (for
+  /// example `$isFoo` for a class `Foo`). In minified code the returned
+  /// classname is the minified name of the class.
+  ///
+  ///     JS_BUILTIN('returns:String;depends:none;effects:none',
+  ///                JsBuiltin.classNameFromIsCheckProperty,
+  ///                isCheckProperty);
+  classNameFromIsCheckProperty,
+
   /// Returns true if the given type is a function type. Returns false for
   /// the one `Function` type singleton. (See [isFunctionTypeSingleton]).
   ///
@@ -124,4 +142,27 @@
   ///
   ///     JS_BUILTIN('', JsBuiltin.rawRuntimeType, o)
   rawRuntimeType,
+
+  /// Returns whether the given type is a subtype of other.
+  ///
+  /// The argument `other` is the name of the potential supertype. It is
+  /// computed by `runtimeTypeToString`;
+  ///
+  /// *The `other` name must be passed in before the `type`.*
+  ///
+  ///     JS_BUILTIN('returns:bool;effects:none;depends:none',
+  ///                JsBuiltin.isSubtype, other, type);
+  isSubtype,
+
+  /// Returns the metadata of the given [index].
+  ///
+  ///     JS_BUILTIN('returns:var;effects:none;depends:none',
+  ///                JsBuiltin.getMetadata, index);
+  getMetadata,
+
+  /// Returns the type of the given [index].
+  ///
+  ///     JS_BUILTIN('returns:var;effects:none;depends:none',
+  ///                JsBuiltin.getType, index);
+  getType,
 }
diff --git a/sdk/lib/_internal/libraries.dart b/sdk/lib/_internal/libraries.dart
index 938c389..7cd70c2 100644
--- a/sdk/lib/_internal/libraries.dart
+++ b/sdk/lib/_internal/libraries.dart
@@ -54,6 +54,11 @@
       maturity: Maturity.STABLE,
       dart2jsPatchPath: "_internal/compiler/js_lib/core_patch.dart"),
 
+  "developer": const LibraryInfo(
+      "developer/developer.dart",
+      maturity: Maturity.UNSTABLE,
+      dart2jsPatchPath: "_internal/compiler/js_lib/developer_patch.dart"),
+
   "html": const LibraryInfo(
       "html/dartium/html_dartium.dart",
       category: "Client",
diff --git a/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart b/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart
index bfd97b3..a8a56f0 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart
@@ -184,14 +184,10 @@
   /// Starts up the admin server on an appropriate port and returns it.
   ///
   /// This may only be called once on the build environment.
-  Future<AdminServer> startAdminServer([int port]) {
+  Future<AdminServer> startAdminServer(int port) {
     // Can only start once.
     assert(_adminServer == null);
 
-    // The admin server is bound to one before the base port by default, unless
-    // it's ephemeral in which case the admin port is too.
-    if (port == null) port = _basePort == 0 ? 0 : _basePort - 1;
-
     return AdminServer.bind(this, _hostname, port)
         .then((server) => _adminServer = server);
   }
diff --git a/sdk/lib/_internal/pub/lib/src/command/cache_add.dart b/sdk/lib/_internal/pub/lib/src/command/cache_add.dart
index 453ccbd..ae5c1da 100644
--- a/sdk/lib/_internal/pub/lib/src/command/cache_add.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/cache_add.dart
@@ -30,7 +30,7 @@
         help: "Version constraint.");
   }
 
-  Future run() {
+  Future run() async {
     // Make sure there is a package.
     if (argResults.rest.isEmpty) {
       usageException("No package to add given.");
@@ -59,38 +59,36 @@
     var source = cache.sources["hosted"];
 
     // TODO(rnystrom): Allow specifying the server.
-    return source.getVersions(package, package).then((versions) {
-      versions = versions.where(constraint.allows).toList();
+    var pubspecs = await source.getVersions(package, package);
+    var versions = pubspecs.map((pubspec) => pubspec.version)
+        .where(constraint.allows).toList();
 
-      if (versions.isEmpty) {
-        // TODO(rnystrom): Show most recent unmatching version?
-        fail("Package $package has no versions that match $constraint.");
+    if (versions.isEmpty) {
+      // TODO(rnystrom): Show most recent unmatching version?
+      fail("Package $package has no versions that match $constraint.");
+    }
+
+    downloadVersion(version) async {
+      var id = new PackageId(package, source.name, version, package);
+      if (await cache.contains(id)) {
+        // TODO(rnystrom): Include source and description if not hosted.
+        // See solve_report.dart for code to harvest.
+        log.message("Already cached ${id.name} ${id.version}.");
+        return null;
       }
 
-      downloadVersion(Version version) {
-        var id = new PackageId(package, source.name, version, package);
-        return cache.contains(id).then((contained) {
-          if (contained) {
-            // TODO(rnystrom): Include source and description if not hosted.
-            // See solve_report.dart for code to harvest.
-            log.message("Already cached ${id.name} ${id.version}.");
-            return null;
-          }
+      // Download it.
+      await source.downloadToSystemCache(id);
+    }
 
-          // Download it.
-          return source.downloadToSystemCache(id);
-        });
-      }
-
-      if (argResults["all"]) {
-        // Install them in ascending order.
-        versions.sort();
-        return Future.forEach(versions, downloadVersion);
-      } else {
-        // Pick the best matching version.
-        versions.sort(Version.prioritize);
-        return downloadVersion(versions.last);
-      }
-    });
+    if (argResults["all"]) {
+      // Install them in ascending order.
+      versions.sort();
+      await Future.forEach(versions, downloadVersion);
+    } else {
+      // Pick the best matching version.
+      versions.sort(Version.prioritize);
+      await downloadVersion(versions.last);
+    }
   }
 }
diff --git a/sdk/lib/_internal/pub/lib/src/command/serve.dart b/sdk/lib/_internal/pub/lib/src/command/serve.dart
index d7e9de5..e43a9fc 100644
--- a/sdk/lib/_internal/pub/lib/src/command/serve.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/serve.dart
@@ -98,15 +98,17 @@
     var directoryLength = sourceDirectories.map((dir) => dir.length)
         .reduce(math.max);
 
-    var server = await environment.startAdminServer(adminPort);
-    server.results.listen((_) {
-      // The admin server produces no result values.
-      assert(false);
-    }, onError: _fatalError);
+    if (adminPort != null) {
+      var server = await environment.startAdminServer(adminPort);
+      server.results.listen((_) {
+        // The admin server produces no result values.
+        assert(false);
+      }, onError: _fatalError);
 
-    if (logAdminUrl) {
-      log.message("Running admin server on "
-          "${log.bold('http://$hostname:${server.port}')}");
+      if (logAdminUrl) {
+        log.message("Running admin server on "
+                    "${log.bold('http://$hostname:${server.port}')}");
+      }
     }
 
     // Start up the servers. We pause updates while this is happening so
diff --git a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
index 73dfd5c..66a7b90 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
@@ -126,7 +126,7 @@
   ///
   /// Completes with a list of specific package versions if successful or an
   /// error if it failed to find a solution.
-  Future<SolveResult> solve() {
+  Future<SolveResult> solve() async {
     var stopwatch = new Stopwatch();
 
     _logParameters();
@@ -135,40 +135,36 @@
     var overrides = _overrides.values.toList();
     overrides.sort((a, b) => a.name.compareTo(b.name));
 
-    // TODO(nweiz): Use async/await here once
-    // https://github.com/dart-lang/async_await/issues/79 is fixed.
-    return new Future.sync(() {
+    try {
       stopwatch.start();
 
       // Pre-cache the root package's known pubspec.
       cache.cache(new PackageId.root(root), root.pubspec);
 
       _validateSdkConstraint(root.pubspec);
-      return _traverseSolution();
-    }).then((packages) {
+      var packages = await _traverseSolution();
+
       var pubspecs = new Map.fromIterable(packages,
           key: (id) => id.name,
           value: (id) => cache.getCachedPubspec(id));
 
-      return Future.wait(
-              packages.map((id) => sources[id.source].resolveId(id)))
-          .then((packages) {
-        return new SolveResult.success(sources, root, lockFile, packages,
-            overrides, pubspecs, _getAvailableVersions(packages),
-            attemptedSolutions);
-      });
-    }).catchError((error) {
-      if (error is! SolveFailure) throw error;
+      var resolved = await Future.wait(
+          packages.map((id) => sources[id.source].resolveId(id)));
+
+      return new SolveResult.success(sources, root, lockFile, resolved,
+          overrides, pubspecs, _getAvailableVersions(resolved),
+          attemptedSolutions);
+    } on SolveFailure catch (error) {
       // Wrap a failure in a result so we can attach some other data.
       return new SolveResult.failure(sources, root, lockFile, overrides,
           error, attemptedSolutions);
-    }).whenComplete(() {
+    } finally {
       // Gather some solving metrics.
       var buffer = new StringBuffer();
       buffer.writeln('${runtimeType} took ${stopwatch.elapsed} seconds.');
       buffer.writeln(cache.describeResults());
       log.solver(buffer);
-    });
+    }
   }
 
   /// Generates a map containing all of the known available versions for each
@@ -251,20 +247,19 @@
   /// If there are no more versions, continues to backtrack to previous
   /// selections, and so on. If there is nothing left to backtrack to,
   /// completes to the last failure that occurred.
-  Future<List<PackageId>> _traverseSolution() => resetStack(() {
-    return new Traverser(this).traverse().catchError((error) {
-      if (error is! SolveFailure) throw error;
+  Future<List<PackageId>> _traverseSolution() => resetStack(() async {
+    // Avoid starving the event queue by waiting for a timer-level event.
+    await new Future(() {});
 
-      return _backtrack(error).then((canTry) {
-        if (canTry) {
-          _attemptedSolutions++;
-          return _traverseSolution();
-        }
+    try {
+      return await new Traverser(this).traverse();
+    } on SolveFailure catch (error) {
+      // All out of solutions, so fail.
+      if (!(await _backtrack(error))) rethrow;
 
-        // All out of solutions, so fail.
-        throw error;
-      });
-    });
+      _attemptedSolutions++;
+      return await _traverseSolution();
+    }
   });
 
   /// Backtracks from the current failed solution and determines the next
@@ -275,9 +270,9 @@
   /// possible solution.
   ///
   /// Returns `true` if there is a new solution to try.
-  Future<bool> _backtrack(SolveFailure failure) {
+  Future<bool> _backtrack(SolveFailure failure) async {
     // Bail if there is nothing to backtrack to.
-    if (_selected.isEmpty) return new Future.value(false);
+    if (_selected.isEmpty) return false;
 
     // Mark any packages that may have led to this failure so that we know to
     // consider them when backtracking.
@@ -290,28 +285,22 @@
     }
 
     // Advance past the current version of the leaf-most package.
-    advanceVersion() {
+    while (!_selected.isEmpty) {
       _backjump(failure);
       var previous = _selected.last.current;
-      return _selected.last.advance().then((success) {
-        if (success) {
-          logSolve();
-          return true;
-        }
+      var success = await _selected.last.advance();
+      if (success) {
+        logSolve();
+        return true;
+      }
 
-        logSolve('$previous is last version, backtracking');
+      logSolve('$previous is last version, backtracking');
 
-        // That package has no more versions, so pop it and try the next one.
-        _selected.removeLast();
-        if (_selected.isEmpty) return false;
-
-        // If we got here, the leafmost package was discarded so we need to
-        // advance the next one.
-        return advanceVersion();
-      });
+      // That package has no more versions, so pop it and try the next one.
+      _selected.removeLast();
     }
 
-    return advanceVersion();
+    return false;
   }
 
   /// Walks the selected packages from most to least recent to determine which
@@ -381,6 +370,10 @@
 
     for (var i = 0; i < _selected.length; i++) {
       var id = _selected[i].current;
+      // TODO(nweiz): The "complex backtrack" test case in version_solver_test
+      // currently depends on this returning `null` for pubspecs that haven't
+      // been explicitly cached, but that's gross. We should make this resilient
+      // to more pubspecs being available.
       var pubspec = cache.getCachedPubspec(id);
       if (pubspec != null) addDependencies(id.name, pubspec.dependencies);
     }
@@ -486,155 +479,156 @@
   /// Completes to a list of package IDs if the traversal completed
   /// successfully and found a solution. Completes to an error if the traversal
   /// failed. Otherwise, recurses to the next package in the queue, etc.
-  Future<List<PackageId>> _traversePackage() {
-    if (_packages.isEmpty) {
-      // We traversed the whole graph. If we got here, we successfully found
-      // a solution.
-      return new Future<List<PackageId>>.value(_visited.toList());
-    }
-
-    var id = _packages.removeFirst();
-
-    // Don't visit the same package twice.
-    if (_visited.contains(id)) {
-      return _traversePackage();
-    }
-    _visited.add(id);
-
-    return _solver.cache.getPubspec(id).then((pubspec) {
-      _validateSdkConstraint(pubspec);
-
-      var deps = pubspec.dependencies.toSet();
-
-      if (id.isRoot) {
-        // Include dev dependencies of the root package.
-        deps.addAll(pubspec.devDependencies);
-
-        // Add all overrides. This ensures a dependency only present as an
-        // override is still included.
-        deps.addAll(_solver._overrides.values);
+  Future<List<PackageId>> _traversePackage() async {
+    // TODO(nweiz): Use a real while loop when issue 23394 is fixed.
+    await Future.doWhile(() async {
+      // Move past any packages we've already traversed.
+      while (_packages.isNotEmpty && _visited.contains(_packages.first)) {
+        _packages.removeFirst();
       }
 
-      // Replace any overridden dependencies.
-      deps = deps.map((dep) {
-        var override = _solver._overrides[dep.name];
-        if (override != null) return override;
+      // If there are no more packages to traverse, we've traversed the whole
+      // graph. If we got here, we successfully found a solution.
+      if (_packages.isEmpty) return false;
 
-        // Not overridden.
-        return dep;
-      }).toSet();
+      var id = _packages.removeFirst();
+      _visited.add(id);
+      await _traverseDeps(id, await _dependencyQueueFor(id));
+      return true;
+    });
 
-      // Make sure the package doesn't have any bad dependencies.
-      for (var dep in deps) {
-        if (!dep.isRoot && _solver.sources[dep.source] is UnknownSource) {
-          throw new UnknownSourceException(id.name,
-              [new Dependency(id.name, id.version, dep)]);
-        }
-      }
+    return _visited.toList();
+  }
 
-      return _traverseDeps(id, new DependencyQueue(_solver, deps));
-    }).catchError((error) {
-      if (error is! PackageNotFoundException) throw error;
-
+  Future<DependencyQueue> _dependencyQueueFor(PackageId id) async {
+    var pubspec;
+    try {
+      pubspec = await _solver.cache.getPubspec(id);
+    } on PackageNotFoundException {
       // We can only get here if the lockfile refers to a specific package
       // version that doesn't exist (probably because it was yanked).
       throw new NoVersionException(id.name, null, id.version, []);
-    });
+    }
+
+    _validateSdkConstraint(pubspec);
+
+    var deps = pubspec.dependencies.toSet();
+
+    if (id.isRoot) {
+      // Include dev dependencies of the root package.
+      deps.addAll(pubspec.devDependencies);
+
+      // Add all overrides. This ensures a dependency only present as an
+      // override is still included.
+      deps.addAll(_solver._overrides.values);
+    }
+
+    // Replace any overridden dependencies.
+    deps = deps.map((dep) {
+      var override = _solver._overrides[dep.name];
+      if (override != null) return override;
+
+      // Not overridden.
+      return dep;
+    }).toSet();
+
+    // Make sure the package doesn't have any bad dependencies.
+    for (var dep in deps) {
+      if (!dep.isRoot && _solver.sources[dep.source] is UnknownSource) {
+        throw new UnknownSourceException(id.name,
+            [new Dependency(id.name, id.version, dep)]);
+      }
+    }
+
+    return new DependencyQueue(_solver, deps);
   }
 
   /// Traverses the references that [depender] depends on, stored in [deps].
   ///
-  /// Desctructively modifies [deps]. Completes to a list of packages if the
-  /// traversal is complete. Completes it to an error if a failure occurred.
-  /// Otherwise, recurses.
-  Future<List<PackageId>> _traverseDeps(PackageId depender,
-      DependencyQueue deps) {
-    // Move onto the next package if we've traversed all of these references.
-    if (deps.isEmpty) return _traversePackage();
+  /// Desctructively modifies [deps].
+  Future _traverseDeps(PackageId depender, DependencyQueue deps) {
+    // TODO(nweiz): Use a real while loop when issue 23394 is fixed.
+    return Future.doWhile(() async {
+      if (deps.isEmpty) return false;
 
-    return resetStack(() {
-      return deps.advance().then((dep) {
-        var dependency = new Dependency(depender.name, depender.version, dep);
-        return _registerDependency(dependency).then((_) {
-          if (dep.name == "barback") return _addImplicitDependencies();
-        });
-      }).then((_) => _traverseDeps(depender, deps));
+      var dep = await deps.advance();
+      var dependency = new Dependency(depender.name, depender.version, dep);
+      await _registerDependency(dependency);
+      if (dep.name == "barback") await _addImplicitDependencies();
+      return true;
     });
   }
 
   /// Register [dependency]'s constraints on the package it depends on and
   /// enqueues the package for processing if necessary.
-  Future _registerDependency(Dependency dependency) {
-    return new Future.sync(() {
-      _validateDependency(dependency);
+  Future _registerDependency(Dependency dependency) async {
+    _validateDependency(dependency);
 
-      var dep = dependency.dep;
-      var dependencies = _getDependencies(dep.name);
-      dependencies.add(dependency);
+    var dep = dependency.dep;
+    var dependencies = _getDependencies(dep.name);
+    dependencies.add(dependency);
 
-      var constraint = _getConstraint(dep.name);
+    var constraint = _getConstraint(dep.name);
 
-      // See if it's possible for a package to match that constraint.
-      if (constraint.isEmpty) {
-        var constraints = dependencies
-            .map((dep) => "  ${dep.dep.constraint} from ${dep.depender}")
-            .join('\n');
-        _solver.logSolve(
-            'disjoint constraints on ${dep.name}:\n$constraints');
-        throw new DisjointConstraintException(dep.name, dependencies);
-      }
+    // See if it's possible for a package to match that constraint.
+    if (constraint.isEmpty) {
+      var constraints = dependencies
+          .map((dep) => "  ${dep.dep.constraint} from ${dep.depender}")
+          .join('\n');
+      _solver.logSolve(
+          'disjoint constraints on ${dep.name}:\n$constraints');
+      throw new DisjointConstraintException(dep.name, dependencies);
+    }
 
-      var selected = _validateSelected(dep, constraint);
-      if (selected != null) {
-        // The selected package version is good, so enqueue it to traverse
-        // into it.
-        _packages.add(selected);
-        return null;
-      }
+    var selected = _validateSelected(dep, constraint);
+    if (selected != null) {
+      // The selected package version is good, so enqueue it to traverse
+      // into it.
+      _packages.add(selected);
+      return;
+    }
 
-      // We haven't selected a version. Try all of the versions that match
-      // the constraints we currently have for this package.
-      var locked = _getValidLocked(dep.name);
+    // We haven't selected a version. Try all of the versions that match
+    // the constraints we currently have for this package.
+    var locked = _getValidLocked(dep.name);
 
-      return VersionQueue.create(locked, () {
-        return _getAllowedVersions(dep);
-      }).then((versions) => _packages.add(_solver.select(versions)));
-    });
+    var versions = await VersionQueue.create(
+        locked, () => _getAllowedVersions(dep));
+    _packages.add(_solver.select(versions));
   }
 
   /// Gets all versions of [dep] that match the current constraints placed on
   /// it.
-  Future<Iterable<PackageId>> _getAllowedVersions(PackageDep dep) {
+  Future<Iterable<PackageId>> _getAllowedVersions(PackageDep dep) async {
     var constraint = _getConstraint(dep.name);
-    return _solver.cache.getVersions(dep.toRef()).then((versions) {
-      var allowed = versions.where((id) => constraint.allows(id.version));
+    var versions;
+    try {
+      versions = await _solver.cache.getVersions(dep.toRef());
+    } on PackageNotFoundException catch (error) {
+      // Show the user why the package was being requested.
+      throw new DependencyNotFoundException(
+          dep.name, error, _getDependencies(dep.name));
+    }
 
-      if (allowed.isEmpty) {
-        _solver.logSolve('no versions for ${dep.name} match $constraint');
-        throw new NoVersionException(dep.name, null, constraint,
-            _getDependencies(dep.name));
-      }
+    var allowed = versions.where((id) => constraint.allows(id.version));
 
-      // If we're doing an upgrade on this package, only allow the latest
-      // version.
-      if (_solver._forceLatest.contains(dep.name)) allowed = [allowed.first];
+    if (allowed.isEmpty) {
+      _solver.logSolve('no versions for ${dep.name} match $constraint');
+      throw new NoVersionException(dep.name, null, constraint,
+          _getDependencies(dep.name));
+    }
 
-      // Remove the locked version, if any, since that was already handled.
-      var locked = _getValidLocked(dep.name);
-      if (locked != null) {
-        allowed = allowed.where((dep) => dep.version != locked.version);
-      }
+    // If we're doing an upgrade on this package, only allow the latest
+    // version.
+    if (_solver._forceLatest.contains(dep.name)) allowed = [allowed.first];
 
-      return allowed;
-    }).catchError((error, stackTrace) {
-      if (error is PackageNotFoundException) {
-        // Show the user why the package was being requested.
-        throw new DependencyNotFoundException(
-            dep.name, error, _getDependencies(dep.name));
-      }
+    // Remove the locked version, if any, since that was already handled.
+    var locked = _getValidLocked(dep.name);
+    if (locked != null) {
+      allowed = allowed.where((dep) => dep.version != locked.version);
+    }
 
-      throw error;
-    });
+    return allowed;
   }
 
   /// Ensures that dependency [dep] from [depender] is consistent with the
@@ -689,11 +683,11 @@
   ///
   /// Pub has an implicit version constraint on barback and various other
   /// packages used in barback's plugin isolate.
-  Future _addImplicitDependencies() {
+  Future _addImplicitDependencies() async {
     /// Ensure we only add the barback dependency once.
-    if (_getDependencies("barback").length != 1) return new Future.value();
+    if (_getDependencies("barback").length != 1) return;
 
-    return Future.wait(barback.pubConstraints.keys.map((depName) {
+    await Future.wait(barback.pubConstraints.keys.map((depName) {
       var constraint = barback.pubConstraints[depName];
       _solver.logSolve('add implicit $constraint pub dependency on '
           '$depName');
diff --git a/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart b/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart
index b215247..e802154 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart
@@ -80,16 +80,13 @@
   /// It is an error to call this if [isEmpty] returns `true`. Note that this
   /// function is *not* re-entrant. You should only advance after the previous
   /// advance has completed.
-  Future<PackageDep> advance() {
+  Future<PackageDep> advance() async {
     // Emit the sorted ones first.
-    if (_presorted.isNotEmpty) {
-      return new Future.value(_presorted.removeFirst());
-    }
+    if (_presorted.isNotEmpty) return _presorted.removeFirst();
 
     // Sort the remaining packages when we need the first one.
-    if (!_isSorted) return _sort().then((_) => _remaining.removeAt(0));
-
-    return new Future.value(_remaining.removeAt(0));
+    if (!_isSorted) await _sort();
+    return _remaining.removeAt(0);
   }
 
   /// Sorts the unselected packages by number of versions and name.
@@ -123,32 +120,31 @@
 
   /// Given a dependency, returns a future that completes to the number of
   /// versions available for it.
-  Future<int> _getNumVersions(PackageDep dep) {
+  Future<int> _getNumVersions(PackageDep dep) async {
     // There is only ever one version of the root package.
-    if (dep.isRoot) {
-      return new Future.value(1);
-    }
+    if (dep.isRoot) return 1;
 
-    return _solver.cache.getVersions(dep.toRef()).then((versions) {
-      // If the root package depends on this one, ignore versions that don't
-      // match that constraint. Since the root package's dependency constraints
-      // won't change during solving, we can safely filter out packages that
-      // don't meet it.
-      for (var rootDep in _solver.root.immediateDependencies) {
-        if (rootDep.name == dep.name) {
-          versions = versions.where(
-              (id) => rootDep.constraint.allows(id.version));
-          break;
-        }
-      }
-
-      return versions.length;
-    }).catchError((error, trace) {
+    var versions;
+    try {
+      versions = await _solver.cache.getVersions(dep.toRef());
+    } catch (error, stackTrace) {
       // If it fails for any reason, just treat that as no versions. This
       // will sort this reference higher so that we can traverse into it
       // and report the error more properly.
-      log.solver("Could not get versions for $dep:\n$error\n\n$trace");
+      log.solver("Could not get versions for $dep:\n$error\n\n$stackTrace");
       return 0;
-    });
+    }
+
+    // If the root package depends on this one, ignore versions that don't match
+    // that constraint. Since the root package's dependency constraints won't
+    // change during solving, we can safely filter out packages that don't meet
+    // it.
+    for (var rootDep in _solver.root.immediateDependencies) {
+      if (rootDep.name != dep.name) continue;
+      return versions.where((id) => rootDep.constraint.allows(id.version))
+          .length;
+    }
+
+    return versions.length;
   }
 }
diff --git a/sdk/lib/_internal/pub/lib/src/solver/version_queue.dart b/sdk/lib/_internal/pub/lib/src/solver/version_queue.dart
index 78fa587..a6723aa 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/version_queue.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/version_queue.dart
@@ -56,16 +56,13 @@
   /// synchronously. If there is no locked version, we need to get the list of
   /// versions asynchronously before we can determine what the first one is.
   static Future<VersionQueue> create(PackageId locked,
-      PackageIdGenerator allowedGenerator) {
+      PackageIdGenerator allowedGenerator) async {
     var versions = new VersionQueue._(locked, allowedGenerator);
 
-    // If there is a locked version, it's the current one so it's synchronously
-    // available now.
-    if (locked != null) return new Future.value(versions);
-
-    // Otherwise, the current version needs to be calculated before we can
+    // If there isn't a locked version, it needs to be calculated before we can
     // return.
-    return versions._calculateAllowed().then((_) => versions);
+    if (locked == null) await versions._calculateAllowed();
+    return versions;
   }
 
   VersionQueue._(this._locked, this._allowedGenerator);
@@ -74,7 +71,7 @@
   ///
   /// Returns `true` if it moved to a new version (which can be accessed from
   /// [current]. Returns `false` if there are no more versions.
-  Future<bool> advance() {
+  Future<bool> advance() async {
     // Any failure was the fault of the previous version, not necessarily the
     // new one.
     _hasFailed = false;
@@ -83,15 +80,14 @@
     if (_locked != null) {
       // Advancing past the locked version, so need to load the others now
       // so that [current] is available.
-      return _calculateAllowed().then((_) {
-        _locked = null;
-        return _allowed.isNotEmpty;
-      });
+      await _calculateAllowed();
+      _locked = null;
+    } else {
+      // Move to the next allowed version.
+      _allowed.removeFirst();
     }
 
-    // Move to the next allowed version.
-    _allowed.removeFirst();
-    return new Future.value(_allowed.isNotEmpty);
+    return _allowed.isNotEmpty;
   }
 
   /// Marks the selected version as being directly or indirectly responsible
@@ -102,9 +98,8 @@
 
   /// Determines the list of allowed versions matching its constraint and places
   /// them in [_allowed].
-  Future _calculateAllowed() {
-    return _allowedGenerator().then((allowed) {
-      _allowed = new Queue<PackageId>.from(allowed);
-    });
+  Future _calculateAllowed() async {
+    var allowed = await _allowedGenerator();
+    _allowed = new Queue<PackageId>.from(allowed);
   }
 }
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart b/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
index 0a71f00..0a10c9d 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
@@ -139,7 +139,7 @@
 class PubspecCache {
   final SourceRegistry _sources;
 
-  /// The already-requested cached version lists.
+  /// The already-requested cached pubspec lists.
   final _versions = new Map<PackageRef, List<PackageId>>();
 
   /// The errors from failed version list requests.
@@ -148,6 +148,12 @@
   /// The already-requested cached pubspecs.
   final _pubspecs = new Map<PackageId, Pubspec>();
 
+  // TODO(nweiz): Currently, if [getCachedPubspec] returns pubspecs cached via
+  // [getVersions], the "complex backtrack" test case in version_solver_test
+  // fails. Fix that. See also [BacktrackingSolver._getTransitiveDependers].
+  /// The set of package ids for which [getPubspec] has been explicitly called.
+  final _explicitlyCached = new Set<PackageId>();
+
   /// The type of version resolution that was run.
   final SolveType _type;
 
@@ -175,25 +181,27 @@
   }
 
   /// Loads the pubspec for the package identified by [id].
-  Future<Pubspec> getPubspec(PackageId id) {
+  Future<Pubspec> getPubspec(PackageId id) async {
+    _explicitlyCached.add(id);
+
     // Complete immediately if it's already cached.
     if (_pubspecs.containsKey(id)) {
       _pubspecCacheHits++;
-      return new Future<Pubspec>.value(_pubspecs[id]);
+      return _pubspecs[id];
     }
 
     _pubspecCacheMisses++;
 
     var source = _sources[id.source];
-    return source.describe(id).then((pubspec) {
-      _pubspecs[id] = pubspec;
-      return pubspec;
-    });
+    var pubspec = await source.describe(id);
+    _pubspecs[id] = pubspec;
+    return pubspec;
   }
 
   /// Returns the previously cached pubspec for the package identified by [id]
   /// or returns `null` if not in the cache.
-  Pubspec getCachedPubspec(PackageId id) => _pubspecs[id];
+  Pubspec getCachedPubspec(PackageId id) =>
+      _explicitlyCached.contains(id) ? _pubspecs[id] : null;
 
   /// Gets the list of versions for [package].
   ///
@@ -201,7 +209,7 @@
   /// versions (i.e. ones without a prerelease suffix) before pre-release
   /// versions. This ensures that the solver prefers stable packages over
   /// unstable ones.
-  Future<List<PackageId>> getVersions(PackageRef package) {
+  Future<List<PackageId>> getVersions(PackageRef package) async {
     if (package.isRoot) {
       throw new StateError("Cannot get versions for root package $package.");
     }
@@ -210,36 +218,45 @@
     var versions = _versions[package];
     if (versions != null) {
       _versionCacheHits++;
-      return new Future.value(versions);
+      return versions;
     }
 
     // See if we cached a failure.
     var error = _versionErrors[package];
     if (error != null) {
       _versionCacheHits++;
-      return new Future.error(error.first, error.last);
+      await new Future.error(error.first, error.last);
     }
 
     _versionCacheMisses++;
 
     var source = _sources[package.source];
-    return source.getVersions(package.name, package.description)
-        .then((versions) {
-      // Sort by priority so we try preferred versions first.
-      versions.sort(_type == SolveType.DOWNGRADE ? Version.antiprioritize :
-          Version.prioritize);
-
-      var ids = versions.reversed.map(
-          (version) => package.atVersion(version)).toList();
-      _versions[package] = ids;
-      return ids;
-    }).catchError((error, trace) {
+    var pubspecs;
+    try {
+      pubspecs = await source.getVersions(package.name, package.description);
+    } catch (error, stackTrace) {
       // If an error occurs, cache that too. We only want to do one request
       // for any given package, successful or not.
-      log.solver("Could not get versions for $package:\n$error\n\n$trace");
-      _versionErrors[package] = new Pair(error, new Chain.forTrace(trace));
+      log.solver("Could not get versions for $package:\n$error\n\n$stackTrace");
+      _versionErrors[package] = new Pair(error, new Chain.forTrace(stackTrace));
       throw error;
+    }
+
+    // Sort by priority so we try preferred versions first.
+    pubspecs.sort((pubspec1, pubspec2) {
+      return _type == SolveType.DOWNGRADE
+          ? Version.antiprioritize(pubspec1.version, pubspec2.version)
+          : Version.prioritize(pubspec1.version, pubspec2.version);
     });
+
+    var ids = pubspecs.reversed.map((pubspec) {
+      var id = package.atVersion(pubspec.version);
+      // Eagerly cache the pubspec now since we have it.
+      _pubspecs[id] = pubspec;
+      return id;
+    }).toList();
+    _versions[package] = ids;
+    return ids;
   }
 
   /// Returns the previously cached list of versions for the package identified
diff --git a/sdk/lib/_internal/pub/lib/src/source.dart b/sdk/lib/_internal/pub/lib/src/source.dart
index 7affb68..85218d3 100644
--- a/sdk/lib/_internal/pub/lib/src/source.dart
+++ b/sdk/lib/_internal/pub/lib/src/source.dart
@@ -57,7 +57,7 @@
     this._systemCache = systemCache;
   }
 
-  /// Get the list of all versions that exist for the package described by
+  /// Get the pubspecs of all versions that exist for the package described by
   /// [description].
   ///
   /// [name] is the expected name of the package.
@@ -69,9 +69,9 @@
   ///
   /// By default, this assumes that each description has a single version and
   /// uses [describe] to get that version.
-  Future<List<Version>> getVersions(String name, description) {
+  Future<List<Pubspec>> getVersions(String name, description) async {
     var id = new PackageId(name, this.name, Version.none, description);
-    return describe(id).then((pubspec) => [pubspec.version]);
+    return [await describe(id)];
   }
 
   /// Loads the (possibly remote) pubspec for the package version identified by
diff --git a/sdk/lib/_internal/pub/lib/src/source/hosted.dart b/sdk/lib/_internal/pub/lib/src/source/hosted.dart
index f1649d1..c9ab68e 100644
--- a/sdk/lib/_internal/pub/lib/src/source/hosted.dart
+++ b/sdk/lib/_internal/pub/lib/src/source/hosted.dart
@@ -37,43 +37,48 @@
 
   /// Downloads a list of all versions of a package that are available from the
   /// site.
-  Future<List<Version>> getVersions(String name, description) {
+  Future<List<Pubspec>> getVersions(String name, description) async {
     var url = _makeUrl(description,
         (server, package) => "$server/api/packages/$package");
 
     log.io("Get versions from $url.");
-    return httpClient.read(url, headers: PUB_API_HEADERS).then((body) {
-      var doc = JSON.decode(body);
-      return doc['versions']
-          .map((version) => new Version.parse(version['version']))
-          .toList();
-    }).catchError((ex, stackTrace) {
+
+    var body;
+    try {
+      body = await httpClient.read(url, headers: PUB_API_HEADERS);
+    } catch (error, stackTrace) {
       var parsed = _parseDescription(description);
-      _throwFriendlyError(ex, stackTrace, parsed.first, parsed.last);
-    });
+      _throwFriendlyError(error, stackTrace, parsed.first, parsed.last);
+    }
+
+    var doc = JSON.decode(body);
+    return doc['versions'].map((map) {
+      return new Pubspec.fromMap(
+          map['pubspec'], systemCache.sources,
+          expectedName: name, location: url);
+    }).toList();
   }
 
   /// Downloads and parses the pubspec for a specific version of a package that
   /// is available from the site.
-  Future<Pubspec> describeUncached(PackageId id) {
+  Future<Pubspec> describeUncached(PackageId id) async {
     // Request it from the server.
     var url = _makeVersionUrl(id, (server, package, version) =>
         "$server/api/packages/$package/versions/$version");
 
     log.io("Describe package at $url.");
-    return httpClient.read(url, headers: PUB_API_HEADERS).then((version) {
-      version = JSON.decode(version);
-
-      // TODO(rnystrom): After this is pulled down, we could place it in
-      // a secondary cache of just pubspecs. This would let us have a
-      // persistent cache for pubspecs for packages that haven't actually
-      // been downloaded.
-      return new Pubspec.fromMap(version['pubspec'], systemCache.sources,
-          expectedName: id.name, location: url);
-    }).catchError((ex, stackTrace) {
+    var version;
+    try {
+      version = JSON.decode(
+          await httpClient.read(url, headers: PUB_API_HEADERS));
+    } catch (error, stackTrace) {
       var parsed = _parseDescription(id.description);
-      _throwFriendlyError(ex, stackTrace, id.name, parsed.last);
-    });
+      _throwFriendlyError(error, stackTrace, id.name, parsed.last);
+    }
+
+    return new Pubspec.fromMap(
+        version['pubspec'], systemCache.sources,
+        expectedName: id.name, location: url);
   }
 
   /// Downloads the package identified by [id] to the system cache.
@@ -236,22 +241,20 @@
 /// no network access.
 class OfflineHostedSource extends HostedSource {
   /// Gets the list of all versions of [name] that are in the system cache.
-  Future<List<Version>> getVersions(String name, description) {
-    return newFuture(() {
-      var parsed = _parseDescription(description);
-      var server = parsed.last;
-      log.io("Finding versions of $name in "
-             "$systemCacheRoot/${_urlToDirectory(server)}");
-      return _getCachedPackagesInDirectory(_urlToDirectory(server))
-          .where((package) => package.name == name)
-          .map((package) => package.version)
-          .toList();
-    }).then((versions) {
-      // If there are no versions in the cache, report a clearer error.
-      if (versions.isEmpty) fail("Could not find package $name in cache.");
+  Future<List<Pubspec>> getVersions(String name, description) async {
+    var parsed = _parseDescription(description);
+    var server = parsed.last;
+    log.io("Finding versions of $name in "
+        "$systemCacheRoot/${_urlToDirectory(server)}");
+    var versions = await _getCachedPackagesInDirectory(_urlToDirectory(server))
+        .where((package) => package.name == name)
+        .map((package) => package.pubspec)
+        .toList();
 
-      return versions;
-    });
+    // If there are no versions in the cache, report a clearer error.
+    if (versions.isEmpty) fail("Could not find package $name in cache.");
+
+    return versions;
   }
 
   Future<bool> _download(String server, String package, Version version,
diff --git a/sdk/lib/_internal/pub/lib/src/validator/dependency.dart b/sdk/lib/_internal/pub/lib/src/validator/dependency.dart
index fe30ac5..8e8ea84 100644
--- a/sdk/lib/_internal/pub/lib/src/validator/dependency.dart
+++ b/sdk/lib/_internal/pub/lib/src/validator/dependency.dart
@@ -64,37 +64,41 @@
   }
 
   /// Warn that dependencies should use the hosted source.
-  Future _warnAboutSource(PackageDep dep) {
-    return entrypoint.cache.sources['hosted']
-        .getVersions(dep.name, dep.name)
-        .catchError((e) => <Version>[])
-        .then((versions) {
-      var constraint;
-      var primary = Version.primary(versions);
-      if (primary != null) {
-        constraint = _constraintForVersion(primary);
-      } else {
-        constraint = dep.constraint.toString();
-        if (!dep.constraint.isAny && dep.constraint is! Version) {
-          constraint = '"$constraint"';
-        }
-      }
+  Future _warnAboutSource(PackageDep dep) async {
+    var versions;
+    try {
+      var pubspecs = await entrypoint.cache.sources['hosted']
+          .getVersions(dep.name, dep.name);
+      versions = pubspecs.map((pubspec) => pubspec.version).toList();
+    } catch (error) {
+      versions = [];
+    }
 
-      // Path sources are errors. Other sources are just warnings.
-      var messages = warnings;
-      if (dep.source == "path") {
-        messages = errors;
+    var constraint;
+    var primary = Version.primary(versions);
+    if (primary != null) {
+      constraint = _constraintForVersion(primary);
+    } else {
+      constraint = dep.constraint.toString();
+      if (!dep.constraint.isAny && dep.constraint is! Version) {
+        constraint = '"$constraint"';
       }
+    }
 
-      messages.add('Don\'t depend on "${dep.name}" from the ${dep.source} '
-              'source. Use the hosted source instead. For example:\n'
-          '\n'
-          'dependencies:\n'
-          '  ${dep.name}: $constraint\n'
-          '\n'
-          'Using the hosted source ensures that everyone can download your '
-              'package\'s dependencies along with your package.');
-    });
+    // Path sources are errors. Other sources are just warnings.
+    var messages = warnings;
+    if (dep.source == "path") {
+      messages = errors;
+    }
+
+    messages.add('Don\'t depend on "${dep.name}" from the ${dep.source} '
+            'source. Use the hosted source instead. For example:\n'
+        '\n'
+        'dependencies:\n'
+        '  ${dep.name}: $constraint\n'
+        '\n'
+        'Using the hosted source ensures that everyone can download your '
+            'package\'s dependencies along with your package.');
   }
 
   /// Warn that dependencies should have version constraints.
diff --git a/sdk/lib/_internal/pub/pub.status b/sdk/lib/_internal/pub/pub.status
index 5571320..8776cae 100644
--- a/sdk/lib/_internal/pub/pub.status
+++ b/sdk/lib/_internal/pub/pub.status
@@ -7,7 +7,7 @@
 test/transformer/loads_a_diamond_transformer_dependency_graph_test: Pass, Slow
 
 # Pub only runs on the VM, so just rule out all compilers.
-[ $compiler == dart2js || $compiler == dart2dart ]
+[ $compiler == dart2js ]
 *: Skip
 
 # Pub only runs on the standalone VM, not the browser.
diff --git a/sdk/lib/_internal/pub/test/get/hosted/avoid_network_requests_test.dart b/sdk/lib/_internal/pub/test/get/hosted/avoid_network_requests_test.dart
index 27ccca3..c651b8f 100644
--- a/sdk/lib/_internal/pub/test/get/hosted/avoid_network_requests_test.dart
+++ b/sdk/lib/_internal/pub/test/get/hosted/avoid_network_requests_test.dart
@@ -53,8 +53,6 @@
       expect(paths, unorderedEquals([
         // Bar should be requested because it's new, but not foo.
         "api/packages/bar",
-        // Should only request the most recent version.
-        "api/packages/bar/versions/1.2.0",
         // Need to download it.
         "packages/bar/versions/1.2.0.tar.gz"
       ]));
diff --git a/sdk/lib/_internal/pub/test/serve/utils.dart b/sdk/lib/_internal/pub/test/serve/utils.dart
index f84eb9a..be87afc 100644
--- a/sdk/lib/_internal/pub/test/serve/utils.dart
+++ b/sdk/lib/_internal/pub/test/serve/utils.dart
@@ -155,6 +155,7 @@
     "serve",
     "--port=0", // Use port 0 to get an ephemeral port.
     "--force-poll",
+    "--admin-port=0", // Use port 0 to get an ephemeral port.
     "--log-admin-url"
   ];
 
@@ -223,6 +224,7 @@
 /// Parses the port number from the "Running admin server on localhost:1234"
 /// line printed by pub serve.
 bool _parseAdminPort(String line) {
+  expect(line, startsWith('Running admin server on'));
   var match = _parsePortRegExp.firstMatch(line);
   if (match == null) return false;
   _adminPort = int.parse(match[2]);
diff --git a/sdk/lib/_internal/pub/test/version_solver_test.dart b/sdk/lib/_internal/pub/test/version_solver_test.dart
index cdadb67..cee9a96 100644
--- a/sdk/lib/_internal/pub/test/version_solver_test.dart
+++ b/sdk/lib/_internal/pub/test/version_solver_test.dart
@@ -1377,7 +1377,7 @@
     return new Future.value('${id.name}-${id.version}');
   }
 
-  Future<List<Version>> getVersions(String name, String description) {
+  Future<List<Pubspec>> getVersions(String name, String description) {
     return new Future.sync(() {
       // Make sure the solver doesn't request the same thing twice.
       if (_requestedVersions.contains(description)) {
@@ -1392,7 +1392,8 @@
             '"$description".');
       }
 
-      return _packages[description].keys.toList();
+      return _packages[description].values
+          .map((package) => package.pubspec).toList();
     });
   }
 
diff --git a/sdk/lib/collection/hash_map.dart b/sdk/lib/collection/hash_map.dart
index e67fa77..6fb73a5 100644
--- a/sdk/lib/collection/hash_map.dart
+++ b/sdk/lib/collection/hash_map.dart
@@ -56,15 +56,32 @@
    * The [isValidKey] function defaults to just testing if the object is a
    * [K] instance.
    *
+   * Example:
+   *
+   *     new HashMap<int,int>(equals: (int a, int b) => (b - a) % 5 == 0,
+   *                          hashCode: (int e) => e % 5)
+   *
+   * This example map does not need an `isValidKey` function to be passed.
+   * The default function accepts only `int` values, which can safely be
+   * passed to both the `equals` and `hashCode` functions.
+   *
+   * If neither `equals`, `hashCode`, nor `isValidKey` is provided,
+   * the default `isValidKey` instead accepts all keys.
+   * The default equality and hashcode operations are assumed to work on all
+   * objects.
+   *
+   * Likewise, if `equals` is [identical], `hashCode` is [identityHashCode]
+   * and `isValidKey` is omitted, the resulting map is identity based,
+   * and the `isValidKey` defaults to accepting all keys.
+   * Such a map can be created directly using [HashMap.identity].
+   *
    * The used `equals` and `hashCode` method should always be consistent,
    * so that if `equals(a, b)` then `hashCode(a) == hashCode(b)`. The hash
    * of an object, or what it compares equal to, should not change while the
-   * object is in the table. If it does change, the result is unpredictable.
+   * object is a key in the map. If it does change, the result is unpredictable.
    *
    * If you supply one of [equals] and [hashCode],
    * you should generally also to supply the other.
-   * An example would be using [identical] and [identityHashCode],
-   * which is equivalent to using the shorthand [HashMap.identity]).
    */
   external factory HashMap({bool equals(K key1, K key2),
                             int hashCode(K key),
@@ -75,7 +92,8 @@
    *
    * Effectively a shorthand for:
    *
-   *     new HashMap(equals: identical, hashCode: identityHashCodeOf)
+   *     new HashMap(equals: identical,
+   *                 hashCode: identityHashCodeOf)
    */
   external factory HashMap.identity();
 
diff --git a/sdk/lib/collection/hash_set.dart b/sdk/lib/collection/hash_set.dart
index 53a96f0..bb76082 100644
--- a/sdk/lib/collection/hash_set.dart
+++ b/sdk/lib/collection/hash_set.dart
@@ -55,21 +55,41 @@
    *
    * The provided [equals] must define a stable equivalence relation, and
    * [hashCode] must be consistent with [equals]. If the [equals] or [hashCode]
-   * methods won't work on all objects, but only to instances of E, the
-   * [isValidKey] predicate can be used to restrict the keys that they are
-   * applied to. Any key for which [isValidKey] returns false is automatically
-   * assumed to not be in the set.
+   * methods won't work on all objects, but only on some instances of E, the
+   * [isValidKey] predicate can be used to restrict the keys that the functions
+   * are applied to.
+   * Any key for which [isValidKey] returns false is automatically assumed
+   * to not be in the set when asking `contains`.
    *
    * If [equals] or [hashCode] are omitted, the set uses
-   * the objects' intrinsic [Object.operator==] and [Object.hashCode].
-   *
-   * If [isValidKey] is omitted, it defaults to testing if the object is an
-   * [E] instance.
+   * the elements' intrinsic [Object.operator==] and [Object.hashCode].
    *
    * If you supply one of [equals] and [hashCode],
    * you should generally also to supply the other.
-   * An example would be using [identical] and [identityHashCode],
-   * which is equivalent to using the shorthand [LinkedSet.identity]).
+   *
+   * If the supplied `equals` or `hashCode` functions won't work on all [E]
+   * objects, and the map will be used in a setting where a non-`E` object
+   * is passed to, e.g., `contains`, then the [isValidKey] function should
+   * also be supplied.
+   *
+   * If [isValidKey] is omitted, it defaults to testing if the object is an
+   * [E] instance. That means that:
+   *
+   *     new HashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
+   *                      hashCode: (int e) => e % 5)
+   *
+   * does not need an `isValidKey` argument, because it defaults to only
+   * accepting `int` values which are accepted by both `equals` and `hashCode`.
+   *
+   * If neither `equals`, `hashCode`, nor `isValidKey` is provided,
+   * the default `isValidKey` instead accepts all values.
+   * The default equality and hashcode operations are assumed to work on all
+   * objects.
+   *
+   * Likewise, if `equals` is [identical], `hashCode` is [identityHashCode]
+   * and `isValidKey` is omitted, the resulting set is identity based,
+   * and the `isValidKey` defaults to accepting all keys.
+   * Such a map can be created directly using [HashSet.identity].
    */
   external factory HashSet({bool equals(E e1, E e2),
                             int hashCode(E e),
@@ -80,7 +100,8 @@
    *
    * Effectively a shorthand for:
    *
-   *     new HashSet(equals: identical, hashCode: identityHashCodeOf)
+   *     new HashSet<E>(equals: identical,
+   *                    hashCode: identityHashCodeOf)
    */
   external factory HashSet.identity();
 
diff --git a/sdk/lib/collection/iterable.dart b/sdk/lib/collection/iterable.dart
index 3290682..8556595 100644
--- a/sdk/lib/collection/iterable.dart
+++ b/sdk/lib/collection/iterable.dart
@@ -90,7 +90,7 @@
   Set<E> toSet() => new Set<E>.from(this);
 
   int get length {
-    assert(this is! EfficientLength);
+    assert(this is! EfficientLengthIterable);
     int count = 0;
     Iterator it = iterator;
     while (it.moveNext()) {
@@ -397,3 +397,34 @@
   parts.add(penultimateString);
   parts.add(ultimateString);
 }
+
+
+/**
+ * Marker interface for [Iterable] implementations that have an efficient
+ * [length] getter.
+ *
+ * An iterable implementing this interface should have an "efficient"
+ * implementation of `length` that doesn't trigger iteration of the
+ * iterable. Being efficient doesn't necessarily require being constant
+ * time, but should at least attempt to have have execution time that is
+ * better than linear in the elements of the iterable.
+ *
+ * Methods that worry about reading the length of an `Iterable` because it
+ * may be inefficient or may trigger side-effects, or may even never complete,
+ * can first check if the iterable `is EfficientLengthIterable`,
+ * and if so, use [length] without those concerns.
+ *
+ * The `EfficientLengthIterable` type should never be used as a type
+ * assertion - neither as argument type or return type of a function.
+ * Always use [Iterable] for the type and just document the performance if it
+ * is relevant. This avoids needlessly restricting the values that can be used.
+ */
+abstract class EfficientLengthIterable<T> implements Iterable<T> {
+  /**
+   * Returns the number of elements in the iterable.
+   *
+   * This is an efficient operation that doesn't iterate through
+   * the elements.
+   */
+  int get length;
+}
diff --git a/sdk/lib/collection/linked_hash_map.dart b/sdk/lib/collection/linked_hash_map.dart
index e1bca0f..e06f9e6 100644
--- a/sdk/lib/collection/linked_hash_map.dart
+++ b/sdk/lib/collection/linked_hash_map.dart
@@ -43,6 +43,25 @@
    * The [isValidKey] function defaults to just testing if the object is a
    * [K] instance.
    *
+   * Example:
+   *
+   *     new LinkedHashMap<int,int>(equals: (int a, int b) => (b - a) % 5 == 0,
+   *                                hashCode: (int e) => e % 5)
+   *
+   * This example map does not need an `isValidKey` function to be passed.
+   * The default function accepts only `int` values, which can safely be
+   * passed to both the `equals` and `hashCode` functions.
+   *
+   * If neither `equals`, `hashCode`, nor `isValidKey` is provided,
+   * the default `isValidKey` instead accepts all keys.
+   * The default equality and hashcode operations are assumed to work on all
+   * objects.
+   *
+   * Likewise, if `equals` is [identical], `hashCode` is [identityHashCode]
+   * and `isValidKey` is omitted, the resulting map is identity based,
+   * and the `isValidKey` defaults to accepting all keys.
+   * Such a map can be created directly using [LinkedHashMap.identity].
+   *
    * The used `equals` and `hashCode` method should always be consistent,
    * so that if `equals(a, b)` then `hashCode(a) == hashCode(b)`. The hash
    * of an object, or what it compares equal to, should not change while the
@@ -50,19 +69,18 @@
    *
    * If you supply one of [equals] and [hashCode],
    * you should generally also to supply the other.
-   * An example would be using [identical] and [identityHashCode],
-   * which is equivalent to using the shorthand [LinkedHashMap.identity]).
    */
-  external factory LinkedHashMap({ bool equals(K key1, K key2),
-                                   int hashCode(K key),
-                                   bool isValidKey(potentialKey) });
+  external factory LinkedHashMap({bool equals(K key1, K key2),
+                                  int hashCode(K key),
+                                  bool isValidKey(potentialKey)});
 
   /**
    * Creates an insertion-ordered identity-based map.
    *
    * Effectively a shorthand for:
    *
-   *     new LinkedHashMap(equals: identical, hashCode: identityHashCodeOf)
+   *     new LinkedHashMap(equals: identical,
+   *                       hashCode: identityHashCodeOf)
    */
   external factory LinkedHashMap.identity();
 
diff --git a/sdk/lib/collection/linked_hash_set.dart b/sdk/lib/collection/linked_hash_set.dart
index b937e53..a4848f4 100644
--- a/sdk/lib/collection/linked_hash_set.dart
+++ b/sdk/lib/collection/linked_hash_set.dart
@@ -36,32 +36,55 @@
    *
    * The provided [equals] must define a stable equivalence relation, and
    * [hashCode] must be consistent with [equals]. If the [equals] or [hashCode]
-   * methods won't work on all objects, but only to instances of E, the
-   * [isValidKey] predicate can be used to restrict the keys that they are
-   * applied to. Any key for which [isValidKey] returns false is automatically
-   * assumed to not be in the set.
+   * methods won't work on all objects, but only on some instances of E, the
+   * [isValidKey] predicate can be used to restrict the keys that the functions
+   * are applied to.
+   * Any key for which [isValidKey] returns false is automatically assumed
+   * to not be in the set when asking `contains`.
    *
    * If [equals] or [hashCode] are omitted, the set uses
-   * the objects' intrinsic [Object.operator==] and [Object.hashCode],
-   *
-   * If [isValidKey] is omitted, it defaults to testing if the object is an
-   * [E] instance.
+   * the elements' intrinsic [Object.operator==] and [Object.hashCode],
+   * and [isValidKey] is ignored since these operations are assumed
+   * to work on all objects.
    *
    * If you supply one of [equals] and [hashCode],
    * you should generally also to supply the other.
-   * An example would be using [identical] and [identityHashCode],
-   * which is equivalent to using the shorthand [LinkedSet.identity]).
+   *
+   * If the supplied `equals` or `hashCode` functions won't work on all [E]
+   * objects, and the map will be used in a setting where a non-`E` object
+   * is passed to, e.g., `contains`, then the [isValidKey] function should
+   * also be supplied.
+   *
+   * If [isValidKey] is omitted, it defaults to testing if the object is an
+   * [E] instance. That means that:
+   *
+   *     new LinkedHashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
+   *                            hashCode: (int e) => e % 5)
+   *
+   * does not need an `isValidKey` argument, because it defaults to only
+   * accepting `int` values which are accepted by both `equals` and `hashCode`.
+   *
+   * If neither `equals`, `hashCode`, nor `isValidKey` is provided,
+   * the default `isValidKey` instead accepts all values.
+   * The default equality and hashcode operations are assumed to work on all
+   * objects.
+   *
+   * Likewise, if `equals` is [identical], `hashCode` is [identityHashCode]
+   * and `isValidKey` is omitted, the resulting set is identity based,
+   * and the `isValidKey` defaults to accepting all keys.
+   * Such a map can be created directly using [LinkedHashSet.identity].
    */
-  external factory LinkedHashSet({ bool equals(E e1, E e2),
-                                   int hashCode(E e),
-                                   bool isValidKey(potentialKey) });
+  external factory LinkedHashSet({bool equals(E e1, E e2),
+                                  int hashCode(E e),
+                                  bool isValidKey(potentialKey)});
 
   /**
    * Creates an insertion-ordered identity-based set.
    *
    * Effectively a shorthand for:
    *
-   *     new LinkedHashSet(equals: identical, hashCode: identityHashCodeOf)
+   *     new LinkedHashSet(equals: identical,
+   *                       hashCode: identityHashCodeOf)
    */
   external factory LinkedHashSet.identity();
 
diff --git a/sdk/lib/collection/list.dart b/sdk/lib/collection/list.dart
index e7d902e..0d02f85 100644
--- a/sdk/lib/collection/list.dart
+++ b/sdk/lib/collection/list.dart
@@ -389,7 +389,7 @@
 
   void replaceRange(int start, int end, Iterable<E> newContents) {
     RangeError.checkValidRange(start, end, this.length);
-    if (newContents is! EfficientLength) {
+    if (newContents is! EfficientLengthIterable) {
       newContents = newContents.toList();
     }
     int removeLength = end - start;
@@ -476,7 +476,7 @@
 
   void insertAll(int index, Iterable<E> iterable) {
     RangeError.checkValueInInterval(index, 0, length, "index");
-    if (iterable is EfficientLength) {
+    if (iterable is EfficientLengthIterable) {
       iterable = iterable.toList();
     }
     int insertionLength = iterable.length;
diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
index 7945e7e..ecc2bf7 100644
--- a/sdk/lib/collection/maps.dart
+++ b/sdk/lib/collection/maps.dart
@@ -112,7 +112,7 @@
  * map's `operator[]` to lookup the keys.
  */
 class _MapBaseValueIterable<V> extends Iterable<V>
-                               implements EfficientLength {
+                               implements EfficientLengthIterable<V> {
   final Map _map;
   _MapBaseValueIterable(this._map);
 
diff --git a/sdk/lib/collection/queue.dart b/sdk/lib/collection/queue.dart
index af8e07a..067c17b 100644
--- a/sdk/lib/collection/queue.dart
+++ b/sdk/lib/collection/queue.dart
@@ -17,7 +17,7 @@
  * This goes both for using the [iterator] directly, or for iterating an
  * `Iterable` returned by a method like [map] or [where].
  */
-abstract class Queue<E> implements Iterable<E>, EfficientLength {
+abstract class Queue<E> implements EfficientLengthIterable<E> {
 
   /**
    * Creates a queue.
@@ -482,7 +482,7 @@
       return queue;
     } else {
       int capacity = _INITIAL_CAPACITY;
-      if (elements is EfficientLength) {
+      if (elements is EfficientLengthIterable) {
         capacity = elements.length;
       }
       ListQueue<E> result = new ListQueue<E>(capacity);
diff --git a/sdk/lib/collection/splay_tree.dart b/sdk/lib/collection/splay_tree.dart
index b5fcb93..597c23f 100644
--- a/sdk/lib/collection/splay_tree.dart
+++ b/sdk/lib/collection/splay_tree.dart
@@ -274,7 +274,7 @@
   factory SplayTreeMap.from(Map other,
                             [int compare(K key1, K key2),
                              bool isValidKey(potentialKey)]) {
-    SplayTreeMap<K, V> result = new SplayTreeMap<K, V>();
+    SplayTreeMap<K, V> result = new SplayTreeMap<K, V>(compare, isValidKey);
     other.forEach((k, v) { result[k] = v; });
     return result;
   }
@@ -600,7 +600,7 @@
 }
 
 class _SplayTreeKeyIterable<K> extends Iterable<K>
-                               implements EfficientLength {
+                               implements EfficientLengthIterable<K> {
   _SplayTree<K> _tree;
   _SplayTreeKeyIterable(this._tree);
   int get length => _tree._count;
@@ -618,7 +618,7 @@
 }
 
 class _SplayTreeValueIterable<K, V> extends Iterable<V>
-                                    implements EfficientLength {
+                                    implements EfficientLengthIterable<V> {
   SplayTreeMap<K, V> _map;
   _SplayTreeValueIterable(this._map);
   int get length => _map._count;
diff --git a/sdk/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
index dbc8c55..e435b1e 100644
--- a/sdk/lib/core/iterable.dart
+++ b/sdk/lib/core/iterable.dart
@@ -347,7 +347,7 @@
    * Some iterables have a more efficient way to find the number of elements.
    */
   int get length {
-    assert(this is! EfficientLength);
+    assert(this is! EfficientLengthIterable);
     int count = 0;
     Iterator it = iterator;
     while (it.moveNext()) {
@@ -594,7 +594,7 @@
 typedef E _Generator<E>(int index);
 
 class _GeneratorIterable<E> extends Iterable<E>
-                            implements EfficientLength {
+                            implements EfficientLengthIterable<E> {
   final int _start;
   final int _end;
   final _Generator<E> _generator;
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index 9d9a093..0d10e85 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -51,7 +51,7 @@
  * directly or through iterating an [Iterable] that is backed by the list, will
  * break the iteration.
  */
-abstract class List<E> implements Iterable<E>, EfficientLength {
+abstract class List<E> implements EfficientLengthIterable<E> {
   /**
    * Creates a list of the given length.
    *
diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart
index 2c6b524..a908d57 100644
--- a/sdk/lib/core/set.dart
+++ b/sdk/lib/core/set.dart
@@ -31,7 +31,7 @@
  * iterating either the set itself or any [Iterable] that is backed by the set,
  * such as the ones returned by methods like [where] and [map].
  */
-abstract class Set<E> extends Iterable<E> implements EfficientLength {
+abstract class Set<E> implements EfficientLengthIterable<E> {
   /**
    * Creates an empty [Set].
    *
diff --git a/sdk/lib/developer/developer.dart b/sdk/lib/developer/developer.dart
new file mode 100644
index 0000000..db56aec
--- /dev/null
+++ b/sdk/lib/developer/developer.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// ## Status: Unstable
+///
+/// The dart:developer library is unstable and its API might change slightly
+/// as a result of developer feedback. This library is platform dependent and
+/// therefore it has implementations for both dart2js and the Dart VM. Both are
+/// under development and may not support all operations yet.
+///
+library dart.developer;
+
+/// If [when] is true, stop the program as if a breakpoint where hit at the
+/// following statement. Returns the value of [when]. Some debuggers may
+/// display [msg].
+/// NOTE: When invoked, the isolate will not return until a debugger
+/// continues execution. When running in the Dart VM the behaviour is the same
+/// regardless of whether or not a debugger is connected. When compiled to
+/// JavaScript, this uses the "debugger" statement, and behaves exactly as
+/// that does.
+external bool debugger({bool when: true, String msg});
+
+/// Send a reference to [object] to any attached debuggers so they may open an
+/// inspector on the object. Returns the argument.
+external inspect(object);
diff --git a/sdk/lib/developer/developer_sources.gypi b/sdk/lib/developer/developer_sources.gypi
new file mode 100644
index 0000000..fa6a87c
--- /dev/null
+++ b/sdk/lib/developer/developer_sources.gypi
@@ -0,0 +1,10 @@
+# Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+{
+  'sources': [
+    'developer.dart',
+    # The above file needs to be first if additional parts are added to the lib.
+  ],
+}
diff --git a/sdk/lib/internal/iterable.dart b/sdk/lib/internal/iterable.dart
index 47c94f8..0a59b0e 100644
--- a/sdk/lib/internal/iterable.dart
+++ b/sdk/lib/internal/iterable.dart
@@ -5,27 +5,13 @@
 part of dart._internal;
 
 /**
- * Marker interface for [Iterable] subclasses that have an efficient
- * [length] implementation.
- */
-abstract class EfficientLength {
-  /**
-   * Returns the number of elements in the iterable.
-   *
-   * This is an efficient operation that doesn't require iterating through
-   * the elements.
-   */
-  int get length;
-}
-
-/**
  * An [Iterable] for classes that have efficient [length] and [elementAt].
  *
  * All other methods are implemented in terms of [length] and [elementAt],
  * including [iterator].
  */
 abstract class ListIterable<E> extends Iterable<E>
-                               implements EfficientLength {
+                               implements EfficientLengthIterable<E> {
   int get length;
   E elementAt(int i);
 
@@ -351,7 +337,7 @@
   final _Transformation<S, T> _f;
 
   factory MappedIterable(Iterable iterable, T function(S value)) {
-    if (iterable is EfficientLength) {
+    if (iterable is EfficientLengthIterable) {
       return new EfficientLengthMappedIterable<S, T>(iterable, function);
     }
     return new MappedIterable<S, T>._(iterable, function);
@@ -373,7 +359,7 @@
 }
 
 class EfficientLengthMappedIterable<S, T> extends MappedIterable<S, T>
-                                          implements EfficientLength {
+    implements EfficientLengthIterable<T> {
   EfficientLengthMappedIterable(Iterable iterable, T function(S value))
       : super._(iterable, function);
 }
@@ -402,8 +388,7 @@
  *
  * Expects efficient `length` and `elementAt` on the source iterable.
  */
-class MappedListIterable<S, T> extends ListIterable<T>
-                               implements EfficientLength {
+class MappedListIterable<S, T> extends ListIterable<T> {
   final Iterable<S> _source;
   final _Transformation<S, T> _f;
 
@@ -496,7 +481,7 @@
     if (takeCount is! int || takeCount < 0) {
       throw new ArgumentError(takeCount);
     }
-    if (iterable is EfficientLength) {
+    if (iterable is EfficientLengthIterable) {
       return new EfficientLengthTakeIterable<E>(iterable, takeCount);
     }
     return new TakeIterable<E>._(iterable, takeCount);
@@ -510,7 +495,7 @@
 }
 
 class EfficientLengthTakeIterable<E> extends TakeIterable<E>
-                                     implements EfficientLength {
+                                     implements EfficientLengthIterable<E> {
   EfficientLengthTakeIterable(Iterable<E> iterable, int takeCount)
       : super._(iterable, takeCount);
 
@@ -583,7 +568,7 @@
   final int _skipCount;
 
   factory SkipIterable(Iterable<E> iterable, int count) {
-    if (iterable is EfficientLength) {
+    if (iterable is EfficientLengthIterable) {
       return new EfficientLengthSkipIterable<E>(iterable, count);
     }
     return new SkipIterable<E>._(iterable, count);
@@ -610,7 +595,7 @@
 }
 
 class EfficientLengthSkipIterable<E> extends SkipIterable<E>
-                                     implements EfficientLength {
+                                     implements EfficientLengthIterable<E> {
   EfficientLengthSkipIterable(Iterable<E> iterable, int skipCount)
       : super._(iterable, skipCount);
 
@@ -672,7 +657,8 @@
 /**
  * The always empty [Iterable].
  */
-class EmptyIterable<E> extends Iterable<E> implements EfficientLength {
+class EmptyIterable<E> extends Iterable<E>
+                      implements EfficientLengthIterable<E> {
   const EmptyIterable();
 
   Iterator<E> get iterator => const EmptyIterator();
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
index 42c1db9..f06179b 100644
--- a/sdk/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -1289,8 +1289,24 @@
                 "Unexpected response (unsolicited response without request).",
                 uri: _currentUri);
           }
-          _nextResponseCompleter.complete(incoming);
-          _nextResponseCompleter = null;
+
+          // Check for status code '100 Continue'. In that case just
+          // consume that response as the final response will follow
+          // it. There is currently no API for the client to wait for
+          // the '100 Continue' response.
+          if (incoming.statusCode == 100) {
+            incoming.drain().then((_) {
+              _subscription.resume();
+            }).catchError((error, [StackTrace stackTrace]) {
+              _nextResponseCompleter.completeError(
+                  new HttpException(error.message, uri: _currentUri),
+                  stackTrace);
+              _nextResponseCompleter = null;
+            });
+          } else {
+            _nextResponseCompleter.complete(incoming);
+            _nextResponseCompleter = null;
+          }
         },
         onError: (error, [StackTrace stackTrace]) {
           if (_nextResponseCompleter != null) {
diff --git a/sdk/lib/io/process.dart b/sdk/lib/io/process.dart
index ea1bd76..93aa63e 100644
--- a/sdk/lib/io/process.dart
+++ b/sdk/lib/io/process.dart
@@ -68,7 +68,7 @@
   _ProcessUtils._setExitCode(code);
 }
 
-/*
+/**
  * Get the global exit code for the Dart VM.
  *
  * The exit code is global for the Dart VM and the last assignment to
diff --git a/sdk/lib/io/websocket_impl.dart b/sdk/lib/io/websocket_impl.dart
index 6e30809..2657606 100644
--- a/sdk/lib/io/websocket_impl.dart
+++ b/sdk/lib/io/websocket_impl.dart
@@ -959,16 +959,26 @@
       _outCloseCode = code;
       _outCloseReason = reason;
     }
-    if (_closeTimer == null && !_controller.isClosed) {
-      // When closing the web-socket, we no longer accept data.
-      _closeTimer = new Timer(const Duration(seconds: 5), () {
-        // Reuse code and reason from the local close.
-        _closeCode = _outCloseCode;
-        _closeReason = _outCloseReason;
-        _subscription.cancel();
-        _controller.close();
-        _webSockets.remove(_serviceId);
-      });
+    if (!_controller.isClosed) {
+      // If a close has not yet been received from the other end then
+      //   1) make sure to listen on the stream so the close frame will be
+      //      processed if received.
+      //   2) set a timer terminate the connection if a close frame is
+      //      not received.
+      if (!_controller.hasListener) {
+        _controller.stream.drain().catchError((_) => {});
+      }
+      if (_closeTimer == null) {
+        // When closing the web-socket, we no longer accept data.
+        _closeTimer = new Timer(const Duration(seconds: 5), () {
+          // Reuse code and reason from the local close.
+          _closeCode = _outCloseCode;
+          _closeReason = _outCloseReason;
+          _subscription.cancel();
+          _controller.close();
+          _webSockets.remove(_serviceId);
+        });
+      }
     }
     return _sink.close();
   }
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index 7153424..5d73641 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -1196,7 +1196,7 @@
  *
  * Example usage:
  *
- *     @MirrorsUsed(symbols: 'foo', override: '*')
+ *     @MirrorsUsed(symbols: 'foo')
  *     import 'dart:mirrors';
  *
  *     class Foo {
@@ -1209,12 +1209,25 @@
  *       new Foo().foo(); // Prints "foo".
  *       new Foo().bar(); // Might print an arbitrary (mangled) name, "bar".
  *     }
+ *
+ * For a detailed description of the parameters to the [MirrorsUsed] constructor
+ * see the comments for [symbols], [targets], [metaTargets] and [override].
+ *
+ * An import of `dart:mirrors` may have multiple [MirrorsUsed] annotations. This
+ * is particularly helpful to specify overrides for specific libraries. For 
+ * example:
+ *
+ *     @MirrorsUsed(targets: 'foo.Bar', override: 'foo')
+ *     @MirrorsUsed(targets: 'Bar')
+ *     import 'dart:mirrors';
+ *
+ * will ensure that the target `Bar` from the current library and from library
+ * `foo` is available for reflection. See also [override].
  */
-// TODO(ahe): Remove ", override: '*'" when it isn't necessary anymore.
 class MirrorsUsed {
   // Note: the fields of this class are untyped.  This is because the most
-  // convenient way to specify to specify symbols today is using a single
-  // string. In some cases, a const list of classes might be convenient. Some
+  // convenient way to specify symbols today is using a single string. In 
+  // some cases, a const list of classes might be convenient. Some
   // might prefer to use a const list of symbols.
 
   /**
@@ -1228,19 +1241,29 @@
    *
    * The following text is non-normative:
    *
-   * Specifying this option turns off the following warnings emitted by
+   * Dart2js currently supports the following formats to specify symbols:
+   *
+   * * A constant [List] of [String] constants representing symbol names, 
+   *   e.g., `const ['foo', 'bar']`.
+   * * A single [String] constant whose value is a comma-separated list of
+   *   symbol names, e.g., `"foo, bar"`.
+   *
+   * Specifying the `symbols` field turns off the following warnings emitted by
    * dart2js:
    *
    * * Using "MirrorSystem.getName" may result in larger output.
-   * * Using "new #{name}" may result in larger output.
+   * * Using "new Symbol" may result in larger output.
    *
-   * Use symbols = "*" to turn off the warnings mentioned above.
+   * For example, if you're using [noSuchMethod] to interact with a database,
+   * extract all the possible column names and include them in this list.
+   * Similarly, if you're using [noSuchMethod] to interact with another
+   * language (JavaScript, for example) extract all the identifiers from the
+   * API you use and include them in this list.
    *
-   * For example, if using [noSuchMethod] to interact with a database, extract
-   * all the possible column names and include them in this list.  Similarly,
-   * if using [noSuchMethod] to interact with another language (JavaScript, for
-   * example) extract all the identifiers from API used and include them in
-   * this list.
+   * Note that specifying a symbol only ensures that the symbol will be
+   * available under that name at runtime. It does not mark targets with
+   * that name as available for reflection. See [targets] and [metaTargets]
+   * for that purpose.
    */
   final symbols;
 
@@ -1253,16 +1276,97 @@
    * The following text is non-normative:
    *
    * For now, there is no formal description of what a reflective target is.
-   * Informally, it is a list of things that are expected to have fully
-   * functional mirrors.
+   * Informally, a target is a library, a class, a method or a field.
+   *
+   * Dart2js currently supports the following formats to specify targets:
+   *
+   * * A constant [List] containing [String] constants representing (qualified)
+   *   names of targets and Dart types.
+   * * A single [String] constant whose value is a comma-separated list of
+   *   (qualified) names.
+   * * A single Dart type.
+   *
+   * A (qualified) name is resolved to a target as follows:
+   *
+   * 1. If the qualified name matches a library name, the matching library is
+   *    the target.
+   * 2. Else, find the longest prefix of the name such that the prefix ends
+   *    just before a `.` and is a library name. 
+   * 3. Use that library as current scope. If no matching prefix was found, use
+   *    the current library, i.e., the library where the [MirrorsUsed] 
+   *    annotation was placed.
+   * 4. Split the remaining suffix (the entire name if no library name was
+   *    found in step 3) into a list of [String] using `.` as a 
+   *    separator.
+   * 5. Select all targets in the current scope whose name matches a [String] 
+   *    from the list.
+   *
+   * For example:
+   *
+   *     library my.library.one;
+   *
+   *     class A {
+   *       var aField;
+   *     }
+   *
+   *     library main;
+   *
+   *     @MirrorsUsed(targets: "my.library.one.A.aField")
+   *     import "dart:mirrors";
+   *
+   * The [MirrorsUsed] annotation specifies `A` and `aField` from library 
+   * `my.library.one` as targets. This will mark the class `A` as a reflective
+   * target. The target specification for `aField` has no effect, as there is
+   * no target in `my.library.one` with that name. 
+   * 
+   * Note that everything within a target also is available for reflection.
+   * So, if a library is specified as target, all classes in that library
+   * become targets for reflection. Likewise, if a class is a target, all
+   * its methods and fields become targets for reflection. As a consequence,
+   * `aField` in the above example is also a reflective target.
+   *
    */
   final targets;
 
   /**
    * A list of classes that when used as metadata indicates a reflective
-   * target.
+   * target. See also [targets].
    *
-   * See [targets].
+   * The following text is non-normative:
+   *
+   * The format for specifying the list of classes is the same as used for
+   * specifying [targets]. However, as a library cannot be used as a metadata
+   * annotation in Dart, adding a library to the list of [metaTargets] has no
+   * effect. In particular, adding a library to [metaTargets] does not make
+   * the library's classes valid metadata annotations to enable reflection.
+   *
+   * If an instance of a class specified in [metaTargets] is used as 
+   * metadata annotation on a library, class, field or method, that library,
+   * class, field or  method is added to the set of targets for reflection. 
+   *
+   * Example usage:
+   *
+   *     library example;
+   *     @MirrorsUsed(metaTargets: "example.Reflectable")
+   *     import "dart:mirrors";
+   *
+   *     class Reflectable {
+   *       const Reflectable();
+   *     }
+   *
+   *     class Foo {
+   *       @Reflectable()
+   *       reflectableMethod() { ... }
+   *
+   *       nonReflectableMethod() { ... }
+   *     }
+   *
+   * In the above example. `reflectableMethod` is marked as reflectable by
+   * using the `Reflectable` class, which in turn is specified in the 
+   * [metaTargets] annotation.
+   *
+   * The method `nonReflectableMethod` lacks a metadata annotation and thus 
+   * will not be reflectable at runtime.
    */
   final metaTargets;
 
@@ -1271,10 +1375,58 @@
    *
    * When used as metadata on an import of "dart:mirrors", this metadata does
    * not apply to the library in which the annotation is used, but instead
-   * applies to the other libraries (all libraries if "*" is used).
+   * applies to the other libraries (all libraries if "*" is used). 
+   *
+   * The following text is non-normative:
+   *
+   * Dart2js currently supports the following formats to specify libraries:
+   *
+   * * A constant [List] containing [String] constants representing names of
+   *   libraries.
+   * * A single [String] constant whose value is a comma-separated list of
+   *   library names.
+   * 
+   * Conceptually, a [MirrorsUsed] annotation with [override] has the same 
+   * effect as placing the annotation directly on the import of `dart:mirrors`
+   * in each of the referenced libraries. Thus, if the library had no 
+   * [MirrorsUsed] annotation before, its unconditional import of 
+   * `dart:mirrors` is overridden by an annotated import.
+   * 
+   * Note that, like multiple explicit [MirrorsUsed] annotations, using
+   * override on a library with an existing [MirrorsUsed] annotation is
+   * additive. That is, the overall set of reflective targets is the union
+   * of the reflective targets that arise from the original and the
+   * overriding [MirrorsUsed] annotations. 
+   *
+   * The use of [override] is only meaningful for libraries that have an 
+   * import of `dart:mirrors` without annotation because otherwise it would
+   * work exactly the same way without the [override] parameter.
+   *
+   * While the annotation will apply to the given target libraries, the
+   * [symbols], [targets] and [metaTargets] are still evaluated in the 
+   * scope of the annotation. Thus, to select a target from library `foo`,
+   * a qualified name has to be used or, if the target is visible in the
+   * current scope, its type may be referenced.
+   * 
+   * For example, the following code marks all targets in the library `foo`
+   * as reflectable that have a metadata annotation using the `Reflectable` 
+   * class from the same library.
+   *
+   *     @MirrorsUsed(metaTargets: "foo.Reflectable", override: "foo")
+   *
+   * However, the following code would require the use of the `Reflectable`
+   * class from the current library, instead.
+   *
+   *     @MirrorsUsed(metaTargets: "Reflectable", override: "foo")
+   *
    */
   final override;
 
+  /**
+   * See the documentation for [MirrorsUsed.symbols], [MirrorsUsed.targets], 
+   * [MirrorsUsed.metaTargets] and [MirrorsUsed.override] for documentation 
+   * of the parameters.
+   */
   const MirrorsUsed(
       {this.symbols, this.targets, this.metaTargets, this.override});
 }
diff --git a/site/try/app.yaml b/site/try/app.yaml
index 2e53e66..f6c9eee 100644
--- a/site/try/app.yaml
+++ b/site/try/app.yaml
@@ -60,10 +60,6 @@
   static_dir: packages/logging
   secure: always
 
-- url: /packages/matcher
-  static_dir: packages/matcher
-  secure: always
-
 - url: /packages/math
   static_dir: packages/math
   secure: always
diff --git a/site/try/build_try.gyp b/site/try/build_try.gyp
index 084e78c..ae1125b 100644
--- a/site/try/build_try.gyp
+++ b/site/try/build_try.gyp
@@ -54,7 +54,6 @@
           '../../third_party/pkg/http_parser/lib',
           '../../third_party/pkg/intl/lib',
           '../../third_party/pkg/logging/lib',
-          '../../third_party/pkg/matcher/lib',
           '../../third_party/pkg/path/lib',
           '../../third_party/pkg/stack_trace/lib',
           '../../third_party/pkg/string_scanner/lib',
diff --git a/tests/benchmark_smoke/benchmark_smoke.status b/tests/benchmark_smoke/benchmark_smoke.status
index 0e012ef..31fecec 100644
--- a/tests/benchmark_smoke/benchmark_smoke.status
+++ b/tests/benchmark_smoke/benchmark_smoke.status
@@ -9,4 +9,4 @@
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
 [ $compiler == dart2js && $cps_ir ]
-benchmark_smoke_test: Crash # cannot compile methods that need interceptor calling convention.
+benchmark_smoke_test: Crash # (testForCompletion): handleStaticFunctionGet: function(testForCompletion)
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
deleted file mode 100644
index eb20aa4..0000000
--- a/tests/co19/co19-dart2dart.status
+++ /dev/null
@@ -1,122 +0,0 @@
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-[ $compiler == dart2dart && $builder_tag == new_backend ]
-Language/12_Expressions/18_Assignment_A04_t09: RuntimeError # Issue 23015
-
-[ $compiler == dart2dart && $builder_tag != new_backend ]
-Language/12_Expressions/18_Assignment_A04_t09: RuntimeError # co19-roll r667: Please triage this failure
-
-[ $compiler == dart2dart ]
-Language/03_Overview/1_Scoping_A02_t05: Fail # Inherited from dart2js
-Language/03_Overview/1_Scoping_A02_t06: Fail # inherited from dart2js
-Language/03_Overview/1_Scoping_A02_t28: Fail # co19-roll r559: Please triage this failure
-Language/03_Overview/2_Privacy_A01_t19: Fail # Calling unresolved class constructor.
-Language/03_Overview/2_Privacy_A01_t20: Fail # Calling unresolved class constructor.
-Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
-Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
-Language/05_Variables/05_Variables_A11_t01: fail
-Language/07_Classes/07_Classes_A13_t02: Fail # Missing CT error on member with same name a type parameter
-Language/07_Classes/07_Classes_A13_t03: Fail # Missing CT error on member with same name a type parameter
-Language/07_Classes/07_Classes_A13_t05: Fail # Missing CT error on member with same name a type parameter
-Language/07_Classes/07_Classes_A13_t06: Fail # Missing CT error on member with same name a type parameter
-Language/07_Classes/07_Classes_A13_t08: Fail # Missing CT error on member with same name a type parameter
-Language/07_Classes/07_Classes_A13_t09: Fail # Missing CT error on member with same name a type parameter
-Language/07_Classes/1_Instance_Methods_A07_t01: fail # Issue 21201
-Language/07_Classes/3_Setters_A04_t01: Fail # inherited from VM
-Language/07_Classes/3_Setters_A04_t02: Fail # inherited from VM
-Language/07_Classes/3_Setters_A04_t07: Fail # inherited from VM
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t02: fail # 13363
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A20_t02: fail # 13363
-Language/07_Classes/6_Constructors/2_Factories_A08_t02: fail # Issue 21202
-Language/07_Classes/6_Constructors/2_Factories_A10_t02: fail # Issue 21202
-Language/07_Classes/6_Constructors/2_Factories_A10_t03: fail # Issue 21202
-Language/07_Classes/6_Constructors_A03_t03: Fail # Calling unresolved class constructor.
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t03: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/10_Generics/09_Generics_A01_t17: fail # Issue 21203
-Language/12_Expressions/01_Constants_A03_t01: Fail # Issue 13652
-Language/12_Expressions/12_Instance_Creation/1_New_A02_t03: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A02_t05: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A02_t06: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A02_t07: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A03_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A03_t02: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A04_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A04_t02: RuntimeError # co19-roll r607: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t04: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t05: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t06: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t15: CompileTimeError # Issue 21092
-Language/12_Expressions/12_Instance_Creation/2_Const_A11_t01: MissingCompileTimeError # Issue 21134
-Language/12_Expressions/12_Instance_Creation/2_Const_A11_t03: MissingCompileTimeError # Issue 21134
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: RuntimeError # co19-roll r623: Please triage this failure
-Language/12_Expressions/17_Getter_Invocation_A07_t02: Pass, RuntimeError # co19-roll r607: Please triage this failure
-Language/12_Expressions/22_Equality_A01_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/22_Equality_A05_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/30_Identifier_Reference_A02_t01: fail # co19-roll r546: Please triage this failure
-Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
-Language/13_Statements/04_Local_Function_Declaration_A04_t03: MissingCompileTimeError # co19-roll r667: Please triage this failure
-Language/13_Statements/09_Switch_A01_t02: fail # co19-roll r546: Please triage this failure
-Language/13_Statements/12_Labels_A01_t03: fail # co19-roll r546: Please triage this failure
-Language/14_Libraries_and_Scripts/1_Imports_A03_t08: fail # co19-roll r546: Please triage this failure
-Language/14_Libraries_and_Scripts/1_Imports_A03_t09: fail # co19-roll r546: Please triage this failure
-Language/14_Libraries_and_Scripts/1_Imports_A03_t10: fail # co19-roll r546: Please triage this failure
-Language/14_Libraries_and_Scripts/1_Imports_A03_t28: fail # co19-roll r546: Please triage this failure
-Language/14_Libraries_and_Scripts/1_Imports_A03_t29: fail # co19-roll r546: Please triage this failure
-Language/14_Libraries_and_Scripts/1_Imports_A03_t30: fail # co19-roll r546: Please triage this failure
-Language/15_Types/4_Interface_Types_A11_t01: crash # co19-roll r546: Please triage this failure
-Language/15_Types/4_Interface_Types_A11_t02: crash # co19-roll r546: Please triage this failure
-Language/15_Types/4_Interface_Types_A11_t04: fail # Issue 14654
-Language/15_Types/5_Function_Types_A06_t01: fail # co19-roll r546: Please triage this failure
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: fail # co19-roll r546: Please triage this failure
-Language/16_Reference/1_Lexical_Rules_A02_t06: fail # co19-roll r546: Please triage this failure
-LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: RuntimeError # Issue 22032
-LibTest/core/DateTime/parse_A03_t01: fail # co19-roll r546: Please triage this failure
-LibTest/core/Function/Function_class_A01_t01: RuntimeError # co19-roll r623: Please triage this failure
-LibTest/core/Invocation/memberName_A01_t01: Pass, RuntimeError # co18-roll r607: Please triage this failure
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # inherited from VM. Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # inherited from VM. Issue 22200
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # inherited from VM. Issue 22200
-LibTest/core/Symbol/Symbol_A01_t03: RuntimeError # co19-roll r607: Please triage this failure
-LibTest/core/Symbol/Symbol_A01_t05: RuntimeError # co19-roll r607: Please triage this failure
-LibTest/core/int/operator_left_shift_A01_t02: Fail, OK # co19 issue 129
-LibTest/core/int/toRadixString_A01_t01: Fail # inherited from VM
-LibTest/isolate/Isolate/spawnUri_A01_t01: Fail # co19-roll r672: Please triage this failure
-LibTest/isolate/Isolate/spawnUri_A01_t02: Fail # co19-roll r672: Please triage this failure
-LibTest/isolate/Isolate/spawnUri_A01_t03: Fail # co19-roll r672: Please triage this failure
-LibTest/isolate/Isolate/spawnUri_A01_t04: Fail # co19-roll r672: Please triage this failure
-LibTest/isolate/Isolate/spawnUri_A01_t05: Fail # co19-roll r672: Please triage this failure
-LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError # Issue 15617
-LibTest/isolate/Isolate/spawn_A02_t02: RuntimeError # Issue 15617
-LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
-LibTest/isolate/ReceivePort/receive_A01_t02: Fail, OK # co19 issue 276
-LibTest/isolate/SendPort/send_A01_t01: CompileTimeError # co19-roll r706: Please triage this failure
-LibTest/isolate/SendPort/send_A01_t02: CompileTimeError # co19-roll r706: Please triage this failure
-LibTest/isolate/SendPort/send_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
-LibTest/isolate/SendPort/send_A02_t02: timeout # co19-roll r546: Please triage this failure
-LibTest/isolate/SendPort/send_A02_t03: timeout # co19-roll r546: Please triage this failure
-LibTest/math/tan_A01_t01: Fail # co19 issue 44
-LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
-
-[ $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/double/remainder_A01_t04: Fail # Result is NaN
-
-[ $compiler == dart2dart && $system == macos ]
-LibTest/math/acos_A01_t01: Fail, OK # co19 issue 44
-LibTest/math/asin_A01_t01: Fail, OK # co19 issue 44
-LibTest/math/atan_A01_t01: Fail, OK # co19 issue 44
-
-[ $compiler == dart2dart && $minified ]
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: fail # co19-roll r559: Please triage this failure
-Language/12_Expressions/17_Getter_Invocation_A02_t01: fail # co19-roll r559: Please triage this failure
-Language/12_Expressions/18_Assignment_A05_t02: fail # co19-roll r559: Please triage this failure
-Language/12_Expressions/18_Assignment_A05_t04: fail # co19-roll r559: Please triage this failure
-LibTest/convert/JsonCodec/encode_A01_t02: RuntimeError # co19-roll r641: Please triage this failure
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index d9c2e62..a4a7276 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -51,8 +51,6 @@
 Language/14_Libraries_and_Scripts/1_Imports_A03_t09: fail # Issue 21171
 Language/14_Libraries_and_Scripts/1_Imports_A03_t10: fail # Issue 21171
 Language/14_Libraries_and_Scripts/1_Imports_A03_t28: fail # Issue 21171
-Language/14_Libraries_and_Scripts/1_Imports_A03_t29: fail # co19 issue 723
-Language/14_Libraries_and_Scripts/1_Imports_A03_t30: fail # co19 issue 723
 Language/15_Types/4_Interface_Types_A11_t01: crash # Issue 21174
 Language/15_Types/4_Interface_Types_A11_t02: crash # Issue 21174
 Language/15_Types/4_Interface_Types_A11_t04: fail # Issue 14654
@@ -98,14 +96,9 @@
 LibTest/isolate/Isolate/spawnUri_A01_t05: Fail # Dart issue 15974
 LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError, Pass # Dart issue 15617
 LibTest/isolate/Isolate/spawn_A02_t02: RuntimeError, Pass # Dart issue 15617
-LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
-LibTest/isolate/IsolateStream/contains_A02_t01: fail # co19-roll r546: Please triage this failure
-LibTest/isolate/ReceivePort/receive_A01_t02: RuntimeError # Issue 6750
 LibTest/isolate/SendPort/send_A01_t01: CompileTimeError # co19-roll r706: Please triage this failure
 LibTest/isolate/SendPort/send_A01_t02: CompileTimeError # co19-roll r706: Please triage this failure
 LibTest/isolate/SendPort/send_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
-LibTest/isolate/SendPort/send_A02_t04: RuntimeError # Runtime error: TypeError: Cannot call method 'toSendPort$0' of undefined.
-LibTest/isolate/SendPort/send_A02_t04: RuntimeError, OK # co19 issue 293 Passes on IE
 LibTest/math/MutableRectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
 LibTest/math/Rectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
 LibTest/math/pow_A04_t01: fail # co19-roll r587: Please triage this failure
@@ -314,8 +307,6 @@
 LibTest/core/Stopwatch/stop_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
 LibTest/core/Uri/Uri_A06_t03: Pass, Slow
 LibTest/isolate/ReceivePort/asBroadcastStream_A04_t03: RuntimeError # Issue 7728, timer not supported in jsshell
-LibTest/isolate/SendPort/send_A02_t05: RuntimeError # TODO(ahe): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t06: RuntimeError # TODO(ahe): Please triage this failure.
 LibTest/typed_data/Float32List/Float32List.view_A06_t01: fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Float32List/toList_A01_t01: Skip # co19-roll r559: Please triage this failure
 LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: fail # co19-roll r587: Please triage this failure
@@ -9447,1348 +9438,352 @@
 WebPlatformTest/webstorage/storage_session_setitem_t01: RuntimeError # Please triage this failure
 
 [ $compiler == dart2js && $cps_ir ]
-Language/03_Overview/03_Overview_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/03_Overview_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A01_t28: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A01_t29: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A01_t34: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A01_t39: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A02_t16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+Language/03_Overview/03_Overview_A01_t01: Crash # (main): handleStaticFunctionGet: function(main)
+Language/03_Overview/1_Scoping_A01_t34: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+Language/03_Overview/1_Scoping_A01_t39: Crash # Instance of 'TypeOperator': type check unimplemented for f.
 Language/03_Overview/1_Scoping_A02_t19: Crash # (switch (1){case 1:var x;break;case 2:var x;break;}): Unhandled node
-Language/03_Overview/1_Scoping_A02_t29: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/1_Scoping_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/2_Privacy_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/2_Privacy_A01_t04: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t05: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/2_Privacy_A01_t07: Crash # (try {a._setter=1;}on int catch (ok){}): "on T" catch block
-Language/03_Overview/2_Privacy_A01_t08: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t09: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t10: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t11: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/2_Privacy_A01_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/2_Privacy_A01_t16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/03_Overview/2_Privacy_A01_t18: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t19: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t20: Crash #  "on T" catch block
-Language/03_Overview/2_Privacy_A01_t21: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A03_t02: Crash # (Expect): Error expression `Expect` unhandled.
-Language/05_Variables/05_Variables_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A07_t01: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A07_t02: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A07_t03: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A07_t04: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A07_t09: Crash # Please triage this failure.
-Language/05_Variables/05_Variables_A07_t10: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A08_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/05_Variables/05_Variables_A08_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/05_Variables/05_Variables_A08_t03: Crash # Please triage this failure.
-Language/05_Variables/05_Variables_A09_t01: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A11_t01: Crash # (w): Error expression `w` unhandled.
-Language/05_Variables/05_Variables_A11_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A12_t09: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A12_t10: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A12_t11: Crash #  "on T" catch block
+Language/03_Overview/2_Privacy_A01_t06: Crash # Instance of 'TypeOperator': type check unimplemented for _inaccessibleFuncType.
+Language/05_Variables/05_Variables_A04_t01: Crash # unsupported element kind: foo:field
 Language/05_Variables/05_Variables_A12_t12: Crash # unsupported element kind: z5:field
-Language/05_Variables/05_Variables_A13_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A13_t02: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A13_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A14_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A14_t02: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A14_t03: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A14_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A14_t05: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A14_t06: Crash #  "on T" catch block
-Language/05_Variables/05_Variables_A14_t07: Crash # (throw new ExpectException(message)): Unhandled node
-Language/05_Variables/05_Variables_A15_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A15_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/05_Variables_A15_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Crash #  "on T" catch block
-Language/06_Functions/06_Functions_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/06_Functions_A01_t06: Crash # (function()): Error expression `function()` unhandled.
-Language/06_Functions/06_Functions_A01_t07: Crash # (function()): Error expression `function()` unhandled.
-Language/06_Functions/06_Functions_A01_t08: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t09: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t10: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t12: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t14: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t15: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t16: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t17: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t18: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t19: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t20: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t21: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t23: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t24: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t25: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/06_Functions_A01_t33: Crash # (f2()): Error expression `f2()` unhandled.
-Language/06_Functions/06_Functions_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/06_Functions_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/06_Functions_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/1_Function_Declaration_A01_t01: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/1_Function_Declaration_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/2_Formal_Parameters/1_Required_Formals_A02_t05: Crash #  "on T" catch block
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t04: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t05: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t06: Crash #  "on T" catch block
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t08: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t09: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t10: Crash #  "on T" catch block
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/2_Formal_Parameters_A01_t02: Crash # (f(1,1)): Error expression `f(1,1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t03: Crash # (f(1)): Error expression `f(1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t04: Crash # (f(1)): Error expression `f(1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t05: Crash # (f(1)): Error expression `f(1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t06: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t07: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t09: Crash # (f(1,1)): Error expression `f(1,1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t10: Crash # (f(1)): Error expression `f(1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t12: Crash # (f(1)): Error expression `f(1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t13: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t14: Crash # (f()): Error expression `f()` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t16: Crash # (f(1)): Error expression `f(1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t17: Crash # (f(1)): Error expression `f(1)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t20: Crash # (f(1,2,3)): Error expression `f(1,2,3)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A01_t21: Crash # (f(1,2,3)): Error expression `f(1,2,3)` unhandled.
-Language/06_Functions/2_Formal_Parameters_A02_t01: Crash #  "on T" catch block
-Language/06_Functions/2_Formal_Parameters_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/06_Functions/2_Formal_Parameters_A03_t03: Crash # (f(1)): handleStaticFunctionIncompatibleInvoke
-Language/06_Functions/2_Formal_Parameters_A03_t04: Crash # (f(1)): handleStaticFunctionIncompatibleInvoke
-Language/06_Functions/2_Formal_Parameters_A03_t06: Crash # (f(1)): handleStaticFunctionIncompatibleInvoke
-Language/06_Functions/3_Type_of_a_Function_A01_t01: Crash #  "on T" catch block
-Language/06_Functions/4_External_Functions_A01_t01: Crash #  "on T" catch block
-Language/07_Classes/07_Classes_A02_t12: Crash # (A): Error expression `A` unhandled.
-Language/07_Classes/07_Classes_A02_t13: Crash # (const A()): Error expression `const A()` unhandled.
-Language/07_Classes/07_Classes_A02_t16: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A02_t17: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A02_t18: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A02_t19: Crash # (new A.B()): Error expression `new A.B()` unhandled.
-Language/07_Classes/07_Classes_A02_t21: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A02_t22: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A02_t23: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A04_t01: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A04_t02: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A04_t04: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A04_t05: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A04_t13: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A04_t17: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/07_Classes_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/07_Classes_A10_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/07_Classes_A11_t02: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/07_Classes_A11_t04: Crash # (new A()): Error expression `new A()` unhandled.
-Language/07_Classes/10_Superinterfaces_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/10_Superinterfaces_A07_t04: Crash # cannot compile methods that need interceptor calling convention.
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t01: Crash # cannot compile methods that need interceptor calling convention.
-Language/07_Classes/1_Instance_Methods/2_Operators_A01_t02: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/1_Instance_Methods/2_Operators_A02_t02: Crash # (new C()): Error expression `new C()` unhandled.
+Language/05_Variables/05_Variables_A14_t07: Crash # unsupported element kind: z2:field
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t01: Crash # unsupported element kind: c:field
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Crash # unsupported element kind: sFinalTyped:field
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t03: Crash # unsupported element kind: sFinalTyped:field
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t04: RuntimeError # Please triage this failure.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Crash # unsupported element kind: sTyped:field
+Language/07_Classes/07_Classes_A02_t17: Crash # Please triage this failure.
+Language/07_Classes/07_Classes_A02_t18: Crash # Please triage this failure.
+Language/07_Classes/07_Classes_A02_t19: Crash # Please triage this failure.
 Language/07_Classes/1_Instance_Methods/2_Operators_A02_t06: Crash # Please triage this failure.
-Language/07_Classes/1_Instance_Methods/2_Operators_A02_t20: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/1_Instance_Methods/2_Operators_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/07_Classes/1_Instance_Methods/2_Operators_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/07_Classes/1_Instance_Methods/2_Operators_A08_t01: Crash # cannot compile methods that need interceptor calling convention.
-Language/07_Classes/2_Getters_A01_t03: Crash # (try {var x=new C().getter;}on C catch (ok){}): "on T" catch block
-Language/07_Classes/2_Getters_A01_t05: Crash # (try {var x=C.getter;}on C catch (ok){}): "on T" catch block
-Language/07_Classes/2_Getters_A02_t01: Crash #  "on T" catch block
-Language/07_Classes/2_Getters_A04_t08: Crash # (C.foo()): Error expression `C.foo()` unhandled.
-Language/07_Classes/2_Getters_A04_t09: Crash # (C.foo()): Error expression `C.foo()` unhandled.
-Language/07_Classes/3_Setters_A04_t01: Crash #  "on T" catch block
-Language/07_Classes/3_Setters_A04_t05: Crash #  "on T" catch block
-Language/07_Classes/3_Setters_A04_t07: Crash # (C.foo(1)): Error expression `C.foo(1)` unhandled.
-Language/07_Classes/3_Setters_A08_t01: Crash # (C.foo="foo"): Error expression `C.foo="foo"` unhandled.
-Language/07_Classes/3_Setters_A08_t02: Crash # (C.foo="foo"): Error expression `C.foo="foo"` unhandled.
-Language/07_Classes/3_Setters_A08_t04: Crash # (C.foo="foo"): Error expression `C.foo="foo"` unhandled.
-Language/07_Classes/3_Setters_A08_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/4_Abstract_Instance_Members_A02_t01: Crash #  "on T" catch block
-Language/07_Classes/4_Abstract_Instance_Members_A02_t02: Crash #  "on T" catch block
-Language/07_Classes/4_Abstract_Instance_Members_A02_t03: Crash #  "on T" catch block
-Language/07_Classes/4_Abstract_Instance_Members_A02_t04: Crash #  "on T" catch block
-Language/07_Classes/4_Abstract_Instance_Members_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/4_Abstract_Instance_Members_A03_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/4_Abstract_Instance_Members_A03_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/4_Abstract_Instance_Members_A07_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A01_t06: Crash # (new C.c3()): Error expression `new C.c3()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t01: Crash # handleStaticFunctionGet: function(foo)
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t02: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t03: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t05: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t07: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t09: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t10: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t11: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t15: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t16: Crash # (new C()): Error expression `new C()` unhandled.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A11_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A11_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A11_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A11_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t03: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t04: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t01: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t02: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A18_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A18_t03: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A20_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A20_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/2_Factories_A03_t07: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/2_Factories_A06_t01: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/2_Factories_A06_t02: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/2_Factories_A06_t03: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/2_Factories_A06_t04: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/2_Factories_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/2_Factories_A07_t02: Crash # (new A.foo()): Error expression `new A.foo()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/2_Factories_A08_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors/2_Factories_A09_t01: Crash # (new F()): Error expression `new F()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A09_t02: Crash # (new F.id()): Error expression `new F.id()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A09_t03: Crash # (new F()): Error expression `new F()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A09_t04: Crash # (new F1()): Error expression `new F1()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A10_t01: Crash # (new F()): Error expression `new F()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A10_t02: Crash # (new F()): Error expression `new F()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A10_t03: Crash # (new F()): Error expression `new F()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A10_t04: Crash # (new F.foo()): Error expression `new F.foo()` unhandled.
-Language/07_Classes/6_Constructors/2_Factories_A12_t02: Crash #  "on T" catch block
-Language/07_Classes/6_Constructors/2_Factories_A14_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors_A01_t01: Crash # (new C.foo()): Error expression `new C.foo()` unhandled.
-Language/07_Classes/6_Constructors_A01_t02: Crash # (new C.foo()): Error expression `new C.foo()` unhandled.
-Language/07_Classes/6_Constructors_A01_t03: Crash # (new C.foo()): Error expression `new C.foo()` unhandled.
-Language/07_Classes/6_Constructors_A01_t06: Crash # (new C.foo()): Error expression `new C.foo()` unhandled.
-Language/07_Classes/6_Constructors_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/6_Constructors_A03_t03: Crash #  "on T" catch block
-Language/07_Classes/7_Static_Methods_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/7_Static_Methods_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/8_Static_Variables_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t03: Crash #  "on T" catch block
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/07_Classes/9_Superclasses_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A01_t01: Crash #  "on T" catch block
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A01_t02: Crash #  "on T" catch block
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A02_t01: Crash #  "on T" catch block
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A02_t02: Crash #  "on T" catch block
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A02_t04: Crash #  "on T" catch block
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A02_t05: Crash #  "on T" catch block
-Language/08_Interfaces/5_Superinterfaces_A01_t04: Crash # (new B()): Error expression `new B()` unhandled.
-Language/10_Generics/09_Generics_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/10_Generics/09_Generics_A01_t16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/10_Generics/09_Generics_A03_t01: Crash #  "on T" catch block
-Language/10_Generics/09_Generics_A04_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/10_Generics/09_Generics_A04_t06: Crash #  "on T" catch block
-Language/10_Generics/10_Generics_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/10_Generics/10_Generics_A05_t02: Crash #  "on T" catch block
-Language/10_Generics/10_Generics_A05_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t02: Crash # Please triage this failure.
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A05_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A07_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/00_Object_Identity/1_Object_Identity_A08_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/01_Constants_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/01_Constants_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/01_Constants_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A10_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A10_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A11_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A12_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A12_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A12_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A12_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A13_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A13_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A14_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/01_Constants_A14_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/02_Null_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/02_Null_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/03_Numbers_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/03_Numbers_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/03_Numbers_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/03_Numbers_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/03_Numbers_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/03_Numbers_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/03_Numbers_A01_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/03_Numbers_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/03_Numbers_A06_t02: Crash #  "on T" catch block
-Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t01: Crash # (try {if(null){}fail=true;}on AssertionError catch (ok){}): "on T" catch block
-Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/04_Booleans_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/04_Booleans_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t06: Crash # (try {"${T}";}on NoSuchMethodError catch (ok){print(ok);}): "on T" catch block
-Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t07: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t12: Crash # handleStaticFunctionGet: function(foo)
-Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t13: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t17: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings/1_String_Interpolation_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings/1_String_Interpolation_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings/1_String_Interpolation_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings/1_String_Interpolation_A03_t02: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings/1_String_Interpolation_A03_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings/1_String_Interpolation_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings/1_String_Interpolation_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings/1_String_Interpolation_A04_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings/1_String_Interpolation_A04_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A08_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A09_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A10_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A11_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A12_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A13_t04: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A14_t05: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A15_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A15_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A16_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A18_t02: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A18_t03: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A18_t04: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A18_t05: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A18_t06: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A18_t07: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A18_t08: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A18_t09: Crash #  "on T" catch block
-Language/12_Expressions/05_Strings_A20_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A21_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings_A21_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/05_Strings_A21_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/05_Strings_A21_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/06_Lists_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/06_Lists_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/06_Lists_A05_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/06_Lists_A06_t01: Crash # Please triage this failure.
-Language/12_Expressions/06_Lists_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/06_Lists_A07_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/06_Lists_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/06_Lists_A08_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/06_Lists_A08_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/06_Lists_A08_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/06_Lists_A09_t01: Crash #  "on T" catch block
-Language/12_Expressions/06_Lists_A09_t02: Crash #  "on T" catch block
-Language/12_Expressions/06_Lists_A09_t03: Crash #  "on T" catch block
-Language/12_Expressions/06_Lists_A09_t04: Crash #  "on T" catch block
-Language/12_Expressions/06_Lists_A09_t05: Crash #  "on T" catch block
-Language/12_Expressions/06_Symbols_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/06_Symbols_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/07_Maps_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/07_Maps_A04_t02: Crash # Please triage this failure.
-Language/12_Expressions/07_Maps_A05_t01: Crash # Please triage this failure.
-Language/12_Expressions/07_Maps_A06_t01: Crash # Please triage this failure.
-Language/12_Expressions/07_Maps_A06_t02: Crash # Please triage this failure.
-Language/12_Expressions/07_Maps_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/07_Maps_A07_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/07_Maps_A07_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/07_Maps_A07_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/07_Maps_A09_t01: Crash # Please triage this failure.
-Language/12_Expressions/07_Maps_A10_t02: Crash #  "on T" catch block
-Language/12_Expressions/07_Maps_A10_t03: Crash #  "on T" catch block
-Language/12_Expressions/07_Maps_A10_t04: Crash #  "on T" catch block
-Language/12_Expressions/07_Maps_A10_t05: Crash #  "on T" catch block
-Language/12_Expressions/08_Throw_A02_t01: Crash # (throw "fail1"): Unhandled node
-Language/12_Expressions/08_Throw_A03_t02: Crash #  "on T" catch block
-Language/12_Expressions/08_Throw_A03_t03: Crash #  "on T" catch block
-Language/12_Expressions/08_Throw_A03_t04: Crash #  "on T" catch block
-Language/12_Expressions/08_Throw_A04_t01: Crash # (throw last): Unhandled node
-Language/12_Expressions/08_Throw_A08_t01: Crash # (try {bar(new Error());}on Error catch (e){Expect.isNotNull(e.stackTrace);}): "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/09_Function_Expressions_A03_t03: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A03_t04: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A04_t03: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A04_t04: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A05_t03: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A05_t04: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A05_t05: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A06_t02: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A06_t03: Crash #  "on T" catch block
-Language/12_Expressions/09_Function_Expressions_A06_t04: Crash #  "on T" catch block
-Language/12_Expressions/10_Expressions_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/10_This_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/10_This_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/10_This_A03_t02: Crash # (func(1,2)): Error expression `func(1,2)` unhandled.
-Language/12_Expressions/12_Instance_Creation/1_New_A01_t04: Crash # (try {A();}on NoSuchMethodError catch (e){}): "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A02_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t01: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t02: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t04: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t05: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t06: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t12: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t16: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t17: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A06_t18: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A07_t01: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A08_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation/1_New_A08_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation/1_New_A08_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A09_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A12_t02: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A13_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A13_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A13_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation/1_New_A15_t01: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A15_t02: Crash #  "on T" catch block
-Language/12_Expressions/12_Instance_Creation/1_New_A16_t01: Crash # (new C()): Error expression `new C()` unhandled.
-Language/12_Expressions/12_Instance_Creation/1_New_A16_t02: Crash # (new C.id()): Error expression `new C.id()` unhandled.
-Language/12_Expressions/12_Instance_Creation/2_Const_A08_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation/2_Const_A08_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation/2_Const_A08_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation/2_Const_A08_t04: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation/2_Const_A08_t05: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/12_Instance_Creation_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/12_Instance_Creation_A01_t07: Crash #  "on T" catch block
-Language/12_Expressions/13_Property_Extraction_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/13_Property_Extraction_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/13_Property_Extraction_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/13_Property_Extraction_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/13_Property_Extraction_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/13_Property_Extraction_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
+Language/07_Classes/1_Instance_Methods/2_Operators_A02_t20: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t01: Crash # (foo): handleStaticFunctionGet: function(foo)
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t02: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t03: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t05: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t07: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t09: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t10: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t11: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t16: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/07_Classes/6_Constructors/2_Factories_A09_t01: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A09_t02: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A09_t03: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A09_t04: Crash # Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A14_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/07_Classes/7_Static_Methods_A01_t02: RuntimeError # Please triage this failure.
+Language/10_Generics/09_Generics_A04_t03: Crash # Instance of 'TypeOperator': type check unimplemented for S.
+Language/10_Generics/10_Generics_A05_t01: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+Language/10_Generics/10_Generics_A05_t03: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A01_t01: Crash # unsupported element kind: notNil:field
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A01_t02: Crash # unsupported element kind: false2:field
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A05_t01: Crash # unsupported element kind: o2:field
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A07_t01: Crash # unsupported element kind: n7:field
+Language/12_Expressions/01_Constants_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A04_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A07_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A08_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A09_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A10_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A10_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A11_t04: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A12_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A12_t04: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A12_t05: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A12_t06: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A13_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A13_t05: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A14_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/01_Constants_A14_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t12: Crash # (foo): handleStaticFunctionGet: function(foo)
+Language/12_Expressions/05_Strings/1_String_Interpolation_A02_t02: Crash # (id): handleStaticFunctionGet: function(id)
+Language/12_Expressions/06_Lists_A08_t04: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+Language/12_Expressions/07_Maps_A07_t04: Crash # Instance of 'TypeOperator': type check unimplemented for Map<String, int>.
+Language/12_Expressions/07_Maps_A09_t01: Crash # (func): handleStaticFunctionGet: function(func)
+Language/12_Expressions/10_Expressions_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t07: Crash # (test): handleStaticFunctionGet: function(test)
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t08: Crash # (test): handleStaticFunctionGet: function(test)
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t09: Crash # (test): handleStaticFunctionGet: function(test)
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t12: RuntimeError # Please triage this failure.
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t13: RuntimeError # Please triage this failure.
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t14: Crash # Please triage this failure.
+Language/12_Expressions/12_Instance_Creation/1_New_A09_t02: Crash # Instance of 'TypeOperator': type check unimplemented for A.
+Language/12_Expressions/12_Instance_Creation/1_New_A09_t11: Crash # Instance of 'TypeOperator': type check unimplemented for A.
+Language/12_Expressions/13_Property_Extraction_A03_t01: RuntimeError # Please triage this failure.
+Language/12_Expressions/13_Property_Extraction_A03_t02: RuntimeError # Please triage this failure.
 Language/12_Expressions/13_Property_Extraction_A03_t03: RuntimeError # Please triage this failure.
-Language/12_Expressions/13_Property_Extraction_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/13_Property_Extraction_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/13_Property_Extraction_A04_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/13_Spawning_an_Isolate_A01_t01: Crash # unsupported element kind: _completer:field
-Language/12_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A01_t01: Crash # Please triage this failure.
-Language/12_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A03_t01: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t01: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t03: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t04: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A06_t01: Crash # Please triage this failure.
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A06_t04: Crash # Please triage this failure.
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A06_t05: Crash # (func(1,2,3,4)): handleStaticFunctionIncompatibleInvoke
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A06_t08: Crash # (C.func(1,2,3,4)): handleStaticFunctionIncompatibleInvoke
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A07_t01: Crash # (func(1,2,p:3)): handleStaticFunctionIncompatibleInvoke
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A07_t04: Crash # (C.func(1,2,p:3)): handleStaticFunctionIncompatibleInvoke
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t01: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t02: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t03: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t04: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t03: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t05: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t07: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: Crash # (try {undeclared();}on NoSuchMethodError catch (ok){}): "on T" catch block
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t15: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t16: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t17: Crash # unable to build cps definition of generative_constructor(C#)
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t02: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/14_Function_Invocation_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/14_Function_Invocation_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/14_Function_Invocation_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/14_Function_Invocation_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A03_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A03_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t05: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t07: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A06_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A06_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A07_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A08_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t19: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A02_t02: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A02_t01: Crash # (C): Error expression `C` unhandled.
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t03: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t07: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A05_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A06_t02: Crash #  "on T" catch block
+Language/12_Expressions/13_Spawning_an_Isolate_A01_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+Language/12_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A01_t01: Crash # (f): handleStaticFunctionGet: function(f)
+Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t05: Crash # unsupported element kind: f:field
+Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t13: Crash # unsupported element kind: test4:field
+Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t14: Crash # unsupported element kind: test4:field
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t04: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t07: Crash # (func): handleStaticFunctionGet: function(func)
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: Crash # (func): handleStaticFunctionGet: function(C#func)
 Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A01_t01: RuntimeError # Please triage this failure.
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t02: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t02: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t03: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t01: Crash # (throw new TestException()): Unhandled node
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t02: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Crash # (throw new TestException()): Unhandled node
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Crash # (throw new TestException()): Unhandled node
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t02: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Crash #  "on T" catch block
-Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Crash #  "on T" catch block
-Language/12_Expressions/16_Getter_Lookup_A02_t05: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/16_Getter_Lookup_A02_t06: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/17_Getter_Invocation_A01_t01: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A01_t02: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A05_t01: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A05_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A05_t04: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A05_t05: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A06_t01: Crash # (try {v;Expect.fail("TestException is expected");}on TestException catch (e){}): "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A06_t02: Crash #  "on T" catch block
-Language/12_Expressions/17_Getter_Invocation_A06_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A07_t02: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/17_Getter_Invocation_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A08_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/17_Getter_Invocation_A08_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t01: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t02: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t03: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t04: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t05: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t06: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t07: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t08: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t09: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t10: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A01_t11: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A02_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A03_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment/1_Compound_Assignment_A04_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A01_t05: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A03_t01: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A04_t03: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A04_t04: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A04_t05: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A04_t06: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A04_t07: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A04_t08: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A04_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A05_t02: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A05_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A05_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A05_t05: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A06_t01: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A07_t01: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A08_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A08_t03: Crash #  "on T" catch block
-Language/12_Expressions/18_Assignment_A08_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A08_t05: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/18_Assignment_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A09_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/18_Assignment_A09_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/19_Conditional_A02_t01: Crash #  "on T" catch block
-Language/12_Expressions/19_Conditional_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/19_Conditional_A02_t03: Crash #  "on T" catch block
-Language/12_Expressions/19_Conditional_A02_t04: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/19_Conditional_A03_t01: Crash #  "on T" catch block
-Language/12_Expressions/19_Conditional_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/19_Conditional_A04_t03: Crash #  "on T" catch block
-Language/12_Expressions/19_Conditional_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/19_Conditional_A06_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/19_Conditional_A06_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/19_Conditional_A06_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t01: Crash #  "on T" catch block
-Language/12_Expressions/20_Logical_Boolean_Expressions_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/20_Logical_Boolean_Expressions_A03_t01: Crash #  "on T" catch block
-Language/12_Expressions/20_Logical_Boolean_Expressions_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t17: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t18: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t19: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t20: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t21: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t27: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t28: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t29: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t30: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t31: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t32: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/21_Bitwise_Expressions_A01_t01: Crash # Please triage this failure.
-Language/12_Expressions/21_Bitwise_Expressions_A01_t14: Crash # (try {fun|1;}on NoSuchMethodError catch (e){}): "on T" catch block
-Language/12_Expressions/21_Bitwise_Expressions_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/21_Bitwise_Expressions_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/21_Bitwise_Expressions_A02_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/21_Bitwise_Expressions_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/21_Bitwise_Expressions_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/21_Bitwise_Expressions_A03_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/22_Equality_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/22_Equality_A02_t03: Crash # Please triage this failure.
-Language/12_Expressions/22_Equality_A02_t04: Crash #  "on T" catch block
-Language/12_Expressions/22_Equality_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/22_Equality_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/22_Equality_A03_t03: Crash #  "on T" catch block
-Language/12_Expressions/22_Equality_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/22_Equality_A10_t02: Crash #  "on T" catch block
-Language/12_Expressions/23_Relational_Expressions_A01_t01: Crash # Please triage this failure.
-Language/12_Expressions/23_Relational_Expressions_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/23_Relational_Expressions_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/24_Shift_A01_t01: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/24_Shift_A01_t15: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/24_Shift_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/24_Shift_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/25_Additive_Expressions_A01_t01: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/25_Additive_Expressions_A01_t17: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/25_Additive_Expressions_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/25_Additive_Expressions_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/25_Additive_Expressions_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/26_Multiplicative_Expressions_A01_t01: Crash # Please triage this failure.
-Language/12_Expressions/26_Multiplicative_Expressions_A01_t27: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/26_Multiplicative_Expressions_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/26_Multiplicative_Expressions_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/27_Unary_Expressions_A01_t01: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/27_Unary_Expressions_A01_t02: Crash # ( --A): Error expression ` --A` unhandled.
-Language/12_Expressions/27_Unary_Expressions_A01_t04: Crash # ( --f): Error expression ` --f` unhandled.
-Language/12_Expressions/27_Unary_Expressions_A01_t05: Crash # ( ++T): Error expression ` ++T` unhandled.
-Language/12_Expressions/27_Unary_Expressions_A01_t10: Crash # Please triage this failure.
-Language/12_Expressions/27_Unary_Expressions_A01_t27: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/27_Unary_Expressions_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/27_Unary_Expressions_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/27_Unary_Expressions_A02_t03: Crash #  "on T" catch block
-Language/12_Expressions/27_Unary_Expressions_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/27_Unary_Expressions_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/27_Unary_Expressions_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/27_Unary_Expressions_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/27_Unary_Expressions_A07_t01: Crash # (try {~a;Expect.fail("Operator ~ was not called");}on TestException catch (e){}): "on T" catch block
-Language/12_Expressions/27_Unary_Expressions_A08_t01: Crash #  "on T" catch block
-Language/12_Expressions/28_Postfix_Expressions_A01_t01: Crash # Please triage this failure.
-Language/12_Expressions/28_Postfix_Expressions_A01_t02: Crash # (f++ ): Error expression `f++ ` unhandled.
-Language/12_Expressions/28_Postfix_Expressions_A01_t03: Crash # (A++ ): Error expression `A++ ` unhandled.
-Language/12_Expressions/28_Postfix_Expressions_A01_t05: Crash # (T++ ): Error expression `T++ ` unhandled.
-Language/12_Expressions/28_Postfix_Expressions_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A05_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A07_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A08_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/28_Postfix_Expressions_A09_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/29_Assignable_Expressions_A01_t02: Crash # cannot compile methods that need interceptor calling convention.
-Language/12_Expressions/29_Assignable_Expressions_A01_t06: Crash # (A=1): Error expression `A=1` unhandled.
-Language/12_Expressions/29_Assignable_Expressions_A01_t08: Crash # (T=null): Error expression `T=null` unhandled.
-Language/12_Expressions/29_Assignable_Expressions_A01_t09: Crash # (f=null): Error expression `f=null` unhandled.
-Language/12_Expressions/29_Assignable_Expressions_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/29_Assignable_Expressions_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/29_Assignable_Expressions_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/29_Assignable_Expressions_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/29_Assignable_Expressions_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A01_t08: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A04_t02: Crash #  "on T" catch block
-Language/12_Expressions/30_Identifier_Reference_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A08_t02: Crash #  "on T" catch block
-Language/12_Expressions/30_Identifier_Reference_A08_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A08_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A09_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: RuntimeError # Please triage this failure.
+Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t04: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/12_Expressions/17_Getter_Invocation_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+Language/12_Expressions/17_Getter_Invocation_A07_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+Language/12_Expressions/18_Assignment_A05_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+Language/12_Expressions/18_Assignment_A05_t05: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t01: RuntimeError # Please triage this failure.
+Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t09: Crash # unsupported element kind: x:field
+Language/12_Expressions/20_Logical_Boolean_Expressions_A06_t10: Crash # unsupported element kind: x:field
+Language/12_Expressions/22_Equality_A03_t01: RuntimeError # Please triage this failure.
+Language/12_Expressions/30_Identifier_Reference_A08_t01: Crash # unsupported element kind: tlFinalTyped:field
+Language/12_Expressions/30_Identifier_Reference_A08_t02: Crash # unsupported element kind: tlFinalTyped:field
+Language/12_Expressions/30_Identifier_Reference_A08_t03: Crash # unsupported element kind: tlFinalTyped:field
 Language/12_Expressions/30_Identifier_Reference_A09_t03: Crash # (i=0): For-loop variable captured in loop header
-Language/12_Expressions/30_Identifier_Reference_A09_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A10_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A10_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A10_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A11_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A13_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A14_t01: Crash #  "on T" catch block
-Language/12_Expressions/30_Identifier_Reference_A14_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A14_t03: Crash #  "on T" catch block
-Language/12_Expressions/30_Identifier_Reference_A14_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A15_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A15_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A15_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/30_Identifier_Reference_A15_t04: Crash #  "on T" catch block
+Language/12_Expressions/30_Identifier_Reference_A09_t04: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/12_Expressions/30_Identifier_Reference_A10_t01: Crash # (staticFunc): handleStaticFunctionGet: function(A#staticFunc)
+Language/12_Expressions/30_Identifier_Reference_A10_t02: Crash # (lib.f): handleStaticFunctionGet: function(f)
+Language/12_Expressions/30_Identifier_Reference_A13_t01: Crash # unsupported element kind: x4:field
 Language/12_Expressions/30_Identifier_Reference_A15_t05: Crash # unsupported element kind: x:field
 Language/12_Expressions/30_Identifier_Reference_A15_t06: Crash # unsupported element kind: x:field
-Language/12_Expressions/30_Identifier_Reference_A15_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A15_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/30_Identifier_Reference_A16_t04: Crash # handleStaticFunctionGet: function(libraryFunc)
-Language/12_Expressions/32_Type_Test_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/32_Type_Test_A02_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A02_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A02_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A02_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A02_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A02_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A02_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/12_Expressions/32_Type_Test_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A07_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/32_Type_Test_A07_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A01_t04: Crash # (try {int as num;Expect.fail("CastError expected");}on CastError catch (e){}): "on T" catch block
-Language/12_Expressions/33_Type_Cast_A02_t01: Crash # (try {c=1 as I;Expect.fail("CastError expected");}on CastError catch (e){}): "on T" catch block
-Language/12_Expressions/33_Type_Cast_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A02_t03: Crash # (try {1 as func;Expect.fail("CastError expected");}on CastError catch (ok){}): "on T" catch block
-Language/12_Expressions/33_Type_Cast_A02_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A02_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A02_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A02_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A02_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A02_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/33_Type_Cast_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/Expressions_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/12_Expressions/Expressions_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/01_Blocks_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/01_Blocks_A01_t02: Crash # (throw 1): Unhandled node
-Language/13_Statements/01_Blocks_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/01_Blocks_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/02_Expression_Statements_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/02_Expression_Statements_A01_t06: Crash # cannot compile methods that need interceptor calling convention.
-Language/13_Statements/03_Variable_Declaration_A01_t01: Crash #  "on T" catch block
-Language/13_Statements/03_Variable_Declaration_A01_t02: Crash #  "on T" catch block
-Language/13_Statements/03_Variable_Declaration_A01_t05: Crash #  "on T" catch block
-Language/13_Statements/03_Variable_Declaration_A01_t06: Crash #  "on T" catch block
-Language/13_Statements/03_Variable_Declaration_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/03_Variable_Declaration_A01_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/03_Variable_Declaration_A01_t15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/03_Variable_Declaration_A01_t18: Crash #  "on T" catch block
-Language/13_Statements/03_Variable_Declaration_A01_t19: Crash #  "on T" catch block
-Language/13_Statements/03_Variable_Declaration_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/03_Variable_Declaration_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/03_Variable_Declaration_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/04_Local_Function_Declaration_A02_t01: Crash #  "on T" catch block
-Language/13_Statements/04_Local_Function_Declaration_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/04_Local_Function_Declaration_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/04_Local_Function_Declaration_A04_t01: Crash # (func()): Error expression `func()` unhandled.
-Language/13_Statements/04_Local_Function_Declaration_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/04_Local_Function_Declaration_A04_t03: Crash # (oddHandler(x)): Error expression `oddHandler(x)` unhandled.
-Language/13_Statements/05_If_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A01_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A01_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A01_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/05_If_A02_t02: Crash # (try {if(i){i="hello";}}on AssertionError catch (e){err=true;}): "on T" catch block
-Language/13_Statements/05_If_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A03_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/05_If_A05_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/05_If_A06_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A06_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/05_If_A06_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/1_For_Loop_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/1_For_Loop_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/1_For_Loop_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/1_For_Loop_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/06_For/1_For_Loop_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/1_For_Loop_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/1_For_Loop_A01_t07: Crash #  "on T" catch block
-Language/13_Statements/06_For/1_For_Loop_A01_t08: Crash #  "on T" catch block
-Language/13_Statements/06_For/1_For_Loop_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/1_For_Loop_A01_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/2_For_in_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For/2_For_in_A01_t02: Crash #  "on T" catch block
-Language/13_Statements/06_For/2_For_in_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/06_For/2_For_in_A01_t04: Crash #  "on T" catch block
-Language/13_Statements/06_For/2_For_in_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/06_For_A01_t07: Crash #  "on T" catch block
-Language/13_Statements/07_While_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/07_While_A02_t02: Crash # (try {while(null){break;}fail=true;}on AssertionError catch (ok){}): "on T" catch block
-Language/13_Statements/07_While_A02_t03: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/07_While_A03_t01: Crash #  "on T" catch block
-Language/13_Statements/07_While_A03_t02: Crash #  "on T" catch block
-Language/13_Statements/07_While_A03_t03: Crash #  "on T" catch block
-Language/13_Statements/08_Do_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/08_Do_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/08_Do_A02_t03: Crash #  "on T" catch block
-Language/13_Statements/08_Do_A02_t04: Crash # (throw new ExpectException(message)): Unhandled node
+Language/12_Expressions/30_Identifier_Reference_A16_t04: Crash # (libraryFunc): handleStaticFunctionGet: function(libraryFunc)
+Language/12_Expressions/32_Type_Test_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/12_Expressions/32_Type_Test_A02_t03: Crash # Instance of 'TypeOperator': type check unimplemented for Undeclared.
+Language/12_Expressions/32_Type_Test_A02_t04: Crash # Instance of 'TypeOperator': type check unimplemented for G<int, bool>.
+Language/12_Expressions/32_Type_Test_A02_t05: Crash # Instance of 'TypeOperator': type check unimplemented for G<int, bool>.
+Language/12_Expressions/32_Type_Test_A02_t06: Crash # Instance of 'TypeOperator': type check unimplemented for G<int, bool>.
+Language/12_Expressions/32_Type_Test_A02_t07: Crash # Instance of 'TypeOperator': type check unimplemented for G<Unknown>.
+Language/12_Expressions/32_Type_Test_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/12_Expressions/32_Type_Test_A07_t01: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/12_Expressions/32_Type_Test_A07_t02: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/12_Expressions/33_Type_Cast_A01_t01: Crash # (f): handleStaticFunctionGet: function(f)
+Language/12_Expressions/33_Type_Cast_A01_t04: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t02: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t03: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t04: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t05: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t06: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t07: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t08: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A02_t09: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A04_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/33_Type_Cast_A04_t02: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/Expressions_A01_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/12_Expressions/Expressions_A01_t02: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/13_Statements/02_Expression_Statements_A01_t06: Crash # (C.s): handleStaticFunctionGet: function(C#s)
+Language/13_Statements/03_Variable_Declaration_A01_t14: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/13_Statements/03_Variable_Declaration_A01_t15: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/13_Statements/06_For_A01_t07: Crash # Instance of 'InvokeStatic': cannot generate error handling code for call to unresolved target
 Language/13_Statements/09_Switch_A01_t01: Crash # (switch (1){case 0:case 1:}): Unhandled node
 Language/13_Statements/09_Switch_A01_t02: Crash # (switch (1){l1:l2:l3:case (1):}): Unhandled node
-Language/13_Statements/09_Switch_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/09_Switch_A01_t05: Crash # (switchTest(0)): Error expression `switchTest(0)` unhandled.
-Language/13_Statements/09_Switch_A01_t06: Crash # (switchTest(1)): Error expression `switchTest(1)` unhandled.
-Language/13_Statements/09_Switch_A01_t09: Crash # (switchTest(0)): Error expression `switchTest(0)` unhandled.
-Language/13_Statements/09_Switch_A01_t10: Crash # (switchTest(0)): Error expression `switchTest(0)` unhandled.
-Language/13_Statements/09_Switch_A01_t12: Crash # (switchTest(0)): Error expression `switchTest(0)` unhandled.
-Language/13_Statements/09_Switch_A01_t14: Crash # (switchTest(0)): Error expression `switchTest(0)` unhandled.
-Language/13_Statements/09_Switch_A01_t18: Crash # (foo(1)): Error expression `foo(1)` unhandled.
+Language/13_Statements/09_Switch_A01_t03: Crash #  Unhandled node
 Language/13_Statements/09_Switch_A01_t19: Crash # (switch (1){case 0:break;label:print("hello");}): Unhandled node
 Language/13_Statements/09_Switch_A02_t03: Crash # (switch (null){case null:}): Unhandled node
-Language/13_Statements/09_Switch_A05_t01: Crash #  "on T" catch block
-Language/13_Statements/09_Switch_A05_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/09_Switch_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/09_Switch_A06_t02: Crash #  "on T" catch block
-Language/13_Statements/09_Switch_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/09_Switch_A07_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/09_Switch_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/09_Switch_A08_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/09_Switch_A09_t01: Crash #  "on T" catch block
+Language/13_Statements/09_Switch_A05_t01: Crash # (switch ('abc'){case 1:break;}): Unhandled node
+Language/13_Statements/09_Switch_A05_t02: Crash # (switch (p){default:return 1;}): Unhandled node
+Language/13_Statements/09_Switch_A06_t01: Crash # (switch (p){case 1:var x=2;return x;case 2:var x=4;return x;}): Unhandled node
+Language/13_Statements/09_Switch_A06_t02: Crash # (switch (2){case 1:var x=2;break;case 2:x++ ;}): Unhandled node
+Language/13_Statements/09_Switch_A07_t01: Crash #  Unhandled node
+Language/13_Statements/09_Switch_A07_t02: Crash #  Unhandled node
+Language/13_Statements/09_Switch_A08_t01: Crash #  Unhandled node
+Language/13_Statements/09_Switch_A08_t02: Crash # (switch (value){case 1:case 2:result=1;case 3:case 4:result=2;break;case 5:case 6:}): Unhandled node
+Language/13_Statements/09_Switch_A09_t01: Crash # (switch (false){case 0:case 1:}): Unhandled node
 Language/13_Statements/09_Switch_A10_t01: Crash # (switch (1){case 0:false;case 1:true;break;}): Unhandled node
 Language/13_Statements/09_Switch_A10_t02: Crash # (switch (1){case 0:false;break;case 1:true;}): Unhandled node
 Language/13_Statements/09_Switch_A10_t03: Crash # (switch (1){case 0:false;break;default:true;}): Unhandled node
-Language/13_Statements/10_Rethrow_A01_t01: Crash #  "on T" catch block
-Language/13_Statements/10_Rethrow_A01_t02: Crash # (try {f2();}on String catch (bad){Expect.fail("wrong handler");}): "on T" catch block
-Language/13_Statements/10_Rethrow_A01_t03: Crash #  "on T" catch block
-Language/13_Statements/10_Rethrow_A01_t04: Crash #  "on T" catch block
-Language/13_Statements/10_Rethrow_A01_t05: Crash #  "on T" catch block
-Language/13_Statements/11_Return_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/11_Return_A02_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Return_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/11_Return_A02_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/11_Return_A03_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Return_A03_t02: Crash #  "on T" catch block
-Language/13_Statements/11_Return_A04_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Return_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/11_Return_A07_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/13_Statements/11_Try_A01_t01: Crash # (try {throw "";}on int catch (ok){}catch (ok){}finally {}): "on T" catch block
-Language/13_Statements/11_Try_A01_t14: Crash # (throw "foo"): Unhandled node
-Language/13_Statements/11_Try_A02_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A02_t03: Crash # (try {throw new T2();}on T1 catch (p1,st){success=true;}): "on T" catch block
-Language/13_Statements/11_Try_A02_t04: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A03_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A03_t02: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A03_t03: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A03_t04: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A04_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A04_t03: Crash # (try {throw new T2();}on T1 catch (p1){success=true;}): "on T" catch block
-Language/13_Statements/11_Try_A04_t04: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A05_t01: Crash # (throw new T2()): Unhandled node
-Language/13_Statements/11_Try_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/11_Try_A07_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A07_t02: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A07_t03: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A08_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A09_t01: Crash #  not exactly one catch block
-Language/13_Statements/11_Try_A10_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A11_t01: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A11_t02: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A11_t03: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A11_t04: Crash #  "on T" catch block
-Language/13_Statements/11_Try_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+Language/13_Statements/11_Return_A02_t02: Crash # (try {return 1;}finally {flag=true;}): try/finally
+Language/13_Statements/11_Return_A02_t03: Crash # (try {return 1;}finally {return 2;}): try/finally
+Language/13_Statements/11_Try_A01_t01: Crash # (try {throw "";}on int catch (ok){}catch (ok){}finally {}): try/finally
+Language/13_Statements/11_Try_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Unavailable.
+Language/13_Statements/11_Try_A03_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Unavailable.
+Language/13_Statements/11_Try_A03_t03: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+Language/13_Statements/11_Try_A03_t04: Crash # unsupported element kind: error:field
+Language/13_Statements/11_Try_A07_t02: Crash # (try {throw ex;}on int catch (i){}on bool catch (b){}finally {isFinallyExecuted=true;}): try/finally
+Language/13_Statements/11_Try_A08_t01: Crash #  try/finally
+Language/13_Statements/11_Try_A09_t01: Crash #  try/finally
+Language/13_Statements/11_Try_A10_t01: Crash #  try/finally
+Language/13_Statements/11_Try_A11_t01: Crash #  try/finally
+Language/13_Statements/11_Try_A11_t02: Crash #  try/finally
+Language/13_Statements/11_Try_A11_t03: Crash # (try {throw 42;}finally {return true;}): try/finally
+Language/13_Statements/11_Try_A11_t04: Crash # (try {throw 42;}finally {throw true;}): try/finally
+Language/13_Statements/11_Try_A12_t01: Crash #  try/finally
 Language/13_Statements/12_Labels_A01_t01: Crash # (switch (1){K:case 2:L:case 1:break;case 0:M:default:N:var x=0;}): Unhandled node
 Language/13_Statements/12_Labels_A03_t04: Crash # (switch (i){L:case 0:flag=true;break;case 2:continue L;}): Unhandled node
 Language/13_Statements/12_Labels_A03_t06: Crash # (switch (1){Label:case 1:break;default:break;}): Unhandled node
-Language/13_Statements/13_Break_A03_t01: Crash #  not exactly one catch block
-Language/13_Statements/13_Break_A03_t02: Crash #  "on T" catch block
-Language/13_Statements/13_Break_A03_t03: Crash #  not exactly one catch block
-Language/13_Statements/13_Break_A03_t04: Crash #  not exactly one catch block
+Language/13_Statements/13_Break_A03_t01: Crash #  try/finally
+Language/13_Statements/13_Break_A03_t02: Crash #  try/finally
+Language/13_Statements/13_Break_A03_t03: Crash #  try/finally
+Language/13_Statements/13_Break_A03_t04: Crash #  try/finally
 Language/13_Statements/13_Break_A03_t05: Crash # (switch (1){case 0:break;case 1:break L;}): Unhandled node
-Language/13_Statements/13_Break_A03_t06: Crash #  not exactly one catch block
+Language/13_Statements/13_Break_A03_t06: Crash #  try/finally
 Language/13_Statements/13_Break_A03_t07: Crash #  Unhandled node
-Language/13_Statements/13_Break_A03_t08: Crash # (try {try {break;}finally {order.add(2);}}finally {order.add(1);}): not exactly one catch block
-Language/13_Statements/13_Break_A03_t09: Crash #  not exactly one catch block
+Language/13_Statements/13_Break_A03_t08: Crash # (try {try {break;}finally {order.add(2);}}finally {order.add(1);}): try/finally
+Language/13_Statements/13_Break_A03_t09: Crash #  try/finally
 Language/13_Statements/14_Continue_A02_t12: Crash # (switch (2){L:case 1:flag=true;break;case 2:continue L;}): Unhandled node
 Language/13_Statements/14_Continue_A02_t13: Crash # (switch (2){case 2:continue L;L:case 1:flag=true;}): Unhandled node
-Language/13_Statements/14_Continue_A03_t01: Crash #  not exactly one catch block
-Language/13_Statements/14_Continue_A03_t02: Crash #  not exactly one catch block
-Language/13_Statements/14_Continue_A03_t03: Crash #  not exactly one catch block
-Language/13_Statements/14_Continue_A03_t04: Crash #  not exactly one catch block
+Language/13_Statements/14_Continue_A03_t01: Crash #  try/finally
+Language/13_Statements/14_Continue_A03_t02: Crash #  try/finally
+Language/13_Statements/14_Continue_A03_t03: Crash #  try/finally
+Language/13_Statements/14_Continue_A03_t04: Crash #  try/finally
 Language/13_Statements/14_Continue_A03_t05: Crash #  Unhandled node
-Language/13_Statements/14_Continue_A03_t06: Crash #  "on T" catch block
-Language/13_Statements/14_Continue_A03_t07: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A02_t01: Crash # (try {var i=1;String s=i;return false;}on TypeError catch (e){return true;}): "on T" catch block
-Language/13_Statements/15_Assert_A03_t01: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A03_t02: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A03_t03: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A03_t04: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A03_t05: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A03_t06: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A03_t08: Crash # (throw new ExpectException(message)): Unhandled node
-Language/13_Statements/15_Assert_A03_t09: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A04_t02: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A04_t03: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A04_t04: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A04_t05: Crash #  "on T" catch block
-Language/13_Statements/15_Assert_A04_t06: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t01: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t03: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A01_t09: Crash # (someVar=0): Error expression `someVar=0` unhandled.
-Language/14_Libraries_and_Scripts/1_Imports_A01_t18: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A01_t19: Crash # (someVar=0): Error expression `someVar=0` unhandled.
-Language/14_Libraries_and_Scripts/1_Imports_A01_t32: Crash # (someVar=0): Error expression `someVar=0` unhandled.
-Language/14_Libraries_and_Scripts/1_Imports_A01_t39: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A01_t40: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A01_t41: Crash # (someVar=0): Error expression `someVar=0` unhandled.
-Language/14_Libraries_and_Scripts/1_Imports_A01_t43: Crash # (someVar=0): Error expression `someVar=0` unhandled.
-Language/14_Libraries_and_Scripts/1_Imports_A01_t49: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A01_t51: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A01_t52: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t03: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t04: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t05: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t06: Crash # cannot compile methods that need interceptor calling convention.
-Language/14_Libraries_and_Scripts/1_Imports_A02_t09: Crash # (throw new ExpectException(message)): Unhandled node
-Language/14_Libraries_and_Scripts/1_Imports_A02_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t13: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t16: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t17: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t18: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t19: Crash # (try {new F();Expect.fail("runtime error expected");}on Error catch (ok){}): "on T" catch block
-Language/14_Libraries_and_Scripts/1_Imports_A02_t20: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t21: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t22: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t23: Crash # (prefix.foo): Error expression `prefix.foo` unhandled.
-Language/14_Libraries_and_Scripts/1_Imports_A02_t24: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t25: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t26: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t27: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A02_t28: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t22: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t24: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t25: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t31: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t44: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t45: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t64: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A03_t65: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A07_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A07_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/1_Imports_A07_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t01: Crash # (foo): Error expression `foo` unhandled.
-Language/14_Libraries_and_Scripts/2_Exports_A01_t02: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/2_Exports_A01_t03: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/2_Exports_A01_t04: Crash # (foo): Error expression `foo` unhandled.
-Language/14_Libraries_and_Scripts/2_Exports_A01_t05: Crash # (foo): Error expression `foo` unhandled.
-Language/14_Libraries_and_Scripts/2_Exports_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A01_t17: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A03_t01: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/2_Exports_A03_t02: Crash #  "on T" catch block
-Language/14_Libraries_and_Scripts/2_Exports_A04_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/2_Exports_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/3_Parts_A02_t03: Crash # Please triage this failure.
-Language/14_Libraries_and_Scripts/3_Parts_A02_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/3_Parts_A03_t01: Crash # Please triage this failure.
-Language/14_Libraries_and_Scripts/3_Parts_A03_t03: Crash # (foo): Error expression `foo` unhandled.
-Language/14_Libraries_and_Scripts/3_Parts_A03_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/3_Parts_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/4_Scripts_A01_t17: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/14_Libraries_and_Scripts/4_Scripts_A02_t16: Crash # (g()): Error expression `g()` unhandled.
-Language/15_Types/1_Static_Types_A03_t01: Crash #  "on T" catch block
-Language/15_Types/1_Static_Types_A03_t02: Crash #  "on T" catch block
-Language/15_Types/1_Static_Types_A03_t03: Crash #  "on T" catch block
-Language/15_Types/1_Static_Types_A03_t04: Crash #  "on T" catch block
-Language/15_Types/2_Dynamic_Type_System_A01_t01: Crash #  "on T" catch block
-Language/15_Types/2_Dynamic_Type_System_A01_t02: Crash #  "on T" catch block
-Language/15_Types/3_Type_Declarations/1_Typedef_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A02_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A07_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A07_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/3_Type_Declarations/1_Typedef_A07_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A05_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A05_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A05_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A07_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A08_t03: Crash #  "on T" catch block
-Language/15_Types/4_Interface_Types_A08_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A08_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A08_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A10_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A11_t02: Timeout # Please triage this failure.
-Language/15_Types/4_Interface_Types_A11_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A11_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t18: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/4_Interface_Types_A12_t19: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A01_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A02_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A03_t13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/15_Types/5_Function_Types_A05_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A05_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A05_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A05_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/5_Function_Types_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/6_Type_dynamic_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/6_Type_dynamic_A03_t01: Crash #  "on T" catch block
-Language/15_Types/6_Type_dynamic_A04_t01: Crash #  "on T" catch block
-Language/15_Types/6_Type_dynamic_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Language/15_Types/7_Type_Void_A01_t15: Crash # (foo(1)): Error expression `foo(1)` unhandled.
-Language/15_Types/7_Type_Void_A04_t02: Crash #  "on T" catch block
-Language/15_Types/7_Type_Void_A04_t03: Crash #  "on T" catch block
-Language/15_Types/7_Type_Void_A04_t04: Crash #  "on T" catch block
-Language/15_Types/7_Type_Void_A04_t05: Crash #  "on T" catch block
-Language/15_Types/8_Parameterized_Types_A03_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/15_Types/8_Parameterized_Types_A03_t07: Crash #  "on T" catch block
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A01_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A02_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A03_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A04_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A05_t08: Crash # (f()): Error expression `f()` unhandled.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A06_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A07_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A08_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A09_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A10_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A11_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A12_t08: Crash # (f()): Error expression `f()` unhandled.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A13_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A14_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A15_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A16_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A17_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A18_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A19_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A20_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A21_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A22_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A23_t08: Crash # (f()): Error expression `f()` unhandled.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A24_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A25_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A26_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A27_t08: Crash # (f()): Error expression `f()` unhandled.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A28_t08: Crash # (f()): Error expression `f()` unhandled.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A29_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A30_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A31_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A32_t08: Crash # Please triage this failure.
-Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-Language/16_Reference/1_Lexical_Rules/2_Comments_A01_t06: Crash # (try {foo(1,0);Expect.fail("");}on Exception catch (e){}): "on T" catch block
-Language/16_Reference/1_Lexical_Rules/2_Comments_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A01_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A01_t11: Crash # (try {foo(1,0);Expect.fail("");}on Exception catch (e){}): "on T" catch block
-Language/16_Reference/1_Lexical_Rules/2_Comments_A02_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A02_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A02_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A03_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A03_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules/2_Comments_A04_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/1_Lexical_Rules_A01_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/2_Operator_Precedence_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/2_Operator_Precedence_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/2_Operator_Precedence_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/2_Operator_Precedence_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/2_Operator_Precedence_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Language/16_Reference/2_Operator_Precedence_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/alignment/parse-align-items_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/alignment/parse-align-self_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/alignment/parse-justify-self_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/animation/request-animation-frame-callback-id_t01: Crash # (throw new ExpectException(message)): Unhandled node
+Language/13_Statements/14_Continue_A03_t06: Crash #  try/finally
+Language/13_Statements/14_Continue_A03_t07: Crash #  try/finally
+Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t02: Crash # Instance of 'TypeOperator': type check unimplemented for _td.
+Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A06_t01: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A01_t39: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A01_t40: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A01_t49: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t01: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t02: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t09: Crash # (bar): handleStaticFunctionGet: function(bar)
+Language/14_Libraries_and_Scripts/1_Imports_A02_t11: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t14: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t16: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t17: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t18: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t20: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t21: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t22: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t26: Crash # Instance of 'TypeOperator': type check unimplemented for prefix.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t27: Crash # Instance of 'TypeOperator': type check unimplemented for bar.
+Language/14_Libraries_and_Scripts/1_Imports_A02_t28: Crash # Instance of 'TypeOperator': type check unimplemented for bar.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t02: Crash # Instance of 'TypeOperator': type check unimplemented for foo.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t04: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t05: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t22: Crash # Instance of 'TypeOperator': type check unimplemented for foo.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t24: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t25: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t31: Crash # Instance of 'TypeOperator': type check unimplemented for foo.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t44: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t45: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t64: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A03_t65: Crash # Instance of 'TypeOperator': type casts not implemented.
+Language/14_Libraries_and_Scripts/1_Imports_A06_t01: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/1_Imports_A06_t02: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/2_Exports_A03_t01: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/2_Exports_A03_t02: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/2_Exports_A04_t03: Crash # Instance of 'TypeOperator': type check unimplemented for foo.
+Language/14_Libraries_and_Scripts/2_Exports_A06_t02: Crash # Instance of 'TypeOperator': type check unimplemented for foo.
+Language/14_Libraries_and_Scripts/2_Exports_A08_t01: RuntimeError # Please triage this failure.
+Language/14_Libraries_and_Scripts/3_Parts_A02_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/14_Libraries_and_Scripts/3_Parts_A02_t04: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/14_Libraries_and_Scripts/3_Parts_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/14_Libraries_and_Scripts/3_Parts_A03_t11: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/14_Libraries_and_Scripts/3_Parts_A04_t01: RuntimeError # Please triage this failure.
+Language/15_Types/1_Static_Types_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for UnknownType.
+Language/15_Types/3_Type_Declarations/1_Typedef_A01_t03: Crash # Instance of 'TypeOperator': type check unimplemented for f.
+Language/15_Types/3_Type_Declarations/1_Typedef_A02_t01: Crash # (f): handleStaticFunctionGet: function(f)
+Language/15_Types/3_Type_Declarations/1_Typedef_A02_t02: Crash # (f): handleStaticFunctionGet: function(f)
+Language/15_Types/3_Type_Declarations/1_Typedef_A02_t03: Crash # (f): handleStaticFunctionGet: function(f)
+Language/15_Types/3_Type_Declarations/1_Typedef_A03_t01: Crash # (ifunc): handleStaticFunctionGet: function(ifunc)
+Language/15_Types/3_Type_Declarations/1_Typedef_A04_t01: Crash # Instance of 'TypeOperator': type check unimplemented for f1.
+Language/15_Types/3_Type_Declarations/1_Typedef_A04_t02: Crash # Instance of 'TypeOperator': type check unimplemented for f1.
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t05: Crash # Instance of 'TypeOperator': type check unimplemented for f.
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t06: Crash # Instance of 'TypeOperator': type check unimplemented for f.
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t07: Crash # Instance of 'TypeOperator': type check unimplemented for f.
+Language/15_Types/4_Interface_Types_A05_t02: Crash # Instance of 'TypeOperator': type check unimplemented for A.
+Language/15_Types/4_Interface_Types_A05_t03: Crash # Instance of 'TypeOperator': type check unimplemented for A.
+Language/15_Types/4_Interface_Types_A05_t04: Crash # Please triage this failure.
+Language/15_Types/4_Interface_Types_A06_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List<double>.
+Language/15_Types/4_Interface_Types_A07_t01: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/4_Interface_Types_A07_t02: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+Language/15_Types/4_Interface_Types_A08_t01: Crash # Instance of 'TypeOperator': type check unimplemented for S.
+Language/15_Types/4_Interface_Types_A08_t03: Crash # (f01): handleStaticFunctionGet: function(f01)
+Language/15_Types/4_Interface_Types_A08_t04: Crash # Instance of 'TypeOperator': type check unimplemented for G.
+Language/15_Types/4_Interface_Types_A08_t05: Crash # Instance of 'TypeOperator': type check unimplemented for G.
+Language/15_Types/4_Interface_Types_A08_t06: Crash # Instance of 'TypeOperator': type check unimplemented for IManyArgs<int, G, G, G, double>.
+Language/15_Types/4_Interface_Types_A10_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/15_Types/4_Interface_Types_A10_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Checker_Object<Object>.
+Language/15_Types/4_Interface_Types_A10_t03: Crash # Instance of 'TypeOperator': type check unimplemented for Checker_I<I>.
+Language/15_Types/4_Interface_Types_A10_t04: Crash # Please triage this failure.
+Language/15_Types/4_Interface_Types_A10_t06: Crash # Please triage this failure.
+Language/15_Types/4_Interface_Types_A10_t07: Crash # Please triage this failure.
+Language/15_Types/4_Interface_Types_A10_t08: Crash # Please triage this failure.
+Language/15_Types/4_Interface_Types_A10_t09: Crash # Please triage this failure.
+Language/15_Types/4_Interface_Types_A11_t03: Crash # Instance of 'TypeOperator': type check unimplemented for I.
+Language/15_Types/4_Interface_Types_A11_t04: Crash # Instance of 'TypeOperator': type check unimplemented for S<int>.
+Language/15_Types/4_Interface_Types_A12_t09: Crash # Instance of 'TypeOperator': type check unimplemented for List<String>.
+Language/15_Types/4_Interface_Types_A12_t10: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/15_Types/4_Interface_Types_A12_t12: Crash # Instance of 'TypeOperator': type check unimplemented for G<B, B, B, B>.
+Language/15_Types/4_Interface_Types_A12_t13: Crash # Instance of 'TypeOperator': type check unimplemented for G<C>.
+Language/15_Types/4_Interface_Types_A12_t14: Crash # Instance of 'TypeOperator': type check unimplemented for A<double>.
+Language/15_Types/4_Interface_Types_A12_t16: Crash # Instance of 'TypeOperator': type check unimplemented for A<int, int, double, int>.
+Language/15_Types/4_Interface_Types_A12_t18: Crash # Instance of 'TypeOperator': type check unimplemented for F1.
+Language/15_Types/4_Interface_Types_A12_t19: Crash # (f): handleStaticFunctionGet: function(f)
+Language/15_Types/5_Function_Types_A01_t01: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A01_t03: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A01_t04: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A01_t05: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A01_t06: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A01_t07: Crash # Instance of 'TypeOperator': type check unimplemented for f.
+Language/15_Types/5_Function_Types_A01_t08: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A01_t09: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A01_t11: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A02_t02: Crash # Instance of 'TypeOperator': type check unimplemented for classesFunc.
+Language/15_Types/5_Function_Types_A02_t03: Crash # Instance of 'TypeOperator': type check unimplemented for classesFunc.
+Language/15_Types/5_Function_Types_A02_t04: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A02_t05: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A02_t06: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A02_t07: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A02_t08: Crash # Instance of 'TypeOperator': type check unimplemented for t2.
+Language/15_Types/5_Function_Types_A02_t09: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A02_t10: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A02_t11: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A02_t12: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A03_t02: Crash # Instance of 'TypeOperator': type check unimplemented for classesFunc.
+Language/15_Types/5_Function_Types_A03_t03: Crash # Instance of 'TypeOperator': type check unimplemented for classesFunc.
+Language/15_Types/5_Function_Types_A03_t04: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A03_t06: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A03_t07: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A03_t08: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A03_t09: Crash # Instance of 'TypeOperator': type check unimplemented for t1.
+Language/15_Types/5_Function_Types_A03_t10: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A03_t11: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A03_t12: Crash # Instance of 'TypeOperator': type check unimplemented for classesFunc.
+Language/15_Types/5_Function_Types_A03_t13: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A05_t01: Crash # (f1): handleStaticFunctionGet: function(f1)
+Language/15_Types/5_Function_Types_A05_t02: Crash # (C.f1s): handleStaticFunctionGet: function(C#f1s)
+Language/15_Types/5_Function_Types_A05_t05: Crash # (tlf1): handleStaticFunctionGet: function(tlf1)
+Language/15_Types/5_Function_Types_A06_t01: Crash # Instance of 'TypeOperator': type check unimplemented for f.
+Language/15_Types/6_Type_dynamic_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for S.
+Language/15_Types/7_Type_Void_A04_t05: Crash # (f): handleStaticFunctionGet: function(f)
+Language/15_Types/8_Parameterized_Types_A03_t06: Crash # Instance of 'TypeOperator': type check unimplemented for T1.
+Language/16_Reference/1_Lexical_Rules/2_Comments_A02_t10: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/16_Reference/1_Lexical_Rules_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/16_Reference/1_Lexical_Rules_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/16_Reference/1_Lexical_Rules_A01_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/16_Reference/1_Lexical_Rules_A01_t04: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/16_Reference/1_Lexical_Rules_A01_t05: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/16_Reference/1_Lexical_Rules_A01_t06: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Language/16_Reference/1_Lexical_Rules_A01_t10: Crash # unsupported element kind: characters:field
 LayoutTests/fast/animation/request-animation-frame-cancel2_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/animation/request-animation-frame-cancel_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/animation/request-animation-frame-missing-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/animation/request-animation-frame-prefix_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/animation/request-animation-frame-timestamps_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/animation/request-animation-frame-timestamps_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/animation/request-animation-frame-within-callback_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/backgrounds/001_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/backgrounds/animated-gif-as-background_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/backgrounds/background-position-parsing-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/backgrounds/background-repeat-computed-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/backgrounds/composite-highlight-is-invalid_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/backgrounds/mask-box-image-width_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/backgrounds/multiple-backgrounds-assert_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/backgrounds/multiple-backgrounds-computed-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/backgrounds/multiple-backgrounds-initial-values_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/borders/border-color-visited_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/borders/border-image-width-negative_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/borders/border-radius-child_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/borders/border-width-percent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/box-shadow/box-shadow-parsing-invalid_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/box-sizing/css-table-with-box-sizing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/box-sizing/table-cell_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/2d.fillText.gradient_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/backgrounds/multiple-backgrounds-computed-style_t01: Crash #  Unhandled node
+LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: Crash # (math.max): handleStaticFunctionGet: function(max)
 LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.gradient_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.veryLarge_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.verySmall_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/alpha_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-2d-imageData-create-nonfinite_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-alphaImageData-behavior_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-arc-360-winding_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-arc-connecting-line_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas_arc_largeangles_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: Crash # (new Path()): Error expression `new Path()` unhandled.
-LayoutTests/fast/canvas/canvas-arc-zero-lineto_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/DrawImageSinglePixelStretch_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-before-css_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-bezier-same-endpoint_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-blend-image_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-clipping_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-color-over-gradient_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/canvas-blending-clipping_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
+LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
+LayoutTests/fast/canvas/canvas-blending-color-over-gradient_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
 LayoutTests/fast/canvas/canvas-blending-color-over-image_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-blending-color-over-pattern_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-blending-fill-style_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/canvas-blending-fill-style_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
+LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
+LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
+LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
 LayoutTests/fast/canvas/canvas-blending-gradient-over-image_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: Crash # unsupported element kind: _completer:field
@@ -10799,386 +9794,119 @@
 LayoutTests/fast/canvas/canvas-blending-pattern-over-gradient_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-blending-pattern-over-pattern_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-blending-shadow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-text_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blending-transforms_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-blend-solid_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-clearRect_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-clip-rule_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-closePath-single-point_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-color-clamping_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/canvas-blending-shadow_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
+LayoutTests/fast/canvas/canvas-blending-text_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
+LayoutTests/fast/canvas/canvas-blending-transforms_t01: Crash # unsupported element kind: nonSeparateBlendModes:field
 LayoutTests/fast/canvas/canvas-composite-alpha_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-composite-canvas_t01: Crash # unsupported element kind: compositeTypes:field
 LayoutTests/fast/canvas/canvas-composite-image_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-composite-stroke-alpha_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-copyPixels_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/canvas/canvas-css-crazy_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-currentColor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-currentTransform_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-drawImage-incomplete_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-drawImage-scaled-copy-to-self_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-ellipse-360-winding_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-ellipse-negative-radius_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-ellipse_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-ellipse-zero-lineto_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-empty-image-pattern_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-fillRect_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-fillRect-zeroSizeGradient_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-fill-rule_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-fillStyle-no-quirks-parsing_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/canvas/canvas-fillText-invalid-maxWidth_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-fillText-zeroSizeGradient_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-fill-zeroSizeGradient_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-font-consistency_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-font-ex-units-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-getContext-invalid_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-getImageData-negative-source_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-getImageData-rounding_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-getImageData_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-gradient-without-path_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-imageSmoothingEnabled_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-invalid-fillstyle_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-invalid-strokestyle_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-large-dimensions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-lineDash-input-sequence_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-lineDash-invalid_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-lineDash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-lineWidth-intact-after-strokeRect_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-lineWidth_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-longlived-context_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/canvas-lineDash-invalid_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/canvas-lineDash_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/canvas-longlived-context_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/canvas/canvas-modify-emptyPath_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-pattern-behaviour_t01: Crash # Please triage this failure.
-LayoutTests/fast/canvas/canvas-pattern-modify_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-pattern-transform_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-putImageData_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-quadratic-same-endpoint_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-radial-gradient-spreadMethod_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-resetTransform_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/canvas-modify-emptyPath_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/canvas-pattern-behaviour_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/canvas-pattern-modify_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/canvas-putImageData_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/canvas-resize-after-paint_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-save-restore_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-save-restore-with-path_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/canvas-save-restore-with-path_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/canvas-scale-drawImage-shadow_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/canvas-scale-fillPath-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-scale-fillRect-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-scale-strokePath-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-set-properties-with-non-invertible-ctm_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-setTransform_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-skia-excessive-size_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-state-intact-after-putImageData_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-stroke-empty-fill_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokePath-alpha-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokePath-cap-join_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokePath-shadow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokeRect_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokeRect-zeroSizeGradient_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokeText-invalid-maxWidth_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokeText-strokes-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-strokeText-zeroSizeGradient_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-stroke-zeroSizeGradient_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-style-intact-after-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-to-canvas_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-toDataURL-case-insensitive-mimetype_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-transforms-fillRect-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-transparency-and-composite_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-with-illegal-args_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/canvas-with-incorrect-args_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/draw-custom-focus-ring_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/DrawImageSinglePixelStretch_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/canvas/canvas-strokePath-alpha-shadow_t01: Crash # (shouldBe): handleStaticFunctionGet: function(shouldBe)
+LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: Crash # (shouldBe): handleStaticFunctionGet: function(shouldBe)
+LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: Crash # (shouldBe): handleStaticFunctionGet: function(shouldBe)
+LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: Crash # (shouldBe): handleStaticFunctionGet: function(shouldBe)
+LayoutTests/fast/canvas/canvas_arc_largeangles_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/drawImage-with-broken-image_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/drawImage-with-negative-source-destination_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/canvas/drawImage-with-valid-image_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/fallback-content_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/fillText-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/gradient-with-clip_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/linearGradient-infinite-values_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/pattern-with-transform_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/pointInPath_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/radialGradient-infinite-values_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/rgba-parsing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/set-colors_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/gradient-with-clip_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/pattern-with-transform_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/text-globalAlpha_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/toDataURL-noData_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/translate-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/buffer-data-array-buffer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/translate-text_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: Crash # (wtu.shouldGenerateGLError): handleStaticFunctionGet: function(shouldGenerateGLError)
 LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/canvas/webgl/canvas-resize-crash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/canvas/webgl/canvas-test_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: Crash # unsupported element kind: error:field
 LayoutTests/fast/canvas/webgl/compressed-tex-image_t01: Crash # Please triage this failure.
-LayoutTests/fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias-t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias-t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/context-lost_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Crash # (wtu.shouldGenerateGLError): handleStaticFunctionGet: function(shouldGenerateGLError)
+LayoutTests/fast/canvas/webgl/context-lost_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/webgl/css-webkit-canvas-repaint_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/canvas/webgl/error-reporting_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: Crash # unsupported element kind: error:field
 LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: Crash # unsupported element kind: requestAnimFrame:field
 LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: Crash # Please triage this failure.
-LayoutTests/fast/canvas/webgl/framebuffer-test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/get-active-test_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-enable-enum-test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/gl-enum-tests_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-get-calls_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-getshadersource_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-getstring_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-pixelstorei_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/glsl-conformance_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List<String>.
+LayoutTests/fast/canvas/webgl/gl-enable-enum-test_t01: Crash # unsupported element kind: desktopGL:field
+LayoutTests/fast/canvas/webgl/gl-enum-tests_t01: Crash # unsupported element kind: desktopGL:field
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/canvas/webgl/gl-teximage_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/canvas/webgl/gl-uniformmatrix4fv_t01: Crash #  Unhandled node
-LayoutTests/fast/canvas/webgl/gl-vertexattribpointer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-vertex-attrib_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/gl-vertex-attrib-zero-issues_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/index-validation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/index-validation-verifies-too-many-indices_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/invalid-passed-params_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/is-object_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/null-uniform-location_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/point-size_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/webgl/gl-vertex-attrib-zero-issues_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/index-validation_t01: Crash # (Math.max): handleStaticFunctionGet: function(max)
+LayoutTests/fast/canvas/webgl/invalid-passed-params_t01: Crash # unsupported element kind: desktopGL:field
+LayoutTests/fast/canvas/webgl/is-object_t01: Crash # (wtu.shouldGenerateGLError): handleStaticFunctionGet: function(shouldGenerateGLError)
+LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: Crash # (wtu.shouldGenerateGLError): handleStaticFunctionGet: function(shouldGenerateGLError)
+LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: Crash # (wtu.shouldGenerateGLError): handleStaticFunctionGet: function(shouldGenerateGLError)
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: Crash # unsupported element kind: error:field
 LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/program-test_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: Crash #  Unhandled node
 LayoutTests/fast/canvas/webgl/read-pixels-test_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/shader-precision-format_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: Crash #  Unhandled node
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/texImageTest_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/tex-input-validation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d-bad-args_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/texture-active-bind_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: Crash # unsupported element kind: error:field
 LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/canvas/webgl/texture-complete_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/texture-npot_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/triangle_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/canvas/webgl/uniform-location_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/uninitialized-test_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/webgl/texture-npot_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: Crash # unsupported element kind: error:field
 LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: Crash # (throw ("*** Error: unknown script element"+scriptId)): Unhandled node
-LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/webgl-depth-texture_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/canvas/webgl/webgl-exceptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: Crash # unsupported element kind: error:field
+LayoutTests/fast/canvas/webgl/webgl-depth-texture_t01: Crash # unsupported element kind: error:field
 LayoutTests/fast/canvas/webgl/webgl-large-texture_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/webgl-specific_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/canvas/webgl/webgl-specific_t01: Crash # unsupported element kind: error:field
 LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/canvas/winding-enumeration_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/cookies/local-file-can-set-cookies_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-color_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/add-remove-stylesheets-at-once-minimal-recalc-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/appearance-caps-lock-indicator_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/aspect-ratio-inheritance_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/aspect-ratio-parsing-tests_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/attribute-selector-begin-dynamic-no-elementstyle_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/attribute-selector-recursive-update-on-setAttribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/auto-min-size_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/background-clip-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/background-currentcolor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/background-position-inherit_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/background-position-serialize_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/background-serialize_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/border-image-null-image-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/border-image-style-length_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/border-radius-property-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/border-shorthand-initialize-longhands_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/border-spacing-without-vertical-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/border-start-end_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/border-width-large_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/box-sizing-backwards-compat-prefix_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/css/button-height_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/cached-sheet-restore-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/case-sensitive-attr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/checked-pseudo-selector_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/child-selector-implicit-tbody_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/collapsed-whitespace-reattach-in-style-recalc_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/comment-before-charset-external_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/comment-before-charset_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/computed-offset-with-zoom_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/content/content-none_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content/content-normal_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content/content-quotes-01_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content/content-quotes-02_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content/content-quotes-03_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content/content-quotes-04_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content/content-quotes-05_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content/content-quotes-06_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/content-language-case-insensitivity_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/content-language-dynamically-added_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/content-language-dynamically-removed_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/content-language-mapped-to-webkit-locale_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/content-language-multiple_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/content-language-no-content_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/counters/asterisk-counter-update-after-layout-crash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/counters/complex-before_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/counters/counter-before-selector-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/counters/counter-cssText_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/counters/counter-reparent-table-children-crash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/counters/counter-reset-subtree-insert-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/counters/counter-ruby-text-cleared_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/counters/counter-traverse-object-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/crash-on-incomplete-not_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/css3-nth-space_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/css3-nth-tokens-script_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/css3-nth-tokens-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/css-escaped-identifier_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/css/css-keyframe-style-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/css-keyframe-unexpected-end_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/cssom-remove-shorthand-property_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/css-properties-case-insensitive_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/css-selector-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/cssText-cache_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/csstext-of-content-string_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/cssText-shorthand_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/cursor-parsing-image-set_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/cursor-parsing-quirks_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/cursor-parsing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/device-aspect-ratio_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/dfn-default-font-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/display-inline-block-scrollbar_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/css/div_plus_nav_bug47971_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/draggable-region-parser_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/duplicate-property-in-rule-important_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/duplicate-property-in-rule_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/dynamic-class-backdrop-pseudo_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/dynamic-class-pseudo-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/dynamic-pseudo-class_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/dynamic-style-attribute-query_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/empty-display-none_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/emptyStyleTag_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/ex-unit-with-no-x-height_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/first-letter-inline-flow-split-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/first-letter-inline-flow-split-table-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/first-letter-nested_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/first-line-parent-style-different_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/css/focus-display-block-inline_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/font-face-cache-bug_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/font-face-descending-unicode-range_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/font-face-font-family-descriptor_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/font-face-insert-link_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/fontface-properties_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/fontfaceset-download-error_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/fontfaceset-events_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/fontfaceset-loadingdone_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/font-face-svg-decoding-error_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/font-face-unicode-range-load_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/font-face-unicode-range-monospace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/font-face-used-after-retired_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/font-family-builtins_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/font-family-initial-shorthand_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/font-property-priority_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/font-shorthand-from-longhands_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/font-shorthand-mix-inherit_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css-generated-content/block-after_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css-generated-content/bug91547_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-generated-content/details-before-after-content_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/css-generated-content/float-first-letter-siblings-convert-to-inline_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-generated-content/hit-test-generated-content_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css-generated-content/inline-splitting-with-after-float-crash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css-generated-content/pseudo-animation-display_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/css-generated-content/pseudo-animation-display_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-generated-content/pseudo-animation_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-generated-content/pseudo-transition_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css-generated-content/summary-before-after-content_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-display-none_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-negative-top_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-page-break-inside_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-properties_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-select-overflow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/computed-style-with-zoom_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/counterIncrement-without-counter_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-box_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-image-slice_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-radius-shorthand_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-style-shorthand_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-column-rule_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-height_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-length-unit_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-outline-offset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getComputedStyle/getComputedStyle-zIndex-auto_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getPropertyValue-border_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getPropertyValue-clip_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getPropertyValue-column-rule_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getPropertyValue-columns_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getPropertyValue-webkit-margin-collapse_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/getPropertyValue-webkit-text-stroke_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css-grid-layout/auto-content-resolution-rows_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: Crash # unsupported element kind: _completer:field
@@ -11188,7 +9916,7 @@
 LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
+LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-grid-layout/grid-container-change-explicit-grid-recompute-child_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-grid-layout/grid-element-bad-cast-addchild_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: Crash # unsupported element kind: _completer:field
@@ -11202,12 +9930,12 @@
 LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-item-bad-resolution-double-span_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
+LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css-grid-layout/grid-item-display_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-lr_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/grid-strict-ordering-crash_t01: Crash # unsupported element kind: _completer:field
@@ -11217,26 +9945,13 @@
 LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/minmax-fixed-logical-width-only_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/percent-resolution-grid-item_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/html-attr-case-sensitivity_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/id-or-class-before-stylesheet-strict_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/id-or-class-before-stylesheet_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/image-set-parsing-invalid_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/image-set-setting_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/implicit-attach-marking_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/important-js-override_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/inherited-properties-explicit_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/inherited-properties-rare-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/inherit-initial-shorthand-values_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/insertRule-font-face_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/insertRule-media_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css-intrinsic-dimensions/css-tables_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-intrinsic-dimensions/height-property-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-absolutes_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: Crash # unsupported element kind: _completer:field
@@ -11244,460 +9959,115 @@
 LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-intrinsic-dimensions/multicol_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css-intrinsic-dimensions/tables_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css-intrinsic-dimensions/width-property-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/invalidation/clears-invalidation-whole-tree_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/detach-reattach-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/detach-reattach_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/dynamic-selector-list-pseudo_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/invalidation-set-with-adjacent-combinators_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/no-invalidation-set-local-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/shadow-host-toggle_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/style-update-with-added-stylesheet_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-attribute-style-invalidation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-class-any-pseudo_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-class-host-pseudo_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-class-id_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-class-shadow-combinator_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-class-style-invalidation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-class-type-selectors_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/targeted-id-style-invalidation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalid-hex-color_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalid-not-with-pseudo-element_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/invalid-not-with-simple-selector-sequence_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/invalid-predefined-color_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/invalid-rule-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/large-number-round-trip_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/last-child-innerhtml_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/legacy-opacity-styles_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/css/attribute-selector-begin-dynamic-no-elementstyle_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/cached-sheet-restore-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/comment-before-charset-external_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/comment-before-charset_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-none_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-normal_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-quotes-01_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-quotes-02_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-quotes-03_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-quotes-04_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-quotes-05_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/content/content-quotes-06_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/counters/asterisk-counter-update-after-layout-crash_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/css/counters/complex-before_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/css/counters/counter-before-selector-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/counters/counter-reparent-table-children-crash_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/css/counters/counter-reset-subtree-insert-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/counters/counter-ruby-text-cleared_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/counters/counter-traverse-object-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/crash-on-incomplete-not_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/css-keyframe-style-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/device-aspect-ratio_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/first-letter-inline-flow-split-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/first-letter-inline-flow-split-table-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/first-line-parent-style-different_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/focus-display-block-inline_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/font-face-cache-bug_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/font-face-insert-link_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/font-face-svg-decoding-error_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/font-face-unicode-range-load_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/font-face-used-after-retired_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/fontfaceset-download-error_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/fontfaceset-events_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/fontfaceset-loadingdone_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/implicit-attach-marking_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/link-alternate-stylesheet-1_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/link-alternate-stylesheet-2_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/link-alternate-stylesheet-3_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/link-alternate-stylesheet-4_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/link-alternate-stylesheet-5_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/link-disabled-attr-parser_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/list-item-text-align_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/many-spaces-before-charset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/margin-start-end_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/MarqueeLayoutTest_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/max-device-aspect-ratio_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/max-height-and-max-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/max-width-none_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/media-rule-dyn_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/media-rule-no-whitespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/media-rule-screenDepthPerComponent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/min-device-aspect-ratio_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/min-max-width_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/misplaced-charset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/named-colors_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/css/max-device-aspect-ratio_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/css/media-rule-dyn_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/min-device-aspect-ratio_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/nested-at-rules_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/nested-rule-parent-sheet_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/next-sibling-changed_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/nth-child-implied-step_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/nth-child-no-mutations_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/nth-child-n_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/nth-child-odd-case-insensitive_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/nth-child-unary-prefix_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/outline-currentcolor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/outline-hidden-illegal-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/overflow-property_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/padding-no-renderer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/padding-start-end_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parse-color-int-or-percent-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-css-allowed-string-characters_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-css-comment_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-css-escapes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-css-nonascii_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-css-nth-child_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-css-surrogate-pairs_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-expr-error-recovery_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/parsing-font-variant-ligatures_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-not-after-supports_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-object-fit_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-object-position_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-text-rendering_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/parsing-unexpected-eof_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/css/parsing-webkit-font-smoothing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/css/parsing-css-allowed-string-characters_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/parsing-css-comment_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/parsing-css-escapes_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/parsing-css-nonascii_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/parsing-css-nth-child_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/parsing-css-surrogate-pairs_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/css/percent-min-width-img-src-change_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/percent-width-img-src-change_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/position-absolute-float_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/positioned-in-relative-position-inline-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/positioned-overflow-scroll_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/css/pseudo-any_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-default-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-default-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-default-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-default-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-empty-display-none_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-empty-dynamic-empty_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/pseudo-escaped-parenthesis_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-in-range-invalid-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-in-range_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-invalid-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-invalid-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-invalid-novalidate-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-not_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-out-of-range_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-required-optional-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-required-optional-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-required-optional-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-required-optional-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-required-optional-005_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/pseudo-required-optional-006_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-required-optional-unapplied_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/css/positioned-in-relative-position-inline-crash_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+LayoutTests/fast/css/pseudo-out-of-range_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/pseudo-valid-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-valid-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-valid-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-valid-007_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-valid-dynamic_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/pseudo-valid-unapplied_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/readonly-pseudoclass-opera-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/readonly-pseudoclass-opera-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/readwrite-contenteditable-recalc_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/recalc-direct-adjacent-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/recalc-optgroup-inherit_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/relative-positioned-block-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/relative-position-replaced-in-table-display-crash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/remove-attribute-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/remove-class-name_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/css/pseudo-valid-dynamic_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/css/relative-position-replaced-in-table-display-crash_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+LayoutTests/fast/css/relative-positioned-block-crash_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
 LayoutTests/fast/css/remove-fixed-resizer-crash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/rem-units-body_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/resize-value-compared_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/rgba-custom-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/selector-text-escape_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css/shadow-current-color_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/shadow-dom-scope_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/css/sheet-collection-link_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/sheet-title_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/shorthand-priority_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/shorthand-setProperty-important_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/shorthands-four-values_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/sibling-selectors-dynamic_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/sibling-selectors_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css/space-before-charset-external_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/css/space-before-charset_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/sticky/parsing-position-sticky_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css/sticky/remove-inline-sticky-crash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/sticky/remove-sticky-crash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/sticky/sticky-table-col-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/string-quote-binary_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css/style-element-process-crash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/style-scoped/style-scoped-in-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/style-scoped/style-scoped-nested_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css/style-scoped/style-scoped-shadow-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/style-sharing-grand-parent-invalidate_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/style-sharing-inline-stylesheet_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/style-sharing-type-and-readonly_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/css/stylesheet-enable-first-alternate-link_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-link_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/stylesheet-enable-second-alternate-link_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/stylesheet-parentStyleSheet_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/css/test-setting-canvas-color_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/text-align-initial_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/text-align-webkit-match-parent-parse_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/text-align-webkit-match-parent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/transform-origin-parsing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/unicode-bidi-computed-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/url-with-multi-byte-unicode-escape_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/vertical-align-length-copy-bug_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/visibility-collapse-form-buttons_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/visited-link-hang_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/css/webkit-color-adjust_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/css/visited-link-hang_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/css/webkit-keyframes-crash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/css/webkit-marquee-speed-unit-in-quirksmode_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/zoom-in-length-round-trip_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/css/zoom-property-parsing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/52776_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/allowed-children_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/anchor-origin_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/anchor-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/anchor-toString_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/anchor-without-content_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Attr/access-after-element-destruction_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Attr/change-id-via-attr-node-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Attr/direction-attribute-set-and-cleared_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/attribute-namespaces-get-set_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/background-shorthand-csstext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/blur-contenteditable_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/boolean-attribute-reflection_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/capturing-event-listeners_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/characterdata-api-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/click-method-on-html-element_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/clone-contents-0-end-offset_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/clone-node-default-argument_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Comment/comment-constructor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/comment-dom-node_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/comment-not-documentElement_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Comment/remove_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/computed-style-set-property_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/containerNode_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createDocument_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createDocumentType2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createDocumentType-ownerDocument_t01: Crash # (throw "${reason}: ${e}"): Unhandled node
-LayoutTests/fast/dom/createDocumentType_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/createElementNS-empty-namespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createElementNS-namespace-errors_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createElementNS_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createElement_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createElement-with-column_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/createElement-with-column_xml_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-cached-import-rule_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/css-delete-doc_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/css-inline-style-important_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-innerHTML_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-insert-import-rule_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/css-insert-import-rule-twice_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/css-mediarule-deleteRule-update_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/css-mediarule-functions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-mediarule-insertRule-update_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/css-mediarule-parentRule_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-rule-functions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-selectorText_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-set-property-exception_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-shorthand-common-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/css-shortHands_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/cssTarget-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/custom/attribute-changed-callback_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/custom/constructor-calls-created-synchronously_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/created-callback_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/custom/document-register-basic_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/document-register-namespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/document-register-on-create-callback_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/custom/document-register-svg-extends_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/custom/document-register-type-extensions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/element-names_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/custom/element-type_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/element-upgrade_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/invalid-type-extension-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/type-extensions_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/custom/unresolved-pseudoclass_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/dataset_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/dataset-xhtml_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/basic_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-strict-mode-wtih-checkbox_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-user-select-none_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-first-letter-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Document/CaretRangeFromPoint/replace-element_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Document/clone-node_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Document/createElement-invalid-names_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Document/createElement-valid-names_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Document/document-title-get_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/DocumentFragment/document-fragment-constructor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/document-importNode-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/document-set-title-mutations_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/document-set-title-no-child-on-empty_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/document-set-title-no-reuse_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/document-stylesheets-empty-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Document/title-property-creates-title-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Document/title-property-set-multiple-times_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Document/title-with-multiple-children_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/document-width-height-force-layout_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/DOMException/dispatch-event-exception_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/DOMException/prototype-object_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/DOMException/XPathException_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: Crash # (impl): Error expression `impl` unhandled.
-LayoutTests/fast/dom/DOMImplementation/createDocumentType-err_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/DOMImplementation/createHTMLDocument-title_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/dom-instanceof_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/dom-method-document-change_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/dom-parse-serialize-display_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/dom-parse-serialize_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/dom-parse-serialize-xmldecl_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/domtimestamp-is-number_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/duplicate-ids-document-order_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/duplicate-ids_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/attribute-uppercase_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/class-name_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/client-rect-list-argument_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/dimension-properties-unrendered_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/fixed-position-offset-parent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/elementFromPoint-scaled-scrolled_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/getBoundingClientRect-getClientRects-relative-to-viewport_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/getClientRects_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/hostname-host_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/id-in-frame_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/id-in-getelement01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/id-in-insert-hr_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/id-in-map_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/id-in-param_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/node-list-identity_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/offsetTop-table-cell_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/remove_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/scrollWidth_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/setAttribute-case-insensitivity_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Element/setAttributeNS-namespace-err_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Element/setAttribute-with-colon_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/empty-hash-and-search_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/focus-contenteditable_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/fragment-activation-focuses-target_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/gc-image-element-2_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/gc-image-element_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/getElementById-consistency2_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/getElementById-consistency3_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/getElementById-consistency4_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/getElementById-consistency5_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/getElementById-consistency_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/getelementbyname-invalidation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/005_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/006_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/007_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/008_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/009_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/010_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/011_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/012_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/013_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/014_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/015_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getElementsByClassName/dumpNodeList_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/getelementsbyname-invalidation-cache_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/get-href-attribute-port_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLAnchorElement/remove-href-from-focused-anchor_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-rebase_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-whitespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLBaseElement/multiple-base-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLButtonElement/change-type_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLButtonElement/value/getset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/htmlcollection-length-after-item_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/html-collections-named-getter-mandatory-arg_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/dialog-autofocus_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/dialog-enabled_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLDialogElement/inert-does-not-match-disabled-selector_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unfocusable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/non-anchored-dialog-positioning_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/show-modal-focusing-steps_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLDialogElement/synthetic-click-inert_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
 LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLDocument/activeElement_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDocument/clone-node_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLDocument/title-get_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLDocument/title-set_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-before-text-node_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-child-node_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text-form-control_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-children_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-remove-add-children_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control-child_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-dir-value-change_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-empty-string_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-false-string_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-invalid-string_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-false_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-true_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-missing-parent-ancestor-missing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-missing-parent-false_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-missing-parent-true_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/attr-true-string_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/insertAdjacentHTML-errors_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/set-false_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/set-inherit-parent-false_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/set-inherit-parent-true_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/set-inner-outer-optimization_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/set-invalid-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/set-true_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/set-value-caseinsensitive_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/spellcheck_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLElement/translate_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLFontElement/size-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLFormElement/elements-not-in-document_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLFormElement/move-option-between-documents_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLImageElement/image-loading-gc_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLImageElement/image-natural-width-height_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLImageElement/image-src-absolute-url_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLInputElement/checked-pseudo-selector_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLInputElement/cloned-input-checked-state_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLInputElement/clone-input-checked_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLInputElement/duplicate-element-names_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLInputElement/input-checked-reset_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLInputElement/input-hidden-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLInputElement/input-size-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLInputElement/input-text-reset_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLInputElement/size-as-number_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLInputElement/size-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLLabelElement/click-label_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLLabelElement/focus-label_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLLabelElement/label-control_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-nonexistent_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-existent-and-non-existent-import_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLLinkElement/link-onerror_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLLinkElement/link-onload-before-page-load_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLLinkElement/link-onload_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLLinkElement/link-sheet-out-of-tree_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/dom/HTMLLinkElement/link-onload_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLLinkElement/prefetch-beforeload_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/dom/HTMLLinkElement/prefetch-onerror_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLLinkElement/resolve-url-on-insertion_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLLinkElement/subresource_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLMetaElement/meta-attributes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLMeterElement/set-meter-properties_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLObjectElement/children-changed_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLObjectElement/form/test1_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/dom/HTMLObjectElement/set-type-to-null-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLOutputElement/dom-settable-token-list_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-children-removed_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-reset-event_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-validity_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLProgressElement/indeterminate-progress-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLProgressElement/progress-element-with-style-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLProgressElement/set-progress-properties_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: Crash # unsupported element kind: _completer:field
@@ -11706,80 +10076,18 @@
 LayoutTests/fast/dom/HTMLScriptElement/isURLAttribute_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLScriptElement/script-async-attr_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLScriptElement/script-load-events_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/dom/HTMLScriptElement/script-load-events_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/HTMLScriptElement/script-reexecution_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/HTMLSelectElement/change-multiple-preserve-selection_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLSelectElement/listbox-select-reset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLSelectElement/named-options_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLSelectElement/selected-false_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLSelectElement/selected-index-preserved-when-option-text-changes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLSelectElement/select-element-item-argument_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLSelectElement/select-selectedOptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLStyleElement/insert-parser-generated_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/HTMLStyleElement/programmatically-add-style-with-onerror-handler_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLStyleElement/programmatically-add-style-with-onload-handler_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLStyleElement/style-onerror_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLStyleElement/style-onload2_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLStyleElement/style-onload-before-page-load_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/dom/HTMLStyleElement/style-onload2_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/HTMLStyleElement/style-onload_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLTableElement/cellpadding-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableElement/createCaption_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableElement/early-acid3-65-excerpt_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableElement/early-acid3-66-excerpt_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableElement/exceptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: Crash # Please triage this failure.
-LayoutTests/fast/dom/HTMLTableElement/rows_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableElement/table-with-invalid-border_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableElement/tBodies_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableRowElement/cells_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableRowElement/exceptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableRowElement/insertCell_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTableSectionElement/rows_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/cloneNode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLTemplateElement/contentWrappers_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/custom-element-wrapper-gc_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/cycles_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/inertContents_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/HTMLTemplateElement/innerHTML_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/no-form-association_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/HTMLTemplateElement/ownerDocument_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/HTMLTextAreaElement/reset-textarea_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/icon-size-property_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/icon-url-change_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/icon-url-list_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/id-attribute-with-namespace-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/image-object_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/implementation-api-args_t01: Crash # (throw "${reason}: ${e}"): Unhandled node
-LayoutTests/fast/dom/implementation-createHTMLDocument_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/import-document-fragment_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/importNode-confusing-localName_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/importNodeHTML_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/importNode-null_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/importNode-prefix_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/importNode-unsupported-node-type_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/importNodeXML_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/innerHTML-detached-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/innerHTML-escaping-attribute_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/innerHTML-nbsp_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/inner-text-first-letter_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/inner-text_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/inner-width-height_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/javascript-backslash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/jsDevicePixelRatio_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/left-overflow-in-ltr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/length-attribute-mapping_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/location-hash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/location-missing-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/multiple-ids_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/MutationObserver/added-out-of-order_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/MutationObserver/callback-arguments_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/MutationObserver/clear-transient-without-delivery_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/MutationObserver/create-during-delivery_t01: Crash # unsupported element kind: _completer:field
@@ -11789,2368 +10097,831 @@
 LayoutTests/fast/dom/MutationObserver/disconnect-cancel-pending_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/MutationObserver/document-fragment-insertion_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/MutationObserver/mutate-during-delivery_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/MutationObserver/mutation-record-constructor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/MutationObserver/mutation-record-nullity_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/MutationObserver/observe-attributes_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/MutationObserver/observe-characterdata_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/MutationObserver/observe-childList_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/MutationObserver/observe-exceptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/MutationObserver/observer-wrapper-dropoff_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/MutationObserver/observer-wrapper-dropoff-transient_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/MutationObserver/observe-subtree_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/dom/MutationObserver/observer-wrapper-dropoff-transient_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/dom/MutationObserver/observer-wrapper-dropoff_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/MutationObserver/takeRecords_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/MutationObserver/transient-gc-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/navigatorcontentutils/is-protocol-handler-registered_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/navigatorcontentutils/register-protocol-handler_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/navigatorcontentutils/unregister-protocol-handler_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/navigator-userAgent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/navigator-vendorSub_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/node-childNodes-idempotence_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Node/contains-method_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Node/DOMNodeRemovedEvent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Node/fragment-mutation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Node/initial-values_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/NodeIterator/NodeIterator-basic_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/node-iterator-reference-node-removed_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/node-iterator-with-doctype-root_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/NodeList/childNodes-reset-cache_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/NodeList/childNodes-reverse-iteration_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/NodeList/invalidate-node-lists-when-parsing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/NodeList/nodelist-reachable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/no-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/dom/SelectorAPI/bug-17313_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList-almost-strict_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/StyleSheet/detached-style-2_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/StyleSheet/detached-style_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/StyleSheet/discarded-sheet-owner-null_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: Crash # Please triage this failure.
+LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/css-cached-import-rule_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/css-delete-doc_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/css-insert-import-rule-twice_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/css-insert-import-rule_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/css-mediarule-deleteRule-update_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/css-mediarule-insertRule-update_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/cssTarget-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/custom/attribute-changed-callback_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/custom/constructor-calls-created-synchronously_t01: Crash # unsupported element kind: attributeChangedCallback:field
+LayoutTests/fast/dom/custom/created-callback_t01: Crash # unsupported element kind: createdCallback:field
+LayoutTests/fast/dom/custom/document-register-on-create-callback_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/custom/element-type_t01: Crash # unsupported element kind: createdCallback:field
+LayoutTests/fast/dom/custom/element-upgrade_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/document-set-title-mutations_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/domtimestamp-is-number_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/empty-hash-and-search_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/gc-image-element-2_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/gc-image-element_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/getElementsByClassName/001_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/002_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/003_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/004_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/005_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/006_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/007_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/008_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/009_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/010_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/011_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/012_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/013_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/014_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/015_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/getElementsByClassName/dumpNodeList_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: Crash # unsupported element kind: _asyncCounter:field
+LayoutTests/fast/dom/icon-url-change_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/icon-url-list_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/id-attribute-with-namespace-crash_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/image-object_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/inner-text_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/location-hash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/dom/non-styled-element-id-crash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/noscript-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/object-plugin-hides-properties_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/offset-parent-positioned-and-inline_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/offset-position-writing-modes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/dom/object-plugin-hides-properties_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/dom/onerror-img_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/option-properties_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/partial-layout-block_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
 LayoutTests/fast/dom/partial-layout-non-overlay-scrollbars_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/Range/13000_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/31684_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/bug-19527_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/create-contextual-fragment-script-not-ran_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Range/create-contextual-fragment-script-unmark-already-started_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/create-contextual-fragment_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Range/deleted-range-endpoints_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/getClientRects-character_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Range/insertNode-empty-fragment-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/missing-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/mutation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-clone-contents_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-clone-empty_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Range/range-comparePoint_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-constructor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-detached-exceptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-exceptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-extract-contents_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-insertNode-separate-endContainer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-insertNode-splittext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-isPointInRange_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-modifycontents_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-on-detached-node_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/range-processing-instructions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/select-node-different-document_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/surroundContents-1_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/surroundContents-check-boundary-points_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Range/surroundContents-for-detached-node_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/remove-body-during-body-replacement_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/replace-child-siblings_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/replace-first-child_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Selection/collapseToX-empty-selection_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Selection/getRangeAt_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/SelectorAPI/bug-17313_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/SelectorAPI/caseID-almost-strict_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/SelectorAPI/caseID-strict_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/SelectorAPI/caseID_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/SelectorAPI/caseTag_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/SelectorAPI/caseTagX_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/SelectorAPI/detached-element_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList-almost-strict_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/duplicate-id-scope_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/elementRoot_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/id-fastpath-almost-strict_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/id-fastpath-strict_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/id-fastpath_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/not-supported-namespace-in-selector_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/unknown-pseudo_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/SelectorAPI/viewless-document_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/serialize-attribute_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/setAttributeNS-namespace-errors_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/setAttribute-using-initial-input-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/set-custom-validity-with-too-few-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/set-innerHTML_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/setter-type-enforcement_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/base-in-shadow-tree_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/content-element-api_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/content-element-includer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/content-element-outside-shadow-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/content-pseudo-element-css-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/shadow/content-pseudo-element-dynamic-attribute-change_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/shadow/content-pseudo-element-overridden_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/content-pseudo-element-relative-selector-css-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/content-pseudo-element-with-host-pseudo-class_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/content-reprojection-fallback-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/custom-pseudo-in-selector-api_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/distribution-update-recalcs-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/elementfrompoint_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/elements-in-frameless-document_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/event-path-not-in-document_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/event-path_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/form-in-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/get-distributed-nodes-orphan_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/getelementbyid-in-orphan_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-mutation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/getelementbyid-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/host-context-pseudo-class-css-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/host-pseudo-class-css-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/shadow/event-path_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/dom/shadow/get-distributed-nodes-orphan_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/dom/shadow/insertion-point-list-menu-crash_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/insertion-point-video-crash_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/link-in-shadow-tree_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/nested-reprojection-inconsistent_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/no-renderers-for-light-children_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/shadow/offsetWidth-host-style-change_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/olderShadowRoot_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-optgroup_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-option_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/shadow/reinsert-insertion-point_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/shadow/remove-and-insert-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadow-aware-shadow-root_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/shadow/shadow-disable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadowdom-dynamic-styling_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadow-element-inactive_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadow-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadow-hierarchy-exception_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/dom/shadow/remove-and-insert-style_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/dom/shadow/shadow-root-js-api_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/dom/shadow/shadowhost-keyframes_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadow-root-append_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/shadow/shadowroot-clonenode_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadowroot-host_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/shadow-root-js-api_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/shadow/shadowroot-keyframes_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/shadow/sibling-rules-dynamic-changes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/style-of-distributed-node_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/style-sharing-sibling-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/style-sharing-styles-in-older-shadow-roots_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/suppress-mutation-events-in-shadow-characterdata_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/shadow/title-element-in-shadow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/shared-inline-style-after-node-removal_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/stripNullFromTextNodes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/StyleSheet/css-medialist-item_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/StyleSheet/detached-parent-rule-without-wrapper_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/StyleSheet/detached-style-2_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/StyleSheet/detached-style_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/StyleSheet/discarded-sheet-owner-null_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/subtree-modified-attributes_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/dom/text-api-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Text/next-element-sibling_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/text-node-attach-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/Text/previous-element-sibling_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Text/remove_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Text/replaceWholeText_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Text/text-constructor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/title-content-set-innerText-get_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dom/vertical-scrollbar-in-rtl-doesnt-fire-onscroll_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/dom/vertical-scrollbar-when-dir-change_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/Window/atob-btoa_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/dispatchEvent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Window/invalid-protocol_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/querySelectorAll-with-pseudo-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/replaceable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/window-remove-event-listener_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/window-resize-contents_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/window-resize_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/Window/window-screen-properties_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/dom/Window/window-scroll-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/xhtml-fragment-parsing-exceptions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/xhtml-fragment-whitespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLHttpRequest-constants_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLSerializer-attribute-entities_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLSerializer-attribute-namespaces_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLSerializer-doctype2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLSerializer-doctype_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLSerializer-double-xmlns_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLSerializer-element-ns-no-reemit_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-LayoutTests/fast/dom/xmlserializer-serialize-to-string-exception_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dom/XMLSerializer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/dynamic/continuation-detach-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dynamic/inline-to-block-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/dynamic/insertAdjacentHTML-allowed-parents_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/dynamic/inline-to-block-crash_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/dynamic/jQuery-animation-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/dynamic/style-access-late-stylesheet-load_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/encoding/bom-in-content_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/encoding/css-charset-dom_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/events/add-event-without-document_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/events/clipboard-clearData_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/events/clipboard-dataTransferItemList-remove_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/events/defaultprevented_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/events/dispatch-event-being-dispatched_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/events/dispatch-event-no-document_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/dispatch-synthetic-mouseevent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/events/div-focus_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/events/div-focus_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/events/document-elementFromPoint_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/domnodeinsertedintodocument-dispatched-post-rendering_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/events/event-attributes-after-exception_t01: Crash #  try/finally
-LayoutTests/fast/events/event-creation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/event-fired-after-removal_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/event-fire-order_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/event-listener-list-mutation_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/events/event-listener-moving-documents_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/event-listener-sharing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/event-on-created-document_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/events/event-fire-order_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/events/event-fired-after-removal_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/events/event-on-created-document_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/events/event-on-xhr-document_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/event-trace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/events/fire-scroll-event-element_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/events/fire-scroll-event_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/form-onchange_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/init-message-event_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/input-focus-no-duplicate-events_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/invalid-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/invalid-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/invalid-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/invalid-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/invalid-005_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/keyboardevent-location-constants_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/mutation-during-append-child_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/mutation-during-insert-before_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/mutation-during-replace-child-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/mutation-during-replace-child_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/events/input-focus-no-duplicate-events_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/events/nested-event-remove-node-crash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/events/no-window-load_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/onerror-bubbling_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/onerror-img-after-gc_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/eventsource/eventsource-attribute-listeners_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/eventsource/eventsource-constructor_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/events/onerror-bubbling_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+LayoutTests/fast/events/onerror-img-after-gc_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
 LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/page-visibility-null-view_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/events/programmatic-check-no-change-event_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/events/scoped/editing-commands_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/events/scroll-during-zoom-change_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/events/scroll-event-does-not-bubble_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/events/scroll-event-phase_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/selectstart-on-selectall_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/events/selectstart-prevent-selectall_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/events/stop-immediate-propagation_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/events/stopPropagation-checkbox_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/events/submit-reset-nested-bubble_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/events/submit-reset-nested-bubble_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/events/wheelevent-constructor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/events/window-load-capture_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/events/xhr-onclick-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/exclusions/parsing/parsing-wrap-flow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/files/blob-close-read_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/files/blob-close-revoke_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/files/blob-close_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/files/blob-constructor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/eventsource/eventsource-constructor_t01: Crash # Please triage this failure.
+LayoutTests/fast/exclusions/parsing/parsing-wrap-flow_t01: Crash # (testExclusionSpecifiedProperty): handleStaticFunctionGet: function(testExclusionSpecifiedProperty)
+LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: Crash # (testExclusionSpecifiedProperty): handleStaticFunctionGet: function(testExclusionSpecifiedProperty)
+LayoutTests/fast/files/blob-close-read_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/files/blob-close-revoke_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/files/blob-parts-slice-test_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/files/blob-slice-overflow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/files/blob-slice-test_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/files/create-blob-url-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/files/file-reader-abort-in-last-progress_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/files/file-reader-done-reading-abort_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/files/file-reader-done-reading-abort_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
 LayoutTests/fast/files/file-reader-fffd_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/files/file-reader-immediate-abort_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/files/file-reader-immediate-abort_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
 LayoutTests/fast/files/file-reader-methods-illegal-arguments_t01: Crash #  Unhandled node
 LayoutTests/fast/files/file-reader-readystate_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/files/file-reader-result-twice_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/files/not-enough-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/files/read-blob-as-array-buffer_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/files/revoke-blob-url_t01: Crash # Please triage this failure.
-LayoutTests/fast/files/url-null_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/files/url-required-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/files/workers/inline-worker-via-blob-url_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/files/xhr-response-blob_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/async-operations_t01: Crash # cannot compile methods that need interceptor calling convention.
+LayoutTests/fast/files/xhr-response-blob_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+LayoutTests/fast/filesystem/async-operations_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/directory-entry-to-uri_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/file-after-reload-crash_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/file-entry-to-uri_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/file-from-file-entry_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/file-metadata-after-write_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/filesystem/file-metadata-after-write_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/filesystem/file-writer-abort-continue_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LayoutTests/fast/filesystem/file-writer-abort-depth_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LayoutTests/fast/filesystem/file-writer-abort_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LayoutTests/fast/filesystem/file-writer-empty-blob_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LayoutTests/fast/filesystem/file-writer-events_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LayoutTests/fast/filesystem/file-writer-gc-blob_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
 LayoutTests/fast/filesystem/filesystem-reference_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/filesystem-unserializable_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/filesystem-uri-origin_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/filesystem/file-writer-abort-continue_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/file-writer-abort-depth_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/file-writer-abort_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/file-writer-empty-blob_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/file-writer-events_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/file-writer-gc-blob_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/filesystem/input-access-entries_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/filesystem/op-copy_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-get-entry_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-get-metadata_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-get-parent_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-move_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-read-directory_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-remove_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-restricted-chars_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-restricted-names_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/op-restricted-unicode_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/filesystem/read-directory-many_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/filesystem/read-directory_t01: Crash # cannot compile methods that need interceptor calling convention.
-LayoutTests/fast/filesystem/simple-readonly-file-object_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/filesystem/simple-readonly_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/filesystem/op-copy_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-get-entry_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-get-metadata_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-get-parent_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-move_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-read-directory_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-remove_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-restricted-chars_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-restricted-names_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/op-restricted-unicode_t01: Crash # (fileSystemCallback): handleStaticFunctionGet: function(fileSystemCallback)
+LayoutTests/fast/filesystem/read-directory-many_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/filesystem/read-directory_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/filesystem/simple-readonly-file-object_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/filesystem/simple-readonly_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/simple-required-arguments-getdirectory_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/simple-required-arguments-getfile_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/simple-temporary_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/filesystem/snapshot-file-with-gc_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/flexbox/box-orient-button_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/flexbox/child-flexing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/flexbox/crash-flexbox-no-layout-child_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/flexbox/flexing-overflow-scroll-item_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/flexbox/intrinsic-min-width-applies-with-fixed-width_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
 LayoutTests/fast/flexbox/layoutHorizontalBox-crash_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/flexbox/overhanging-floats-not-removed-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/flexbox/repaint-scrollbar_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/flexbox/vertical-box-form-controls_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/11423_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/8250_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/forms/HTMLOptionElement_selected_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/forms/activate-and-disabled-elements_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/autocomplete_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/autofocus-attribute_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/autofocus-focus-only-once_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/forms/autofocus-input-css-style-change_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/autofocus-opera-004_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/forms/autofocus-opera-005_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/forms/autofocus-opera-007_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/autofocus-opera-008_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/autofocus-readonly-attribute_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/button-baseline-and-collapsing_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/button/button-disabled-blur_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/button-click-DOM_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/checkbox-click-indeterminate_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/checkbox-default-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/forms/button/button-disabled-blur_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/checkbox-onchange_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/checkValidity-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/checkValidity-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/checkValidity-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/checkValidity-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/checkValidity-cancel_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/checkValidity-handler-updates-dom_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/clone-input-with-dirty-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/color/color-setrangetext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/color/input-value-sanitization-color_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/cursor-position_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/dangling-form-element-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/datalist/datalist-child-validation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datalist/datalist-nonoption-child_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datalist/datalist_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datalist/input-list_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/date/date-click-on-label_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date/date-input-type_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/date/date-interactive-validation-required_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date/date-pseudo-classes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date/date-setrangetext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date/input-date-validation-message_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date/input-valueasdate-date_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date/input-valueasnumber-date_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-change-layout-by-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/datetimelocal/datetimelocal-interactive-validation-required_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datetimelocal/datetimelocal-pseudo-classes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datetimelocal/datetimelocal-setrangetext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datetimelocal/input-valueasnumber-datetimelocal_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-change-layout-by-value_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/datetimelocal/ValidityState-rangeOverflow-datetimelocal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/datetimelocal/ValidityState-rangeUnderflow-datetimelocal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/datetimelocal/ValidityState-typeMismatch-datetimelocal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/date/ValidityState-rangeOverflow-date_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/date/ValidityState-rangeUnderflow-date_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/date/ValidityState-stepMismatch-date_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/delete-text-with-invisible-br_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/disabled-attr-checkvalidity_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/double-focus_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/enctype-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/fieldset/fieldset-disabled_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/fieldset/fieldset-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/fieldset/fieldset-name_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/fieldset/fieldset-type_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/fieldset/focus-in-fieldset-disabled_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/fieldset/validation-in-fieldset_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/file/file-input-capture_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/file/file-setrangetext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/forms/datalist/datalist-child-validation_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/forms/datalist/datalist_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/forms/date/date-interactive-validation-required_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/forms/date/date-pseudo-classes_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/forms/datetimelocal/datetimelocal-interactive-validation-required_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/forms/datetimelocal/datetimelocal-pseudo-classes_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/forms/fieldset/fieldset-elements_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/forms/focus-style-pending_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/focus_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/forms/focus_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LayoutTests/fast/forms/form-added-to-table_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/form-associated-element-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/form-attribute-not-in-document_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/form-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/form-dirname-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/form-input-named-arguments_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/formmethod-attribute-button-html_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/formmethod-attribute-input-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/formmethod-attribute-input-html_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/formmethod-attribute-test_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/formnovalidate-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/form-submission-create-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/hidden/hidden-setrangetext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/hidden-input-enabled_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/HTMLOptionElement_selected2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/HTMLOptionElement_selected_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/forms/image/image-error-event-crash_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/image/image-error-event-modifies-type-crash_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/image/image-setrangetext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/image/width-and-height-of-detached-input_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/incremental-dom-property_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/indeterminate-input-types_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-appearance-maxlength_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/input-changing-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-file-set-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-hit-test-border_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/input-implicit-length-limit_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-inputmode_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-maxlength_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-maxlength-unsupported_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-minmax_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-multiple_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-pattern_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-selection-hidden_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-select-webkit-user-select-none_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-setvalue-selection_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-stepup-stepdown_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-text-maxlength_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-text-paste-maxlength_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-type-change3_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/input-type-change-focusout_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/forms/input-type-change_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/input-valueasnumber-unsupported_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-value-sanitization_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/input-width-height-attributes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/input-width-height-attributes-without-renderer-loaded-image_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/input-width-height-attributes-without-renderer_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/input-widths_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/interactive-validation-assertion-by-validate-twice_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/forms/interactive-validation-attach-assertion_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/interactive-validation-select-crash_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/legend-absolute-position-auto-width_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/legend-display-none_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/listbox-scroll-after-options-removed_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/listbox-select-all_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/listbox-selection-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/menulist-disabled-selected-option_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/menulist-selection-reset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/menulist-submit-without-selection_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/method-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/min-content-form-controls_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/missing-action_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/multiple-selected-options-innerHTML_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/novalidate-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/onchange-change-type_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/option-change-single-selected_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/option-index_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/option-label-trim-html-spaces_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/option-strip-unicode-spaces_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/option-value-and-label-changed-by-js_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/option-value-and-label_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/option-value-trim-html-spaces_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/parser-associated-form-removal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/paste-into-textarea_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/paste-multiline-text-input_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/pattern-attribute-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/pattern-attribute-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/pattern-attribute-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/percent-height-auto-width-form-controls_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/placeholder-dom-property_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/plaintext-mode-1_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/radio-checkbox-restore-indeterminate_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/required-attribute-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/required-attribute-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/forms/search-placeholder-value-changed_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/search-popup-crasher_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/forms/search-popup-crasher_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/forms/select-change-listbox-to-popup-roundtrip_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/forms/select-change-popup-to-listbox-in-event-handler_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/forms/select-change-popup-to-listbox-roundtrip_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/select-clientheight-large-size_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/select-clientheight-with-multiple-attr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/select-generated-content_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/selection-direction_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/selection-start-end-readonly_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/selection-wrongtype_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-max-length_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-namedItem_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/select-remove-option_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/select-reset-multiple-selections-4-single-selection_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-reset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-set-length_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-set-length-with-mutation-remove_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-set-length-with-mutation-reorder_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-set-length-with-mutation-reparent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-set-length-with-mutation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/select-width-font-change_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/setCustomValidity-arguments_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/setCustomValidity-existence_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/setCustomValidity_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/setrangetext_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/shadow-tree-exposure_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/slow-click_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/submit-form-attributes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/submit-form-with-dirname-attribute_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/textarea-crlf_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-default-value-leading-newline_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-initial-caret-position_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-maxlength_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-newline_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-no-scroll-on-blur_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/textarea-paste-newline_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-placeholder-dom-property_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-placeholder-relayout-assertion_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/forms/textarea-rows-cols_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/forms/textarea-placeholder-relayout-assertion_t01: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
 LayoutTests/fast/forms/textarea-scrollbar-height_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/textarea-selection-preservation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-set-defaultvalue-after-value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-setvalue-without-renderer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-submit-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-trailing-newline_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textarea-wrap-attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/text-control-select-blurred_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/textfield-clone_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LayoutTests/fast/forms/textfield-focus-out_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/forms/validationMessage_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/validity-property_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/ValidityState-customError_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-patternMismatch_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-patternMismatch-unsupported_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/ValidityState-rangeOverflow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-rangeUnderflow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-stepMismatch_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/forms/ValidityState-tooLong-input_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-typeMismatch-url_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-003_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-004_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-005_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-006_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-008_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/ValidityState-valueMissing-009_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/forms/willvalidate_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/adjacent-html-context-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/article-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/aside-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/body-offset-properties_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/clone-range_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/details-add-child-1_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/details-add-child-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/details-add-details-child-1_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/details-add-details-child-2_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/details-click-controls_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/html/details-mouse-click_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/html/disable-style-element_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/html/draggable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/empty-fragment-id-goto-top_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/eventhandler-attribute-non-callable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/figcaption-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/figure-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/footer-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/header-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/hgroup-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/hidden-attr-dom_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/hidden-attr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/html/details-add-child-1_t01: Crash # unsupported element kind: createNewElement:field
+LayoutTests/fast/html/details-add-child-2_t01: Crash # unsupported element kind: createNewElement:field
+LayoutTests/fast/html/details-add-details-child-1_t01: Crash # unsupported element kind: createNewElement:field
+LayoutTests/fast/html/details-add-details-child-2_t01: Crash # unsupported element kind: createNewElement:field
 LayoutTests/fast/html/imports/import-element-removed-flag_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/html/imports/import-events_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/input-type-change-crash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/layout-with-pending-stylesheet_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/main-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/mark-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/numbered-header-element_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/html/object-border_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/range-point-in-range-for-different-documents_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/html/section-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/tabindex-removal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/html/text-field-input-types_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/unknown-tag_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/html/xhtml-serialize_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/inline-block/inline-block-vertical-align-t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/inline/boundingBox-with-continuation_t01: Crash # (internals): Error expression `internals` unhandled.
-LayoutTests/fast/inline/continuation-inlines-inserted-in-reverse-after-block_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/inline/empty-inline-before-collapsed-space_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/inline/fixed-pos-moves-with-abspos-inline-parent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/inline/fixed-pos-moves-with-abspos-parent-relative-ancestor_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/inline/fixed-pos-moves-with-abspos-parent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/inline/fixed-pos-with-transform-container-moves-with-abspos-parent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/inline/inline-position-top-align_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/inline/inline-relative-offset-boundingbox_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/inline/inline-with-empty-inline-children_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/inline/skipped-whitespace-client-rect_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/innerHTML/001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/005_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/additional-inline-style_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/innerHTML-case_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/innerHTML-custom-tag_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/innerHTML-iframe_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/innerHTML-nbsp_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/innerHTML-special-elements_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/innerHTML/innerHTML-svg-read_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/innerHTML-svg-write_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/innerHTML/innerHTML-uri-resolution_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/innerHTML/javascript-url_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/layers/negative-scroll-positions_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/layers/normal-flow-hit-test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/layers/zindex-hit-test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/lists/calc-width-with-space_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/lists/item-not-in-list-line-wrapping_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/lists/list-style-position-inside_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/lists/marker-preferred-margins_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/loader/about-blank-hash-change_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/loader/about-blank-hash-kept_t01: Crash # (new_hash): Error expression `new_hash` unhandled.
-LayoutTests/fast/loader/hashchange-event-async_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/loader/hashchange-event-properties_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/loader/loadInProgress_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/html/imports/import-events_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LayoutTests/fast/innerHTML/innerHTML-special-elements_t01: Crash # unsupported element kind: outerTests:field
+LayoutTests/fast/loader/about-blank-hash-change_t01: Crash # (onload_callback): handleStaticFunctionGet: function(onload_callback)
+LayoutTests/fast/loader/about-blank-hash-kept_t01: Crash # (onload_callback): handleStaticFunctionGet: function(onload_callback)
+LayoutTests/fast/loader/hashchange-event-async_t01: Crash # (loadHandler): handleStaticFunctionGet: function(loadHandler)
+LayoutTests/fast/loader/hashchange-event-properties_t01: Crash # (onhashchange): handleStaticFunctionGet: function(onhashchange)
+LayoutTests/fast/loader/loadInProgress_t01: Crash # (testForm): handleStaticFunctionGet: function(testForm)
+LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Crash # (bodyInlineAttribute): handleStaticFunctionGet: function(bodyInlineAttribute)
 LayoutTests/fast/loader/onload-policy-ignore-for-frame_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/loader/scroll-position-restored-on-back_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/loader/scroll-position-restored-on-reload-at-load-event_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/loader/stateobjects/pushstate-updates-location_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/loader/stateobjects/replacestate-in-onunload_t01: Crash # (history): Error expression `history` unhandled.
-LayoutTests/fast/loader/stateobjects/replacestate-updates-location_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/masking/parsing-clip-path-iri_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/masking/parsing-clip-path-shape_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/masking/parsing-mask-source-type_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/masking/parsing-mask_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/media/color-does-not-include-alpha_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/media/invalid-lengths_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/media/matchmedium-query-api_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/media/media-query-list-syntax_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/media/media-query-list_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/media/media-query-serialization_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/media/mq-append-delete_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/media/mq-color-index_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/media/mq-color-index_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/media/mq-js-media-except_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/media/mq-js-media-except_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/media/mq-js-update-media_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/media/mq-parsing_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/mediastream/getusermedia_t01: Crash # (gotStream1): Error expression `gotStream1` unhandled.
-LayoutTests/fast/mediastream/RTCIceCandidate_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/multicol/balance-short-trailing-empty-block_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/balance-trailing-border_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/balance-trailing-border_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/balance-unbreakable_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/break-properties_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/columns-shorthand-parsing_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/column-width-zero_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/cssom-view_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/multicol/flipped-blocks-hit-test_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/float-truncation_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/gap-non-negative_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/hit-test-above-or-below_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/hit-test-end-of-column_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/hit-test-end-of-column-with-line-height_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/hit-test-float_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/hit-test-gap-between-pages-flipped_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/hit-test-gap-between-pages_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/image-inside-nested-blocks-with-border_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/inherit-column-values_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/initial-column-values_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/inline-getclientrects_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/newmulticol/balance-images_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance-maxheight_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/newmulticol/balance_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/newmulticol/balance_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/orphans-relayout_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-lr/break-properties_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-lr/gap-non-negative_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-rl/break-properties_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-rl/gap-non-negative_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/widows-and-orphans_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/widows_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/multicol/widows_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/multicol/zeroColumnCount_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/overflow/child-100percent-height-inside-fixed-container-with-overflow-auto_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/overflow/height-during-simplified-layout_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/overflow/overflow-rtl-vertical-origin_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/overflow/scrollbar-restored_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/overflow/scroll-vertical-not-horizontal_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/parser/block-nesting-cap_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/foster-parent-adopted_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/foster-parent-adopted_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/foster-parent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/fragment-parser-doctype_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/href-whitespace_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/image-tag-parses-to-HTMLImageElement_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/innerhtml-with-prefixed-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/parse-wbr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/pop-all-after-after-body_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/pre-first-line-break_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/residual-style-close-across-n-blocks_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/stray-end-tags-with-attributes-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/stray-end-tags-with-attributes-002-alt_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/stray-end-tags-with-attributes-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/parser/stray-param_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/parser/strict-img-in-map_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/replaced/available-height-for-content_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor-vertical-lr_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-vertical-lr_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/replaced/container-width-zero_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/replaced/preferred-widths_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/replaced/table-percent-height_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/replaced/table-percent-height-text-controls_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/replaced/table-percent-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/replaced/table-replaced-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/ruby/modify-positioned-ruby-text-crash_t01: Crash # handleStaticFunctionGet: function(doTest)
-LayoutTests/fast/ruby/parse-rp_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/ruby/ruby-line-height_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/scrolling/scroll-element-into-view_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/scrolling/scroll-max-value_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/selectors/querySelector-leftmost-selector-matches-ancestor_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/selectors/querySelector-leftmost-selector-matches-rootNode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/selectors/querySelector-scope_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/selectors/specificity-overflow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/selectors/style-sharing-adjacent-selector_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/selectors/style-sharing-last-child_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/parsing/parsing-shape-image-threshold_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/parsing/parsing-shape-lengths_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/parsing/parsing-shape-outside-none_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/shapes/parsing/parsing-shape-outside_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/parsing/parsing-shape-property-aliases_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius_t01: Crash #  Error expression `shouldBeCloseTo(elementRect('b').right,borderXIntercept(20),1)` unhandled.
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-diamond-margin-polygon_t01: Crash #  Error expression `shouldBeCloseTo(elementRect('l1').left,marginLeftXIntercept(1),1)` unhandled.
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-left_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-right_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: Crash #  Error expression `shouldBeCloseTo(imageShapeRect('a').left,292,1)` unhandled.
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: Crash #  Error expression `shouldBeCloseTo(imageShapeRect('a').right,292,1)` unhandled.
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-right_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: Crash #  Error expression `shouldBeCloseTo(elementRect('b').left,cornerEllipseRightXIntercept(40,0,100,30),SubPixelLayout.resolution())` unhandled.
-LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/loader/scroll-position-restored-on-back_t01: Crash # (navigate): handleStaticFunctionGet: function(navigate)
+LayoutTests/fast/loader/scroll-position-restored-on-reload-at-load-event_t01: Crash # (init): handleStaticFunctionGet: function(init)
+LayoutTests/fast/loader/stateobjects/pushstate-updates-location_t01: Crash # (onload): handleStaticFunctionGet: function(onload)
+LayoutTests/fast/loader/stateobjects/replacestate-in-onunload_t01: Crash # (onload): handleStaticFunctionGet: function(onload)
+LayoutTests/fast/loader/stateobjects/replacestate-updates-location_t01: Crash # (onload): handleStaticFunctionGet: function(onload)
+LayoutTests/fast/media/media-query-list-syntax_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/media/mq-js-update-media_t01: Crash # (updateMediaQuery2): handleStaticFunctionGet: function(updateMediaQuery2)
+LayoutTests/fast/media/mq-parsing_t01: Crash # (runTests): handleStaticFunctionGet: function(runTests)
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: Crash # (gotStream1): handleStaticFunctionGet: function(gotStream1)
+LayoutTests/fast/mediastream/getusermedia_t01: Crash # (error): handleStaticFunctionGet: function(error)
+LayoutTests/fast/multicol/columns-shorthand-parsing_t02: Crash # unsupported element kind: tests:field
+LayoutTests/fast/multicol/float-truncation_t01: Crash # unsupported element kind: tests:field
+LayoutTests/fast/multicol/hit-test-above-or-below_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/multicol/image-inside-nested-blocks-with-border_t01: Crash # unsupported element kind: tests:field
+LayoutTests/fast/multicol/orphans-relayout_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: Crash # unsupported element kind: tests:field
+LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border_t01: Crash # unsupported element kind: tests:field
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: Crash # unsupported element kind: tests:field
+LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border_t01: Crash # unsupported element kind: tests:field
+LayoutTests/fast/multicol/widows-and-orphans_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/overflow/scroll-vertical-not-horizontal_t01: Crash # (startTest): handleStaticFunctionGet: function(startTest)
+LayoutTests/fast/parser/href-whitespace_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/parser/image-tag-parses-to-HTMLImageElement_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/parser/parse-wbr_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/parser/pop-all-after-after-body_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/parser/residual-style-close-across-n-blocks_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/parser/strict-img-in-map_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/replaced/table-percent-height-text-controls_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/replaced/table-percent-height_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/replaced/table-percent-width_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/replaced/table-replaced-element_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/ruby/modify-positioned-ruby-text-crash_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/ruby/parse-rp_t01: Crash # (test): handleStaticFunctionGet: function(test)
+LayoutTests/fast/scrolling/scroll-element-into-view_t01: Crash # unsupported element kind: container:field
+LayoutTests/fast/selectors/style-sharing-last-child_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/shapes/parsing/parsing-shape-image-threshold_t01: Crash # (testShapeComputedProperty): handleStaticFunctionGet: function(testShapeComputedProperty)
+LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: Crash # (testShapeComputedProperty): handleStaticFunctionGet: function(testShapeComputedProperty)
+LayoutTests/fast/shapes/parsing/parsing-shape-outside_t01: Crash # (testNotInheritedShapeProperty): handleStaticFunctionGet: function(testNotInheritedShapeProperty)
+LayoutTests/fast/shapes/parsing/parsing-shape-property-aliases_t01: Crash # (testPropertyAlias): handleStaticFunctionGet: function(testPropertyAlias)
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: Crash # (runTest): handleStaticFunctionGet: function(runTest)
 LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Crash # unsupported element kind: _completer:field
 LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-uses-voice_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/speechsynthesis/speech-synthesis-voices_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/storage/disallowed-storage_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/sub-pixel/auto-table-layout-should-avoid-text-wrapping_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/sub-pixel/block-preferred-widths-with-sub-pixel-floats_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/sub-pixel/boundingclientrect-subpixel-margin_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/client-and-offset-width_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/sub-pixel/computedstylemargin_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/cssom-subpixel-precision_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/float-containing-block-with-margin_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LayoutTests/fast/sub-pixel/float-list-inside_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/sub-pixel/float-percentage-widths_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/float-with-margin-in-container_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/float-with-right-margin-zoom_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/sub-pixel/inline-block-with-padding_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/layout-boxes-with-zoom_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/replaced-element-baseline_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/shadows-computed-style_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/size-of-span-with-different-positions_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/sub-pixel/table-cells-have-stable-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/table-cells-with-padding-do-not-wrap_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/table-rows-have-stable-height_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/tiled-canvas-elements_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/sub-pixel/vertical-align-middle-overflow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/svg/getbbox_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/svg/tabindex-focus_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/svg/whitespace-angle_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/svg/whitespace-integer_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/svg/whitespace-length-invalid_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/svg/whitespace-length_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/svg/whitespace-number_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/absolute-table-percent-lengths_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/anonymous-table-section-removed_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/before-child-non-table-section-add-table-crash_t01: Crash # handleStaticFunctionGet: function(runTest)
-LayoutTests/fast/table/border-changes_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/caption-orthogonal-writing-mode-sizing_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/col-width-span-expand_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/css-table-max-height_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/css-table-max-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/css-table-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/css-table-width-with-border-padding_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/fixed-table-layout-toggle-colwidth_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/fixed-table-layout-width-change_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/fixed-table-with-percent-width-inside-extra-large-div_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/table/form-with-non-table-display-inside-table-elements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/table/hittest-tablecell-bottom-edge_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/hittest-tablecell-right-edge_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/hittest-tablecell-with-borders-bottom-edge_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/html-table-width-max-width-constrained_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/incorrect-colgroup-span-values_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/large-shrink-wrapped-width_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/margins-flipped-text-direction_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/margins-perpendicular-containing-block_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/min-max-width-preferred-size_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/min-width-css-block-table_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/min-width-css-inline-table_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/min-width-html-block-table_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/min-width-html-inline-table_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/nested-tables-with-div-offset_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/padding-height-and-override-height_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LayoutTests/fast/svg/getbbox_t01: Crash # unsupported element kind: epsilon:field
+LayoutTests/fast/svg/tabindex-focus_t01: Crash #  try/finally
+LayoutTests/fast/svg/whitespace-angle_t01: Crash #  try/finally
+LayoutTests/fast/svg/whitespace-integer_t01: Crash #  try/finally
+LayoutTests/fast/svg/whitespace-length-invalid_t01: Crash # unsupported element kind: EPSILON:field
+LayoutTests/fast/svg/whitespace-length_t01: Crash # unsupported element kind: EPSILON:field
+LayoutTests/fast/svg/whitespace-number_t01: Crash # unsupported element kind: EPSILON:field
+LayoutTests/fast/table/before-child-non-table-section-add-table-crash_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/col-width-span-expand_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/css-table-max-height_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/css-table-width-with-border-padding_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/fixed-table-layout-toggle-colwidth_t01: Crash # (toggleWidth): handleStaticFunctionGet: function(toggleWidth)
+LayoutTests/fast/table/fixed-table-layout-width-change_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/hittest-tablecell-bottom-edge_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/hittest-tablecell-right-edge_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/hittest-tablecell-with-borders-bottom-edge_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/html-table-width-max-width-constrained_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/table/incorrect-colgroup-span-values_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/table/min-width-css-block-table_t01: Crash # (computeLogicalWidth): handleStaticFunctionGet: function(computeLogicalWidth)
+LayoutTests/fast/table/min-width-css-inline-table_t01: Crash # (computeLogicalWidth): handleStaticFunctionGet: function(computeLogicalWidth)
+LayoutTests/fast/table/min-width-html-block-table_t01: Crash # (computeLogicalWidth): handleStaticFunctionGet: function(computeLogicalWidth)
+LayoutTests/fast/table/min-width-html-inline-table_t01: Crash # (computeLogicalWidth): handleStaticFunctionGet: function(computeLogicalWidth)
 LayoutTests/fast/table/prepend-in-anonymous-table_t01: Crash # unsupported element kind: childTypes:field
-LayoutTests/fast/table/resize-table-binding-cell_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/resize-table-cell_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/resize-table-row_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/rowindex-comment-nodes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/table/switch-table-layout-dynamic-cells_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/switch-table-layout-multiple-section_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/switch-table-layout_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-cell-offset-width_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-rowspan-cell-with-empty-cell_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-sections-border-spacing_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/table-size-integer-overflow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/table/table-width-exceeding-max-width_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/table-with-borderattr-null_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/table/table-with-borderattr-set-to-null_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/table/td-bordercolor-attribute_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text-autosizing/display-type-change-lineHeight_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text-autosizing/inline-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text-autosizing/table-inline-width_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text-autosizing/text-removal_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/container-align-with-inlines_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/decomposed-after-stacked-diacritics_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-backwards_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-case-folding_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-hidden-text_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-kana_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-quotes_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-russian_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-soft-hyphen_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/find-spaces_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/font-fallback-synthetic-italics_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/font-ligature-letter-spacing_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/font-ligatures-linebreak_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/font-ligatures-linebreak-word_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/font-linux-normalize_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/font-size-zero_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/glyph-reordering_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/international/cjk-segmentation_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/international/combining-marks-position_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/international/complex-text-rectangle_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/international/iso-8859-8_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/international/listbox-width-rtl_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/international/rtl-text-wrapping_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/ipa-tone-letters_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/justification-padding-mid-word_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/line-break-after-empty-inline-hebrew_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/line-break-after-inline-latin1_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/line-break-after-question-mark_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/line-breaks-after-closing-punctuations_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/line-breaks-after-hyphen-before-number_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/line-breaks-after-ideographic-comma-or-full-stop_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/line-breaks-after-ideographic-comma-or-full-stop_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/multiglyph-characters_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/pre-wrap-trailing-tab_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/regional-indicator-symobls_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/remove-zero-length-run_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/selection-exceptions_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/soft-hyphen-5_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/split-text-crash_t01: Crash # handleStaticFunctionGet: function(crash)
-LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/sub-pixel/text-scaling-pixel_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/text/text-between-two-brs-in-nowrap-overflow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/text-combine-shrink-to-fit_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/text/whitespace/nowrap-line-break-after-white-space_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/window-find_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/zero-width-characters-complex-script_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/text/zero-width-characters_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/tokenizer/doctype-search-reset_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/tokenizer/entities_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/tokenizer/entities_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/tokenizer/entities_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/transforms/bounding-rect-zoom_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/transforms/hit-test-large-scale_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/transforms/scrollIntoView-transformed_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/transforms/topmost-becomes-bottomost-for-scrolling_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/transforms/transform-hit-test-flipped_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/transforms/transform-inside-overflow-scroll_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/anchor_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/file-http-base_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/url/file_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/url/host-lowercase-per-scheme_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/host_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/idna2003_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/idna2008_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/invalid-urls-utf8_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/ipv4_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/ipv6_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/mailto_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/path_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/path-url_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/port_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/query_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/relative_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/relative-unix_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/relative-win_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/safari-extension_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/scheme_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/segments-from-data-url_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/segments_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/standard-url_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/trivial-segments_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/url/trivial_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/writing-mode/auto-margins-across-boundaries_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/auto-sizing-orthogonal-flows_t01: Crash # (throw "You must provide a CSS selector of nodes to check."): Unhandled node
-LayoutTests/fast/writing-mode/block-formatting-context_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/table/rowindex-comment-nodes_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/table/table-size-integer-overflow_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/text/find-backwards_t01: Crash # unsupported element kind: selection:field
+LayoutTests/fast/text/find-case-folding_t01: Crash # (runTests): handleStaticFunctionGet: function(runTests)
+LayoutTests/fast/text/find-hidden-text_t01: Crash # (runTests): handleStaticFunctionGet: function(runTests)
+LayoutTests/fast/text/find-quotes_t01: Crash # (runTests): handleStaticFunctionGet: function(runTests)
+LayoutTests/fast/text/find-spaces_t01: Crash # (runTests): handleStaticFunctionGet: function(runTests)
+LayoutTests/fast/text/font-ligature-letter-spacing_t01: Crash # (testLetterSpaceAndLigature): handleStaticFunctionGet: function(testLetterSpaceAndLigature)
+LayoutTests/fast/text/font-ligatures-linebreak-word_t01: Crash # (testLetterSpaceAndLigature): handleStaticFunctionGet: function(testLetterSpaceAndLigature)
+LayoutTests/fast/text/font-ligatures-linebreak_t01: Crash # (testLetterSpaceAndLigature): handleStaticFunctionGet: function(testLetterSpaceAndLigature)
+LayoutTests/fast/text/international/cjk-segmentation_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/text/ipa-tone-letters_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/text/line-breaks-after-hyphen-before-number_t01: Crash # unsupported element kind: expected:field
+LayoutTests/fast/text/split-text-crash_t01: Crash # (crash): handleStaticFunctionGet: function(crash)
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: Crash # (runTests): handleStaticFunctionGet: function(runTests)
+LayoutTests/fast/tokenizer/entities_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/tokenizer/entities_t02: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/tokenizer/entities_t03: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/transforms/bounding-rect-zoom_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/transforms/hit-test-large-scale_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/transforms/scrollIntoView-transformed_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/transforms/transform-hit-test-flipped_t01: Crash # (runTest): handleStaticFunctionGet: function(runTest)
+LayoutTests/fast/url/anchor_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/file-http-base_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/file_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/host-lowercase-per-scheme_t01: Crash # unsupported element kind: urlExpectationsUppercase:field
+LayoutTests/fast/url/host_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/idna2003_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/idna2008_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/invalid-urls-utf8_t01: Crash # unsupported element kind: testSet:field
+LayoutTests/fast/url/ipv4_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/ipv6_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/mailto_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/path-url_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/path_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/port_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/query_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/relative-unix_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/relative-win_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/relative_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/safari-extension_t01: Crash # unsupported element kind: safariExtensionTestSet:field
+LayoutTests/fast/url/scheme_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/segments-from-data-url_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/segments_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/standard-url_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/url/trivial-segments_t01: Crash # unsupported element kind: cases:field
+LayoutTests/fast/url/trivial_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/writing-mode/broken-ideographic-font_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/writing-mode/display-mutation_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow-scroll_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/flipped-blocks-text-map-local-to-container_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/overhanging-float-legend-crash_t01: Crash # handleStaticFunctionGet: function(crash)
-LayoutTests/fast/writing-mode/percentage-margins-absolute-replaced_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/percentage-margins-absolute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/percentage-padding_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/positionForPoint_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/relative-positioning-percentages_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/writing-mode/table-hit-test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/writing-mode/vertical-font-vmtx-units-per-em_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/writing-mode/vertical-inline-block-hittest_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/null-document-xmlhttprequest-open_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-default-attributes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/writing-mode/overhanging-float-legend-crash_t01: Crash # (crash): handleStaticFunctionGet: function(crash)
+LayoutTests/fast/writing-mode/percentage-margins-absolute-replaced_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/writing-mode/percentage-margins-absolute_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/writing-mode/vertical-font-vmtx-units-per-em_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+LayoutTests/fast/xmlhttprequest/null-document-xmlhttprequest-open_t01: Crash # (checkPass): handleStaticFunctionGet: function(checkPass)
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-default-attributes_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Stream.
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-get_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-html-response-encoding_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-invalid-values_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-abort_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open-sync-request_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-document_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-set-at-headers-received_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-sync-request_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-text_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-invalid-values_t01: Crash # (checkExc): handleStaticFunctionGet: function(checkExc)
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype_t01: Crash # unsupported element kind: _asyncCounter:field
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: Crash # unsupported element kind: _asyncCounter:field
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-set-responsetype_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-withcredentials-before-open_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Borrowed/cz_20030217_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/4XPath/Borrowed/kd_20010423_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/4XPath/Borrowed/namespace-nodes_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Borrowed/od_20000608_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/4XPath/Borrowed/rs_20010831_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/4XPath/Borrowed/sr_20021217_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/4XPath/Core/test_boolean_expr_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_literal_expr_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_location_path_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_nodeset_expr_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_node_test_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_numeric_expr_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_predicate_list_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/4XPath/Core/test_step_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/ambiguous-operators_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/ancestor-axis_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/attribute-node-predicate_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/attr-namespace_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/attr-namespace_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/complex-id_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/detached-subtree-invalidate-iterator_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/empty-string-substring_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/ensure-null-namespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/evaluator-exceptions_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/id-path_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/id-simple_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/implicit-node-args_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/invalid-resolver_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/name-null-namespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/nan-to-boolean_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/node-name-case-sensitivity_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/node-name-case-sensitivity_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/nodeset-duplicates_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/position_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/py-dom-xpath/abbreviations_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/py-dom-xpath/axes_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/py-dom-xpath/data_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/py-dom-xpath/paths_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/reverse-axes_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xpath/substring-after_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/substring-nan-position_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/substring-non-positive-postion_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/xpath-detached-nodes_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xpath/xpath-template-element_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xsl/default-html_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xsl/extra-lf-at-end_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests/fast/xsl/nbsp-in-stylesheet_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LayoutTests/fast/xsl/transformToFragment-XML-declaration_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-abort_t01: Crash # (load): handleStaticFunctionGet: function(load)
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer_t01: Crash # (stateChange): handleStaticFunctionGet: function(stateChange)
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-document_t01: Crash # (load): handleStaticFunctionGet: function(load)
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-set-at-headers-received_t01: Crash # unsupported element kind: _completer:field
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-text_t01: Crash # (load): handleStaticFunctionGet: function(load)
+LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t01: Crash # unsupported element kind: LCHILD2:field
+LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t02: Crash # unsupported element kind: CHILD1:field
+LayoutTests/fast/xpath/4XPath/Core/test_location_path_t01: Crash # unsupported element kind: LCHILDREN:field
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t01: Crash # unsupported element kind: PI2:field
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: Crash # unsupported element kind: CHILD3:field
+LayoutTests/fast/xpath/4XPath/Core/test_nodeset_expr_t01: Crash # unsupported element kind: CHILD1:field
+LayoutTests/fast/xpath/4XPath/Core/test_numeric_expr_t01: Crash # unsupported element kind: CHILD1:field
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: Crash # unsupported element kind: ROOT:field
+LayoutTests/fast/xpath/4XPath/Core/test_predicate_list_t01: Crash # unsupported element kind: ROOT:field
+LayoutTests/fast/xpath/4XPath/Core/test_step_t01: Crash # unsupported element kind: GCHILD11:field
+LayoutTests/fast/xpath/name-null-namespace_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/xsl/default-html_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LayoutTests/fast/xsl/extra-lf-at-end_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LayoutTests/fast/xsl/xslt-bad-import-uri_t01: Crash # unsupported element kind: _completer:field
-LayoutTests/fast/xsl/xslt-string-parameters_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/complete_A01_t01: Crash # Please triage this failure.
-LibTest/async/Completer/complete_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Completer/complete_A01_t03: Crash # unsupported element kind: _asyncCounter:field
-LibTest/async/Completer/complete_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/complete_A01_t05: Crash # unsupported element kind: _completer:field
-LibTest/async/Completer/complete_A01_t06: Crash # unsupported element kind: _completer:field
-LibTest/async/Completer/complete_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/complete_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/completeError_A01_t01: Crash # Please triage this failure.
-LibTest/async/Completer/completeError_A01_t02: Crash # (throw error): Unhandled node
+LibTest/async/Completer/Completer_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Completer.
+LibTest/async/Completer/completeError_A01_t01: Crash # unsupported element kind: futures:field
+LibTest/async/Completer/completeError_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Completer/completeError_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/Completer/completeError_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/async/Completer/completeError_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/completeError_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/completeError_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/Completer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/Completer.sync_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Completer/future_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Completer/isCompleted_A01_t01: Crash # Please triage this failure.
-LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Crash # (try {lazy.method();}on NoSuchMethodError catch (ok){}): "on T" catch block
-LibTest/async/Future/asStream_A01_t01: Crash # Please triage this failure.
+LibTest/async/Completer/complete_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Completer/complete_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Completer/complete_A01_t03: Crash # unsupported element kind: _asyncCounter:field
+LibTest/async/Completer/complete_A01_t04: Crash # unsupported element kind: futures:field
+LibTest/async/Completer/complete_A01_t05: Crash # unsupported element kind: _completer:field
+LibTest/async/Completer/complete_A01_t06: Crash # unsupported element kind: _completer:field
+LibTest/async/Completer/future_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Future.
+LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Crash # (lazy.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+LibTest/async/Future/Future.delayed_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.delayed_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.delayed_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.delayed_A03_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.error_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.error_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.microtask_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.microtask_A01_t03: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.microtask_A01_t04: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.sync_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.sync_A01_t03: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.sync_A01_t04: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.value_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future.value_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future_A01_t03: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/Future_A01_t04: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/asStream_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/asStream_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/asStream_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/asStream_A02_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/catchError_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Future/catchError_A01_t02: Crash # unsupported element kind: _asyncCounter:field
+LibTest/async/Future/catchError_A01_t01: Crash # (onError): handleStaticFunctionGet: function(onError)
+LibTest/async/Future/catchError_A01_t02: Crash # (onError1): handleStaticFunctionGet: function(onError1)
 LibTest/async/Future/catchError_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/catchError_A03_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/async/Future/catchError_A03_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/catchError_A03_t03: Crash # unsupported element kind: _asyncCounter:field
-LibTest/async/Future/catchError_A03_t04: Crash # (throw error): Unhandled node
-LibTest/async/Future/catchError_A03_t05: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/catchError_A03_t04: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/catchError_A03_t05: Crash # (f): handleStaticFunctionGet: function(f)
 LibTest/async/Future/forEach_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/forEach_A02_t01: Crash # unsupported element kind: N:field
 LibTest/async/Future/forEach_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Future/Future_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future.delayed_A01_t01: Crash # Please triage this failure.
-LibTest/async/Future/Future.delayed_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future.delayed_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future.delayed_A03_t01: Crash # (throw value): Unhandled node
-LibTest/async/Future/Future.error_A01_t01: Crash # Please triage this failure.
-LibTest/async/Future/Future.error_A01_t02: Crash # (throw error): Unhandled node
-LibTest/async/Future/Future.microtask_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Future/Future.microtask_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future.microtask_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future.microtask_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future.sync_A01_t01: Crash # Please triage this failure.
-LibTest/async/Future/Future.sync_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Future/Future.sync_A01_t03: Crash # Please triage this failure.
-LibTest/async/Future/Future.sync_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/Future.value_A01_t01: Crash # Please triage this failure.
-LibTest/async/Future/Future.value_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/then_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/then_A01_t02: Crash # unsupported element kind: _asyncCounter:field
-LibTest/async/Future/then_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/async/Future/then_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/then_A01_t04: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/then_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/then_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Future/then_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/then_A03_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/then_A04_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/then_A05_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/then_A05_t02: Crash # (throw error): Unhandled node
+LibTest/async/Future/then_A05_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/async/Future/then_A05_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/then_A05_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/wait_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/wait_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/wait_A01_t04: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/wait_A01_t05: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/wait_A01_t06: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/wait_A01_t07: Crash # unsupported element kind: _completer:field
+LibTest/async/Future/wait_A01_t07: Crash # (inc): handleStaticFunctionGet: function(inc)
 LibTest/async/Future/wait_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/wait_A02_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/whenComplete_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/whenComplete_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Future/whenComplete_A03_t01: Crash # (throw value): Unhandled node
+LibTest/async/Future/whenComplete_A03_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/async/Future/whenComplete_A04_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Future/whenComplete_A04_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/Stream.eventTransformed_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/Stream.eventTransformed_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/Stream.fromFuture_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/Stream.fromFuture_A02_t02: Crash # unsupported element kind: error:field
+LibTest/async/Stream/Stream.fromIterable_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/Stream.fromIterable_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/Stream.periodic_A01_t01: Crash # Please triage this failure.
+LibTest/async/Stream/Stream.periodic_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/Stream.periodic_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/any_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/any_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/any_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/asBroadcastStream_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/asBroadcastStream_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/asBroadcastStream_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/async/Stream/asBroadcastStream_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/asBroadcastStream_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/asBroadcastStream_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/asBroadcastStream_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/asBroadcastStream_A03_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/asBroadcastStream_A03_t03: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/asBroadcastStream_A03_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/asBroadcastStream_A03_t02: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/async/Stream/asBroadcastStream_A03_t03: Crash # (f): handleStaticFunctionGet: function(f)
 LibTest/async/Stream/asBroadcastStream_A04_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/asBroadcastStream_A04_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/asBroadcastStream_A04_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/contains_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/contains_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/contains_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/add_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/addError_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/addError_A01_t02: Crash # (throw error0): Unhandled node
-LibTest/async/StreamController/addStream_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/addStream_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamController/addStream_A02_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/addStream_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/addStream_A03_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/close_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamController/close_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/done_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamController/done_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/hasListener_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/hasListener_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/isClosed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamController/isClosed_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamController/isPaused_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/isPaused_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/isPaused_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/sink_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamController/stream_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamController/StreamController_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/StreamController_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController_A06_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController.broadcast_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/StreamController.broadcast_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController.broadcast_A04_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/StreamController.broadcast_A05_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/StreamController.broadcast_A06_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamController/StreamController.broadcast_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController.broadcast_A07_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/StreamController/StreamController.broadcast_A08_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LibTest/async/Stream/distinct_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/distinct_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/drain_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Stream/distinct_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/drain_A01_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LibTest/async/Stream/drain_A02_t01: Crash # Please triage this failure.
 LibTest/async/Stream/drain_A02_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/elementAt_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/elementAt_A01_t02: Crash # unsupported element kind: _asyncCounter:field
-LibTest/async/Stream/elementAt_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Stream/elementAt_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Stream/elementAt_A01_t02: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/async/Stream/elementAt_A02_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LibTest/async/Stream/elementAt_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/every_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/every_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/expand_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/first_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/first_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Stream/first_A02_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/first_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/firstWhere_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/firstWhere_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/firstWhere_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/firstWhere_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Stream/firstWhere_A03_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/first_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/first_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/first_A02_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/first_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/fold_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/fold_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/forEach_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/forEach_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/forEach_A02_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/handleError_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Stream/handleError_A01_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LibTest/async/Stream/handleError_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/handleError_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Stream/handleError_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/handleError_A04_t02: Crash # (throw error): Unhandled node
+LibTest/async/Stream/handleError_A03_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LibTest/async/Stream/handleError_A04_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/handleError_A04_t02: Crash # unsupported element kind: _asyncCounter:field
 LibTest/async/Stream/handleError_A04_t03: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/isBroadcast_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/isBroadcast_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
 LibTest/async/Stream/isEmpty_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamIterator/cancel_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamIterator/current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamIterator/moveNext_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamIterator/moveNext_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamIterator/StreamIterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/async/Stream/join_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/join_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/join_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/join_A02_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/last_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/last_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Stream/last_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/lastWhere_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/lastWhere_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/lastWhere_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/lastWhere_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Stream/lastWhere_A04_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/last_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/last_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/last_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/length_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/listen_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/listen_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/listen_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/listen_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/listen_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/listen_A05_t02: Crash # (throw error): Unhandled node
-LibTest/async/Stream/listen_A05_t03: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/async/Stream/listen_A04_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LibTest/async/Stream/listen_A05_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/listen_A05_t02: Crash # unsupported element kind: _asyncCounter:field
+LibTest/async/Stream/listen_A05_t03: Crash # unsupported element kind: _asyncCounter:field
 LibTest/async/Stream/listen_A06_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/map_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/pipe_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/reduce_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/reduce_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/reduce_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/single_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/single_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/async/Stream/singleWhere_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/singleWhere_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamSink/add_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamSink/addError_A01_t01: Crash # (throw 2): Unhandled node
-LibTest/async/StreamSink/addStream_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamSink/addStream_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamSink/addStream_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamSink/addStream_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamSink/addStream_A01_t05: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamSink/close_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamSink/done_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Stream/single_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/single_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/skipWhile_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/Stream.eventTransformed_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/Stream.eventTransformed_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/Stream.fromFuture_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/Stream.fromFuture_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/Stream.fromFuture_A02_t02: Crash # unsupported element kind: error:field
-LibTest/async/Stream/Stream.fromIterable_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/Stream.fromIterable_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/Stream.fromIterable_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Stream/Stream.periodic_A01_t01: Crash # Please triage this failure.
-LibTest/async/Stream/Stream.periodic_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/Stream.periodic_A03_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/take_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/take_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Stream/take_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Stream/skip_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/takeWhile_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/take_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/take_A01_t02: Crash # Instance of 'TypeOperator': type casts not implemented.
+LibTest/async/Stream/take_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/toList_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/toSet_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/transform_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Stream/transform_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamTransformer/bind_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamTransformer/StreamTransformer_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/async/Stream/where_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Stream/where_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A03_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A04_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A05_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A06_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A07_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A07_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController.broadcast_A08_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController_A03_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController_A05_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController_A06_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/StreamController_A06_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/addError_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/addError_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/addStream_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/addStream_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/addStream_A02_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/addStream_A03_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/addStream_A03_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/add_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/close_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Future.
+LibTest/async/StreamController/close_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/done_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Future.
+LibTest/async/StreamController/done_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamController/sink_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for StreamSink.
+LibTest/async/StreamController/stream_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Stream.
+LibTest/async/StreamIterator/StreamIterator_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for StreamIterator.
+LibTest/async/StreamIterator/cancel_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamIterator/moveNext_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamIterator/moveNext_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/addError_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/addStream_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/addStream_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/addStream_A01_t03: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/addStream_A01_t05: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/add_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/close_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamSink/done_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t04: Crash # unsupported element kind: _completer:field
 LibTest/async/StreamTransformer/StreamTransformer_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/async/StreamTransformer/StreamTransformer_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/StreamTransformer/StreamTransformer_A02_t02: Crash # unsupported element kind: _completer:field
 LibTest/async/StreamTransformer/StreamTransformer_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/StreamTransformer/StreamTransformer_A03_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/where_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Stream/where_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Timer/cancel_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Timer/isActive_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Timer/isActive_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Timer/run_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Timer/run_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Timer/Timer_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Timer/Timer_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/StreamTransformer/bind_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Timer/Timer.periodic_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Timer/Timer.periodic_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Zone/bindBinaryCallback_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/bindBinaryCallback_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/bindCallback_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/bindCallback_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/bindUnaryCallback_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/bindUnaryCallback_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Timer/Timer_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Timer/Timer_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Timer/cancel_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Timer/isActive_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Timer/isActive_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Timer/run_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/async/Timer/run_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/async/Zone/bindBinaryCallback_A01_t02: Crash # (handler): handleStaticFunctionGet: function(handler)
+LibTest/async/Zone/bindCallback_A01_t02: Crash # (handler): handleStaticFunctionGet: function(handler)
+LibTest/async/Zone/bindUnaryCallback_A01_t02: Crash # (handler): handleStaticFunctionGet: function(handler)
 LibTest/async/Zone/createPeriodicTimer_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/async/Zone/createTimer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/current_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/async/Zone/createTimer_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Zone/current_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/async/Zone/fork_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/handleUncaughtError_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Zone/handleUncaughtError_A01_t02: Crash # (throw error): Unhandled node
-LibTest/async/Zone/handleUncaughtError_A01_t03: Crash # (throw count): Unhandled node
-LibTest/async/Zone/handleUncaughtError_A01_t04: Crash # (throw count): Unhandled node
-LibTest/async/Zone/inSameErrorZone_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/async/Zone/handleUncaughtError_A01_t01: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/async/Zone/handleUncaughtError_A01_t02: Crash # (myErrorHandler): handleStaticFunctionGet: function(myErrorHandler)
+LibTest/async/Zone/handleUncaughtError_A01_t03: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/async/Zone/handleUncaughtError_A01_t04: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/async/Zone/inSameErrorZone_A01_t01: Crash # (same): handleStaticFunctionGet: function(same)
 LibTest/async/Zone/inSameErrorZone_A01_t02: Crash # unsupported element kind: _asyncCounter:field
-LibTest/async/Zone/inSameErrorZone_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Zone/inSameErrorZone_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/async/Zone/inSameErrorZone_A01_t03: Crash # unsupported element kind: _completer:field
+LibTest/async/Zone/inSameErrorZone_A01_t04: Crash # unsupported element kind: _completer:field
 LibTest/async/Zone/inSameErrorZone_A01_t05: Crash # unsupported element kind: _completer:field
-LibTest/async/Zone/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/async/Zone/parent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/registerBinaryCallback_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/registerCallback_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/registerUnaryCallback_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/ROOT_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/run_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/runBinary_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/runBinaryGuarded_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/runGuarded_A01_t01: Crash # (throw 0): Unhandled node
-LibTest/async/Zone/runUnary_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/async/Zone/runUnaryGuarded_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/async/Zone/registerBinaryCallback_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for ZoneBinaryCallback.
+LibTest/async/Zone/registerCallback_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for ZoneCallback.
+LibTest/async/Zone/registerUnaryCallback_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for ZoneUnaryCallback.
+LibTest/async/Zone/runBinaryGuarded_A01_t01: Crash # (errorHandler): handleStaticFunctionGet: function(errorHandler)
+LibTest/async/Zone/runGuarded_A01_t01: Crash # (errorHandler): handleStaticFunctionGet: function(errorHandler)
+LibTest/async/Zone/runUnaryGuarded_A01_t01: Crash # (errorHandler): handleStaticFunctionGet: function(errorHandler)
 LibTest/async/Zone/scheduleMicrotask_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/async/Zone/scheduleMicrotask_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/collection/DoubleLinkedQueue/add_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/add_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/addAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/addAll_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/addFirst_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/addFirst_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/addLast_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/addLast_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/any_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/clear_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue.from_A01_t02: Crash # cannot compile methods that need interceptor calling convention.
-LibTest/collection/DoubleLinkedQueue/elementAt_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/elementAt_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/every_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/every_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/expand_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/expand_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/first_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/first_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/firstEntry_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/firstEntry_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/firstWhere_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/forEach_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/forEach_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/forEach_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/forEach_A01_t04: Crash #  "on T" catch block
-LibTest/collection/DoubleLinkedQueue/forEachEntry_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/forEachEntry_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/forEachEntry_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/forEachEntry_A01_t04: Crash #  "on T" catch block
-LibTest/collection/DoubleLinkedQueue/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/iterator_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/iterator_current_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/iterator_moveNext_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/join_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/last_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/last_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/lastEntry_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/lastEntry_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/lastWhere_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/length_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/remove_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/removeFirst_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/removeFirst_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/removeLast_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/removeLast_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/removeWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/retainWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/singleWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/singleWhere_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/skip_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/skipWhile_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/skipWhile_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/takeWhile_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/takeWhile_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/toList_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/toList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/DoubleLinkedQueue/toList_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/toString_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/DoubleLinkedQueue/where_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/HashMap/allTests_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/HashMap/allTests_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/HashMap/HashMap_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/HashMap/HashMap.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/HashMap/HashMap.from_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/HashSet/HashSet_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/HashSet/HashSet_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/HashSet/HashSet.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/HashSet/HashSet.from_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/HasNextIterator/HasNextIterator_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/IterableBase/IterableBase_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/IterableBase/IterableBase_class_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/IterableMixin/IterableMixin_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/IterableMixin/IterableMixin_class_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedHashMap/LinkedHashMap_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedHashMap/LinkedHashMap_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedHashMap/LinkedHashMap_class_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedHashMap/LinkedHashMap_class_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedHashMap/LinkedHashMap.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedHashMap/LinkedHashMap.from_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedHashSet/LinkedHashSet_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedHashSet/LinkedHashSet_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedHashSet/LinkedHashSet_class_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedHashSet/LinkedHashSet.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedHashSet/LinkedHashSet.from_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/add_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/add_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/addAll_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/addAll_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/addAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/addFirst_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/addFirst_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/clear_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/elementAt_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/every_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/every_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/every_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/expand_A02_t01: Crash # (throw new Exception("should not be called")): Unhandled node
-LibTest/collection/LinkedList/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/first_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/firstWhere_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/forEach_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/forEach_A01_t02: Crash # (try {var i=1;String s=i;return false;}on TypeError catch (e){return true;}): "on T" catch block
-LibTest/collection/LinkedList/forEach_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/iterator_current_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/join_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/last_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/lastWhere_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/lastWhere_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/length_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/LinkedList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/ListQueue.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/remove_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/singleWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/singleWhere_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/skip_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/skipWhile_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/skipWhile_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/skipWhile_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/takeWhile_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/LinkedList/takeWhile_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/toList_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/toList_A01_t02: Crash # cannot compile methods that need interceptor calling convention.
-LibTest/collection/LinkedList/toList_A01_t03: Crash # (try {l.clear();failures.add("clear");}on UnsupportedError catch (ok){}): "on T" catch block
-LibTest/collection/LinkedList/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/where_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/LinkedList/where_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/ListBase/ListBase_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/ListBase/ListBase_class_A01_t02: Crash # Please triage this failure.
-LibTest/collection/ListMixin/ListMixin_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/ListMixin/ListMixin_class_A01_t02: Crash # Please triage this failure.
-LibTest/collection/ListQueue/ListQueue_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/ListQueue/ListQueue_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/ListQueue/ListQueue.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/ListQueue/ListQueue.from_A01_t02: Crash # cannot compile methods that need interceptor calling convention.
-LibTest/collection/ListQueue/ListQueue.from_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/Maps/containsValue_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/forEach_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/forEach_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/Maps/forEach_A01_t04: Crash #  "on T" catch block
-LibTest/collection/Maps/forEach_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/forEach_A01_t08: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/forEach_A02_t01: Crash #  "on T" catch block
-LibTest/collection/Maps/getValues_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/length_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/mapToString_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/mapToString_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/Maps/putIfAbsent_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/putIfAbsent_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/putIfAbsent_A01_t04: Crash #  "on T" catch block
-LibTest/collection/Maps/putIfAbsent_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/putIfAbsent_A01_t07: Crash #  "on T" catch block
-LibTest/collection/Maps/putIfAbsent_A01_t08: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Maps/putIfAbsent_A01_t09: Crash # handleStaticFunctionGet: function(A#f)
-LibTest/collection/Maps/putIfAbsent_A01_t10: Crash #  "on T" catch block
-LibTest/collection/Maps/putIfAbsent_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Queue/Queue_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Queue/Queue_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/collection/Queue/Queue.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/collection/Queue/Queue.from_A01_t02: Crash # cannot compile methods that need interceptor calling convention.
-LibTest/collection/Queue/Queue.from_A02_t01: Crash #  "on T" catch block
-LibTest/collection/SplayTreeMap/allTests_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonCodec/decode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/convert/JsonCodec/decode_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/convert/JsonCodec/decode_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonCodec/encode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonCodec/encode_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonCodec/encode_A02_t01: Crash #  "on T" catch block
-LibTest/convert/JsonCodec/encode_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonCodec/encode_A02_t03: Crash #  "on T" catch block
-LibTest/convert/JsonCodec/encode_A03_t01: Crash #  "on T" catch block
-LibTest/convert/JsonCodec/JsonCodec_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonCodec/JsonCodec.withReviver_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonDecoder/convert_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/convert/JsonDecoder/convert_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/convert/JsonDecoder/convert_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonDecoder/fuse_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonEncoder/convert_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/convert/JsonEncoder/convert_A02_t01: Crash #  "on T" catch block
-LibTest/convert/JsonEncoder/fuse_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/AbstractClassInstantiationError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/ArgumentError/ArgumentError_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/ArgumentError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/AssertionError/AssertionError_A01_t01: Crash #  "on T" catch block
-LibTest/core/AssertionError/toString_A01_t01: Crash #  "on T" catch block
-LibTest/core/bool/toString_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/bool/toString_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/add_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/add_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/add_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/add_A02_t01: Crash #  "on T" catch block
-LibTest/core/DateTime/compareTo_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/DateTime_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/DateTime_A01_t02: Crash #  "on T" catch block
-LibTest/core/DateTime/DateTime_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/DateTime_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/DateTime.fromMillisecondsSinceEpoch_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/DateTime.fromMillisecondsSinceEpoch_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/DateTime.fromMillisecondsSinceEpoch_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/DateTime.now_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/DateTime.now_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/DateTime.now_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/DateTime.utc_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/day_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/difference_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/difference_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/difference_A02_t01: Crash #  "on T" catch block
-LibTest/core/DateTime/hashCode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/hashCode_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/hour_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/isAfter_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/isAtSameMomentAs_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/isBefore_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/isUtc_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/millisecond_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/millisecondsSinceEpoch_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/minute_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/month_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/parse_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/parse_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/parse_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/second_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/subtract_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/subtract_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/subtract_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/subtract_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/timeZoneName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/timeZoneOffset_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/toLocal_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/toString_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/toString_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/DateTime/toUtc_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/weekday_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/DateTime/year_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/abs_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/abs_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/abs_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/abs_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/abs_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceil_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceil_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceil_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceil_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceil_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceil_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceil_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceilToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceilToDouble_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceilToDouble_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceilToDouble_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceilToDouble_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/ceilToDouble_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/ceilToDouble_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/compareTo_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/compareTo_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/compareTo_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/double_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floor_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floor_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floor_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floor_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floor_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floorToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floorToDouble_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floorToDouble_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floorToDouble_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/floorToDouble_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/floorToDouble_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/INFINITY_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/INFINITY_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/INFINITY_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/INFINITY_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isInfinite_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isInfinite_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isInfinite_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isNaN_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isNaN_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isNaN_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isNegative_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/isNegative_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NAN_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NAN_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NAN_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NAN_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NEGATIVE_INFINITY_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NEGATIVE_INFINITY_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NEGATIVE_INFINITY_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/NEGATIVE_INFINITY_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_addition_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_addition_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_addition_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_addition_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_addition_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_addition_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_addition_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_addition_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_addition_A02_t01: Crash # (try {d+null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_division_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_division_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_division_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_division_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A01_t12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_division_A02_t01: Crash # (try {d/null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_GE_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_GE_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_GE_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_GE_A02_t01: Crash # (try {d>=null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_GT_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_GT_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_GT_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_GT_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_GT_A02_t01: Crash # (try {d>null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_LE_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_LE_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_LE_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_LE_A02_t01: Crash # (try {d<=null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_LT_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_LT_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_LT_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_LT_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_LT_A02_t01: Crash # (try {d<null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_multiplication_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_multiplication_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_multiplication_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_multiplication_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_multiplication_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_multiplication_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_multiplication_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_multiplication_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_multiplication_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_multiplication_A02_t01: Crash # (try {d*null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_remainder_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_remainder_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_remainder_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_remainder_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_remainder_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_remainder_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_remainder_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_remainder_A02_t01: Crash # (try {val%null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_subtraction_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_subtraction_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_subtraction_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_subtraction_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_subtraction_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_subtraction_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_subtraction_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_subtraction_A01_t08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_subtraction_A01_t09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_subtraction_A02_t01: Crash # (try {d-null;Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/double/operator_truncating_division_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_truncating_division_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_truncating_division_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_truncating_division_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_truncating_division_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_truncating_division_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_truncating_division_A01_t07: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_truncating_division_A01_t08: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_truncating_division_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_unary_minus_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_unary_minus_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/operator_unary_minus_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/operator_unary_minus_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/parse_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/parse_A02_t01: Crash #  "on T" catch block
-LibTest/core/double/remainder_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/remainder_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/remainder_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/remainder_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/remainder_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/remainder_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/remainder_A01_t07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/remainder_A02_t01: Crash #  "on T" catch block
-LibTest/core/double/round_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/round_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/round_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/round_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/round_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/round_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/roundToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/roundToDouble_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/roundToDouble_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/roundToDouble_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/roundToDouble_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/roundToDouble_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toDouble_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/toDouble_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toInt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toInt_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toInt_A01_t03: Crash # Please triage this failure.
-LibTest/core/double/toInt_A01_t04: Crash # Please triage this failure.
-LibTest/core/double/toInt_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toInt_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsExponential_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsExponential_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsExponential_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsExponential_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsExponential_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsExponential_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsExponential_A02_t01: Crash # Please triage this failure.
-LibTest/core/double/toStringAsFixed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsFixed_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsFixed_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsFixed_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsFixed_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsFixed_A02_t01: Crash # Please triage this failure.
-LibTest/core/double/toStringAsFixed_A02_t02: Crash # Please triage this failure.
-LibTest/core/double/toStringAsFixed_A02_t03: Crash # Please triage this failure.
-LibTest/core/double/toStringAsPrecision_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsPrecision_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsPrecision_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsPrecision_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsPrecision_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/toStringAsPrecision_A01_t06: Crash # Please triage this failure.
-LibTest/core/double/toStringAsPrecision_A01_t07: Crash # Please triage this failure.
-LibTest/core/double/toStringAsPrecision_A01_t08: Crash # Please triage this failure.
-LibTest/core/double/toStringAsPrecision_A02_t01: Crash #  "on T" catch block
-LibTest/core/double/truncate_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncate_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncate_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncate_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncate_A02_t01: Crash #  "on T" catch block
-LibTest/core/double/truncate_A02_t02: Crash #  "on T" catch block
-LibTest/core/double/truncateToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncateToDouble_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncateToDouble_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/double/truncateToDouble_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncateToDouble_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/double/truncateToDouble_A01_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/compareTo_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/compareTo_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/Duration_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/Duration_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/Duration_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/HOURS_PER_DAY_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/inDays_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/inHours_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/inMilliseconds_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/inMinutes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/inSeconds_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/MILLISECONDS_PER_DAY_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/MILLISECONDS_PER_HOUR_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/MILLISECONDS_PER_MINUTE_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/MILLISECONDS_PER_SECOND_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/MINUTES_PER_DAY_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/MINUTES_PER_HOUR_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_div_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_eq_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_gt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_gte_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_lt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_lte_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_minus_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_mult_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/operator_plus_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/SECONDS_PER_DAY_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/SECONDS_PER_HOUR_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Duration/SECONDS_PER_MINUTE_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Expando/Expando_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Expando/Expando_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Expando/Expando_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Expando/Expando_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Expando/Expando_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Expando/Expando_A03_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Expando/Expando_A03_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Expando/Expando_A03_t05: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Expando/Expando_A03_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Expando/Expando_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Expando/Expando_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/FallThroughError/toString_A01_t01: Crash #  "on T" catch block
-LibTest/core/FallThroughError/toString_A01_t02: Crash #  "on T" catch block
-LibTest/core/FormatException/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Function/apply_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Function/Function_class_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/abs_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/ceil_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/ceilToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/compareTo_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/compareTo_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/IntegerDivisionByZeroException/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/floor_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/floorToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/isEven_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/isInfinite_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/isNaN_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/isNegative_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/isOdd_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_addition_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_AND_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_division_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_division_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_division_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_GE_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_GT_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_LE_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_left_shift_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_left_shift_A01_t03: Crash #  "on T" catch block
-LibTest/core/int/operator_LT_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_multiplication_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_NOT_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_OR_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_remainder_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_remainder_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_remainder_A01_t03: Crash #  "on T" catch block
-LibTest/core/int/operator_right_shift_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_right_shift_A01_t03: Crash #  "on T" catch block
-LibTest/core/int/operator_subtraction_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/operator_truncating_division_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_truncating_division_A01_t02: Crash #  "on T" catch block
-LibTest/core/int/operator_unary_minus_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/operator_XOR_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/parse_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/parse_A02_t01: Crash #  "on T" catch block
-LibTest/core/int/remainder_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/remainder_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/remainder_A01_t03: Crash #  "on T" catch block
-LibTest/core/int/round_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/roundToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toInt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toRadixString_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/int/toRadixString_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toStringAsExponential_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toStringAsExponential_A02_t01: Crash # Please triage this failure.
-LibTest/core/int/toStringAsExponential_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toStringAsFixed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toStringAsFixed_A02_t01: Crash # Please triage this failure.
-LibTest/core/int/toStringAsPrecision_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/toStringAsPrecision_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/truncate_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/int/truncateToDouble_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Invocation/isAccessor_A01_t01: Crash # (super.foo): Error expression `super.foo` unhandled.
-LibTest/core/Invocation/isAccessor_A01_t02: Crash # (super.foo()): Error expression `super.foo()` unhandled.
-LibTest/core/Invocation/isGetter_A01_t01: Crash # (super.foo): Error expression `super.foo` unhandled.
-LibTest/core/Invocation/isGetter_A01_t02: Crash # (super.foo()): Error expression `super.foo()` unhandled.
-LibTest/core/Invocation/isMethod_A01_t01: Crash # (super.foo()): Error expression `super.foo()` unhandled.
-LibTest/core/Invocation/isMethod_A01_t02: Crash # (super.foo): Error expression `super.foo` unhandled.
-LibTest/core/Invocation/isSetter_A01_t01: Crash # (super.bar=1): Error expression `super.bar=1` unhandled.
-LibTest/core/Invocation/isSetter_A01_t02: Crash # (super.foo()): Error expression `super.foo()` unhandled.
-LibTest/core/Invocation/memberName_A01_t01: Crash # (super.foo): Error expression `super.foo` unhandled.
-LibTest/core/Invocation/namedArguments_A01_t01: Crash # (super.foo): Error expression `super.foo` unhandled.
-LibTest/core/Invocation/positionalArguments_A01_t01: Crash # (super.foo): Error expression `super.foo` unhandled.
-LibTest/core/Iterable/Iterable.generate_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/List/List_A01_t01: Crash # (try {a[0]=1;Expect.fail("expected RangeError");}on RangeError catch (ok){}): "on T" catch block
-LibTest/core/List/List_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/List/List_A02_t01: Crash #  "on T" catch block
-LibTest/core/List/List_A03_t01: Crash #  "on T" catch block
-LibTest/core/List/List_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/List/List_class_A01_t02: Crash # Please triage this failure.
-LibTest/core/List/List.filled_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/List/List.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/List/List.from_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/List/List.from_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/List/List.generate_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/List/List.generate_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/List/List.generate_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/List/removeAt_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Map/allTests_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Map/Map_A01_t01: Crash # unimplemented translation of type expression SomeFunction
-LibTest/core/Map/Map_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Map/Map_class_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Map/Map_class_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Map/Map_class_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Map/Map_class_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Match/end_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Match/group_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Match/group_A02_t01: Crash #  "on T" catch block
-LibTest/core/Match/groupCount_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Match/groups_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Match/groups_A02_t01: Crash #  "on T" catch block
-LibTest/core/Match/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Match/operator_subscript_A02_t01: Crash # (try {m[index];Expect.fail("RangeError is expected");}on RangeError catch (e){}): "on T" catch block
-LibTest/core/Match/pattern_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Match/start_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Match/str_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/NoSuchMethodError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Null/Null_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Null/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Object/operator_equality_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Object/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/OutOfMemoryError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RangeError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/allMatches_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/allMatches_A02_t01: Crash #  "on T" catch block
-LibTest/core/RegExp/firstMatch_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/firstMatch_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/firstMatch_A03_t01: Crash #  "on T" catch block
-LibTest/core/RegExp/hasMatch_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/hasMatch_A02_t01: Crash # (try {re.hasMatch(null);Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/RegExp/isCaseSensitive_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/isMultiLine_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/pattern_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_AtomEscape_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClass_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClass_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/DoubleLinkedQueue/elementAt_A02_t01: Crash # unsupported element kind: queue:field
+LibTest/collection/DoubleLinkedQueue/expand_A01_t02: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/DoubleLinkedQueue/expand_A02_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/DoubleLinkedQueue/forEachEntry_A01_t04: RuntimeError # Please triage this failure.
+LibTest/collection/DoubleLinkedQueue/forEach_A01_t04: RuntimeError # Please triage this failure.
+LibTest/collection/DoubleLinkedQueue/iterator_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Iterator.
+LibTest/collection/DoubleLinkedQueue/map_A01_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/DoubleLinkedQueue/map_A02_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/DoubleLinkedQueue/map_A03_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/DoubleLinkedQueue/skipWhile_A02_t01: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/collection/DoubleLinkedQueue/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/collection/DoubleLinkedQueue/takeWhile_A02_t01: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/collection/DoubleLinkedQueue/toList_A01_t03: Crash # unsupported element kind: failures:field
+LibTest/collection/HashMap/HashMap_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for HashMap.
+LibTest/collection/HashMap/allTests_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/HashMap/allTests_A01_t02: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/HashSet/HashSet_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for HashSet.
+LibTest/collection/HashSet/HashSet_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/IterableBase/IterableBase_class_A01_t02: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/LinkedHashMap/LinkedHashMap_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for LinkedHashMap.
+LibTest/collection/LinkedHashMap/LinkedHashMap_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/LinkedHashMap/LinkedHashMap_class_A01_t02: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/LinkedHashSet/LinkedHashSet_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for LinkedHashSet.
+LibTest/collection/LinkedHashSet/LinkedHashSet_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/LinkedList/any_A01_t01: Crash # (isOne): handleStaticFunctionGet: function(isOne)
+LibTest/collection/LinkedList/every_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+LibTest/collection/LinkedList/every_A01_t02: Crash # (allTrue): handleStaticFunctionGet: function(allTrue)
+LibTest/collection/LinkedList/every_A02_t02: Crash # (allTrue): handleStaticFunctionGet: function(allTrue)
+LibTest/collection/LinkedList/forEach_A02_t01: Crash # unsupported element kind: list:field
+LibTest/collection/LinkedList/lastWhere_A02_t01: Crash # unsupported element kind: noneMatches:field
+LibTest/collection/LinkedList/map_A01_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/LinkedList/map_A02_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/LinkedList/map_A03_t01: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/collection/LinkedList/skipWhile_A02_t01: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/collection/LinkedList/takeWhile_A02_t01: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/collection/LinkedList/toList_A01_t03: Crash # unsupported element kind: failures:field
+LibTest/collection/LinkedList/where_A02_t01: Crash # (test): handleStaticFunctionGet: function(test)
+LibTest/collection/ListBase/ListBase_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/ListBase/ListBase_class_A01_t02: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/ListMixin/ListMixin_class_A01_t02: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/ListQueue/ListQueue_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/Maps/putIfAbsent_A01_t09: Crash # (A.f): handleStaticFunctionGet: function(A#f)
+LibTest/collection/Queue/Queue_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/collection/SplayTreeMap/allTests_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/convert/JsonCodec/JsonCodec.withReviver_A01_t01: Crash # (reviver): handleStaticFunctionGet: function(reviver)
+LibTest/convert/JsonCodec/JsonCodec_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Codec.
+LibTest/convert/JsonCodec/decode_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/convert/JsonCodec/decode_A02_t01: Crash # (reviver): handleStaticFunctionGet: function(reviver)
+LibTest/convert/JsonCodec/decode_A03_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonCodec/encode_A01_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonCodec/encode_A01_t02: Crash # unsupported element kind: table:field
+LibTest/convert/JsonCodec/encode_A02_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonCodec/encode_A02_t03: Crash # unsupported element kind: table:field
+LibTest/convert/JsonCodec/encode_A03_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonDecoder/convert_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/convert/JsonDecoder/convert_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/convert/JsonDecoder/convert_A03_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonDecoder/fuse_A01_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonEncoder/convert_A01_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonEncoder/convert_A02_t01: Crash # unsupported element kind: table:field
+LibTest/convert/JsonEncoder/fuse_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/core/Duration/compareTo_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Comparable.
+LibTest/core/FallThroughError/toString_A01_t02: Crash #  Unhandled node
+LibTest/core/Function/Function_class_A01_t01: Crash # (foo): handleStaticFunctionGet: function(foo)
+LibTest/core/Function/apply_A01_t01: Crash # (foo): handleStaticFunctionGet: function(foo)
+LibTest/core/Invocation/isAccessor_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/Invocation/isGetter_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/core/Invocation/isGetter_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/Invocation/isMethod_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/Invocation/isSetter_A01_t01: Crash # Please triage this failure.
+LibTest/core/Invocation/memberName_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/Invocation/namedArguments_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/core/Invocation/positionalArguments_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/core/List/List.from_A01_t03: Crash # unsupported element kind: failures:field
+LibTest/core/List/List.generate_A01_t03: Crash # unsupported element kind: failures:field
+LibTest/core/List/List_A01_t03: Crash # unsupported element kind: failures:field
+LibTest/core/List/List_class_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/core/List/List_class_A01_t02: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/core/List/removeAt_A02_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/core/Map/Map_A01_t01: Crash # Please triage this failure.
+LibTest/core/Map/allTests_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/core/Object/operator_equality_A01_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+LibTest/core/Object/toString_A01_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Crash #  Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A07_t01: Crash # Please triage this failure.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A08_t01: Crash # Please triage this failure.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A08_t02: Crash # Please triage this failure.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A09_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: Crash # Please triage this failure.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Crash #  "on T" catch block
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t03: Crash #  "on T" catch block
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t04: Crash # Please triage this failure.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Crash # Please triage this failure.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Crash # Please triage this failure.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Quantifier_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: Crash #  Unhandled node
-LibTest/core/RegExp/RegExp_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RegExp/RegExp_A01_t03: Crash #  "on T" catch block
-LibTest/core/RegExp/RegExp_A01_t04: Crash #  "on T" catch block
-LibTest/core/RegExp/stringMatch_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RegExp/stringMatch_A02_t01: Crash #  "on T" catch block
-LibTest/core/RuneIterator/current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/current_A01_t02: Crash #  "on T" catch block
-LibTest/core/RuneIterator/currentAsString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/currentAsString_A01_t02: Crash #  "on T" catch block
-LibTest/core/RuneIterator/currentAsString_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/currentAsString_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/currentSize_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/currentSize_A01_t02: Crash #  "on T" catch block
-LibTest/core/RuneIterator/currentSize_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/moveNext_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/movePrevious_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/movePrevious_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/movePrevious_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/rawIndex_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/rawIndex_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/rawIndex_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/rawIndex_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/rawIndex_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/rawIndex_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/reset_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/reset_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/reset_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/reset_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/reset_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/reset_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/RuneIterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/RuneIterator.at_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/RuneIterator.at_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/RuneIterator/RuneIterator.at_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/RuneIterator.at_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/RuneIterator.at_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/string_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/RuneIterator/string_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/core/Runes/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/first_A01_t02: Crash #  "on T" catch block
-LibTest/core/Runes/first_A02_t01: Crash #  "on T" catch block
-LibTest/core/Runes/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/core/Runes/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/core/Runes/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/core/Runes/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/core/Runes/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/last_A01_t02: Crash #  "on T" catch block
-LibTest/core/Runes/last_A02_t01: Crash #  "on T" catch block
-LibTest/core/Runes/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/core/Runes/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/length_A01_t02: Crash #  "on T" catch block
-LibTest/core/Runes/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/core/Runes/Runes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/single_A01_t02: Crash #  "on T" catch block
-LibTest/core/Runes/single_A02_t01: Crash #  "on T" catch block
-LibTest/core/Runes/single_A02_t02: Crash #  "on T" catch block
-LibTest/core/Runes/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/core/Runes/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/core/Runes/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/string_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/string_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/toList_A02_t01: Crash #  "on T" catch block
-LibTest/core/Runes/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Runes/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Runes/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Set/add_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/add_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/add_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/addAll_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/addAll_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/clear_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/contains_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/containsAll_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/containsAll_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/every_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/every_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/forEach_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/forEach_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/forEach_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/forEach_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/forEach_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/intersection_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/intersection_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/intersection_A02_t01: Crash # (try {res=s.intersection(null);}on Error catch (e){return;}): "on T" catch block
-LibTest/core/Set/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/IterableBase_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/length_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/remove_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/remove_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/remove_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/removeAll_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/removeAll_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Set/Set_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Set/Set.from_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/Set.from_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Set/Set.from_A02_t01: Crash # (try {new Set.from(null);Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/StackOverflowError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StateError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Stopwatch/elapsed_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/core/Stopwatch/elapsed_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/core/Stopwatch/elapsed_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/core/Stopwatch/elapsedInMs_A01_t01: Crash # unsupported element kind: delay:field
-LibTest/core/Stopwatch/elapsedInUs_A01_t01: Crash # unsupported element kind: delay:field
-LibTest/core/Stopwatch/elapsedTicks_A01_t01: Crash # unsupported element kind: delay:field
-LibTest/core/Stopwatch/elapsedTicks_A01_t02: Crash # unsupported element kind: delay:field
-LibTest/core/Stopwatch/elapsedTicks_A01_t03: Crash # unsupported element kind: delay:field
-LibTest/core/Stopwatch/frequency_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Stopwatch/start_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/core/Stopwatch/start_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/core/Stopwatch/start_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/core/Stopwatch/stop_A01_t01: Crash # unsupported element kind: delay:field
-LibTest/core/Stopwatch/Stopwatch_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/clear_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/StringBuffer/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/StringBuffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/StringBuffer_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/write_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/write_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/writeAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/writeAll_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/StringBuffer/writeAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/codeUnitAt_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/codeUnitAt_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/codeUnitAt_A03_t01: Crash #  "on T" catch block
-LibTest/core/String/codeUnits_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/compareTo_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/contains_A01_t02: Crash #  "on T" catch block
-LibTest/core/String/contains_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/contains_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/endsWith_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/endsWith_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/endsWith_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/endsWith_A02_t01: Crash # (try {"".endsWith(null);Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/String/hashCode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/indexOf_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/indexOf_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/lastIndexOf_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/lastIndexOf_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/length_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/operator_equality_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/operator_subscript_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/replaceAll_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/replaceAll_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/replaceFirst_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/replaceFirst_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/split_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/split_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/split_A02_t01: Crash # (try {"1111".split(null);Expect.fail("Error is expected");}on Error catch (e){}): "on T" catch block
-LibTest/core/String/startsWith_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/startsWith_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/startsWith_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/startsWith_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/String_class_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/String_class_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/String_class_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/String.fromCharCodes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/String.fromCharCodes_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/String.fromCharCodes_A03_t01: Crash #  "on T" catch block
-LibTest/core/String/substring_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/substring_A02_t01: Crash #  "on T" catch block
-LibTest/core/String/toLowerCase_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/toLowerCase_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/toLowerCase_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/toLowerCase_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/toUpperCase_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/toUpperCase_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/String/toUpperCase_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/toUpperCase_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/trim_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/String/trim_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Symbol/Symbol_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Symbol/Symbol_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Symbol/Symbol_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Symbol/Symbol_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Symbol/Symbol_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/TypeError/toString_A01_t01: Crash #  "on T" catch block
-LibTest/core/UnimplementedError/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/authority_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/decodeComponent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/decodeFull_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/decodeQueryComponent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/decodeQueryComponent_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/encodeComponent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/encodeComponent_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/encodeFull_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/encodeFull_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/encodeQueryComponent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/encodeQueryComponent_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/fragment_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/hasAuthority_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/hashCode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/host_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/isAbsolute_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/operator_eq_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/origin_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/parse_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/parse_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/parse_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/path_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/path_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/pathSegments_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/pathSegments_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/pathSegments_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/pathSegments_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/port_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/query_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/query_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/queryParameters_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/queryParameters_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/queryParameters_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/resolve_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/resolveUri_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/scheme_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/splitQueryString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/splitQueryString_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/toFilePath_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/toFilePath_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/toFilePath_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/toFilePath_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/toFilePath_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/toFilePath_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/Uri_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A05_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A06_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.file_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/Uri.file_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.file_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.file_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/core/Uri/Uri.file_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.http_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.http_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.http_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.http_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.https_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.https_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.https_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/Uri.https_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/core/Uri/userInfo_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/core/Runes/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/core/Runes/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/core/Runes/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/core/Set/IterableBase_A01_t01: Crash # (create): handleStaticFunctionGet: function(create)
+LibTest/core/Set/Set_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+LibTest/core/Set/add_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/Stopwatch/elapsedInMs_A01_t01: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/elapsedInUs_A01_t01: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/elapsedTicks_A01_t01: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/elapsedTicks_A01_t02: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/elapsedTicks_A01_t03: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/elapsed_A01_t01: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/elapsed_A01_t02: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/elapsed_A01_t03: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/start_A01_t01: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/start_A01_t02: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/start_A01_t03: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/Stopwatch/stop_A01_t01: Crash # (proc1): handleStaticFunctionGet: function(proc1)
+LibTest/core/String/String_class_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Comparable.
+LibTest/core/Symbol/Symbol_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/Symbol/Symbol_A01_t05: RuntimeError # Please triage this failure.
+LibTest/core/Uri/Uri_A06_t02: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/Uri_A06_t03: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/decodeComponent_A01_t01: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/decodeFull_A01_t01: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/decodeQueryComponent_A01_t01: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/encodeComponent_A01_t01: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/encodeFull_A01_t01: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/encodeFull_A01_t02: Crash # unsupported element kind: canBeNotEncoded:field
+LibTest/core/Uri/encodeQueryComponent_A01_t01: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/encodeQueryComponent_A01_t02: Crash # (encodeOctet): handleStaticFunctionGet: function(encodeOctet)
+LibTest/core/Uri/parse_A02_t01: Crash # unsupported element kind: r:field
+LibTest/core/Uri/pathSegments_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/core/Uri/pathSegments_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/core/Uri/pathSegments_A01_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/core/Uri/queryParameters_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/core/Uri/queryParameters_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/core/Uri/splitQueryString_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/core/Uri/splitQueryString_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/core/double/INFINITY_A01_t04: Pass # Please triage this failure.
+LibTest/core/double/NEGATIVE_INFINITY_A01_t04: Pass # Please triage this failure.
+LibTest/core/double/operator_GE_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_GE_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_GE_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_GT_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_GT_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_GT_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_LE_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_LE_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_LE_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_LT_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_LT_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_LT_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_addition_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_addition_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_addition_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_addition_A01_t04: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_addition_A01_t07: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_addition_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t04: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t05: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t07: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t08: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A01_t11: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_division_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_multiplication_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_multiplication_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_multiplication_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_multiplication_A01_t04: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_multiplication_A01_t06: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_multiplication_A01_t08: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_multiplication_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_remainder_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_remainder_A01_t04: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_remainder_A01_t05: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_remainder_A01_t06: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_remainder_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_subtraction_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_subtraction_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_subtraction_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_subtraction_A01_t04: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_subtraction_A01_t07: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_subtraction_A01_t08: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_subtraction_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_truncating_division_A01_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_truncating_division_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_truncating_division_A01_t03: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_truncating_division_A01_t05: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_truncating_division_A01_t08: RuntimeError # Please triage this failure.
+LibTest/core/double/operator_truncating_division_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/remainder_A01_t02: RuntimeError # Please triage this failure.
+LibTest/core/double/remainder_A01_t04: RuntimeError # Please triage this failure.
+LibTest/core/double/remainder_A01_t05: RuntimeError # Please triage this failure.
+LibTest/core/double/remainder_A01_t06: RuntimeError # Please triage this failure.
+LibTest/core/double/remainder_A02_t01: RuntimeError # Please triage this failure.
+LibTest/core/double/toStringAsFixed_A02_t01: RuntimeError # Please triage this failure.
 LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: Crash # unsupported element kind: _completer:field
@@ -14158,49 +10929,16 @@
 LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t05: Crash # unsupported element kind: _completer:field
 LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t06: Crash # unsupported element kind: _completer:field
 LibTest/html/Document/addEventListener_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Document/adoptNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/append_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/append_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/append_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/childNodes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/childNodes_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/clone_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/clone_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/contains_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/createDocumentFragment_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/createElement_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Document/childNodes_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for DocumentType.
+LibTest/html/Document/clone_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LibTest/html/Document/dispatchEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Document/documentElement_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/firstChild_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/getElementById_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/getElementsByClassName_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/getElementsByName_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/getElementsByTagName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/hasChildNodes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/importNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/insertAllBefore_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/insertAllBefore_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/insertBefore_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/insertBefore_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/lastChild_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/nextNode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/nodeName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/nodes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/nodeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/nodeValue_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Document/nodes_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LibTest/html/Document/on_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Document/on_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/html/Document/ownerDocument_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/parent_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/parentNode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/previousNode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/querySelector_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/querySelectorAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/readyState_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/removeEventListener_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/securityPolicy_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Document/text_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Document/window_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Document/querySelectorAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/html/Document/removeEventListener_A01_t01: Crash # (listener): handleStaticFunctionGet: function(listener)
+LibTest/html/Document/securityPolicy_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for SecurityPolicy.
+LibTest/html/Element/Element.tag_A01_t01: Crash # unsupported element kind: Html5Elements:field
 LibTest/html/Element/abortEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/addEventListener_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/addEventListener_A01_t02: Crash # unsupported element kind: _completer:field
@@ -14208,116 +10946,52 @@
 LibTest/html/Element/addEventListener_A01_t04: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/addEventListener_A01_t05: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/addEventListener_A01_t06: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/append_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/append_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/append_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/appendHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/appendText_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Element/attributeChanged_A01_t01: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/Element/attributes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/attributes_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Element/attributes_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/Element/beforeCopyEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/beforeCutEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/beforePasteEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/blur_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/blurEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/borderEdge_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Element/blur_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/changeEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/childNodes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/childNodes_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/children_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/children_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/classes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/className_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/click_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/clickEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/clone_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/clone_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/clone_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/clone_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/contains_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/contains_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/contentEdge_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/contentEditable_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/contentEditable_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Element/click_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/Element/clone_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/html/Element/clone_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/Element/contextMenuEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/copyEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/createFragment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/createFragment_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/createFragment_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Element/createFragment_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/Element/createFragment_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/Element/createFragment_A01_t03: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/Element/cutEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/dataset_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/dataset_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/dataset_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/dir_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/dir_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/documentOffset_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Element/dataset_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/Element/dataset_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/Element/dataset_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/Element/doubleClickEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/dragEndEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/dragEnterEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/dragEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/draggable_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/draggable_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Element/dragLeaveEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/dragOverEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/dragStartEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/dropEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/Element_element_ctors_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/Element.html_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/Element.html_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/Element.html_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/Element.html_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/Element.html_A04_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/Element.tag_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/Element.tag_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Element/enteredView_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/Element/errorEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/firstChild_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/focus_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/focusEvent_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/Element/focus_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/fullscreenChangeEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/fullscreenErrorEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/getAttribute_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/getAttributeNS_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/getAttributeNS_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/getBoundingClientRect_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/getBoundingClientRect_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/getClientRects_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/getClientRects_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/getElementsByClassName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/getElementsByClassName_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/getNamespacedAttributes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/hasChildNodes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/hidden_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/id_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/innerHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/innerHtml_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Element/getClientRects_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/html/Element/getNamespacedAttributes_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/Element/innerHtml_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/Element/inputEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/insertAdjacentElement_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/insertAdjacentHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/insertAdjacentText_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/insertAllBefore_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/insertAllBefore_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/insertBefore_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/insertBefore_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Element/invalidEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/isContentEditable_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/isContentEditable_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/isTagSupported_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/isTagSupported_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/isTagSupported_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Element/isTagSupported_A01_t01: Crash # unsupported element kind: Html5Elements:field
 LibTest/html/Element/keyDownEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/keyPressEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/keyUpEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/lang_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/lang_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/lastChild_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Element/leftView_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/Element/loadEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/marginEdge_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/matches_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/matchesWithAncestors_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LibTest/html/Element/mouseDownEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/mouseEnterEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/mouseLeaveEvent_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14326,26 +11000,6 @@
 LibTest/html/Element/mouseOverEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/mouseUpEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/mouseWheelEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/namespaceUri_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nextElementSibling_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nextNode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/nodeName_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nodeName_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nodeName_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nodeName_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nodeName_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nodeName_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nodes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/nodes_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/offset_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/offsetHeight_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/offsetLeft_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/offsetParent_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/offsetTo_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/offsetTo_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/offsetTop_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/offsetWidth_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/on_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onAbort_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onBeforeCopy_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onBeforeCut_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14357,12 +11011,12 @@
 LibTest/html/Element/onCopy_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onCut_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onDoubleClick_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/onDrag_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onDragEnd_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onDragEnter_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onDragLeave_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onDragOver_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onDragStart_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/Element/onDrag_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onDrop_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onError_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onFocus_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14386,8 +11040,8 @@
 LibTest/html/Element/onReset_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onScroll_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onSearch_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/onSelect_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onSelectStart_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/Element/onSelect_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onSubmit_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onTouchCancel_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onTouchEnd_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14396,56 +11050,22 @@
 LibTest/html/Element/onTouchMove_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onTouchStart_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/onTransitionEnd_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/outerHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/ownerDocument_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/ownerDocument_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/ownerDocument_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/ownerDocument_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/ownerDocument_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/paddingEdge_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/parent_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/parent_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/parent_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/parentNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/parentNode_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/parentNode_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Element/on_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/pasteEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/previousElementSibling_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/previousNode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/query_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/queryAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/querySelector_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/querySelectorAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/querySelectorAll_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/remove_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Element/queryAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/html/Element/querySelectorAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LibTest/html/Element/removeEventListener_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/Element/removeEventListener_A01_t02: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/Element/replaceWith_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/replaceWith_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Element/resetEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/scrollEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/searchEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/selectEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/selectStartEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/setAttribute_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/setAttributeNS_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/setInnerHtml_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/setInnerHtml_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/setInnerHtml_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/spellcheck_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/spellcheck_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/style_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/style_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Element/setInnerHtml_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/Element/setInnerHtml_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/Element/setInnerHtml_A01_t03: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/Element/submitEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/tabIndex_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/tagName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/tagName_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/tagName_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/text_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Element/text_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/text_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/text_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Element/title_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Element/tagName_A01_t01: Crash # unsupported element kind: Html5Elements:field
 LibTest/html/Element/touchCancelEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/touchEndEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/touchEnterEvent_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14453,144 +11073,66 @@
 LibTest/html/Element/touchMoveEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/touchStartEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Element/transitionEndEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Element/translate_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Event/bubbles_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Event/cancelable_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Event/currentTarget_A01_t01: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/Event/defaultPrevented_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/Event/Event_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Event/Event_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/html/Event/Event_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Event/Event_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Event/Event.eventType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Event/currentTarget_A01_t01: Crash # unsupported element kind: _asyncCounter:field
+LibTest/html/Event/defaultPrevented_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/Event/eventPhase_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/Event/matchingTarget_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/Event/matchingTarget_A01_t02: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/Event/preventDefault_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
 LibTest/html/Event/stopImmediatePropagation_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Event/stopImmediatePropagation_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Event/stopImmediatePropagation_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/html/Event/stopPropagation_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Event/target_A01_t01: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/Event/type_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/HttpRequest/abort_A01_t01: Crash #  Unhandled node
 LibTest/html/HttpRequest/addEventListener_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/HttpRequest/dispatchEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/HttpRequest/getAllResponseHeaders_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/getResponseHeader_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/getString_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/HttpRequest/HttpRequest_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/HttpRequest/getAllResponseHeaders_A01_t01: Crash #  Unhandled node
+LibTest/html/HttpRequest/getResponseHeader_A01_t01: Crash #  Unhandled node
+LibTest/html/HttpRequest/getString_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/HttpRequest/onAbort_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/HttpRequest/onError_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/html/HttpRequest/onLoad_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/HttpRequest/onLoadEnd_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/HttpRequest/onLoadStart_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/HttpRequest/onLoad_A01_t01: Crash #  Unhandled node
 LibTest/html/HttpRequest/onReadyStateChange_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/HttpRequest/open_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/overrideMimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/readyStateChangeEvent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/removeEventListener_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/HttpRequest/request_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/HttpRequest/responseText_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/HttpRequest/responseText_A01_t02: Crash # (r): Error expression `r` unhandled.
-LibTest/html/HttpRequest/responseType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/responseType_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/setRequestHeader_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/HttpRequest/status_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/HttpRequest/overrideMimeType_A01_t01: Crash #  Unhandled node
+LibTest/html/HttpRequest/readyStateChangeEvent_A01_t01: Crash #  Unhandled node
+LibTest/html/HttpRequest/request_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/HttpRequest/responseText_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/HttpRequest/responseText_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/html/HttpRequest/setRequestHeader_A01_t01: Crash #  Unhandled node
 LibTest/html/HttpRequest/statusText_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/HttpRequest/status_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/HttpRequestUpload/onAbort_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/HttpRequestUpload/onError_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/html/HttpRequestUpload/onLoad_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/HttpRequestUpload/onLoad_A01_t01: Crash #  Unhandled node
 LibTest/html/IFrameElement/addEventListener_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/addEventListener_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/addEventListener_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/addEventListener_A01_t04: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/addEventListener_A01_t05: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/addEventListener_A01_t06: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/append_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/append_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/append_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/appendHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/appendHtml_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/appendText_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/IFrameElement/attributeChanged_A01_t01: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/IFrameElement/attributes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/attributes_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/attributes_setter_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/IFrameElement/attributes_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/IFrameElement/blur_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/borderEdge_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/childNodes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/childNodes_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/children_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/children_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/children_setter_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/classes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/classes_setter_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/className_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/IFrameElement/click_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/clone_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/clone_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/clone_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/clone_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/contains_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/contentEdge_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/IFrameElement/clone_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/html/IFrameElement/clone_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/IFrameElement/contentWindow_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/createFragment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/createFragment_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/createFragment_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/createShadowRoot_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/dataset_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/dataset_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/dataset_setter_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/IFrameElement/createFragment_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/IFrameElement/createFragment_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/IFrameElement/createFragment_A01_t03: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/IFrameElement/dataset_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/IFrameElement/dataset_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+LibTest/html/IFrameElement/dataset_setter_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/IFrameElement/dispatchEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/documentOffset_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/draggable_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/draggable_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/IFrameElement/enteredView_A01_t01: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/IFrameElement/firstChild_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/IFrameElement/focus_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/getAttribute_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/getAttributeNS_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/getBoundingClientRect_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/getClientRects_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/getClientRects_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/getElementsByClassName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/getElementsByClassName_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/getNamespacedAttributes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/hasChildNodes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/hasChildNodes_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/hidden_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/id_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/IFrameElement.created_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/innerHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/insertAdjacentElement_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/insertAdjacentHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/insertAdjacentText_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/insertAllBefore_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/insertAllBefore_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/insertBefore_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/insertBefore_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/isContentEditable_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/lang_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/lang_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/lastChild_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/IFrameElement/getClientRects_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LibTest/html/IFrameElement/leftView_A01_t01: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/IFrameElement/marginEdge_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/matches_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/matchesWithAncestors_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/namespaceUri_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nextElementSibling_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nextNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nodeName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nodes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nodes_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nodes_setter_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nodeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/nodeValue_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/offsetTo_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/on_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onAbort_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onBeforeCopy_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onBeforeCut_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14602,12 +11144,12 @@
 LibTest/html/IFrameElement/onCopy_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onCut_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onDoubleClick_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/onDrag_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onDragEnd_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onDragEnter_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onDragLeave_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onDragOver_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onDragStart_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/IFrameElement/onDrag_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onDrop_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onError_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onFocus_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14631,8 +11173,8 @@
 LibTest/html/IFrameElement/onReset_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onScroll_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onSearch_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/onSelect_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onSelectStart_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/IFrameElement/onSelect_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onSubmit_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onTouchCancel_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onTouchEnd_A01_t01: Crash # unsupported element kind: _completer:field
@@ -14641,2635 +11183,405 @@
 LibTest/html/IFrameElement/onTouchMove_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onTouchStart_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/onTransitionEnd_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/outerHtml_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/ownerDocument_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/ownerDocument_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/ownerDocument_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/ownerDocument_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/ownerDocument_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/paddingEdge_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/parent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/parent_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/parentNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/previousElementSibling_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/previousNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/querySelector_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/remove_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/IFrameElement/on_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/removeEventListener_A01_t01: Crash # unsupported element kind: _asyncCounter:field
 LibTest/html/IFrameElement/removeEventListener_A01_t02: Crash # unsupported element kind: _asyncCounter:field
-LibTest/html/IFrameElement/replaceWith_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/IFrameElement/resetEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/scrollEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/searchEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/selectEvent_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/IFrameElement/selectStartEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/IFrameElement/setAttribute_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/setAttributeNS_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/setInnerHtml_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/spellcheck_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/IFrameElement/spellcheck_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/style_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/style_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/tabIndex_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/tagName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/tagName_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/tagName_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/text_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/text_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/text_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/text_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/text_setter_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/title_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/IFrameElement/translate_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/IFrameElement/setInnerHtml_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 LibTest/html/Node/addEventListener_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Node/addEventListener_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/html/Node/addEventListener_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/html/Node/addEventListener_A01_t04: Crash # unsupported element kind: _completer:field
 LibTest/html/Node/addEventListener_A01_t05: Crash # unsupported element kind: _completer:field
-LibTest/html/Node/append_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/append_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/append_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/childNodes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/childNodes_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/clone_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/clone_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/contains_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Node/childNodes_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 LibTest/html/Node/dispatchEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Node/firstChild_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/hasChildNodes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/lastChild_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nextNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodes_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/nodes_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/nodeType_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodeType_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodeType_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodeType_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodeType_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodeType_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodeValue_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/nodeValue_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/nodeValue_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/nodeValue_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/nodeValue_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Node/nodeValue_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Node/on_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Node/ownerDocument_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/parent_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/parentNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/previousNode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Node/remove_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Node/ownerDocument_A01_t01: Crash # unsupported element kind: d:field
 LibTest/html/Node/removeEventListener_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Node/removeEventListener_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/html/Node/replaceWith_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/html/Window/addEventListener_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Window/animationFrame_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Window/close_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/html/Window/animationFrame_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/html/Window/dispatchEvent_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Window/document_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Window/find_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A03_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/find_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/moveBy_A01_t01: Crash #  not exactly one catch block
-LibTest/html/Window/moveTo_A01_t01: Crash #  not exactly one catch block
-LibTest/html/Window/moveTo_A02_t01: Crash #  not exactly one catch block
-LibTest/html/Window/open_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/html/Window/moveBy_A01_t01: Crash #  try/finally
+LibTest/html/Window/moveTo_A01_t01: Crash #  try/finally
+LibTest/html/Window/moveTo_A02_t01: Crash #  try/finally
 LibTest/html/Window/postMessage_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/html/Window/postMessage_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/html/Window/removeEventListener_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/requestFileSystem_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/requestFileSystem_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/requestFileSystem_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/html/Window/resizeBy_A01_t01: Crash #  not exactly one catch block
-LibTest/html/Window/resizeTo_A01_t01: Crash #  not exactly one catch block
-LibTest/isolate/Isolate/spawn_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/Isolate/spawn_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/isolate/Isolate/spawn_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/isolate/Isolate/spawn_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/isolate/Isolate/spawn_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/Isolate/spawn_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/isolate/Isolate/spawn_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/Isolate/spawnUri_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/Window/postMessage_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/html/Window/removeEventListener_A01_t01: Crash # (listener): handleStaticFunctionGet: function(listener)
+LibTest/html/Window/requestFileSystem_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/Window/requestFileSystem_A01_t02: Crash # unsupported element kind: _completer:field
+LibTest/html/Window/requestFileSystem_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/html/Window/resizeBy_A01_t01: Crash #  try/finally
+LibTest/html/Window/resizeTo_A01_t01: Crash #  try/finally
+LibTest/isolate/Isolate/spawnUri_A01_t01: Crash # (receiveHandler): handleStaticFunctionGet: function(receiveHandler)
 LibTest/isolate/Isolate/spawnUri_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/isolate/Isolate/spawnUri_A01_t03: Crash # unsupported element kind: _completer:field
+LibTest/isolate/Isolate/spawnUri_A01_t03: Crash # (receiveHandler): handleStaticFunctionGet: function(receiveHandler)
 LibTest/isolate/Isolate/spawnUri_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/isolate/Isolate/spawnUri_A01_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/Isolate/spawnUri_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/Isolate/spawnUri_A01_t05: Crash # unsupported element kind: _completer:field
 LibTest/isolate/Isolate/spawnUri_A02_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/Isolate/spawnUri_A02_t03: Crash # unsupported element kind: _completer:field
 LibTest/isolate/Isolate/spawnUri_A02_t04: Crash # unsupported element kind: _completer:field
-LibTest/isolate/RawReceivePort/close_A01_t01: Crash # unsupported element kind: receivePort:field
-LibTest/isolate/RawReceivePort/handler_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/RawReceivePort/RawReceivePort_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/RawReceivePort/RawReceivePort_A01_t02: Crash # unsupported element kind: receivePort:field
-LibTest/isolate/RawReceivePort/sendPort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/Isolate/spawn_A01_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/Isolate/spawn_A01_t02: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/Isolate/spawn_A01_t03: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/Isolate/spawn_A01_t04: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/Isolate/spawn_A01_t05: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/RawReceivePort/RawReceivePort_A01_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/RawReceivePort/RawReceivePort_A01_t02: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/RawReceivePort/close_A01_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/RawReceivePort/handler_A01_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/RawReceivePort/sendPort_A01_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/ReceivePort/ReceivePort.fromRawReceivePort_A02_t01: Crash # (receiveHandler): handleStaticFunctionGet: function(receiveHandler)
 LibTest/isolate/ReceivePort/any_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/any_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/asBroadcastStream_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/asBroadcastStream_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/isolate/ReceivePort/asBroadcastStream_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/isolate/ReceivePort/asBroadcastStream_A01_t02: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/ReceivePort/asBroadcastStream_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/asBroadcastStream_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/asBroadcastStream_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/isolate/ReceivePort/asBroadcastStream_A03_t02: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/asBroadcastStream_A03_t03: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/asBroadcastStream_A03_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/asBroadcastStream_A03_t02: Crash # (f): handleStaticFunctionGet: function(f)
+LibTest/isolate/ReceivePort/asBroadcastStream_A03_t03: Crash # (f): handleStaticFunctionGet: function(f)
 LibTest/isolate/ReceivePort/asBroadcastStream_A04_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/asBroadcastStream_A04_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/asBroadcastStream_A04_t03: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/close_A01_t01: Crash # unsupported element kind: receivePort:field
-LibTest/isolate/ReceivePort/close_A02_t01: Crash # unsupported element kind: receivePort:field
+LibTest/isolate/ReceivePort/close_A01_t01: Crash # (receiveHandler): handleStaticFunctionGet: function(receiveHandler)
+LibTest/isolate/ReceivePort/close_A02_t01: Crash # (receiveHandler): handleStaticFunctionGet: function(receiveHandler)
 LibTest/isolate/ReceivePort/contains_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/distinct_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/distinct_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/isolate/ReceivePort/distinct_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/drain_A02_t01: Crash # Please triage this failure.
 LibTest/isolate/ReceivePort/drain_A02_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/elementAt_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/elementAt_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/ReceivePort/elementAt_A03_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/every_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/expand_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/first_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/first_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/ReceivePort/first_A02_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/firstWhere_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/firstWhere_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/firstWhere_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/ReceivePort/firstWhere_A03_t02: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/first_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/first_A02_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/first_A02_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/fold_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/fold_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/forEach_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/isBroadcast_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/isolate/ReceivePort/isBroadcast_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
 LibTest/isolate/ReceivePort/isEmpty_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/join_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/join_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/last_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/last_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/isolate/ReceivePort/lastWhere_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/lastWhere_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/lastWhere_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/ReceivePort/lastWhere_A04_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/last_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/last_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/length_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/listen_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/map_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/pipe_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/ReceivePort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/ReceivePort/ReceivePort.fromRawReceivePort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/ReceivePort/ReceivePort.fromRawReceivePort_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 LibTest/isolate/ReceivePort/reduce_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/reduce_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/reduce_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/sendPort_A01_t01: Crash # (Expect): Error expression `Expect` unhandled.
-LibTest/isolate/ReceivePort/single_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/single_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/ReceivePort/sendPort_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/singleWhere_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/singleWhere_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/skip_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
+LibTest/isolate/ReceivePort/single_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/single_A02_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/skipWhile_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/take_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/ReceivePort/take_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/ReceivePort/take_A01_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/ReceivePort/skip_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/takeWhile_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/take_A01_t01: Crash # unsupported element kind: _completer:field
+LibTest/isolate/ReceivePort/take_A01_t02: Crash # Instance of 'TypeOperator': type casts not implemented.
+LibTest/isolate/ReceivePort/take_A01_t03: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/toList_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/toSet_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/transform_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/transform_A01_t02: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/where_A01_t01: Crash # unsupported element kind: _completer:field
 LibTest/isolate/ReceivePort/where_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/isolate/SendPort/hashCode_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/isolate/SendPort/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/isolate/SendPort/send_A01_t01: Crash # unsupported element kind: _completer:field
-LibTest/isolate/SendPort/send_A01_t02: Crash # unsupported element kind: _completer:field
-LibTest/isolate/SendPort/send_A01_t03: Crash # unsupported element kind: _completer:field
-LibTest/isolate/SendPort/send_A01_t04: Crash # unsupported element kind: _completer:field
-LibTest/isolate/SendPort/send_A02_t01: Crash # unsupported element kind: _completer:field
-LibTest/math/acos_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/acos_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/acos_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/asin_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/asin_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/asin_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/atan2_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/atan2_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/atan2_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/atan2_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/atan2_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/atan2_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/atan_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/atan_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/atan_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/atan_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/cos_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/cos_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/cos_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/exp_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/exp_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/exp_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/exp_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/log_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/log_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/log_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/log_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/max_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/max_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/max_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/min_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/min_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/min_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/MutableRectangle/boundingBox_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/boundingBox_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/containsPoint_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/containsRectangle_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/intersection_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/intersects_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/MutableRectangle_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/MutableRectangle.fromPoints_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/MutableRectangle/operator_equality_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/MutableRectangle/operator_equality_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/MutableRectangle/operator_equality_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Point/distanceTo_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/magnitude_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Point/operator_addition_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/operator_addition_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Point/operator_equality_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/operator_equality_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Point/operator_equality_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Point/operator_mult_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/operator_mult_A02_t01: Crash #  "on T" catch block
-LibTest/math/Point/operator_mult_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/operator_subtraction_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/operator_subtraction_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/Point_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Point/squaredDistanceTo_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Point/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/pow_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/pow_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/pow_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A10_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A11_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A12_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A13_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A14_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A15_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A16_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/pow_A17_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Random/nextBool_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Random/nextDouble_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Random/nextInt_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Random/Random_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/boundingBox_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Rectangle/boundingBox_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/containsPoint_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/containsRectangle_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/intersection_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/intersects_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Rectangle/operator_equality_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/operator_equality_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Rectangle/operator_equality_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/Rectangle/Rectangle_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/Rectangle/Rectangle.fromPoints_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/sin_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/sin_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/sin_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/sin_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/sqrt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/sqrt_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/sqrt_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/sqrt_A02_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/sqrt_A02_t03: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/sqrt_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/math/tan_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/tan_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/math/tan_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteBuffer/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteBuffer/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteBuffer/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteBuffer/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteBuffer/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteBuffer/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteBuffer/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteBuffer/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/buffer_A01_t01: Crash # (Expect.equal(byteBuffer,l.buffer)): Error expression `Expect.equal(byteBuffer,l.buffer)` unhandled.
-LibTest/typed_data/ByteData/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/ByteData_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/ByteData.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/ByteData.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/ByteData.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getFloat32_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteData/getFloat32_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getFloat32_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getFloat64_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteData/getFloat64_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getFloat64_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt16_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getInt16_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt16_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt32_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getInt32_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt32_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt64_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getInt64_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt64_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt8_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getInt8_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getInt8_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint16_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getUint16_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint16_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint32_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getUint32_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint32_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint64_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getUint64_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint64_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint8_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/getUint8_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/getUint8_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteData/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteData/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setFloat32_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteData/setFloat32_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setFloat32_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setFloat64_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/ByteData/setFloat64_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setFloat64_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt16_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setInt16_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt16_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt32_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setInt32_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt32_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt64_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setInt64_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt64_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt8_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setInt8_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setInt8_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint16_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setUint16_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint16_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint32_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setUint32_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint32_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint64_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setUint64_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint64_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint8_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/ByteData/setUint8_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/setUint8_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/ByteData/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float32List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/Float32List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/Float32List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/Float32List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/Float32List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/Float32List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float32List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float32List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/operator_subscripted_assignment_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/abs_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/clamp_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/clamp_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/Float32x4_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/Float32x4_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/Float32x4.fromInt32x4Bits_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/Float32x4.fromInt32x4Bits_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/Float32x4.splat_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/Float32x4.splat_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/Float32x4.zero_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/asMap_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/fillRange_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/first_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float32x4List/first_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/firstWhere_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/firstWhere_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/Float32x4List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/Float32x4List_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/Float32x4List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/Float32x4List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/Float32x4List.fromList_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/Float32x4List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/Float32x4List.view_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/Float32x4List.view_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/Float32x4List.view_A03_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/Float32x4List.view_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/forEach_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/getRange_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/getRange_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/iterator_current_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/last_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float32x4List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/lastWhere_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float32x4List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/operator_subscripted_assignment_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/reversed_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/setAll_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/setRange_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/setRange_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/single_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/singleWhere_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/skip_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/skipWhile_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/skipWhile_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/sort_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/sublist_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/sublist_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/take_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/take_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/takeWhile_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/toList_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/max_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/min_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/operator_addition_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/operator_division_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/operator_division_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/operator_multiplication_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/operator_subtraction_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/operator_unary_minus_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/reciprocal_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/reciprocalSqrt_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/scale_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/shuffle_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/shuffleMix_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float32x4/sqrt_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/w_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/w_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4/withW_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/withX_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/withY_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/withZ_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/x_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/x_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4/y_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/y_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float32x4/z_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float32x4/z_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float64List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/Float64List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/Float64List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/Float64List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/Float64List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/Float64List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float64List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Float64List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/operator_subscripted_assignment_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Float64List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Float64List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Float64List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int16List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/Int16List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/Int16List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/Int16List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/Int16List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/Int16List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int16List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int16List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int16List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int16List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int16List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int16List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int32List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/Int32List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/Int32List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/Int32List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/Int32List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/Int32List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int32List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int32List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int32List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int32List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/flagW_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32x4/flagW_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/flagW_A01_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int32x4/flagX_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32x4/flagX_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/flagX_A01_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int32x4/flagY_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32x4/flagY_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/flagY_A01_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int32x4/flagZ_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32x4/flagZ_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/flagZ_A01_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int32x4/Int32x4_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/Int32x4.bool_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/Int32x4.fromFloat32x4Bits_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int32x4/operator_AND_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/operator_OR_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/operator_XOR_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/select_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/w_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/w_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32x4/withFlagW_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/withFlagX_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/withFlagY_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/withFlagZ_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/withW_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/withX_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/withY_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/withZ_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/x_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/x_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32x4/y_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/y_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int32x4/z_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int32x4/z_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int64List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/Int64List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/Int64List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/Int64List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/Int64List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/Int64List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int64List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int64List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int64List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int64List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int64List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int64List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int8List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/Int8List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/Int8List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/Int8List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/Int8List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int8List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int8List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Int8List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Int8List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Int8List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Int8List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint16List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint16List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint16List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint16List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint16List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/Uint16List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/Uint16List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/Uint16List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/Uint16List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint16List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint16List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint32List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint32List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint32List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint32List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint32List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/Uint32List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/Uint32List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/Uint32List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/Uint32List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint32List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint32List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint64List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint64List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint64List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint64List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint64List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/Uint64List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/Uint64List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/Uint64List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/Uint64List.view_A06_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint64List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint64List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8ClampedList/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8ClampedList/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8ClampedList/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8ClampedList/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8ClampedList/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Uint8ClampedList/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8ClampedList/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/add_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/addAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/any_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/asMap_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/asMap_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/asMap_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/buffer_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/buffer_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/clear_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/contains_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/elementAt_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/elementAt_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/elementSizeInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/elementSizeInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/every_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/expand_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/fillRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/fillRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/first_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/first_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/first_A02_t01: Crash # (try {l.first;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8List/first_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/firstWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/firstWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/firstWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/fold_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/forEach_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/getRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/getRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/getRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/getRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/hashCode_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/hashCode_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/indexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/indexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/indexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/indexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/insert_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/insertAll_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/isEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/isEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/isNotEmpty_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/isNotEmpty_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/iterator_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/iterator_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/iterator_current_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/iterator_moveNext_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/join_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/join_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/last_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/last_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/last_A02_t01: Crash # (try {l.last;Expect.fail("StateError is expected");}on StateError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8List/lastIndexOf_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/lastIndexOf_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/lastIndexOf_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/lastIndexOf_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/lastWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/lastWhere_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/lastWhere_A03_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/length_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/length_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/lengthInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/lengthInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/map_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/map_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/map_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/offsetInBytes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/offsetInBytes_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/operator_equality_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/operator_subscript_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/operator_subscript_A02_t01: Crash # (try {l[-1];Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8List/operator_subscripted_assignment_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/operator_subscripted_assignment_A02_t01: Crash # (try {l[-1]=1;Expect.fail("RangeError is expected");}on RangeError catch (ok){}): "on T" catch block
-LibTest/typed_data/Uint8List/reduce_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/reduce_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/remove_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/removeAt_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/removeLast_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/removeRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/removeWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/replaceRange_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/retainWhere_A01_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/reversed_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/reversed_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/runtimeType_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/runtimeType_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/setAll_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/setAll_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/setAll_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/setRange_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/setRange_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/setRange_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/setRange_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/single_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/single_A01_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/single_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/single_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/singleWhere_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/singleWhere_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/singleWhere_A02_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/skip_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/skip_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/skip_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/skipWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/skipWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/skipWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/skipWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/sort_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/sublist_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/sublist_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/sublist_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/sublist_A03_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/take_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/take_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/take_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/takeWhile_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/takeWhile_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/takeWhile_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/takeWhile_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/toList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/toList_A02_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/toList_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/toSet_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-LibTest/typed_data/Uint8List/toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.fromList_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.fromList_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.view_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.view_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.view_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.view_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.view_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/Uint8List.view_A05_t01: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/Uint8List.view_A05_t02: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/Uint8List.view_A05_t03: Crash #  "on T" catch block
-LibTest/typed_data/Uint8List/where_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/where_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LibTest/typed_data/Uint8List/where_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Utils/tests/Expect/approxEquals_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/approxEquals_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/approxEquals_A01_t03: Crash #  "on T" catch block
-Utils/tests/Expect/approxEquals_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/approxEquals_A02_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/approxEquals_A03_t01: Crash #  "on T" catch block
-Utils/tests/Expect/approxEquals_A04_t01: Crash #  "on T" catch block
-Utils/tests/Expect/equals_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Utils/tests/Expect/equals_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/equals_A01_t03: Crash #  "on T" catch block
-Utils/tests/Expect/equals_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Utils/tests/Expect/equals_A02_t01: Crash #  "on T" catch block
-Utils/tests/ExpectException/ExpectException_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/ExpectException/message_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Utils/tests/ExpectException/toString_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/fail_A01_t01: Crash #  "on T" catch block
-Utils/tests/Expect/fail_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/identical_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/identical_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/identical_A01_t03: Crash #  "on T" catch block
-Utils/tests/Expect/identical_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/isFalse_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/isFalse_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/isFalse_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/isNotNull_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/isNotNull_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/isNotNull_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/isNull_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/isNull_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/isNull_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/isTrue_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/isTrue_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/isTrue_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/listEquals_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Utils/tests/Expect/listEquals_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/listEquals_A01_t03: Crash #  "on T" catch block
-Utils/tests/Expect/listEquals_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/listEquals_A03_t01: Crash #  "on T" catch block
-Utils/tests/Expect/notEquals_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/notEquals_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/notEquals_A01_t03: Crash #  "on T" catch block
-Utils/tests/Expect/notEquals_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/setEquals_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/setEquals_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/setEquals_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/setEquals_A03_t01: Crash #  "on T" catch block
-Utils/tests/Expect/stringEquals_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-Utils/tests/Expect/stringEquals_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/stringEquals_A02_t01: Crash #  "on T" catch block
-Utils/tests/Expect/throws_A01_t01: Crash #  "on T" catch block
-Utils/tests/Expect/throws_A01_t02: Crash #  "on T" catch block
-Utils/tests/Expect/throws_A01_t03: Crash #  "on T" catch block
-Utils/tests/Expect/throws_A01_t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-Utils/tests/Expect/throws_A01_t05: Crash #  "on T" catch block
-Utils/tests/Expect/throws_A02_t01: Crash #  "on T" catch block
-WebPlatformTest/custom-elements/concepts/type_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/concepts/type_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/concepts/type_A04_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/custom-elements/concepts/type_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/custom-elements/concepts/type_A06_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/custom-elements/concepts/type_A07_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/custom-elements/concepts/type_A08_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/custom-elements/instantiating/createElement_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElement_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/custom-elements/instantiating/createElementNS_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/isAttribute_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/isAttribute_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/localName_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/custom-elements/instantiating/namespace_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/collections/emptyName_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/collections/emptyName_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/collections/emptyName_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/collections/emptyName_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/collections/emptyName_A01_t07: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/dispatchEvent.return.value_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/DOM.event.flow_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/domnodeinserted_t01: Crash # unsupported element kind: _asyncCounter:field
-WebPlatformTest/DOMEvents/approved/Event.bubbles.false_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+LibTest/isolate/SendPort/send_A01_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/SendPort/send_A01_t02: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/SendPort/send_A01_t03: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/SendPort/send_A01_t04: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/isolate/SendPort/send_A02_t01: Crash # (iMain): handleStaticFunctionGet: function(iMain)
+LibTest/math/MutableRectangle/MutableRectangle.fromPoints_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/MutableRectangle/MutableRectangle_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/MutableRectangle/boundingBox_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/MutableRectangle/boundingBox_A01_t02: Crash # unsupported element kind: rand:field
+LibTest/math/MutableRectangle/operator_equality_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Point/distanceTo_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Point/operator_addition_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Point/operator_equality_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Point/operator_mult_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Point/operator_subtraction_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Point/squaredDistanceTo_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Rectangle/Rectangle.fromPoints_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Rectangle/Rectangle_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Rectangle/boundingBox_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/math/Rectangle/boundingBox_A01_t02: Crash # unsupported element kind: rand:field
+LibTest/math/Rectangle/operator_equality_A01_t01: Crash # unsupported element kind: rand:field
+LibTest/typed_data/ByteData/ByteData.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/ByteData/setInt16_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/ByteData/setInt32_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/ByteData/setInt64_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/ByteData/setInt8_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/ByteData/setUint16_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/ByteData/setUint32_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/ByteData/setUint64_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/ByteData/setUint8_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float32List/Float32List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float32List/Float32List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float32List/Float32List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float32List/Float32List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float32List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Float32List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Float32List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float32List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float32List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float32List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float32List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float32x4List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Float32x4List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Float64List/Float64List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float64List/Float64List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float64List/Float64List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float64List/Float64List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Float64List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Float64List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Float64List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float64List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float64List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float64List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Float64List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int16List/Int16List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int16List/Int16List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int16List/Int16List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int16List/Int16List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int16List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int16List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int16List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int16List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int16List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int16List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int16List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int32List/Int32List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int32List/Int32List.fromList_A01_t02: Crash # (toInt32): handleStaticFunctionGet: function(toInt32)
+LibTest/typed_data/Int32List/Int32List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int32List/Int32List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int32List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int32List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int32List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int32List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int32List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int32List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int32List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int64List/Int64List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int64List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int64List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int64List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int64List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int64List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int64List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int64List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int8List/Int8List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int8List/Int8List.fromList_A01_t02: Crash # (toInt8): handleStaticFunctionGet: function(toInt8)
+LibTest/typed_data/Int8List/Int8List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int8List/Int8List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Int8List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int8List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Int8List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int8List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int8List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int8List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Int8List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint16List/Uint16List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint16List/Uint16List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint16List/Uint16List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint16List/Uint16List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint16List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint16List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint16List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint16List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint16List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint16List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint16List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint32List/Uint32List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint32List/Uint32List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint32List/Uint32List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint32List/Uint32List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint32List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint32List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint32List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint32List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint32List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint32List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint32List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint64List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint64List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint64List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint64List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint64List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint64List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint64List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint8ClampedList/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint8ClampedList/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint8ClampedList/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8ClampedList/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8ClampedList/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8ClampedList/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8ClampedList/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8List/Uint8List.fromList_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint8List/Uint8List.fromList_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8List/Uint8List.view_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint8List/Uint8List_A01_t01: RuntimeError # Please triage this failure.
+LibTest/typed_data/Uint8List/any_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint8List/every_A01_t01: Crash # (pred): handleStaticFunctionGet: function(pred)
+LibTest/typed_data/Uint8List/setAll_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8List/setRange_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8List/setRange_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8List/sort_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+LibTest/typed_data/Uint8List/toList_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Utils/tests/Expect/approxEquals_A04_t01: RuntimeError # Please triage this failure.
+Utils/tests/Expect/equals_A01_t04: RuntimeError # Please triage this failure.
+Utils/tests/Expect/listEquals_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Utils/tests/Expect/listEquals_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Utils/tests/Expect/listEquals_A01_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Utils/tests/Expect/listEquals_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Utils/tests/Expect/listEquals_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+Utils/tests/Expect/stringEquals_A02_t01: RuntimeError # Please triage this failure.
+Utils/tests/Expect/throws_A01_t01: Crash # (badboy): handleStaticFunctionGet: function(badboy)
+Utils/tests/Expect/throws_A01_t02: Crash # (goodboy): handleStaticFunctionGet: function(goodboy)
+Utils/tests/Expect/throws_A01_t03: Crash # (badboy): handleStaticFunctionGet: function(badboy)
+WebPlatformTest/DOMEvents/approved/DOM.event.flow_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/DOMEvents/approved/Event.bubbles.false_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 WebPlatformTest/DOMEvents/approved/EventListener.eventHandler_t01: Crash # unsupported element kind: _asyncCounter:field
-WebPlatformTest/DOMEvents/approved/EventObject.after.dispatchEvenr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/EventObject.multiple.dispatchEvent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+WebPlatformTest/DOMEvents/approved/EventObject.after.dispatchEvenr_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/DOMEvents/approved/EventObject.multiple.dispatchEvent_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Crash # unsupported element kind: _completer:field
-WebPlatformTest/DOMEvents/approved/Propagation.path.target.moved_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/Propagation.path.target.removed_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/stopImmediatePropagation.effect_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/stopPropagation.deferred.effect_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/DOMEvents/approved/stopPropagation.dispatchEvent_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/events/defaultPrevented_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/events/defaultPrevented_A01_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/events/defaultPrevented_A01_t03: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/events/defaultPrevented_A01_t04: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/events/defaultPrevented_A01_t05: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/events/defaultPrevented_A01_t06: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/events/event_constants/constants_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/events/event_constructors/Event_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/events/event_constructors/Event_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/events/propagation_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/events/type_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/EventTarget/dispatchEvent_A01_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+WebPlatformTest/DOMEvents/approved/Propagation.path.target.moved_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/DOMEvents/approved/Propagation.path.target.removed_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/DOMEvents/approved/dispatchEvent.return.value_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/DOMEvents/approved/domnodeinserted_t01: Crash # unsupported element kind: _asyncCounter:field
+WebPlatformTest/DOMEvents/approved/stopImmediatePropagation.effect_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/DOMEvents/approved/stopPropagation.deferred.effect_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/Utils/test/asyncTestFail_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/Utils/test/asyncTestFail_t02: Crash # unsupported element kind: _completer:field
+WebPlatformTest/Utils/test/asyncTestPass_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/Utils/test/asyncTestTimeout_t01: Crash # unsupported element kind: _asyncCounter:field
+WebPlatformTest/custom-elements/concepts/type_A04_t01: Crash # unsupported element kind: EXTENDER_CHARS:field
+WebPlatformTest/custom-elements/concepts/type_A05_t01: Crash # unsupported element kind: COMBINING_CHARS:field
+WebPlatformTest/custom-elements/concepts/type_A06_t01: Crash # unsupported element kind: BASE_CHARS_SINGLE:field
+WebPlatformTest/custom-elements/concepts/type_A07_t01: Crash # unsupported element kind: IDEOGRAPHIC_CHARS_SINGLE:field
+WebPlatformTest/custom-elements/concepts/type_A08_t01: Crash # unsupported element kind: DIGIT_CHARS_RANGES:field
+WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: Crash #  Unhandled node
+WebPlatformTest/custom-elements/instantiating/isAttribute_A02_t01: Crash # unsupported element kind: HTML5_TABLE_ELEMENTS:field
+WebPlatformTest/dom/EventTarget/dispatchEvent_A01_t01: Crash # unsupported element kind: _asyncCounter:field
+WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 WebPlatformTest/dom/EventTarget/dispatchEvent_A03_t01: Crash # unsupported element kind: _asyncCounter:field
-WebPlatformTest/dom/EventTarget/dispatchEvent_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/lists/DOMTokenList.toString_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/attributes_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/attributes_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/attributes_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/attributes_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/attributes_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/attributes_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttribute_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A03_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A04_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A05_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A08_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A10_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/attributes/setAttributeNS_A10_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/appendData_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/deleteData_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/deleteData_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/insertData_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/insertData_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/remove_A01_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/remove_A01_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/remove_A02_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/CharacterData/remove_A02_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/Comment-constructor_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Document-adoptNode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Document-createElement-namespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/Document-createElementNS_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Document-createElementNS_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/Document-getElementById_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Document-getElementsByTagName_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Document-importNode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/DocumentType-remove_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/DOMImplementation-hasFeature_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Element-childElementCount-dynamic-add_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Element-childElementCount-dynamic-remove_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Element-childElementCount_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-appendChild_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-appendChild_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/Node-cloneNode_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/Node-contains_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/dom/nodes/Node-insertBefore_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-isEqualNode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-nodeName_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-parentElement_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-parentNode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-replaceChild_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/nodes/Node-textContent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/ranges/Range-attributes_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/ranges/Range-attributes_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/ranges/Range-comparePoint_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/dom/ranges/Range-comparePoint_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+WebPlatformTest/dom/EventTarget/dispatchEvent_A04_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/CharacterData/remove_A01_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/CharacterData/remove_A01_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/CharacterData/remove_A02_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/CharacterData/remove_A02_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/Comment-constructor_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_t01: Crash # unsupported element kind: tests:field
+WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: Crash # unsupported element kind: tests:field
+WebPlatformTest/dom/nodes/DOMImplementation-hasFeature_t01: Crash # unsupported element kind: badTests:field
+WebPlatformTest/dom/nodes/Document-createElementNS_t01: Crash # unsupported element kind: invalidNSQNameCombinations:field
+WebPlatformTest/dom/nodes/DocumentType-remove_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/Node-cloneNode_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+WebPlatformTest/dom/nodes/Node-insertBefore_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/Node-isEqualNode_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/dom/nodes/Node-parentNode_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/dom/nodes/Node-replaceChild_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A03_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A05_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t03: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+WebPlatformTest/dom/nodes/attributes/setAttribute_A06_t01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+WebPlatformTest/html-imports/link-import_t02: Crash # unsupported element kind: _completer:field
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-row-context_t01: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: Crash # unsupported element kind: HTML5_VOID_ELEMENTS:field
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: Crash # (templateIsAChild): handleStaticFunctionGet: function(templateIsAChild)
+WebPlatformTest/html-templates/template-element/template-content_t01: Crash # (assert_not_equals): handleStaticFunctionGet: function(assert_not_equals)
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: Crash # unsupported element kind: _asyncCounter:field
 WebPlatformTest/html/browsers/browsing-the-web/read-text/load-text-plain_t01: Crash # unsupported element kind: _asyncCounter:field
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-getter_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/Document.getElementsByClassName-null_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-case_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-id_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-newelements_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-param_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.head_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.head_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t07: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/Element.getElementsByClassName-null_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t03: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t04: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t05: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t06: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/elements/global-attributes/classlist-nonstring_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/elements/global-attributes/dataset-delete_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/elements/global-attributes/dataset-enumeration_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/elements/global-attributes/dataset-set_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/dom/elements/global-attributes/id-name_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html-imports/link-import-null_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html-imports/link-import_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html-imports/link-import_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html-imports/loading-import_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/disabled-elements/disabledElement_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/document-metadata/styling/LinkStyle_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/edits/the-del-element/del_effect_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/edits/the-ins-element/ins_effect_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/textTracks_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/default_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/label_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/readyState_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/srclang_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/track_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/embedded-content/the-audio-element/audio_constructor_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formaction_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/textfieldselection/selection-not-application-textarea_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-datalist-element/datalistelement_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-datalist-element/datalistoptions_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-fieldset-element/disabled_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-form-element/form-autocomplete_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-form-element/form-elements-nameditem_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/forms/the-form-element/form-nameditem_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/color_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/date_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/datetime-local_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/datetime_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/email_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/hidden_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/input-textselection_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/input-type-button_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/input-type-checkbox_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/mobiles_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/month_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/password_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/pattern_attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/forms/the-input-element/range_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/range_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/required_attribute_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/forms/the-input-element/search_input_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/telephone_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/text_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/time_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/time_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/url_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/valueMode_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-input-element/week_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-meter-element/meter_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-option-element/option-text-backslash_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/forms/the-option-element/option-text-recurse_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/forms/the-output-element/output_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/forms/the-textarea-element/textarea-type_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/grouping-content/the-blockquote-element/grouping-blockquote_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/grouping-content/the-li-element/grouping-li_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/grouping-content/the-ol-element/ol.start-reflection_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/grouping-content/the-ol-element/ol.start-reflection_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/interactive-elements/the-details-element/toggleEvent_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-showModal_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t11: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/scripting-1/the-script-element/script-text_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/scripting-1/the-script-element/script-text_t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/default_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/dir_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/disabled_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/enabled_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/inrange-outofrange_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/link_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/required-optional_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/selectors/pseudo-classes/valid-invalid_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-caption-element/caption_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-table-element/border_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-table-element/caption-methods_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-table-element/createTBody_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-table-element/insertRow-method_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/tabular-data/the-table-element/insertRow-method_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-table-element/table-insertRow_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/tabular-data/the-table-element/tBodies_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/semantics/tabular-data/the-tr-element/rowIndex_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/text-level-semantics/the-a-element/a.text-getter_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/semantics/text-level-semantics/the-a-element/a.text-setter_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/syntax/parsing/math-parse_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/syntax/parsing/math-parse_t03: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/syntax/serializing-html-fragments/outerHTML_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/template-clone-children_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/templates-copy-document-owner_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/definitions/template-contents-owner-document-type_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/definitions/template-contents-owner-test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/definitions/template-contents_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-a-foster-parent-element_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-not-a-foster-parent-element_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/generating-of-implied-end-tags_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-body-token_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-frameset-token_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-head-token_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-html-token_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/start-tag-body_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/template-end-tag-without-start-one_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/template-end-tag-without-start-one_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-table-insertion-mode/end-tag-table_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/appending-to-a-template/template-child-nodes_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-row-context_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/serializing-html-templates/outerhtml_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/template-element/content-attribute_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/template-element/node-document-changes_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/template-element/template-content-node-document_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html-templates/template-element/template-content_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t02: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-005_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-006_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/elements-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-003_t01: Crash # (throw new ExpectException(message)): Unhandled node
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t03: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t04: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t05: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t06: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/html/semantics/forms/the-datalist-element/datalistoptions_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-nameditem_t02: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/forms/the-input-element/datetime_t01: Crash # Instance of 'TypeOperator': type casts not implemented.
+WebPlatformTest/html/semantics/forms/the-input-element/valueMode_t01: Crash #  Unhandled node
+WebPlatformTest/html/semantics/interactive-elements/the-details-element/toggleEvent_t01: Crash # unsupported element kind: asyncCompleted:field
+WebPlatformTest/html/semantics/scripting-1/the-script-element/script-text_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/default_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/dir_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/disabled_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/enabled_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/inrange-outofrange_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/link_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/required-optional_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/selectors/pseudo-classes/valid-invalid_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/tabular-data/the-table-element/createTBody_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-insertRow_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List<TableRowElement>.
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/elements-001_t01: Crash # unsupported element kind: HTML5_ELEMENT_NAMES:field
 WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-event-interface/event-path-001_t01: Crash # unsupported element kind: _completer:field
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-008_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-002_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-005_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-006_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-002_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-006_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-002_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t02: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-004_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/events/event-dispatch/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
+WebPlatformTest/shadow-dom/events/event-dispatch/test-001_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/shadow-dom/events/event-dispatch/test-003_t01: Crash # unsupported element kind: _completer:field
-WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
+WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/shadow-dom/events/event-retargeting/test-002_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/shadow-dom/events/event-retargeting/test-003_t01: Crash # unsupported element kind: _completer:field
-WebPlatformTest/shadow-dom/events/event-retargeting/test-004_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t03: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-003_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
+WebPlatformTest/shadow-dom/events/event-retargeting/test-004_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-003_t01: Crash # unsupported element kind: _completer:field
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-002_t01: Crash # unsupported element kind: _completer:field
-WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-003_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-002_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/inert-html-elements/test-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/composition/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/rendering-shadow-trees/test-001_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-002_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-003_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-004_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-005_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-017_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-002_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-001_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-002_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/shadow-root-001_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: Crash # (throw '${testName}: ${e}'): Unhandled node
-WebPlatformTest/Utils/test/asyncTestFail_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/Utils/test/asyncTestFail_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/Utils/test/asyncTestPass_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/Utils/test/asyncTestTimeout_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/Utils/test/testFail_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/Utils/test/testPass_t01: Crash # (throw new ExpectException(message)): Unhandled node
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: Crash # unsupported element kind: HTML5_FORM_ASSOCIATED_ELEMENTS:field
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: Crash # unsupported element kind: HTML5_FORM_ASSOCIATED_ELEMENTS:field
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: Crash # (testElement): handleStaticFunctionGet: function(testElement)
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: Crash # unsupported element kind: HTML5_FORM_ASSOCIATED_ELEMENTS:field
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t01: Crash # unsupported element kind: HTML5_FORM_ASSOCIATED_ELEMENTS:field
 WebPlatformTest/webstorage/event_constructor_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/webstorage/event_constructor_t02: Crash # unsupported element kind: _completer:field
 WebPlatformTest/webstorage/event_local_key_t01: Crash # unsupported element kind: _completer:field
@@ -17284,18 +11596,4 @@
 WebPlatformTest/webstorage/event_session_storagearea_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/webstorage/event_session_storageeventinit_t01: Crash # unsupported element kind: _completer:field
 WebPlatformTest/webstorage/event_session_url_t01: Crash # unsupported element kind: _completer:field
-WebPlatformTest/webstorage/storage_builtins_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_clear_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_local_getitem_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_local_key_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_local_length_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/webstorage/storage_local_remove_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/webstorage/storage_local_setitem_quotaexceedederr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/webstorage/storage_local_setitem_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_session_getitem_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_session_getitem_t02: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_session_key_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_session_length_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/webstorage/storage_session_removeitem_t01: Crash # (throw new ExpectException(message)): Unhandled node
-WebPlatformTest/webstorage/storage_session_setitem_quotaexceedederr_t01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-WebPlatformTest/webstorage/storage_session_setitem_t01: Crash # (throw new ExpectException(message)): Unhandled node
+WebPlatformTest/webstorage/storage_builtins_t01: Crash # Instance of 'TypeOperator': type check unimplemented for List.
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index b7d8699..b5c5bc4c 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -49,7 +49,6 @@
 Language/14_Libraries_and_Scripts/3_Parts_A01_t06: Fail
 
 [ $runtime == vm ]
-# These flaky tests also fail with dart2dart.
 LibTest/math/MutableRectangle/MutableRectangle.fromPoints_A01_t01: Pass, RuntimeError # co19-roll r607: Please triage this failure
 
 [ $compiler == none && $runtime == vm && $mode == debug ]
diff --git a/tests/compiler/dart2js/analyze_unused_dart2js_test.dart b/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
index b0bdf8d..fe36410 100644
--- a/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
+++ b/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
@@ -29,10 +29,16 @@
       "The method 'error"],
   "lib/src/resolution/semantic_visitor_mixins.dart": const [
       "The method 'error"],
+  "lib/src/cps_ir/cps_ir_builder_task.dart": const [
+      "The method 'error"],
 
   // Uncalled type predicate.  Keep while related predicates are used.
   "lib/src/ssa/nodes.dart": const [
       "The method 'isArray' is never called"],
+
+  // Method in abstract class. Currently only instantiated trough tests.
+  "lib/src/constants/expressions.dart": const [
+      "The method 'readFromEnvironment' is never called"],
 };
 
 void main() {
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index 8953792..e139a0e 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -75,7 +75,7 @@
         new leg.ResolutionWorkItem(element, context);
     resolutionWork.run(compiler, compiler.enqueuer.resolution);
     leg.CodegenWorkItem work =
-        new leg.CodegenWorkItem(element, context);
+        new leg.CodegenWorkItem(compiler, element, context);
     compiler.phase = Compiler.PHASE_COMPILING;
     work.run(compiler, compiler.enqueuer.codegen);
     js.JavaScriptBackend backend = compiler.backend;
diff --git a/tests/compiler/dart2js/constant_expression_evaluate_test.dart b/tests/compiler/dart2js/constant_expression_evaluate_test.dart
new file mode 100644
index 0000000..2a2c41e
--- /dev/null
+++ b/tests/compiler/dart2js/constant_expression_evaluate_test.dart
@@ -0,0 +1,239 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js.constants.expressions.evaluate_test;
+
+import 'dart:async';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+import 'package:compiler/src/constants/expressions.dart';
+import 'package:compiler/src/constants/values.dart';
+import 'package:compiler/src/constant_system_dart.dart';
+import 'package:compiler/src/core_types.dart';
+import 'package:compiler/src/dart2jslib.dart';
+import 'package:compiler/src/elements/elements.dart';
+import 'memory_compiler.dart';
+
+class TestData {
+  /// Declarations needed for the [constants].
+  final String declarations;
+  /// Tested constants.
+  final List constants;
+
+  const TestData(this.declarations, this.constants);
+}
+
+class ConstantData {
+  /// Source code for the constant expression.
+  final String code;
+  /// Map from environment to expected constant value as structured text.
+  final Map<Map<String, String>, String> expectedValues;
+
+  const ConstantData(this.code,
+                     this.expectedValues);
+}
+
+class MemoryEnvironment implements Environment {
+  final Compiler compiler;
+  final Map<String, String> env;
+
+  MemoryEnvironment(this.compiler, [this.env = const <String, String>{}]);
+
+  @override
+  String readFromEnvironment(String name) => env[name];
+}
+
+const List<TestData> DATA = const [
+  const TestData('', const [
+    const ConstantData('null', const { const {} : 'NullConstant' }),
+    const ConstantData('false', const { const {} : 'BoolConstant(false)' }),
+    const ConstantData('true', const { const {} : 'BoolConstant(true)' }),
+    const ConstantData('0', const { const {} : 'IntConstant(0)' }),
+    const ConstantData('0.0', const { const {} : 'DoubleConstant(0.0)' }),
+    const ConstantData('"foo"', const { const {} : 'StringConstant("foo")' }),
+    const ConstantData('1 + 2', const { const {} : 'IntConstant(3)' }),
+    const ConstantData('-(1)', const { const {} : 'IntConstant(-1)' }),
+    const ConstantData('identical(0, 1)',
+                       const { const {} : 'BoolConstant(false)' }),
+    const ConstantData('"a" "b"', const { const {} : 'StringConstant("ab")' }),
+    const ConstantData('identical',
+        const { const {} : 'FunctionConstant(identical)' }),
+    const ConstantData('true ? 0 : 1', const { const {} : 'IntConstant(0)' }),
+    const ConstantData('proxy',
+        const { const {} : 'ConstructedConstant(_Proxy())' }),
+    const ConstantData('Object', const { const {} : 'TypeConstant(Object)' }),
+    const ConstantData('const [0, 1]',
+        const { const {} : 'ListConstant([IntConstant(0), IntConstant(1)])' }),
+    const ConstantData('const <int>[0, 1]', const {
+        const {} : 'ListConstant(<int>[IntConstant(0), IntConstant(1)])' }),
+    const ConstantData('const {0: 1, 2: 3}',
+        const { const {} :
+          'MapConstant({IntConstant(0): IntConstant(1), '
+                       'IntConstant(2): IntConstant(3)})' }),
+    const ConstantData('const <int, int>{0: 1, 2: 3}',
+        const { const {} :
+          'MapConstant(<int, int>{IntConstant(0): IntConstant(1), '
+                                 'IntConstant(2): IntConstant(3)})' }),
+    const ConstantData(
+        'const bool.fromEnvironment("foo", defaultValue: false)',
+        const { const {} : 'BoolConstant(false)',
+                const {'foo': 'true'} : 'BoolConstant(true)'}),
+    const ConstantData(
+        'const int.fromEnvironment("foo", defaultValue: 42)',
+        const { const {} : 'IntConstant(42)',
+                const {'foo': '87'} : 'IntConstant(87)'}),
+    const ConstantData(
+        'const String.fromEnvironment("foo", defaultValue: "bar")',
+        const { const {} : 'StringConstant("bar")',
+                const {'foo': 'foo'} : 'StringConstant("foo")'}),
+  ]),
+  const TestData('''
+const a = const bool.fromEnvironment("foo", defaultValue: true);
+const b = const int.fromEnvironment("bar", defaultValue: 42);
+
+class A {
+  const A();
+}
+class B {
+  final field1;
+  const B(this.field1);
+}
+class C extends B {
+  final field2;
+  const C({field1: 42, this.field2: false}) : super(field1);
+  const C.named([field = false]) : this(field1: field, field2: field);
+}
+''', const [
+    const ConstantData('const Object()',
+        const { const {} : 'ConstructedConstant(Object())' }),
+    const ConstantData('const A()',
+        const { const {} : 'ConstructedConstant(A())' }),
+    const ConstantData('const B(0)',
+        const { const {} : 'ConstructedConstant(B(field1=IntConstant(0)))' }),
+    const ConstantData('const B(const A())',
+        const { const {} :
+          'ConstructedConstant(B(field1=ConstructedConstant(A())))' }),
+    const ConstantData('const C()', const { const {} :
+        'ConstructedConstant(C(field1=IntConstant(42),'
+                              'field2=BoolConstant(false)))' }),
+    const ConstantData('const C(field1: 87)', const { const {} :
+        'ConstructedConstant(C(field1=IntConstant(87),'
+                              'field2=BoolConstant(false)))' }),
+    const ConstantData('const C(field2: true)', const { const {} :
+        'ConstructedConstant(C(field1=IntConstant(42),'
+                              'field2=BoolConstant(true)))' }),
+    const ConstantData('const C.named()', const { const {} :
+        'ConstructedConstant(C(field1=BoolConstant(false),'
+                              'field2=BoolConstant(false)))' }),
+    const ConstantData('const C.named(87)', const { const {} :
+        'ConstructedConstant(C(field1=IntConstant(87),'
+                              'field2=IntConstant(87)))' }),
+    const ConstantData('const C(field1: a, field2: b)', const {
+        const {} :
+          'ConstructedConstant(C(field1=BoolConstant(true),'
+                                'field2=IntConstant(42)))',
+        const {'foo': 'false', 'bar': '87'} :
+          'ConstructedConstant(C(field1=BoolConstant(false),'
+                                'field2=IntConstant(87)))', }),
+  ]),
+  const TestData('''
+class A<T> implements B {
+  final field1;
+  const A({this.field1:42});
+}
+class B<S> implements C {
+  const factory B({field1}) = A<B<S>>;
+  // TODO(johnniwinther): Enable this when the constructor evaluator doesn't
+  // crash:
+  /*const factory B.named() = A<S>;*/
+}
+class C<U> {
+  const factory C({field1}) = A<B<double>>;
+}
+''', const [
+    const ConstantData('const A()',
+        const { const {} :
+          'ConstructedConstant(A<dynamic>(field1=IntConstant(42)))' }),
+    const ConstantData('const A<int>(field1: 87)',
+        const { const {} :
+          'ConstructedConstant(A<int>(field1=IntConstant(87)))' }),
+    const ConstantData('const B()',
+        const { const {} :
+          'ConstructedConstant(A<B<dynamic>>(field1=IntConstant(42)))' }),
+    const ConstantData('const B<int>()',
+        const { const {} :
+          'ConstructedConstant(A<B<int>>(field1=IntConstant(42)))' }),
+    const ConstantData('const B<int>(field1: 87)',
+        const { const {} :
+          'ConstructedConstant(A<B<int>>(field1=IntConstant(87)))' }),
+    const ConstantData('const C<int>(field1: 87)',
+        const { const {} :
+          'ConstructedConstant(A<B<double>>(field1=IntConstant(87)))' }),
+    // TODO(johnniwinther): Enable this when the constructor evaluator doesn't
+    // crash:
+    /*const ConstantData('const B<int>.named()',
+        const { const {} :
+          'ConstructedConstant(A<int>(field1=IntConstant(42)))' }),*/
+  ]),
+  const TestData('''
+const c = const int.fromEnvironment("foo", defaultValue: 5);
+const d = const int.fromEnvironment("bar", defaultValue: 10);
+
+class A {
+  final field;
+  const A(a, b) : field = a + b;
+}
+
+class B extends A {
+  const B(a) : super(a, a * 2);
+}
+''', const [
+    const ConstantData('const A(c, d)', const {
+        const {} :
+          'ConstructedConstant(A(field=IntConstant(15)))',
+        const {'foo': '7', 'bar': '11'} :
+          'ConstructedConstant(A(field=IntConstant(18)))', }),
+    const ConstantData('const B(d)', const {
+        const {} :
+          'ConstructedConstant(B(field=IntConstant(30)))',
+        const {'bar': '42'} :
+          'ConstructedConstant(B(field=IntConstant(126)))', }),
+  ]),
+];
+
+main() {
+  asyncTest(() => Future.forEach(DATA, testData));
+}
+
+Future testData(TestData data) {
+  StringBuffer sb = new StringBuffer();
+  sb.write('${data.declarations}\n');
+  Map constants = {};
+  data.constants.forEach((ConstantData constantData) {
+    String name = 'c${constants.length}';
+    sb.write('const $name = ${constantData.code};\n');
+    constants[name] = constantData;
+  });
+  sb.write('main() {}\n');
+  String source = sb.toString();
+  Compiler compiler = compilerFor(
+      {'main.dart': source}, options: ['--analyze-all']);
+  return compiler.runCompiler(Uri.parse('memory:main.dart')).then((_) {
+    var library = compiler.mainApp;
+    constants.forEach((String name, ConstantData data) {
+      FieldElement field = library.localLookup(name);
+      ConstantExpression constant = field.constant;
+      data.expectedValues.forEach(
+          (Map<String, String> env, String expectedText) {
+        Environment environment = new MemoryEnvironment(compiler, env);
+        ConstantValue value =
+            constant.evaluate(environment, DART_CONSTANT_SYSTEM);
+        String valueText = value.toStructuredString();
+        Expect.equals(expectedText, valueText,
+            "Unexpected value '${valueText}' for contant "
+            "`${constant.getText()}`, expected '${expectedText}'.");
+      });
+    });
+  });
+}
diff --git a/tests/compiler/dart2js/constant_expression_test.dart b/tests/compiler/dart2js/constant_expression_test.dart
new file mode 100644
index 0000000..c7fdaaf
--- /dev/null
+++ b/tests/compiler/dart2js/constant_expression_test.dart
@@ -0,0 +1,247 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library constant_expression_test;
+
+import 'dart:async';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+import 'package:compiler/src/constants/expressions.dart';
+import 'package:compiler/src/dart2jslib.dart';
+import 'package:compiler/src/elements/elements.dart';
+import 'memory_compiler.dart';
+
+class TestData {
+  /// Declarations needed for the [constants].
+  final String declarations;
+  /// Tested constants.
+  final List constants;
+
+  const TestData(this.declarations, this.constants);
+}
+
+class ConstantData {
+  /// Source code for the constant expression.
+  final String code;
+  /// The expected constant expression kind.
+  final ConstantExpressionKind kind;
+  /// ConstantExpression.getText() result if different from [code].
+  final String text;
+  /// The expected instance type for ConstructedConstantExpression.
+  final String type;
+  /// The expected instance fields for ConstructedConstantExpression.
+  final Map<String, String> fields;
+
+  const ConstantData(String code,
+                     this.kind,
+                     {String text,
+                      this.type,
+                      this.fields})
+      : this.code = code,
+        this.text = text != null ? text : code;
+}
+
+const List<TestData> DATA = const [
+  const TestData('', const [
+    const ConstantData('null', ConstantExpressionKind.NULL),
+    const ConstantData('false', ConstantExpressionKind.BOOL),
+    const ConstantData('true', ConstantExpressionKind.BOOL),
+    const ConstantData('0', ConstantExpressionKind.INT),
+    const ConstantData('0.0', ConstantExpressionKind.DOUBLE),
+    const ConstantData('"foo"', ConstantExpressionKind.STRING),
+    const ConstantData('1 + 2', ConstantExpressionKind.BINARY),
+    const ConstantData('-(1)', ConstantExpressionKind.UNARY, text: '-1'),
+    const ConstantData('identical(0, 1)', ConstantExpressionKind.IDENTICAL),
+    const ConstantData('"a" "b"', ConstantExpressionKind.CONCATENATE,
+                       text: '"ab"'),
+    const ConstantData('identical', ConstantExpressionKind.FUNCTION),
+    const ConstantData('true ? 0 : 1', ConstantExpressionKind.CONDITIONAL),
+    const ConstantData('proxy', ConstantExpressionKind.VARIABLE),
+    const ConstantData('Object', ConstantExpressionKind.TYPE),
+    const ConstantData('#name', ConstantExpressionKind.SYMBOL),
+    const ConstantData('const [0, 1]', ConstantExpressionKind.LIST),
+    const ConstantData('const <int>[0, 1]', ConstantExpressionKind.LIST),
+    const ConstantData('const {0: 1, 2: 3}', ConstantExpressionKind.MAP),
+    const ConstantData('const <int, int>{0: 1, 2: 3}',
+                       ConstantExpressionKind.MAP),
+    const ConstantData(
+        'const bool.fromEnvironment("foo", defaultValue: false)',
+        ConstantExpressionKind.BOOL_FROM_ENVIRONMENT),
+    const ConstantData(
+        'const int.fromEnvironment("foo", defaultValue: 42)',
+        ConstantExpressionKind.INT_FROM_ENVIRONMENT),
+    const ConstantData(
+        'const String.fromEnvironment("foo", defaultValue: "bar")',
+        ConstantExpressionKind.STRING_FROM_ENVIRONMENT),
+  ]),
+  const TestData('''
+class A {
+  const A();
+}
+class B {
+  final field1;
+  const B(this.field1);
+}
+class C extends B {
+  final field2;
+  const C({field1: 42, this.field2: false}) : super(field1);
+  const C.named([field = false]) : this(field1: field, field2: field);
+}
+''', const [
+    const ConstantData('const Object()',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'Object', fields: const {}),
+    const ConstantData('const A()',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'A', fields: const {}),
+    const ConstantData('const B(0)',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'B',
+        fields: const {'field(B#field1)': '0'}),
+    const ConstantData('const B(const A())',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'B',
+        fields: const {'field(B#field1)': 'const A()'}),
+    const ConstantData('const C()',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'C',
+        fields: const {
+          'field(B#field1)': '42',
+          'field(C#field2)': 'false',
+        }),
+    const ConstantData('const C(field1: 87)',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'C',
+        fields: const {
+          'field(B#field1)': '87',
+          'field(C#field2)': 'false',
+        }),
+    const ConstantData('const C(field2: true)',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'C',
+        fields: const {
+          'field(B#field1)': '42',
+          'field(C#field2)': 'true',
+        }),
+    const ConstantData('const C.named()',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'C',
+        fields: const {
+          'field(B#field1)': 'false',
+          'field(C#field2)': 'false',
+        }),
+    const ConstantData('const C.named(87)',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'C',
+        fields: const {
+          'field(B#field1)': '87',
+          'field(C#field2)': '87',
+        }),
+  ]),
+  const TestData('''
+class A<T> implements B {
+  final field1;
+  const A({this.field1:42});
+}
+class B<S> implements C {
+  const factory B({field1}) = A<B<S>>;
+  // TODO(johnniwinther): Enable this when the constructor evaluator doesn't 
+  // crash:
+  /*const factory B.named() = A<S>;*/
+}
+class C<U> {
+  const factory C({field1}) = A<B<double>>;
+}
+''', const [
+    const ConstantData('const A()', ConstantExpressionKind.CONSTRUCTED,
+        type: 'A<dynamic>',
+        fields: const {'field(A#field1)': '42'}),
+    const ConstantData('const A<int>(field1: 87)',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'A<int>',
+        fields: const {'field(A#field1)': '87'}),
+    const ConstantData('const B()', ConstantExpressionKind.CONSTRUCTED,
+        type: 'A<B<dynamic>>',
+        fields: const {
+          'field(A#field1)': '42',
+        }),
+    const ConstantData('const B<int>()', ConstantExpressionKind.CONSTRUCTED,
+        type: 'A<B<int>>',
+        fields: const {
+          'field(A#field1)': '42',
+        }),
+    const ConstantData('const B<int>(field1: 87)',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'A<B<int>>',
+        fields: const {
+          'field(A#field1)': '87',
+        }),
+    const ConstantData('const C<int>(field1: 87)',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'A<B<double>>',
+        fields: const {
+          'field(A#field1)': '87',
+        }),
+    // TODO(johnniwinther): Enable this when the constructor evaluator doesn't
+    // crash:
+    /*const ConstantData('const B<int>.named()',
+        ConstantExpressionKind.CONSTRUCTED,
+        type: 'A<int>',
+        fields: const {
+          'field(A#field1)': '42',
+        }),*/
+  ]),
+];
+
+main() {
+  asyncTest(() => Future.forEach(DATA, testData));
+}
+
+Future testData(TestData data) {
+  StringBuffer sb = new StringBuffer();
+  sb.write('${data.declarations}\n');
+  Map constants = {};
+  data.constants.forEach((ConstantData constantData) {
+    String name = 'c${constants.length}';
+    sb.write('const $name = ${constantData.code};\n');
+    constants[name] = constantData;
+  });
+  sb.write('main() {}\n');
+  String source = sb.toString();
+  Compiler compiler = compilerFor(
+      {'main.dart': source}, options: ['--analyze-all']);
+  return compiler.runCompiler(Uri.parse('memory:main.dart')).then((_) {
+    var library = compiler.mainApp;
+    constants.forEach((String name, ConstantData data) {
+      FieldElement field = library.localLookup(name);
+      var constant = field.constant;
+      Expect.equals(data.kind, constant.kind,
+          "Unexpected kind '${constant.kind}' for contant "
+          "`${constant.getText()}`, expected '${data.kind}'.");
+      Expect.equals(data.text, constant.getText(),
+          "Unexpected text '${constant.getText()}' for contant, "
+          "expected '${data.text}'.");
+      if (data.type != null) {
+        String instanceType = constant.computeInstanceType().toString();
+        Expect.equals(data.type, instanceType,
+            "Unexpected type '$instanceType' for contant "
+            "`${constant.getText()}`, expected '${data.type}'.");
+      }
+      if (data.fields != null) {
+        Map instanceFields = constant.computeInstanceFields();
+        Expect.equals(data.fields.length, instanceFields.length,
+            "Unexpected field count ${instanceFields.length} for contant "
+            "`${constant.getText()}`, expected '${data.fields.length}'.");
+        instanceFields.forEach((field, expression) {
+          String name = '$field';
+          String expression = instanceFields[field].getText();
+          String expected = data.fields[name];
+          Expect.equals(expected, expression,
+              "Unexpected field expression ${expression} for field '$name' in "
+              "contant `${constant.getText()}`, expected '${expected}'.");
+        });
+      }
+    });
+  });
+}
diff --git a/tests/compiler/dart2js/deferred_inline_restrictions_test.dart b/tests/compiler/dart2js/deferred_inline_restrictions_test.dart
new file mode 100644
index 0000000..2bedda3
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_inline_restrictions_test.dart
@@ -0,0 +1,137 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that we do not accidentially leak code from deferred libraries but do
+// allow inlining of empty functions and from main.
+
+import 'package:expect/expect.dart';
+import "package:async_helper/async_helper.dart";
+import 'memory_source_file_helper.dart';
+import "dart:async";
+
+import 'package:compiler/src/dart2jslib.dart'
+       as dart2js;
+
+class MemoryOutputSink extends EventSink<String> {
+  StringBuffer mem = new StringBuffer();
+  void add(String event) {
+    mem.write(event);
+  }
+  void addError(String event, [StackTrace stackTrace]) {
+    Expect.isTrue(false);
+  }
+  void close() {}
+}
+
+void main() {
+  Uri script = currentDirectory.resolveUri(Platform.script);
+  Uri libraryRoot = script.resolve('../../../sdk/');
+  Uri packageRoot = script.resolve('./packages/');
+
+  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
+  var handler = new FormattingDiagnosticHandler(provider);
+
+  Map<String, MemoryOutputSink> outputs = new Map<String, MemoryOutputSink>();
+
+  MemoryOutputSink outputSaver(name, extension) {
+    if (name == '') {
+      name = 'main';
+    }
+    return outputs.putIfAbsent("$name.$extension", () {
+      return new MemoryOutputSink();
+    });
+  }
+
+  Compiler compiler = new Compiler(provider.readStringFromUri,
+                                   outputSaver,
+                                   handler.diagnosticHandler,
+                                   libraryRoot,
+                                   packageRoot,
+                                   [],
+                                   {});
+  asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
+    lookupLibrary(name) {
+      return compiler.libraryLoader.lookupLibrary(Uri.parse(name));
+    }
+
+    var outputUnitForElement = compiler.deferredLoadTask.outputUnitForElement;
+
+    var lib1 = lookupLibrary("memory:lib1.dart");
+    var inlineMeAway = lib1.find("inlineMeAway");
+    var ou_lib1 = outputUnitForElement(inlineMeAway);
+
+    var lib3 = lookupLibrary("memory:lib3.dart");
+    var sameContextInline = lib3.find("sameContextInline");
+    var ou_lib3 = outputUnitForElement(sameContextInline);
+
+    // Test that we actually got differnt output units.
+    Expect.notEquals(ou_lib1.name, ou_lib3.name);
+
+    String mainOutput = outputs["main.js"].mem.toString();
+    String lib1Output = outputs["out_${ou_lib1.name}.part.js"].mem.toString();
+    String lib3Output = outputs["out_${ou_lib3.name}.part.js"].mem.toString();
+
+    RegExp re1 = new RegExp(r"inlined as empty");
+    RegExp re2 = new RegExp(r"inlined from main");
+    RegExp re3 = new RegExp(r"inlined from lib1");
+    RegExp re4 = new RegExp(r"inline same context");
+
+    // Test that inlineMeAway was inlined and its argument thus dropped.
+    Expect.isFalse(re1.hasMatch(mainOutput));
+
+    // Test that inlineFromMain was inlined and thus the string moved to lib1.
+    Expect.isFalse(re2.hasMatch(mainOutput));
+    Expect.isTrue(re2.hasMatch(lib1Output));
+
+    // Test that inlineFromLib1 was not inlined into main.
+    Expect.isFalse(re3.hasMatch(mainOutput));
+    Expect.isTrue(re3.hasMatch(lib1Output));
+
+    // Test that inlineSameContext was inlined into lib1.
+    Expect.isFalse(re4.hasMatch(lib3Output));
+    Expect.isTrue(re4.hasMatch(lib1Output));
+  }));
+}
+
+// Make sure that empty functions are inlined and that functions from
+// main also are inlined (assuming normal heuristics).
+const Map MEMORY_SOURCE_FILES = const {"main.dart": """
+import "dart:async";
+
+import 'lib1.dart' deferred as lib1;
+import 'lib2.dart' deferred as lib2;
+
+inlineFromMain(x) => "inlined from main" + x;
+
+void main() {
+  lib1.loadLibrary().then((_) {
+    lib2.loadLibrary().then((_) {
+      lib1.test();
+      lib2.test();
+      print(lib1.inlineMeAway("inlined as empty"));
+      print(lib1.inlineFromLib1("should stay"));
+    });
+  });
+}
+""", "lib1.dart": """
+import "main.dart" as main;
+import "lib3.dart" as lib3;
+
+inlineMeAway(x) {}
+
+inlineFromLib1(x) => "inlined from lib1" + x;
+
+test() {
+  print(main.inlineFromMain("should be inlined"));
+  print(lib3.sameContextInline("should be inlined"));
+}
+""", "lib2.dart": """
+import "lib3.dart" as lib3;
+
+test() {
+  print(lib3.sameContextInline("should be inlined"));
+}
+""", "lib3.dart": """
+sameContextInline(x) => "inline same context" + x;
+"""};
diff --git a/tests/compiler/dart2js/malformed_uri_test.dart b/tests/compiler/dart2js/malformed_uri_test.dart
new file mode 100644
index 0000000..d51e2dd
--- /dev/null
+++ b/tests/compiler/dart2js/malformed_uri_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that the compiler can handle missing files used in imports, exports,
+// part tags or as the main source file.
+
+library dart2js.test.malformed_uri;
+
+import 'package:expect/expect.dart';
+import "package:async_helper/async_helper.dart";
+import 'memory_compiler.dart';
+
+const MEMORY_SOURCE_FILES = const {
+  'main.dart': '''
+import '../../Udyn[mic ils/expect.dart';
+
+main () { print("Hi"); }
+''',
+};
+
+testMalformedUri() {
+  var collector = new DiagnosticCollector();
+  var compiler = compilerFor(MEMORY_SOURCE_FILES, diagnosticHandler: collector);
+  asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
+    Expect.equals(1, collector.errors.length);
+  }));
+}
+
+void main() {
+  testMalformedUri();
+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 978f924..3eb6a81 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -392,7 +392,7 @@
 class MockElement extends FunctionElementX {
   MockElement(Element enclosingElement)
       : super('', ElementKind.FUNCTION, Modifiers.EMPTY,
-              enclosingElement, false);
+              enclosingElement);
 
   get node => null;
 
diff --git a/tests/compiler/dart2js/mock_libraries.dart b/tests/compiler/dart2js/mock_libraries.dart
index 54d4490..296e18b 100644
--- a/tests/compiler/dart2js/mock_libraries.dart
+++ b/tests/compiler/dart2js/mock_libraries.dart
@@ -294,6 +294,8 @@
        }''',
   'JSMutableArray':
       'class JSMutableArray extends JSArray implements JSMutableIndexable {}',
+  'JSUnmodifiableArray':
+      'class JSUnmodifiableArray extends JSArray {}',
   'JSMutableIndexable':
       'abstract class JSMutableIndexable extends JSIndexable {}',
       'JSPositiveInt': 'class JSPositiveInt extends JSInt {}',
diff --git a/tests/compiler/dart2js/semantic_visitor_test.dart b/tests/compiler/dart2js/semantic_visitor_test.dart
index c227fa8..3d93724 100644
--- a/tests/compiler/dart2js/semantic_visitor_test.dart
+++ b/tests/compiler/dart2js/semantic_visitor_test.dart
@@ -1250,6 +1250,42 @@
     const Test.clazz(
         '''
         class B {
+          operator []=(a, b) {}
+        }
+        class C extends B {
+          m() => ++super[42];
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_PREFIX,
+                    index: '42',
+                    operator: '++')),
+    const Test.clazz(
+        '''
+        class B {
+        }
+        class C extends B {
+          m() => ++super[42];
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_PREFIX,
+                    index: '42',
+                    operator: '++')),
+    const Test.clazz(
+        '''
+        class B {
+          operator [](_) => null;
+        }
+        class C extends B {
+          m() => ++super[42];
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_PREFIX,
+                    getter: 'function(B#[])',
+                    index: '42',
+                    operator: '++')),
+    const Test.clazz(
+        '''
+        class B {
           operator [](_) => null;
           operator []=(a, b) {}
         }
@@ -1262,6 +1298,42 @@
                     setter: 'function(B#[]=)',
                     index: '42',
                     operator: '--')),
+    const Test.clazz(
+        '''
+        class B {
+          operator []=(a, b) {}
+        }
+        class C extends B {
+          m() => super[42]--;
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_POSTFIX,
+                    index: '42',
+                    operator: '--')),
+    const Test.clazz(
+        '''
+        class B {
+        }
+        class C extends B {
+          m() => super[42]--;
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_POSTFIX,
+                    index: '42',
+                    operator: '--')),
+    const Test.clazz(
+        '''
+        class B {
+          operator [](_) => null;
+        }
+        class C extends B {
+          m() => super[42]--;
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_POSTFIX,
+                    getter: 'function(B#[])',
+                    index: '42',
+                    operator: '--')),
   ],
   'Equals': const [
     // Equals
@@ -1377,6 +1449,16 @@
         ''',
         const Visit(VisitKind.VISIT_SUPER_INDEX_SET,
             element: 'function(B#[]=)', index: '1', rhs: '2')),
+    const Test.clazz(
+        '''
+        class B {
+        }
+        class C extends B {
+          m() => super[1] = 2;
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_SET,
+            index: '1', rhs: '2')),
   ],
   'Compound assignment': const [
     // Compound assignment
@@ -1705,8 +1787,7 @@
         ''',
         const Visit(VisitKind.VISIT_COMPOUND_INDEX_SET,
             receiver: '0', index: '1', operator: '+=', rhs: '42')),
-    // TODO(johnniwinther): Enable this when the getter element is stored.
-    /*const Test.clazz(
+    const Test.clazz(
         '''
         class B {
           operator [](_) {}
@@ -1718,7 +1799,40 @@
         ''',
         const Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET,
             getter: 'function(B#[])', setter: 'function(B#[]=)',
-            index: '1', operator: '+=', rhs: '42')),*/
+            index: '1', operator: '+=', rhs: '42')),
+    const Test.clazz(
+        '''
+        class B {
+          operator []=(a, b) {}
+        }
+        class C extends B {
+          m() => super[1] += 42;
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_COMPOUND_INDEX_SET,
+            index: '1', operator: '+=', rhs: '42')),
+    const Test.clazz(
+        '''
+        class B {
+        }
+        class C extends B {
+          m() => super[1] += 42;
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_COMPOUND_INDEX_SET,
+            index: '1', operator: '+=', rhs: '42')),
+    const Test.clazz(
+        '''
+        class B {
+          operator [](_) {}
+        }
+        class C extends B {
+          m() => super[1] += 42;
+        }
+        ''',
+        const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_COMPOUND_INDEX_SET,
+            getter: 'function(B#[])',
+            index: '1', operator: '+=', rhs: '42')),
   ],
   'Prefix expression': const [
     // Prefix expression
@@ -2268,16 +2382,14 @@
         m() => new Class.unresolved(true, 42);
         ''',
         const Visit(
-            VisitKind.ERROR_UNRESOLVED_CONSTRUCTOR_INVOKE,
+            VisitKind.VISIT_UNRESOLVED_CONSTRUCTOR_INVOKE,
             arguments: '(true,42)')),
     const Test(
         '''
         m() => new Unresolved(true, 42);
         ''',
         const Visit(
-            // TODO(johnniwinther): Update this to
-            // `VisitKind.ERROR_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE`.
-            VisitKind.ERROR_UNRESOLVED_CONSTRUCTOR_INVOKE,
+            VisitKind.VISIT_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE,
             arguments: '(true,42)')),
     const Test(
         '''
@@ -2285,7 +2397,7 @@
         m() => new AbstractClass();
         ''',
         const Visit(
-            VisitKind.ERROR_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
+            VisitKind.VISIT_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
             element: 'generative_constructor(AbstractClass#)',
             type: 'AbstractClass',
             arguments: '()',
@@ -2298,11 +2410,11 @@
         m() => new Class(true, 42);
         ''',
         const Visit(
-            VisitKind.ERROR_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
+            VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
             element: 'function(Class#)',
             arguments: '(true,42)',
             type: 'Class',
-            selector: 'Selector(call, , arity=2)')),
+            selector: 'CallStructure(arity=2)')),
     const Test(
         '''
         class Class {
@@ -2311,11 +2423,11 @@
         m() => new Class(true, 42);
         ''',
         const Visit(
-            VisitKind.ERROR_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
+            VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
             element: 'function(Class#)',
             arguments: '(true,42)',
             type: 'Class',
-            selector: 'Selector(call, , arity=2)')),
+            selector: 'CallStructure(arity=2)')),
     const Test(
         '''
         class Class {
@@ -2325,11 +2437,11 @@
         m() => new Class(true, 42);
         ''',
         const Visit(
-            VisitKind.ERROR_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
+            VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
             element: 'function(Class#)',
             arguments: '(true,42)',
             type: 'Class',
-            selector: 'Selector(call, , arity=2)')),
+            selector: 'CallStructure(arity=2)')),
     const Test(
         '''
         abstract class AbstractClass {
@@ -2341,11 +2453,11 @@
         m() => new Class(true, 42);
         ''',
         const Visit(
-            VisitKind.ERROR_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
+            VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
             element: 'function(Class#)',
             arguments: '(true,42)',
             type: 'Class',
-            selector: 'Selector(call, , arity=2)')),
+            selector: 'CallStructure(arity=2)')),
   ],
 };
 
@@ -2381,7 +2493,8 @@
               index: 0),
           const Visit(VisitKind.VISIT_OPTIONAL_PARAMETER_DECL,
               element: 'parameter(m#b)',
-              index: 1),
+              index: 1,
+              constant: 'null'),
         ]),
     const Test(
         '''
@@ -2430,7 +2543,8 @@
               element: 'parameter(m#a)',
               index: 0),
           const Visit(VisitKind.VISIT_NAMED_PARAMETER_DECL,
-              element: 'parameter(m#b)'),
+              element: 'parameter(m#b)',
+              constant: 'null'),
         ]),
     const Test(
         '''
@@ -5184,44 +5298,97 @@
   }
 
   @override
-  errorUnresolvedSuperCompoundIndexSet(
+  visitUnresolvedSuperGetterCompoundIndexSet(
       Send node,
-      ErroneousElement element,
+      Element element,
       Node index,
       AssignmentOperator operator,
       Node rhs,
       arg) {
-    // TODO: implement errorUnresolvedSuperCompoundIndexSet
+    visits.add(new Visit(
+        VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_COMPOUND_INDEX_SET,
+        index: index, operator: operator, rhs: rhs));
+    apply(index, arg);
+    apply(rhs, arg);
   }
 
   @override
-  errorUnresolvedSuperIndexSet(
+  visitUnresolvedSuperSetterCompoundIndexSet(
+      Send node,
+      MethodElement getter,
+      Element element,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
+      arg) {
+    visits.add(new Visit(
+        VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_COMPOUND_INDEX_SET,
+        getter: getter, index: index, operator: operator, rhs: rhs));
+    apply(index, arg);
+    apply(rhs, arg);
+  }
+
+  @override
+  visitUnresolvedSuperIndexSet(
       Send node,
       ErroneousElement element,
       Node index,
       Node rhs,
       arg) {
-    // TODO: implement errorUnresolvedSuperIndexSet
+    visits.add(new Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_SET,
+               index: index, rhs: rhs));
+    apply(index, arg);
+    apply(rhs, arg);
   }
 
   @override
-  errorUnresolvedSuperIndexPostfix(
+  visitUnresolvedSuperGetterIndexPostfix(
       Send node,
-      Element function,
+      Element element,
       Node index,
       IncDecOperator operator,
       arg) {
-    // TODO: implement errorUnresolvedSuperIndexPostfix
+    visits.add(new Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_POSTFIX,
+               index: index, operator: operator));
+    apply(index, arg);
   }
 
   @override
-  errorUnresolvedSuperIndexPrefix(
+  visitUnresolvedSuperSetterIndexPostfix(
       Send node,
-      Element function,
+      MethodElement getter,
+      Element element,
       Node index,
       IncDecOperator operator,
       arg) {
-    // TODO: implement errorUnresolvedSuperIndexPrefix
+    visits.add(new Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_POSTFIX,
+               getter: getter, index: index, operator: operator));
+    apply(index, arg);
+  }
+
+  @override
+  visitUnresolvedSuperGetterIndexPrefix(
+      Send node,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      arg) {
+    visits.add(new Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GETTER_INDEX_PREFIX,
+               index: index, operator: operator));
+    apply(index, arg);
+  }
+
+  @override
+  visitUnresolvedSuperSetterIndexPrefix(
+      Send node,
+      MethodElement getter,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      arg) {
+    visits.add(new Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SETTER_INDEX_PREFIX,
+               getter: getter, index: index, operator: operator));
+    apply(index, arg);
   }
 
   @override
@@ -5279,31 +5446,31 @@
   }
 
   @override
-  errorUnresolvedClassConstructorInvoke(
-      NewExpression node,
-      Element constructor,
-      MalformedType type,
-      NodeList arguments,
-      Selector selector,
-      arg) {
-    // TODO(johnniwinther): Test [type] and [selector].
-    visits.add(new Visit(
-        VisitKind.ERROR_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE,
-        arguments: arguments));
-    apply(arguments, arg);
-  }
-
-  @override
-  errorUnresolvedConstructorInvoke(
+  visitUnresolvedClassConstructorInvoke(
       NewExpression node,
       Element constructor,
       DartType type,
       NodeList arguments,
       Selector selector,
       arg) {
-    // TODO(johnniwinther): Test [type] and [selector].
+    // TODO(johnniwinther): Test [type] when it is not `dynamic`.
     visits.add(new Visit(
-        VisitKind.ERROR_UNRESOLVED_CONSTRUCTOR_INVOKE,
+        VisitKind.VISIT_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE,
+        arguments: arguments));
+    apply(arguments, arg);
+  }
+
+  @override
+  visitUnresolvedConstructorInvoke(
+      NewExpression node,
+      Element constructor,
+      DartType type,
+      NodeList arguments,
+      Selector selector,
+      arg) {
+    // TODO(johnniwinther): Test [type] when it is not `dynamic`.
+    visits.add(new Visit(
+        VisitKind.VISIT_UNRESOLVED_CONSTRUCTOR_INVOKE,
         arguments: arguments));
     apply(arguments, arg);
   }
@@ -5390,7 +5557,7 @@
   }
 
   @override
-  errorAbstractClassConstructorInvoke(
+  visitAbstractClassConstructorInvoke(
       NewExpression node,
       ConstructorElement constructor,
       InterfaceType type,
@@ -5398,7 +5565,7 @@
       CallStructure callStructure,
       arg) {
     visits.add(new Visit(
-        VisitKind.ERROR_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
+        VisitKind.VISIT_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
         element: constructor,
         type: type,
         arguments: arguments,
@@ -5407,19 +5574,19 @@
   }
 
   @override
-  errorUnresolvedRedirectingFactoryConstructorInvoke(
+  visitUnresolvedRedirectingFactoryConstructorInvoke(
       NewExpression node,
       ConstructorElement constructor,
       InterfaceType type,
       NodeList arguments,
-      Selector selector,
+      CallStructure callStructure,
       arg) {
     visits.add(new Visit(
-        VisitKind.ERROR_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
+        VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
         element: constructor,
         type: type,
         arguments: arguments,
-        selector: selector));
+        selector: callStructure));
     apply(arguments, arg);
   }
 }
@@ -5902,7 +6069,7 @@
   }
 
   @override
-  errorUnresolvedClassConstructorInvoke(
+  visitUnresolvedClassConstructorInvoke(
       NewExpression node,
       Element constructor,
       MalformedType type,
@@ -5911,13 +6078,13 @@
       arg) {
     // TODO(johnniwinther): Test [type] and [selector].
     visits.add(new Visit(
-        VisitKind.ERROR_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE,
+        VisitKind.VISIT_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE,
         arguments: arguments));
     apply(arguments, arg);
   }
 
   @override
-  errorUnresolvedConstructorInvoke(
+  visitUnresolvedConstructorInvoke(
       NewExpression node,
       Element constructor,
       DartType type,
@@ -5926,7 +6093,7 @@
       arg) {
     // TODO(johnniwinther): Test [type] and [selector].
     visits.add(new Visit(
-        VisitKind.ERROR_UNRESOLVED_CONSTRUCTOR_INVOKE,
+        VisitKind.VISIT_UNRESOLVED_CONSTRUCTOR_INVOKE,
         arguments: arguments));
     apply(arguments, arg);
   }
@@ -6013,7 +6180,7 @@
   }
 
   @override
-  errorAbstractClassConstructorInvoke(
+  visitAbstractClassConstructorInvoke(
       NewExpression node,
       ConstructorElement constructor,
       InterfaceType type,
@@ -6021,7 +6188,7 @@
       CallStructure callStructure,
       arg) {
     visits.add(new Visit(
-        VisitKind.ERROR_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
+        VisitKind.VISIT_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
         element: constructor,
         type: type,
         arguments: arguments,
@@ -6030,19 +6197,19 @@
   }
 
   @override
-  errorUnresolvedRedirectingFactoryConstructorInvoke(
+  visitUnresolvedRedirectingFactoryConstructorInvoke(
       NewExpression node,
       ConstructorElement constructor,
       InterfaceType type,
       NodeList arguments,
-      Selector selector,
+      CallStructure callStructure,
       arg) {
     visits.add(new Visit(
-        VisitKind.ERROR_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
+        VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
         element: constructor,
         type: type,
         arguments: arguments,
-        selector: selector));
+        selector: callStructure));
     apply(arguments, arg);
   }
 }
@@ -6176,7 +6343,11 @@
   VISIT_SUPER_EQUALS,
   VISIT_SUPER_NOT_EQUALS,
   VISIT_SUPER_INDEX_PREFIX,
+  VISIT_UNRESOLVED_SUPER_GETTER_INDEX_PREFIX,
+  VISIT_UNRESOLVED_SUPER_SETTER_INDEX_PREFIX,
   VISIT_SUPER_INDEX_POSTFIX,
+  VISIT_UNRESOLVED_SUPER_GETTER_INDEX_POSTFIX,
+  VISIT_UNRESOLVED_SUPER_SETTER_INDEX_POSTFIX,
 
   VISIT_UNARY,
   VISIT_SUPER_UNARY,
@@ -6220,7 +6391,10 @@
   VISIT_INDEX_SET,
   VISIT_COMPOUND_INDEX_SET,
   VISIT_SUPER_INDEX_SET,
+  VISIT_UNRESOLVED_SUPER_INDEX_SET,
   VISIT_SUPER_COMPOUND_INDEX_SET,
+  VISIT_UNRESOLVED_SUPER_GETTER_COMPOUND_INDEX_SET,
+  VISIT_UNRESOLVED_SUPER_SETTER_COMPOUND_INDEX_SET,
 
   VISIT_ASSERT,
   VISIT_LOGICAL_AND,
@@ -6239,10 +6413,10 @@
   VISIT_THIS_CONSTRUCTOR_INVOKE,
   VISIT_FIELD_INITIALIZER,
 
-  ERROR_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE,
-  ERROR_UNRESOLVED_CONSTRUCTOR_INVOKE,
-  ERROR_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
-  ERROR_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
+  VISIT_UNRESOLVED_CLASS_CONSTRUCTOR_INVOKE,
+  VISIT_UNRESOLVED_CONSTRUCTOR_INVOKE,
+  VISIT_ABSTRACT_CLASS_CONSTRUCTOR_INVOKE,
+  VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE,
 
   VISIT_INSTANCE_GETTER_DECL,
   VISIT_INSTANCE_SETTER_DECL,
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index 6914aba..6063513 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -34,12 +34,14 @@
 TypeMask jsMutableArray;
 TypeMask jsFixedArray;
 TypeMask jsExtendableArray;
+TypeMask jsUnmodifiableArray;
 TypeMask jsString;
 TypeMask jsStringOrNull;
 TypeMask jsArrayOrNull;
 TypeMask jsMutableArrayOrNull;
 TypeMask jsFixedArrayOrNull;
 TypeMask jsExtendableArrayOrNull;
+TypeMask jsUnmodifiableArrayOrNull;
 TypeMask jsIndexableOrNull;
 TypeMask jsInterceptorOrNull;
 
@@ -113,6 +115,7 @@
   rule(emptyType, jsReadableArray, jsReadableArray);
   rule(emptyType, jsMutableArray, jsMutableArray);
   rule(emptyType, jsExtendableArray, jsExtendableArray);
+  rule(emptyType, jsUnmodifiableArray, jsUnmodifiableArray);
   rule(emptyType, nonPrimitive1, nonPrimitive1);
   rule(emptyType, nonPrimitive2, nonPrimitive2);
   rule(emptyType, potentialArray, potentialArray);
@@ -135,6 +138,7 @@
   rule(dynamicType, jsReadableArray, dynamicType);
   rule(dynamicType, jsMutableArray, dynamicType);
   rule(dynamicType, jsExtendableArray, dynamicType);
+  rule(dynamicType, jsUnmodifiableArray, dynamicType);
   rule(dynamicType, nonPrimitive1, dynamicType);
   rule(dynamicType, nonPrimitive2, dynamicType);
   rule(dynamicType, potentialArray, dynamicType);
@@ -156,6 +160,7 @@
   rule(jsBoolean, jsReadableArray, jsInterceptor);
   rule(jsBoolean, jsMutableArray, jsInterceptor);
   rule(jsBoolean, jsExtendableArray, jsInterceptor);
+  rule(jsBoolean, jsUnmodifiableArray, jsInterceptor);
   rule(jsBoolean, nonPrimitive1, objectType);
   rule(jsBoolean, nonPrimitive2, objectType);
   rule(jsBoolean, potentialArray, dynamicType);
@@ -176,6 +181,7 @@
   rule(jsNumber, jsReadableArray, jsInterceptor);
   rule(jsNumber, jsMutableArray, jsInterceptor);
   rule(jsNumber, jsExtendableArray, jsInterceptor);
+  rule(jsNumber, jsUnmodifiableArray, jsInterceptor);
   rule(jsNumber, nonPrimitive1, objectType);
   rule(jsNumber, nonPrimitive2, objectType);
   rule(jsNumber, potentialArray, dynamicType);
@@ -195,6 +201,7 @@
   rule(jsInteger, jsReadableArray, jsInterceptor);
   rule(jsInteger, jsMutableArray, jsInterceptor);
   rule(jsInteger, jsExtendableArray, jsInterceptor);
+  rule(jsInteger, jsUnmodifiableArray, jsInterceptor);
   rule(jsInteger, nonPrimitive1, objectType);
   rule(jsInteger, nonPrimitive2, objectType);
   rule(jsInteger, potentialArray, dynamicType);
@@ -213,6 +220,7 @@
   rule(jsDouble, jsReadableArray, jsInterceptor);
   rule(jsDouble, jsMutableArray, jsInterceptor);
   rule(jsDouble, jsExtendableArray, jsInterceptor);
+  rule(jsDouble, jsUnmodifiableArray, jsInterceptor);
   rule(jsDouble, nonPrimitive1, objectType);
   rule(jsDouble, nonPrimitive2, objectType);
   rule(jsDouble, potentialArray, dynamicType);
@@ -230,6 +238,7 @@
   rule(jsIndexable, jsReadableArray, jsIndexable);
   rule(jsIndexable, jsMutableArray, jsIndexable);
   rule(jsIndexable, jsExtendableArray, jsIndexable);
+  rule(jsIndexable, jsUnmodifiableArray, jsIndexable);
   rule(jsIndexable, nonPrimitive1, objectType);
   rule(jsIndexable, nonPrimitive2, objectType);
   rule(jsIndexable, potentialArray, dynamicType);
@@ -246,6 +255,7 @@
   rule(jsString, jsReadableArray, jsIndexable);
   rule(jsString, jsMutableArray, jsIndexable);
   rule(jsString, jsExtendableArray, jsIndexable);
+  rule(jsString, jsUnmodifiableArray, jsIndexable);
   rule(jsString, nonPrimitive1, objectType);
   rule(jsString, nonPrimitive2, objectType);
   rule(jsString, potentialArray, dynamicType);
@@ -261,6 +271,7 @@
   rule(jsReadableArray, jsReadableArray, jsReadableArray);
   rule(jsReadableArray, jsMutableArray, jsReadableArray);
   rule(jsReadableArray, jsExtendableArray, jsReadableArray);
+  rule(jsReadableArray, jsUnmodifiableArray, jsReadableArray);
   rule(jsReadableArray, nonPrimitive1, objectType);
   rule(jsReadableArray, nonPrimitive2, objectType);
   rule(jsReadableArray, potentialArray, potentialArray);
@@ -275,6 +286,7 @@
 
   rule(jsMutableArray, jsMutableArray, jsMutableArray);
   rule(jsMutableArray, jsExtendableArray, jsMutableArray);
+  rule(jsMutableArray, jsUnmodifiableArray, jsReadableArray);
   rule(jsMutableArray, nonPrimitive1, objectType);
   rule(jsMutableArray, nonPrimitive2, objectType);
   rule(jsMutableArray, potentialArray, potentialArray);
@@ -288,6 +300,7 @@
   rule(jsMutableArray, jsFixedArray, jsMutableArray);
 
   rule(jsExtendableArray, jsExtendableArray, jsExtendableArray);
+  rule(jsExtendableArray, jsUnmodifiableArray, jsReadableArray);
   rule(jsExtendableArray, nonPrimitive1, objectType);
   rule(jsExtendableArray, nonPrimitive2, objectType);
   rule(jsExtendableArray, potentialArray, potentialArray);
@@ -300,6 +313,19 @@
   rule(jsExtendableArray, nullType, jsExtendableArrayOrNull);
   rule(jsExtendableArray, jsFixedArray, jsMutableArray);
 
+  rule(jsUnmodifiableArray, jsUnmodifiableArray, jsUnmodifiableArray);
+  rule(jsUnmodifiableArray, nonPrimitive1, objectType);
+  rule(jsUnmodifiableArray, nonPrimitive2, objectType);
+  rule(jsUnmodifiableArray, potentialArray, potentialArray);
+  rule(jsUnmodifiableArray, potentialString, dynamicType);
+  rule(jsUnmodifiableArray, jsBooleanOrNull, jsInterceptorOrNull);
+  rule(jsUnmodifiableArray, jsNumberOrNull, jsInterceptorOrNull);
+  rule(jsUnmodifiableArray, jsIntegerOrNull, jsInterceptorOrNull);
+  rule(jsUnmodifiableArray, jsDoubleOrNull, jsInterceptorOrNull);
+  rule(jsUnmodifiableArray, jsStringOrNull, jsIndexableOrNull);
+  rule(jsUnmodifiableArray, nullType, jsUnmodifiableArrayOrNull);
+  rule(jsUnmodifiableArray, jsFixedArray, jsReadableArray);
+
   rule(nonPrimitive1, nonPrimitive1, nonPrimitive1);
   rule(nonPrimitive1, nonPrimitive2, objectType);
   rule(nonPrimitive1, potentialArray, dynamicType);
@@ -400,6 +426,7 @@
   rule(emptyType, jsReadableArray, emptyType);
   rule(emptyType, jsMutableArray, emptyType);
   rule(emptyType, jsExtendableArray, emptyType);
+  rule(emptyType, jsUnmodifiableArray, emptyType);
   rule(emptyType, nonPrimitive1, emptyType);
   rule(emptyType, nonPrimitive2, emptyType);
   rule(emptyType, potentialArray, emptyType);
@@ -422,6 +449,7 @@
   rule(dynamicType, jsReadableArray, jsReadableArray);
   rule(dynamicType, jsMutableArray, jsMutableArray);
   rule(dynamicType, jsExtendableArray, jsExtendableArray);
+  rule(dynamicType, jsUnmodifiableArray, jsUnmodifiableArray);
   rule(dynamicType, nonPrimitive1, nonPrimitive1);
   rule(dynamicType, nonPrimitive2, nonPrimitive2);
   rule(dynamicType, potentialArray, potentialArray);
@@ -443,6 +471,7 @@
   rule(jsBoolean, jsReadableArray, emptyType);
   rule(jsBoolean, jsMutableArray, emptyType);
   rule(jsBoolean, jsExtendableArray, emptyType);
+  rule(jsBoolean, jsUnmodifiableArray, emptyType);
   rule(jsBoolean, nonPrimitive1, emptyType);
   rule(jsBoolean, nonPrimitive2, emptyType);
   rule(jsBoolean, potentialArray, emptyType);
@@ -463,6 +492,7 @@
   rule(jsNumber, jsReadableArray, emptyType);
   rule(jsNumber, jsMutableArray, emptyType);
   rule(jsNumber, jsExtendableArray, emptyType);
+  rule(jsNumber, jsUnmodifiableArray, emptyType);
   rule(jsNumber, nonPrimitive1, emptyType);
   rule(jsNumber, nonPrimitive2, emptyType);
   rule(jsNumber, potentialArray, emptyType);
@@ -482,6 +512,7 @@
   rule(jsInteger, jsReadableArray, emptyType);
   rule(jsInteger, jsMutableArray, emptyType);
   rule(jsInteger, jsExtendableArray, emptyType);
+  rule(jsInteger, jsUnmodifiableArray, emptyType);
   rule(jsInteger, nonPrimitive1, emptyType);
   rule(jsInteger, nonPrimitive2, emptyType);
   rule(jsInteger, potentialArray, emptyType);
@@ -500,6 +531,7 @@
   rule(jsDouble, jsReadableArray, emptyType);
   rule(jsDouble, jsMutableArray, emptyType);
   rule(jsDouble, jsExtendableArray, emptyType);
+  rule(jsDouble, jsUnmodifiableArray, emptyType);
   rule(jsDouble, nonPrimitive1, emptyType);
   rule(jsDouble, nonPrimitive2, emptyType);
   rule(jsDouble, potentialArray, emptyType);
@@ -517,6 +549,7 @@
   rule(jsIndexable, jsReadableArray, jsReadableArray);
   rule(jsIndexable, jsMutableArray, jsMutableArray);
   rule(jsIndexable, jsExtendableArray, jsExtendableArray);
+  rule(jsIndexable, jsUnmodifiableArray, jsUnmodifiableArray);
   rule(jsIndexable, nonPrimitive1, emptyType);
   rule(jsIndexable, nonPrimitive2, emptyType);
   rule(jsIndexable, potentialArray, new TypeMask.nonNullSubtype(
@@ -535,6 +568,7 @@
   rule(jsString, jsReadableArray, emptyType);
   rule(jsString, jsMutableArray, emptyType);
   rule(jsString, jsExtendableArray, emptyType);
+  rule(jsString, jsUnmodifiableArray, emptyType);
   rule(jsString, nonPrimitive1, emptyType);
   rule(jsString, nonPrimitive2, emptyType);
   rule(jsString, potentialArray, emptyType);
@@ -550,6 +584,7 @@
   rule(jsReadableArray, jsReadableArray, jsReadableArray);
   rule(jsReadableArray, jsMutableArray, jsMutableArray);
   rule(jsReadableArray, jsExtendableArray, jsExtendableArray);
+  rule(jsReadableArray, jsUnmodifiableArray, jsUnmodifiableArray);
   rule(jsReadableArray, nonPrimitive1, emptyType);
   rule(jsReadableArray, nonPrimitive2, emptyType);
   rule(jsReadableArray, potentialArray, jsReadableArray);
@@ -564,6 +599,7 @@
 
   rule(jsMutableArray, jsMutableArray, jsMutableArray);
   rule(jsMutableArray, jsExtendableArray, jsExtendableArray);
+  rule(jsMutableArray, jsUnmodifiableArray, emptyType);
   rule(jsMutableArray, nonPrimitive1, emptyType);
   rule(jsMutableArray, nonPrimitive2, emptyType);
   rule(jsMutableArray, potentialArray, jsMutableArray);
@@ -577,6 +613,7 @@
   rule(jsMutableArray, jsFixedArray, jsFixedArray);
 
   rule(jsExtendableArray, jsExtendableArray, jsExtendableArray);
+  rule(jsExtendableArray, jsUnmodifiableArray, emptyType);
   rule(jsExtendableArray, nonPrimitive1, emptyType);
   rule(jsExtendableArray, nonPrimitive2, emptyType);
   rule(jsExtendableArray, potentialArray, jsExtendableArray);
@@ -589,6 +626,19 @@
   rule(jsExtendableArray, nullType, emptyType);
   rule(jsExtendableArray, jsFixedArray, emptyType);
 
+  rule(jsUnmodifiableArray, jsUnmodifiableArray, jsUnmodifiableArray);
+  rule(jsUnmodifiableArray, nonPrimitive1, emptyType);
+  rule(jsUnmodifiableArray, nonPrimitive2, emptyType);
+  rule(jsUnmodifiableArray, potentialArray, jsUnmodifiableArray);
+  rule(jsUnmodifiableArray, potentialString, emptyType);
+  rule(jsUnmodifiableArray, jsBooleanOrNull, emptyType);
+  rule(jsUnmodifiableArray, jsNumberOrNull, emptyType);
+  rule(jsUnmodifiableArray, jsIntegerOrNull, emptyType);
+  rule(jsUnmodifiableArray, jsDoubleOrNull, emptyType);
+  rule(jsUnmodifiableArray, jsStringOrNull, emptyType);
+  rule(jsUnmodifiableArray, nullType, emptyType);
+  rule(jsUnmodifiableArray, jsFixedArray, emptyType);
+
   rule(nonPrimitive1, nonPrimitive1, nonPrimitive1);
   rule(nonPrimitive1, nonPrimitive2, emptyType);
   rule(nonPrimitive1, potentialArray, emptyType);
@@ -717,6 +767,10 @@
         world);
     jsExtendableArray = new TypeMask.nonNullExact(
         backend.jsExtendableArrayClass, world);
+    jsUnmodifiableArrayOrNull =
+        new TypeMask.exact(backend.jsUnmodifiableArrayClass, world);
+    jsUnmodifiableArray =
+        new TypeMask.nonNullExact(backend.jsUnmodifiableArrayClass, world);
     jsIndexableOrNull = new TypeMask.subtype(backend.jsIndexableClass, world);
     jsIndexable = new TypeMask.nonNullSubtype(backend.jsIndexableClass, world);
     jsInterceptorOrNull = new TypeMask.subclass(backend.jsInterceptorClass,
diff --git a/tests/compiler/dart2js_extra/23404_test.dart b/tests/compiler/dart2js_extra/23404_test.dart
new file mode 100644
index 0000000..113d78a
--- /dev/null
+++ b/tests/compiler/dart2js_extra/23404_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test for http://dartbug.com/23404/
+import 'package:expect/expect.dart';
+
+// Dart2js crashed when the global metadata had escaped characters. That
+// happens, for example, when tearing off a function that uses a default
+// argument containing escape characters.
+foo([a='\u00a0']) => a;
+bar() => '';
+
+@NoInline
+@AssumeDynamic
+confuse(x) => x;
+
+main() {
+  Expect.equals('\u00a0', confuse(foo)());
+  Expect.equals('', confuse(bar)());
+}
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 22ae813..f0f9287 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -61,195 +61,85 @@
 deferred_fail_and_retry_worker_test: SkipByDesign # Uses eval to simulate failed loading.
 
 [ $compiler == dart2js && $cps_ir ]
-10216a_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-10216b_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+10216a_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+10216b_test: Crash # Instance of 'TypeOperator': type casts not implemented.
 11673_test: Crash # (use): handleStaticFunctionGet: function(use)
 12320_test: Crash # (run): handleStaticFunctionGet: function(run)
 16407_test: Crash # unsupported element kind: foo:field
-16967_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-17094_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-17645_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-17856_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-18383_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-19191_test: Crash # cannot compile methods that need interceptor calling convention.
+17094_test: RuntimeError # Please triage this failure.
+17645_test: Crash # unsupported element kind: log:field
+17856_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
 21166_test: Crash # unsupported element kind: a:field
-21579_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-21666_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+21666_test: Crash # Instance of 'TypeOperator': type check unimplemented for fInt.
 22487_test: Crash # (divIsInt): handleStaticFunctionGet: function(divIsInt)
 22868_test: Crash #  cannot handle async/sync*/async* functions
 22895_test: Crash #  cannot handle async/sync*/async* functions
 22917_test: Crash # (test): handleStaticFunctionGet: function(test)
-23056_test: Crash # cannot compile methods that need interceptor calling convention.
-23264_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+23264_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+23404_test: Crash # (foo): handleStaticFunctionGet: function(foo)
+LayoutTests_fast_mediastream_getusermedia_t01_test/01: Crash # Please triage this failure.
+LayoutTests_fast_mediastream_getusermedia_t01_test/none: Crash # (gotStream1): handleStaticFunctionGet: function(gotStream1)
 async_stacktrace_test/asyncStar: Crash # (runTests): handleStaticFunctionGet: function(runTests)
 async_stacktrace_test/none: Crash # (runTests): handleStaticFunctionGet: function(runTests)
 bailout8_test: Crash # (foo): handleStaticFunctionGet: function(foo)
-bailout_aborting_if_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout_on_break_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout_on_continue_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bound_closure_interceptor_methods_test: Crash # cannot compile methods that need interceptor calling convention.
+bound_closure_interceptor_methods_test: Crash # unsupported element kind: getter2:field
 bound_closure_interceptor_type_test: Crash # unsupported element kind: checkers:field
-break_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-checked_accessor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_capture2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_capture3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_capture4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+checked_accessor_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 closure_capture5_test: Crash # (i=0): For-loop variable captured in loop header
-closure_capture_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_type_reflection2_test: Crash # cannot compile methods that need interceptor calling convention.
-closure_type_reflection_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 code_motion_exception_test: Crash # (call2a): handleStaticFunctionGet: function(call2a)
-compile_time_constant4_test/01: Crash # cannot compile methods that need interceptor calling convention.
-compile_time_constant4_test/02: Crash # cannot compile methods that need interceptor calling convention.
-compile_time_constant4_test/03: Crash # cannot compile methods that need interceptor calling convention.
-compile_time_constant4_test/04: Crash # cannot compile methods that need interceptor calling convention.
-compile_time_constant4_test/05: Crash # cannot compile methods that need interceptor calling convention.
-compile_time_constant4_test/06: Crash # cannot compile methods that need interceptor calling convention.
-compile_time_constant4_test/none: Crash # cannot compile methods that need interceptor calling convention.
-compound_operator_index_test: Crash # cannot compile methods that need interceptor calling convention.
-conditional_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-conflict_index_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_fold_number_dart2_j_s_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_javascript_semantics2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_javascript_semantics3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_javascript_semantics_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_javascript_semantics_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_javascript_semantics_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_javascript_semantics_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_javascript_semantics_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+constant_javascript_semantics2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+constant_javascript_semantics3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 deferred/deferred_class_test: Crash # (isError): handleStaticFunctionGet: function(isError)
 deferred/deferred_constant2_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
 deferred/deferred_constant3_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
 deferred/deferred_constant4_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
 deferred/deferred_function_test: Crash # (isError): handleStaticFunctionGet: function(isError)
 deferred/deferred_mirrors1_test: Crash # (lazy.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
-deferred/deferred_mirrors2_test: Crash # cannot compile methods that need interceptor calling convention.
 deferred/deferred_overlapping_test: Crash # (lib1.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
 deferred_fail_and_retry_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
 deferred_fail_and_retry_worker_test: Crash # (test): handleStaticFunctionGet: function(test)
-do_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_in_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fields_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_hashcode_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-for_in_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-for_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generics_factories_test: Crash # cannot compile methods that need interceptor calling convention.
-generics_is_check1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_element_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hash_code_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-if_in_loop_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-if_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-index_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inference_nsm_mirrors_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_is_int_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interface_type_optimization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-invoke_dynamic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_check_instanceof_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_operator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-LayoutTests_fast_mediastream_getusermedia_t01_test/01: Crash # (gotStream1): Error expression `gotStream1` unhandled.
-LayoutTests_fast_mediastream_getusermedia_t01_test/none: Crash # (gotStream1): handleStaticFunctionGet: function(gotStream1)
-list_factory_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-literal_string_juxtaposition_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-logical_and_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-logical_or_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-loop_if_phi_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-many_fields_test: Crash # cannot compile methods that need interceptor calling convention.
-math_lib_prefix_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-math_lib_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-member_namespace_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-minus_zero2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-minus_zero_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+do_test: Timeout # Please triage this failure.
+for_test: Timeout # Please triage this failure.
+generics_factories_test: Crash # Please triage this failure.
+generics_is_check1_test: Crash # Instance of 'TypeOperator': type check unimplemented for Hest<int>.
+hash_code_test: Crash # unsupported element kind: hash:field
+inference_nsm_mirrors_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inferrer_is_int_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+interface_type_optimization_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+is_check_instanceof_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
 mirror_enqueuer_regression_test: Crash # unsupported element kind: foo:field
-mirror_invalid_field_access2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_invalid_field_access3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_invalid_field_access4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_invalid_field_access_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_invalid_invoke2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_invalid_invoke3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_invalid_invoke_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_printer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors_declarations_filtering_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors_used_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors_used_metatargets_test: Crash # (try {reflect(z).invoke(#foo,[] );}on UnsupportedError catch (e){caught=true;}): "on T" catch block
-mirrors_used_native_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+mirror_invalid_field_access2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirror_invalid_field_access3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirror_invalid_field_access4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirror_invalid_field_access_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirror_invalid_invoke2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirror_invalid_invoke3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirror_invalid_invoke_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirror_printer_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+mirror_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors_declarations_filtering_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors_used_closure_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors_used_native_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 mirrors_used_warning2_test: Crash # (runTests): handleStaticFunctionGet: function(runTests)
 mirrors_used_warning_test/minif: Crash # (runTests): handleStaticFunctionGet: function(runTests)
 mirrors_used_warning_test/none: Crash # (runTests): handleStaticFunctionGet: function(runTests)
-mirror_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_type_inference_field2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_type_inference_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_type_inference_function_test: Crash # cannot compile methods that need interceptor calling convention.
-named_parameter_for_static_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-nan_negate_test: Crash # cannot compile methods that need interceptor calling convention.
-no_such_method_mirrors_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-no_such_method_test: Crash # cannot compile methods that need interceptor calling convention.
-not_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator_equals_test: Crash # cannot compile methods that need interceptor calling convention.
-operator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-panda_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-phi_elimination_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-phi_gvn_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-phi_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_symbol_literal_test/01: Pass # Please triage this failure.
-private_symbol_literal_test/02: Pass # Please triage this failure.
-private_symbol_literal_test/03: Pass # Please triage this failure.
-private_symbol_literal_test/04: Pass # Please triage this failure.
-private_symbol_literal_test/05: Pass # Please triage this failure.
-private_symbol_literal_test/06: Pass # Please triage this failure.
-reflect_native_types_test: Crash # cannot compile methods that need interceptor calling convention.
-regress/4492_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress/4515_1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress/4515_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress/4515_3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress/4639_test: Crash # cannot compile methods that need interceptor calling convention.
-regress/4740_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regression_2913_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-return_setter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-runtime_type_int_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+no_such_method_mirrors_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+reflect_native_types_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regress/4492_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regress/4515_1_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regress/4515_2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regress/4740_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 runtime_type_test: Crash # Please triage this failure.
-simple_string_constant_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_field2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_method2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_var_no_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_var_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_escape_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolation_dynamic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolation_opt1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_constructor1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_constructor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-switch_test/01: Crash # (badswitches(42)): Error expression `badswitches(42)` unhandled.
-switch_test/02: Crash # (badswitches(42)): Error expression `badswitches(42)` unhandled.
+super_constructor1_test: RuntimeError # Please triage this failure.
+switch_test/01: Crash #  Unhandled node
+switch_test/02: Crash #  Unhandled node
 switch_test/none: Crash # (switch (val){}): Unhandled node
-this_phi_elimination_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-this_redirecting_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-this_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+this_phi_elimination_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 timer_negative_test: Crash # (test): handleStaticFunctionGet: function(test)
 timer_test: Crash # (test): handleStaticFunctionGet: function(test)
-to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_argument_factory_crash_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_argument_factory_nocrash_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_constant_switch_test/01: Pass # Please triage this failure.
+type_argument_factory_crash_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+type_argument_factory_nocrash_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
 type_constant_switch_test/none: Crash # (switch (v){}): Unhandled node
-type_error_message_test: Crash # cannot compile methods that need interceptor calling convention.
-typevariable_factory_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typevariable_substitution_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-while_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+typevariable_factory_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<T>.
+typevariable_substitution_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<T>.
+while_test: Timeout # Please triage this failure.
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index 9eef5ac..307088e 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -28,114 +28,111 @@
 compute_this_script_test: Skip # Issue 17458
 
 [ $compiler == dart2js && $cps_ir ]
-abstract_class_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+abstract_class_test: Crash # unsupported element kind: foo:function
 bound_closure_super_test: Crash # (makeCC): handleStaticFunctionGet: function(makeCC)
 bound_closure_test: Crash # (makeCC): handleStaticFunctionGet: function(makeCC)
-browser_compat_1_prepatched_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-browser_compat_1_unpatched_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-browser_compat_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+browser_compat_1_prepatched_test: Crash # unsupported element kind: getTagCallCount:function
+browser_compat_1_unpatched_test: Crash # unsupported element kind: getTagCallCount:function
+browser_compat_2_test: Crash # unsupported element kind: getTagCallCount:function
 catch_javascript_null_stack_trace_test: Crash # (JS('','(function () {throw null;})()')): handleStaticFunctionInvoke: foreign: function(JS)
 core_type_check_native_test: Crash # (checkTest): handleStaticFunctionGet: function(checkTest)
-downcast_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+downcast_test: Crash # Instance of 'TypeOperator': type casts not implemented.
 event_loop_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
-fake_thing_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fake_thing_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+fake_thing_2_test: Crash # unsupported element kind: make3:function
+fake_thing_test: Crash # unsupported element kind: make2:function
 field_type2_test: Crash # unsupported element kind: makeNode:function
-field_type_test: Crash # cannot compile methods that need interceptor calling convention.
-fixup_get_tag_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+field_type_test: Crash # unsupported element kind: makeNode:function
+fixup_get_tag_test: Crash # unsupported element kind: token:function
 foreign_test: Crash # (JS('bool','isNaN(#)',isNaN)): handleStaticFunctionInvoke: foreign: function(JS)
-hash_code_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inference_of_helper_methods_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+hash_code_test: Crash # unsupported element kind: makeA:function
+inference_of_helper_methods_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 internal_library_test: Crash # (startRootIsolate): handleStaticFunctionGet: function(startRootIsolate)
-is_check_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue9182_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+issue9182_test: Crash # unsupported element kind: makeA:function
 js_const_test: Crash # (JS('String',r'#.replace(#, #)',s1,re,fToUpper)): handleStaticFunctionInvoke: foreign: function(JS)
-jsobject_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirror_intercepted_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_call_arity1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_call_arity2_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_call_arity3_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_checked_arguments1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_checked_fields_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_avoids_hidden_name_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_fields_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_fields_3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_fields_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_inheritance1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_inheritance2_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_inheritance3_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_inheritance4_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_is_check1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_is_check3_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_class_with_dart_methods_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+jsobject_test: Crash # unsupported element kind: makeQ:function
+mirror_intercepted_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_call_arity1_frog_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_call_arity2_frog_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_call_arity3_frog_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_checked_arguments1_frog_test: Crash # unsupported element kind: cmp:function
+native_checked_fields_frog_test: Crash # unsupported element kind: makeB:function
+native_class_avoids_hidden_name_frog_test: Crash # unsupported element kind: makeB:function
+native_class_fields_2_test: Crash # unsupported element kind: makeA:function
+native_class_fields_3_test: Crash # unsupported element kind: makeA:function
+native_class_fields_test: Crash # unsupported element kind: makeA:function
+native_class_inheritance1_frog_test: Crash # unsupported element kind: makeB2:function
+native_class_inheritance2_frog_test: Crash # unsupported element kind: foo:function
+native_class_inheritance3_frog_test: Crash # unsupported element kind: foo:function
+native_class_inheritance4_frog_test: Crash # unsupported element kind: makeB:function
+native_class_is_check1_frog_test: Crash # unsupported element kind: makeA:function
+native_class_is_check3_frog_test: Crash # unsupported element kind: makeB:function
+native_class_with_dart_methods_frog_test: Crash # unsupported element kind: makeA:function
 native_closure_identity_frog_test: Crash # (staticMethod): handleStaticFunctionGet: function(staticMethod)
-native_constructor_name_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_equals_frog_test: Crash # cannot compile methods that need interceptor calling convention.
-native_exception2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_exception_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_exceptions1_frog_test: Crash #  "on T" catch block
-native_field_invocation2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_field_invocation3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_field_invocation4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_field_invocation5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_field_invocation6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_field_invocation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_field_name_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+native_constructor_name_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_equals_frog_test: Crash # unsupported element kind: makeA:function
+native_exception2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_exception_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_exceptions1_frog_test: Crash # unsupported element kind: op:function
+native_field_invocation2_test: Crash # unsupported element kind: nativeId:function
+native_field_invocation3_test: Crash # unsupported element kind: makeCC:function
+native_field_invocation4_test: Crash # unsupported element kind: nativeId:function
+native_field_invocation5_test: Crash # unsupported element kind: nativeFirst:function
+native_field_invocation6_test: Crash # unsupported element kind: nativeFirst:function
+native_field_invocation_test: Crash # unsupported element kind: nativeId:function
+native_field_name_test: Crash # unsupported element kind: makeA:function
 native_field_optimization_test: Crash # (test1): handleStaticFunctionGet: function(test1)
-native_field_rename_1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_field_rename_2_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_library_same_name_used_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_method_inlining_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_method_rename1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_method_rename2_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_method_rename3_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_method_with_keyword_name_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_mirror_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_missing_method1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_missing_method2_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_mixin_field_test: Crash # cannot compile methods that need interceptor calling convention.
-native_mixin_multiple2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+native_field_rename_1_frog_test: Crash # unsupported element kind: native_key_method:function
+native_field_rename_2_frog_test: Crash # unsupported element kind: native_key_method:function
+native_library_same_name_used_frog_test: Crash # (JS('creates:Impl; returns:I;','makeI()')): handleStaticFunctionInvoke: foreign: function(JS)
+native_method_inlining_test: Crash # unsupported element kind: makeA:function
+native_method_rename1_frog_test: Crash # unsupported element kind: baz:function
+native_method_rename2_frog_test: Crash # unsupported element kind: foo:function
+native_method_rename3_frog_test: Crash # unsupported element kind: foo:function
+native_method_with_keyword_name_test: Crash # unsupported element kind: makeA:function
+native_mirror_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_missing_method1_frog_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_missing_method2_frog_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_mixin_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_mixin_multiple2_test: Crash # unsupported element kind: makeB:function
 native_mixin_multiple3_test: Crash # (callFoo): handleStaticFunctionGet: function(callFoo)
-native_mixin_multiple_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_mixin_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+native_mixin_multiple_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_mixin_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 native_mixin_with_plain_test: Crash # (makeA): handleStaticFunctionGet: function(makeA)
-native_named_constructors2_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_named_constructors3_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_no_such_method_exception2_frog_test: Crash # (try {a.foo();}on NoSuchMethodError catch (e){exception=e;}): "on T" catch block
-native_no_such_method_exception3_frog_test: Crash # (try {a.foo();}on NoSuchMethodError catch (e){exception=e;}): "on T" catch block
-native_no_such_method_exception4_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_no_such_method_exception5_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_no_such_method_exception_frog_test: Crash # (try {a.foo();}on NoSuchMethodError catch (e){exception=e;}): "on T" catch block
-native_novel_html_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_null_closure_frog_test: Crash #  "on T" catch block
-native_null_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_property_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_to_string_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_use_native_name_in_table_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_window1_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_window2_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_wrapping_function3_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_wrapping_function_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-oddly_named_fields_test: Crash # cannot compile methods that need interceptor calling convention.
-only_pass_on_d8_test: Crash # cannot compile methods that need interceptor calling convention.
-only_pass_on_jsshell_test: Crash # cannot compile methods that need interceptor calling convention.
+native_named_constructors2_frog_test: Crash # unsupported element kind: foo:function
+native_named_constructors3_frog_test: Crash # unsupported element kind: foo:function
+native_no_such_method_exception2_frog_test: Crash # unsupported element kind: makeB:function
+native_no_such_method_exception3_frog_test: Crash # unsupported element kind: makeA:function
+native_no_such_method_exception4_frog_test: Crash # unsupported element kind: makeA:function
+native_no_such_method_exception5_frog_test: Crash # unsupported element kind: makeA:function
+native_no_such_method_exception_frog_test: Crash # unsupported element kind: makeA:function
+native_novel_html_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_null_closure_frog_test: Crash # unsupported element kind: invoke:function
+native_null_frog_test: Crash # unsupported element kind: returnZero:function
+native_property_frog_test: Crash # (JS('int','#._z',this)): handleStaticFunctionInvoke: foreign: function(JS)
+native_to_string_frog_test: Crash # unsupported element kind: makeA:function
+native_use_native_name_in_table_frog_test: Crash # unsupported element kind: makeB:function
+native_window1_frog_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_window2_frog_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+native_wrapping_function3_frog_test: Crash # unsupported element kind: foo2:function
+native_wrapping_function_frog_test: Crash # unsupported element kind: foo2:function
+oddly_named_fields_test: Crash # unsupported element kind: makeNativeClassWithOddNames:function
 optimization_hints_test: Crash # (JS('','String("in main function")')): handleStaticFunctionInvoke: foreign: function(JS)
 rti_only_native_test: Crash # (main): handleStaticFunctionGet: function(main)
 runtimetype_test: Crash # (JS('A','#',makeA())): handleStaticFunctionInvoke: foreign: function(JS)
 static_methods_test: Crash # (main): handleStaticFunctionGet: function(main)
-subclassing_1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-subclassing_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-subclassing_3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-subclassing_4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+subclassing_1_test: Crash # unsupported element kind: makeC:function
+subclassing_2_test: Crash # unsupported element kind: makeB:function
+subclassing_3_test: Crash # unsupported element kind: makeB:function
+subclassing_4_test: Crash # unsupported element kind: makeB:function
 subclassing_5_test: Crash # (testIsB): handleStaticFunctionGet: function(testIsB)
-subclassing_constructor_1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-subclassing_constructor_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+subclassing_constructor_1_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+subclassing_constructor_2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 subclassing_super_call_test: Crash # (JS('','#(#)',constructor,b1)): handleStaticFunctionInvoke: foreign: function(JS)
 subclassing_super_field_1_test: Crash # (JS('','#(#)',constructor,b)): handleStaticFunctionInvoke: foreign: function(JS)
 subclassing_super_field_2_test: Crash # (JS('','#(#)',constructor,b)): handleStaticFunctionInvoke: foreign: function(JS)
 subclassing_type_test: Crash # (isA): handleStaticFunctionGet: function(isA)
-super_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+super_call_test: Crash # unsupported element kind: makeD:function
 super_property_test: Crash # (testThing): handleStaticFunctionGet: function(testThing)
 type_error_decode_test: Crash # (isNullError): handleStaticFunctionGet: function(isNullError)
 undefined_bailout_test: Crash # (JS('','void 0')): handleStaticFunctionInvoke: foreign: function(JS)
-uninstantiated_type_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+uninstantiated_type_parameter_test: Crash # Instance of 'TypeOperator': type check unimplemented for C<int>.
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index e685618..ee631b0 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -2,34 +2,16 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-[ $compiler == dart2dart]
-bool_from_environment2_test: Skip
-bool_from_environment_default_value_test: Skip
-bool_from_environment_test: Skip
-from_environment_const_type_test: Skip
-from_environment_const_type_undefined_test: Skip
-int_from_environment2_test: Skip
-int_from_environment3_test: Skip
-int_from_environment_default_value_test: Skip
-int_from_environment_test: Skip
-string_from_environment2_test: Skip
-string_from_environment3_test: Skip
-string_from_environment_default_value: Skip
-string_from_environment_test: Skip
-
 [ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 bool_from_environment2_test: Skip
-bool_from_environment_default_value_test: Skip
 bool_from_environment_test: Skip
 from_environment_const_type_test: Skip
 from_environment_const_type_undefined_test: Skip
 int_from_environment2_test: Skip
 int_from_environment3_test: Skip
-int_from_environment_default_value_test: Skip
 int_from_environment_test: Skip
 string_from_environment2_test: Skip
 string_from_environment3_test: Skip
-string_from_environment_default_value: Skip
 string_from_environment_test: Skip
 
 [ $compiler == none ]
@@ -39,7 +21,7 @@
 symbol_test/01: Fail, Pass # bug 11669
 
 # #void should be a valid symbol.
-[ $compiler == none || $compiler == dart2js || $compiler == dart2dart ]
+[ $compiler == none || $compiler == dart2js ]
 symbol_reserved_word_test/02: CompileTimeError # bug 20191
 symbol_reserved_word_test/05: CompileTimeError # bug 20191
 
@@ -57,7 +39,7 @@
 
 # With the exception of 'void', const Symbol() should not accept reserved
 # words.
-[ $compiler == none || $compiler == dart2js || $compiler == dart2dart]
+[ $compiler == none || $compiler == dart2js ]
 symbol_reserved_word_test/04: MissingCompileTimeError # bug 11669, 19972
 symbol_reserved_word_test/07: MissingCompileTimeError # bug 11669, 19972
 symbol_reserved_word_test/10: MissingCompileTimeError # bug 11669, 19972
@@ -68,7 +50,7 @@
 symbol_reserved_word_test/10: Fail # bug 11669, 19972 / dartium/drt cannot detect CompileTimeErrors
 
 # With the exception of 'void', new Symbol() should not accept reserved words.
-[ $compiler == none || $compiler == dart2dart ]
+[ $compiler == none ]
 symbol_reserved_word_test/06: RuntimeError # bug 11669
 symbol_reserved_word_test/09: RuntimeError # bug 11669
 symbol_reserved_word_test/12: RuntimeError # bug 11669
@@ -77,7 +59,7 @@
 symbol_test/02: MissingCompileTimeError # bug 11669
 symbol_test/03: MissingCompileTimeError # bug 11669
 
-[ $compiler == none || $compiler == dart2dart ]
+[ $compiler == none ]
 symbol_test/none: Fail # bug 11669
 symbol_operator_test/03: Fail # bug 11669
 string_case_test/01: Fail # Bug 18061
@@ -155,13 +137,6 @@
 string_case_test/02: Fail, OK  # Bug in dartium version of V8.
 string_case_test/03: Fail, OK  # Bug in dartium version of V8.
 
-[ $compiler == dart2dart ]
-compare_to2_test: Fail # inherited from VM
-unicode_test: Fail # inherited from VM
-
-[ $compiler == dart2dart && $minified ]
-error_stack_trace1_test: Fail # Fails in minified mode, test depends on method names.
-
 [ $compiler == dartanalyzer ]
 from_environment_const_type_test: Skip # The -D option that defines a constant
 # for the Dart vm is not accepted by the deprecated java dartanalyzer.
@@ -235,363 +210,156 @@
 big_integer_parsed_mul_div_vm_test: Pass, Slow
 
 [ $compiler == dart2js && $cps_ir ]
-apply2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-apply3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-apply4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-apply_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bit_twiddling_bigint_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bit_twiddling_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bool_from_environment_default_value_test: Crash # (throw new ExpectException(message)): Unhandled node
-bool_from_environment_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bool_hashcode_test: Crash # (throw new ExpectException(message)): Unhandled node
-collection_from_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-collection_removes_test: Crash # (throw new ExpectException(message)): Unhandled node
-collection_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-collection_to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compare_to2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compare_to_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_list_literal_test: Crash # (try {list.add(4);}on UnsupportedError catch (e){exception=e;}): "on T" catch block
-const_list_remove_range_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_list_set_range_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-core_runtime_types_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time2_test: Crash # (throw new ExpectException(message)): Unhandled node
-date_time3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time6_test: Crash # (throw new ExpectException(message)): Unhandled node
-date_time7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time8_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time9_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time_parse_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-date_time_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_ceil2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_ceil_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_ceil_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_compare_test: Crash # (throw new ExpectException(message)): Unhandled node
-double_floor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_floor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_floor_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_parse_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_parse_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_round2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_round3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_round4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_round_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_round_to_double2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_round_to_double3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_round_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_truncate2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_truncate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_truncate_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-duration2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-duration_big_num_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-duration_double_multiplication_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-duration_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-error_stack_trace1_test: Crash # (throw new ExpectException(message)): Unhandled node
-error_stack_trace2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-error_stack_trace_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-errors_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-exception_implementation_test: Crash #  "on T" catch block
-expando_test: Crash # Please triage this failure.
-expression_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-for_in_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-format_exception_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-from_environment_const_type_undefined_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-growable_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hashcode_boxed_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hashcode_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hash_map2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hash_map_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hash_set_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-hash_set_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-hash_set_type_check_test: Crash # (throw new ExpectException(message)): Unhandled node
-has_next_iterator_test: Crash # (throw new ExpectException(message)): Unhandled node
-indexed_list_access_test: Crash # (throw new ExpectException(message)): Unhandled node
-int_ceil_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_ceil_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-integer_to_radix_string_test: Crash #  "on T" catch block
-integer_to_string_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-integer_to_string_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_floor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_floor_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_from_environment2_test: Crash # (throw new ExpectException(message)): Unhandled node
-int_from_environment_default_value_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_from_environment_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+apply2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+apply_test: Crash # (test0): handleStaticFunctionGet: function(test0)
+bool_from_environment_test: RuntimeError # Please triage this failure.
+collection_removes_test: RuntimeError # Please triage this failure.
+collection_to_string_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+compare_to2_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+const_list_remove_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+const_list_set_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+core_runtime_types_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+date_time9_test: Crash # Instance of 'TypeOperator': type check unimplemented for Comparable.
+date_time_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_ceil2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_ceil_test: RuntimeError # Please triage this failure.
+double_floor2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_floor_test: RuntimeError # Please triage this failure.
+double_parse_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_parse_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_round2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_round4_test: RuntimeError # Please triage this failure.
+double_round_test: RuntimeError # Please triage this failure.
+double_truncate2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_truncate_test: RuntimeError # Please triage this failure.
+duration2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+duration_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+error_stack_trace1_test: Pass # Please triage this failure.
+error_stack_trace2_test: Crash # unsupported element kind: cyclicStatic:field
+error_stack_trace_test: Crash # (argument): handleStaticFunctionGet: function(argument)
+expando_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+growable_list_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+has_next_iterator_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+hash_map2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, String>.
+hash_set_test/01: Crash # (testIdentitySet): handleStaticFunctionGet: function(testIdentitySet)
+hash_set_test/none: Crash # (testIdentitySet): handleStaticFunctionGet: function(testIdentitySet)
+hash_set_type_check_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+hashcode_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+indexed_list_access_test: Crash # (getIt): handleStaticFunctionGet: function(getIt)
+int_from_environment_test: RuntimeError # Please triage this failure.
 int_parse_radix_test/01: Crash # Please triage this failure.
 int_parse_radix_test/02: Crash # Please triage this failure.
 int_parse_radix_test/none: Crash # Please triage this failure.
-int_round_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_round_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_to_int_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_truncate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_truncate_to_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_operator_basic_types_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_contains2_test: Crash # (throw new ExpectException(message)): Unhandled node
-iterable_contains_test: Crash # (throw new ExpectException(message)): Unhandled node
-iterable_element_at_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_expand_test: Crash # (throw new ExpectException(message)): Unhandled node
-iterable_first_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_first_where_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_fold_test: Crash # cannot compile methods that need interceptor calling convention.
-iterable_generate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_join_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_last_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_last_where_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_length_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_mapping_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_reduce_test: Crash # cannot compile methods that need interceptor calling convention.
-iterable_return_type_test/01: Crash # Please triage this failure.
-iterable_return_type_test/02: Crash # Please triage this failure.
-iterable_return_type_test/none: Crash # Please triage this failure.
-iterable_single_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_single_where_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_skip_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_skip_while_test: Crash # (throw new ExpectException(message)): Unhandled node
-iterable_take_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_take_while_test: Crash # (throw new ExpectException(message)): Unhandled node
-iterable_test: Crash # (throw new ExpectException(message)): Unhandled node
-iterable_to_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_to_set_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-iterable_tostring_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-json_map_test: Crash # (throw new ExpectException(message)): Unhandled node
-linked_hash_map_from_iterables_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-linked_hash_map_from_iterable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-linked_hash_map_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_as_map_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_contains_argument_order_test: Crash # cannot compile methods that need interceptor calling convention.
-list_filled_type_argument_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_fill_range_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_first_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_fixed_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_for_each_test: Crash # (throw new ExpectException(message)): Unhandled node
-list_get_range_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_growable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_index_of2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_index_of_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_insert_all_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_insert_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_iterators_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_last_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal_is_growable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_map_test: Crash # (throw new ExpectException(message)): Unhandled node
-list_removeat_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_remove_range_test: Crash # (throw new ExpectException(message)): Unhandled node
-list_replace_range_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_reversed_test: Crash # (throw new ExpectException(message)): Unhandled node
-list_set_all_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_set_range_test: Crash # (throw new ExpectException(message)): Unhandled node
-list_sort_test: Crash # (throw new ExpectException(message)): Unhandled node
-list_sublist_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_to_string2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+is_operator_basic_types_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+iterable_element_at_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_expand_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_first_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_first_where_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_fold_test: Crash # (id): handleStaticFunctionGet: function(id)
+iterable_generate_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable<int>.
+iterable_last_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_last_where_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_mapping_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+iterable_reduce_test: Crash # (id): handleStaticFunctionGet: function(id)
+iterable_return_type_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, int>.
+iterable_return_type_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, int>.
+iterable_return_type_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, int>.
+iterable_single_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_single_where_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_skip_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+iterable_take_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+iterable_to_list_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+iterable_to_set_test: Crash # Instance of 'TypeOperator': type check unimplemented for Set<int>.
+json_map_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+linked_hash_map_from_iterable_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, String>.
+linked_hash_map_from_iterables_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, String>.
+list_as_map_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+list_fill_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_filled_type_argument_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+list_first_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_fixed_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_for_each_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_get_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_growable_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_insert_all_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_insert_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_iterators_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_last_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_map_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+list_remove_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_removeat_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_replace_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_reversed_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+list_set_all_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_set_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_sort_test: Crash # (Comparable.compare): handleStaticFunctionGet: function(Comparable#compare)
+list_sublist_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_to_string2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_to_string_test: RuntimeError # Please triage this failure.
 list_unmodifiable_test: Crash # (createConstList): handleStaticFunctionGet: function(createConstList)
-main_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_contains_key_test: Crash # (throw new ExpectException(message)): Unhandled node
-map_contains_value_test: Crash # (throw new ExpectException(message)): Unhandled node
-map_from_iterables_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_from_iterable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_from_test: Crash # Please triage this failure.
-map_index_test: Crash # (throw new ExpectException(message)): Unhandled node
-map_keys2_test: Crash # Please triage this failure.
-map_keys_test: Crash # Please triage this failure.
-map_remove_test: Crash # (throw new ExpectException(message)): Unhandled node
-maps_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_test: Crash # Please triage this failure.
-map_to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_values2_test: Crash # Please triage this failure.
-map_values3_test: Crash # Please triage this failure.
-map_values4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_values_test: Crash # Please triage this failure.
-nan_infinity_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-nan_infinity_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-null_nosuchmethod_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-num_clamp_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-num_parse_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-num_parse_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-num_sign_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-print_test/01: Crash # cannot compile methods that need interceptor calling convention.
-print_test/none: Crash # cannot compile methods that need interceptor calling convention.
-queue_first_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-queue_iterator_test: Crash # (throw new ExpectException(message)): Unhandled node
-queue_last_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-queue_single_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-queue_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-range_error_test: Crash # (throw new ExpectException(message)): Unhandled node
-reg_exp1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp_all_matches_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/alternative-length-miscalculation_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/alternatives_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/assertion_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/backreferences_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/bol_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/bol-with-multiline_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/capture-3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/captures_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/capture_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/character-match-out-of-order_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/char-insensitive_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/compile-crash_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/compile_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/constructor_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/dotstar_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/early-acid3-86_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/ecma-regex-examples_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/extended-characters-match_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/extended-characters-more_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/find-first-asserted_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp_first_match_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/global_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp_groups_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp_group_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp_has_match_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/indexof_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/invalid-range-in-class_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/issue_19193_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/lastindex_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/look-ahead_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/lookahead_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/loop-capture_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/malformed-escapes_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/many-brackets_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/multiline_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/negative-special-characters_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/no-extensions_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/non-bmp_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/non-capturing-backtracking_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/non-capturing-groups_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/non-character_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/non-greedy-parentheses_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/norepeat_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/overflow_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/parentheses_test: Crash # (throw new ExpectException(message)): Unhandled node
-reg_exp_pattern_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/pcre-test-4_test: Crash # (throw new ExpectException(message)): Unhandled node
+map_from_iterable_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<String, String>.
+map_from_iterables_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, String>.
+map_from_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+map_keys2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable<String>.
+map_keys_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+map_test: Crash # (Comparable.compare): handleStaticFunctionGet: function(Comparable#compare)
+map_to_string_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+map_values2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable<int>.
+map_values3_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable<String>.
+map_values4_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable<String>.
+map_values_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+null_nosuchmethod_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+null_test: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+num_clamp_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+num_parse_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+num_parse_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+num_sign_test: Crash # unsupported element kind: numbers:field
+queue_first_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+queue_last_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+queue_single_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+queue_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regexp/compile-crash_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regexp/compile_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regexp/early-acid3-86_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regexp/invalid-range-in-class_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regexp/multiline_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regexp/no-extensions_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 regexp/pcre_test: Crash # Please triage this failure.
-regexp/quantified-assertions_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/range-bound-ffff_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/range-out-of-order_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/ranges-and-escaped-hyphens_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/regexp_kde_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/regexp_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/regress-6-9-regexp_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/regress-regexp-construct-result_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/repeat-match-waldemar_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/results-cache_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/stack-overflow2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/stack-overflow_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/standalones_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp_start_end_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp_string_match_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/toString_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/UC16_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/unicodeCaseInsensitive_test: Crash # (throw new ExpectException(message)): Unhandled node
-regexp/unicode-handling_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regexp/zero-length-alternatives_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_11099_test: Crash # (throw 'Wrong result!'): Unhandled node
-regress_r21715_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-safe_to_string_test: Crash # (throw new ExpectException(message)): Unhandled node
-set_containsAll_test: Crash # (throw new ExpectException(message)): Unhandled node
-set_contains_test: Crash # (throw new ExpectException(message)): Unhandled node
-set_intersection_test: Crash # (throw new ExpectException(message)): Unhandled node
-set_iterator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-set_removeAll_test: Crash # (throw new ExpectException(message)): Unhandled node
-set_remove_test: Crash # (throw new ExpectException(message)): Unhandled node
-set_test: Crash # (throw new ExpectException(message)): Unhandled node
-set_to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-shuffle_test: Crash # (throw new ExpectException(message)): Unhandled node
-sort_test: Crash # (throw new ExpectException(message)): Unhandled node
-splay_tree_from_iterables_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-splay_tree_from_iterable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-splay_tree_test: Crash # (throw new ExpectException(message)): Unhandled node
-stacktrace_fromstring_test: Crash # (throw 0): Unhandled node
-stopwatch2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-stopwatch_test: Crash # (throw new ExpectException(message)): Unhandled node
-string_base_vm_test: Crash # (try {s.substring(5,12);}on RangeError catch (ex){exception_caught=true;}): "on T" catch block
-string_buffer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_case_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_case_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_case_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_case_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_codeunits_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_fromcharcodes_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_fromcharcode_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_from_environment2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_from_environment_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_from_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_operations_with_null_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_pattern_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_replace_all_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_replace_dollar_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_replace_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_runes_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_source_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_split_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-strings_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_substring_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_to_lower_case_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_trim2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_trimlr_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-string_trimlr_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-string_trim_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-symbol_operator_test/03: Crash # (throw "Didn't throw: ${name}"): Unhandled node
-symbol_operator_test/none: Crash # (throw "Not equal #${name}, \$${name}: ${constSymbol}, ${mirrorSymbol}"): Unhandled node
+regexp/range-out-of-order_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regexp/regexp_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+set_test: Crash # (identical): handleStaticFunctionGet: origin function(identical)
+set_to_string_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+shuffle_test: RuntimeError # Please triage this failure.
+splay_tree_from_iterable_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, String>.
+splay_tree_from_iterables_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, String>.
+splay_tree_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_buffer_test: Crash # (Expect.isTrue): handleStaticFunctionGet: function(Expect#isTrue)
+string_codeunits_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_from_environment2_test: RuntimeError # Please triage this failure.
+string_from_environment_test: RuntimeError # Please triage this failure.
+string_fromcharcode_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_fromcharcodes_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_operations_with_null_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_pattern_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_replace_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_runes_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_source_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+string_substring_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+symbol_operator_test/03: Crash # unsupported element kind: $:field
+symbol_operator_test/none: Crash # unsupported element kind: $:field
 symbol_reserved_word_test/03: Pass # Please triage this failure.
-symbol_reserved_word_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-symbol_reserved_word_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-symbol_reserved_word_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-symbol_test/none: Crash #  "on T" catch block
-toInt_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unicode2_test: Crash # (throw new ExpectException(message)): Unhandled node
-unicode_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_base_test: Crash #  "on T" catch block
-uri_file_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_http_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_ipv4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_ipv6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_normalize_path_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_normalize_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_parse_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_path_test: Crash # (throw new ExpectException(message)): Unhandled node
-uri_query_test: Crash # (throw new ExpectException(message)): Unhandled node
-uri_scheme_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-uri_test: Crash # (throw new ExpectException(message)): Unhandled node
+symbol_reserved_word_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+symbol_reserved_word_test/09: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+symbol_reserved_word_test/12: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+symbol_test/none: Crash # Please triage this failure.
+uri_file_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+uri_ipv4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+uri_ipv6_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+uri_normalize_path_test: RuntimeError # Please triage this failure.
+uri_path_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+uri_query_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+uri_scheme_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+uri_test: Crash # Please triage this failure.
diff --git a/tests/corelib/growable_list_test.dart b/tests/corelib/growable_list_test.dart
index 98b4e1f..0e26138 100644
--- a/tests/corelib/growable_list_test.dart
+++ b/tests/corelib/growable_list_test.dart
@@ -5,11 +5,11 @@
 // Sanity check on the growing behavior of a growable list.
 
 import "package:expect/expect.dart";
-import "dart:collection" show IterableBase;
+import "dart:collection" show EfficientLengthIterable;
 
 // Iterable generating numbers in range [0..count).
 // May perform callback at some point underways.
-class TestIterableBase extends IterableBase<int> {
+class TestIterableBase extends Iterable<int> {
   final int length;
   final int count;
   // call [callback] if generating callbackIndex.
@@ -26,9 +26,8 @@
   int get length => throw "SHOULD NOT BE CALLED";
 }
 
-// Implement Set for private EfficientLength interface.
 class EfficientTestIterable extends TestIterableBase
-                            implements Set<int> {
+                            implements EfficientLengthIterable<int> {
   EfficientTestIterable(length, count, [callbackIndex = -1, callback])
       : super(length, count, callbackIndex, callback);
   // Avoid warnings because we don't actually implement Set.
@@ -57,7 +56,7 @@
 
 
 void main() {
-  // Without EfficientLength interface
+  // Without EfficientLengthIterable interface
   {
     // Change length of list after 20 additions.
     var l = [];
@@ -80,7 +79,7 @@
     }, (e) => e is ConcurrentModificationError);
   }
 
-  // With EfficientLength interface (uses length).
+  // With EfficientLengthIterable interface (uses length).
   {
     // Change length of list after 20 additions.
     var l = [];
diff --git a/tests/corelib/splay_tree_test.dart b/tests/corelib/splay_tree_test.dart
index 80a1742..c6de497 100644
--- a/tests/corelib/splay_tree_test.dart
+++ b/tests/corelib/splay_tree_test.dart
@@ -53,6 +53,7 @@
   testSetFrom();
   regressRemoveWhere();
   regressRemoveWhere2();
+  regressFromCompare();
 }
 
 void regressRemoveWhere() {
@@ -93,3 +94,45 @@
   set2 = new SplayTreeSet<int>.from(set1.where((x) => x is int));
   Expect.equals(3, set2.length);
 }
+
+
+
+void regressFromCompare() {
+  // Regression test for http://dartbug.com/23387.
+  // The compare and isValidKey arguments to SplayTreeMap.from were ignored.
+
+  int compare(a, b) {
+    if (a is IncomparableKey && b is IncomparableKey) {
+      return b.id - a.id;
+    }
+    throw "isValidKey failure";
+  }
+  bool isValidKey(o) => o is IncomparableKey;
+  IncomparableKey key(int n) => new IncomparableKey(n);
+
+  var entries = {key(0): 0, key(1): 1, key(2): 2, key(0): 0};
+  Expect.equals(4, entries.length);
+  var map = new SplayTreeMap<IncomparableKey, int>.from(
+      entries, compare, isValidKey);
+  Expect.equals(3, map.length);
+  for (int i = 0; i < 3; i++) {
+    Expect.isTrue(map.containsKey(key(i)));
+    Expect.equals(i, map[key(i)]);
+  }
+  Expect.isFalse(map.containsKey(key(5)));
+  Expect.isFalse(map.containsKey(1));
+  Expect.isFalse(map.containsKey("string"));
+  Expect.equals(null, map[key(5)]);
+  Expect.equals(null, map[1]);
+  Expect.equals(null, map["string"]);
+  Expect.throws(() { map[1] = 42; });
+  Expect.throws(() { map["string"] = 42; });
+  map[key(5)] = 42;
+  Expect.equals(4, map.length);
+  Expect.equals(42, map[key(5)]);
+}
+
+class IncomparableKey {
+  final int id;
+  IncomparableKey(this.id);
+}
diff --git a/tests/html/html.status b/tests/html/html.status
index 701d1cb..f45a2ae 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -417,51 +417,51 @@
 window_nosuchmethod_test: StaticWarning
 
 [ $compiler == dart2js && $cps_ir ]
-async_spawnuri_test: Crash # cannot compile methods that need interceptor calling convention.
-async_test: Crash # cannot compile methods that need interceptor calling convention.
+async_spawnuri_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+async_test: Crash # (cancellingIsolate): handleStaticFunctionGet: function(cancellingIsolate)
 audiobuffersourcenode_test: Crash #  try/finally
 audiocontext_test: Crash #  try/finally
-audioelement_test: Crash # cannot compile methods that need interceptor calling convention.
-b_element_test: Crash # cannot compile methods that need interceptor calling convention.
-blob_constructor_test: Crash # cannot compile methods that need interceptor calling convention.
+audioelement_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+b_element_test: Crash # unsupported element kind: _defaultEnvironment:field
+blob_constructor_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 cache_test: Crash #  try/finally
-callbacks_test: Crash # cannot compile methods that need interceptor calling convention.
+callbacks_test: Crash # unsupported element kind: _defaultEnvironment:field
 canvas_pixel_array_type_alias_test: Crash #  try/finally
-canvas_test: Crash # cannot compile methods that need interceptor calling convention.
+canvas_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 canvasrenderingcontext2d_test: Crash #  try/finally
-cdata_test: Crash # cannot compile methods that need interceptor calling convention.
-client_rect_test: Crash # cannot compile methods that need interceptor calling convention.
-cross_domain_iframe_test: Crash # cannot compile methods that need interceptor calling convention.
+cdata_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+client_rect_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+cross_domain_iframe_test: Crash # Instance of 'TypeOperator': type casts not implemented.
 crypto_test: Crash #  try/finally
-css_rule_list_test: Crash # cannot compile methods that need interceptor calling convention.
+css_rule_list_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 css_test: Crash #  try/finally
-cssstyledeclaration_test: Crash # cannot compile methods that need interceptor calling convention.
+cssstyledeclaration_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 custom/attribute_changed_callback_test: Crash #  try/finally
-custom/constructor_calls_created_synchronously_test: Crash # cannot compile methods that need interceptor calling convention.
-custom/created_callback_test: Crash # cannot compile methods that need interceptor calling convention.
-custom/document_register_basic_test: Crash # cannot compile methods that need interceptor calling convention.
+custom/constructor_calls_created_synchronously_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+custom/created_callback_test: Crash # (NestedElement.test): handleStaticFunctionGet: function(NestedElement#test)
+custom/document_register_basic_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 custom/document_register_type_extensions_test: Crash #  try/finally
-custom/element_upgrade_test: Crash # cannot compile methods that need interceptor calling convention.
+custom/element_upgrade_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 custom/entered_left_view_test: Crash #  try/finally
-custom/js_custom_test: Crash # cannot compile methods that need interceptor calling convention.
-custom/mirrors_test: Crash # cannot compile methods that need interceptor calling convention.
+custom/js_custom_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+custom/mirrors_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 custom/regress_194523002_test: Crash # unsupported element kind: _defaultEnvironment:field
 custom_element_method_clash_test: Crash #  try/finally
 custom_element_name_clash_test: Crash #  try/finally
 custom_elements_23127_test: Crash #  try/finally
 custom_elements_test: Crash #  try/finally
-custom_tags_test: Crash # cannot compile methods that need interceptor calling convention.
-dart_object_local_storage_test: Crash # cannot compile methods that need interceptor calling convention.
-datalistelement_test: Crash # cannot compile methods that need interceptor calling convention.
+custom_tags_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+dart_object_local_storage_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+datalistelement_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 document_test: Crash #  try/finally
-documentfragment_test: Crash # cannot compile methods that need interceptor calling convention.
-dom_constructors_test: Crash # cannot compile methods that need interceptor calling convention.
-domparser_test: Crash # cannot compile methods that need interceptor calling convention.
+documentfragment_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+dom_constructors_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+domparser_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 element_add_test: Crash #  try/finally
 element_animate_test: Crash #  try/finally
-element_classes_svg_test: Crash # cannot compile methods that need interceptor calling convention.
-element_classes_test: Crash # cannot compile methods that need interceptor calling convention.
-element_constructor_1_test: Crash # cannot compile methods that need interceptor calling convention.
+element_classes_svg_test: Crash # (elementsTearDown): handleStaticFunctionGet: function(elementsTearDown)
+element_classes_test: Crash # (listElementTearDown): handleStaticFunctionGet: function(listElementTearDown)
+element_constructor_1_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 element_dimensions_test: Crash #  try/finally
 element_offset_test: Crash #  try/finally
 element_test: Crash #  try/finally
@@ -472,91 +472,91 @@
 element_types_constructors5_test: Crash #  try/finally
 element_types_constructors6_test: Crash #  try/finally
 element_types_test: Crash #  try/finally
-event_customevent_test: Crash # cannot compile methods that need interceptor calling convention.
-events_test: Crash # cannot compile methods that need interceptor calling convention.
-exceptions_test: Crash # cannot compile methods that need interceptor calling convention.
+event_customevent_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+events_test: Crash # unsupported element kind: _defaultEnvironment:field
+exceptions_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 fileapi_test: Crash #  try/finally
-filereader_test: Crash # cannot compile methods that need interceptor calling convention.
-fontface_loaded_test: Crash # cannot compile methods that need interceptor calling convention.
-fontface_test: Crash # cannot compile methods that need interceptor calling convention.
+filereader_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+fontface_loaded_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+fontface_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 form_data_test: Crash #  try/finally
-form_element_test: Crash # cannot compile methods that need interceptor calling convention.
-geolocation_test: Crash # cannot compile methods that need interceptor calling convention.
-hidden_dom_1_test: Crash # cannot compile methods that need interceptor calling convention.
-hidden_dom_2_test: Crash # cannot compile methods that need interceptor calling convention.
+form_element_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+geolocation_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+hidden_dom_1_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+hidden_dom_2_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 history_test: Crash #  try/finally
-htmlcollection_test: Crash # cannot compile methods that need interceptor calling convention.
-htmlelement_test: Crash # cannot compile methods that need interceptor calling convention.
-htmloptionscollection_test: Crash # cannot compile methods that need interceptor calling convention.
+htmlcollection_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+htmlelement_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+htmloptionscollection_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 indexeddb_1_test: Crash #  try/finally
-indexeddb_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-indexeddb_3_test: Crash # cannot compile methods that need interceptor calling convention.
-indexeddb_4_test: Crash # cannot compile methods that need interceptor calling convention.
-indexeddb_5_test: Crash # cannot compile methods that need interceptor calling convention.
+indexeddb_2_test: Crash # Please triage this failure.
+indexeddb_3_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+indexeddb_4_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+indexeddb_5_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 input_element_test: Crash #  try/finally
-instance_of_test: Crash # cannot compile methods that need interceptor calling convention.
-isolates_test: Crash # cannot compile methods that need interceptor calling convention.
-js_interop_1_test: Crash # cannot compile methods that need interceptor calling convention.
+instance_of_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+isolates_test: Crash # (isolateEntry): handleStaticFunctionGet: function(isolateEntry)
+js_interop_1_test: Crash # Instance of 'TypeOperator': type casts not implemented.
 js_test: Crash #  try/finally
-keyboard_event_test: Crash # cannot compile methods that need interceptor calling convention.
-localstorage_test: Crash # cannot compile methods that need interceptor calling convention.
-location_test: Crash # cannot compile methods that need interceptor calling convention.
+keyboard_event_test: Crash # unsupported element kind: _defaultEnvironment:field
+localstorage_test: Crash # (try {fn();}finally {window.localStorage.clear();}): try/finally
+location_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 media_stream_test: Crash #  try/finally
 mediasource_test: Crash #  try/finally
-messageevent_test: Crash # cannot compile methods that need interceptor calling convention.
-mouse_event_test: Crash # cannot compile methods that need interceptor calling convention.
+messageevent_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+mouse_event_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 mutationobserver_test: Crash #  try/finally
-native_gc_test: Crash # cannot compile methods that need interceptor calling convention.
-navigator_test: Crash # cannot compile methods that need interceptor calling convention.
+native_gc_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+navigator_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 node_test: Crash #  try/finally
 node_validator_important_if_you_suppress_make_the_bug_critical_test: Crash #  try/finally
-non_instantiated_is_test: Crash # cannot compile methods that need interceptor calling convention.
+non_instantiated_is_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 notification_test: Crash #  try/finally
 performance_api_test: Crash #  try/finally
 postmessage_structured_test: Crash #  try/finally
-query_test: Crash # cannot compile methods that need interceptor calling convention.
-queryall_test: Crash # cannot compile methods that need interceptor calling convention.
+query_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+queryall_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 range_test: Crash #  try/finally
-request_animation_frame_test: Crash # cannot compile methods that need interceptor calling convention.
+request_animation_frame_test: Crash # Instance of 'TypeOperator': type casts not implemented.
 rtc_test: Crash #  try/finally
-selectelement_test: Crash # cannot compile methods that need interceptor calling convention.
-serialized_script_value_test: Crash # cannot compile methods that need interceptor calling convention.
+selectelement_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+serialized_script_value_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 shadow_dom_test: Crash #  try/finally
-shadowroot_test: Crash # cannot compile methods that need interceptor calling convention.
+shadowroot_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 speechrecognition_test: Crash #  try/finally
-storage_quota_test/missingenumcheck: Crash # cannot compile methods that need interceptor calling convention.
-storage_quota_test/none: Crash # cannot compile methods that need interceptor calling convention.
-storage_test: Crash # cannot compile methods that need interceptor calling convention.
-streams_test: Crash # cannot compile methods that need interceptor calling convention.
+storage_quota_test/missingenumcheck: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+storage_quota_test/none: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+storage_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+streams_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 svg_test: Crash #  try/finally
 svgelement_test: Crash #  try/finally
-table_test: Crash # cannot compile methods that need interceptor calling convention.
+table_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 touchevent_test: Crash #  try/finally
-track_element_constructor_test: Crash # cannot compile methods that need interceptor calling convention.
-transferables_test: Crash # cannot compile methods that need interceptor calling convention.
+track_element_constructor_test: Crash # unsupported element kind: _defaultEnvironment:field
+transferables_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 transition_event_test: Crash #  try/finally
 typed_arrays_1_test: Crash #  try/finally
-typed_arrays_2_test: Crash # cannot compile methods that need interceptor calling convention.
-typed_arrays_3_test: Crash # cannot compile methods that need interceptor calling convention.
-typed_arrays_4_test: Crash # cannot compile methods that need interceptor calling convention.
-typed_arrays_5_test: Crash # cannot compile methods that need interceptor calling convention.
-typed_arrays_arraybuffer_test: Crash # cannot compile methods that need interceptor calling convention.
-typed_arrays_dataview_test: Crash # cannot compile methods that need interceptor calling convention.
-typed_arrays_range_checks_test: Crash # cannot compile methods that need interceptor calling convention.
-typed_arrays_simd_test: Crash # cannot compile methods that need interceptor calling convention.
-typing_test: Crash # cannot compile methods that need interceptor calling convention.
-unknownelement_test: Crash # cannot compile methods that need interceptor calling convention.
-uri_test: Crash # cannot compile methods that need interceptor calling convention.
+typed_arrays_2_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typed_arrays_3_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typed_arrays_4_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typed_arrays_5_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typed_arrays_arraybuffer_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typed_arrays_dataview_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typed_arrays_range_checks_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typed_arrays_simd_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+typing_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+unknownelement_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+uri_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 url_test: Crash #  try/finally
 webgl_1_test: Crash #  try/finally
 websocket_test: Crash #  try/finally
 websql_test: Crash #  try/finally
-wheelevent_test: Crash # cannot compile methods that need interceptor calling convention.
-window_eq_test: Crash # cannot compile methods that need interceptor calling convention.
-window_mangling_test: Crash # cannot compile methods that need interceptor calling convention.
-window_nosuchmethod_test: Crash # cannot compile methods that need interceptor calling convention.
-window_test: Crash # cannot compile methods that need interceptor calling convention.
-worker_api_test: Crash # cannot compile methods that need interceptor calling convention.
+wheelevent_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+window_eq_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+window_mangling_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+window_nosuchmethod_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+window_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+worker_api_test: Crash # (worker): handleStaticFunctionGet: function(worker)
 worker_test: Crash #  try/finally
 xhr_cross_origin_test: Crash #  try/finally
 xhr_test: Crash #  try/finally
diff --git a/tests/corelib/bool_from_environment_default_value_test.dart b/tests/isolate/bool_from_environment_default_value_test.dart
similarity index 100%
rename from tests/corelib/bool_from_environment_default_value_test.dart
rename to tests/isolate/bool_from_environment_default_value_test.dart
diff --git a/tests/isolate/deferred_in_isolate2_lib.dart b/tests/isolate/deferred_in_isolate2_lib.dart
new file mode 100644
index 0000000..e3fea39
--- /dev/null
+++ b/tests/isolate/deferred_in_isolate2_lib.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Used by deferred_in_isolate2_test.
+library deferred_in_isolate2_lib;
+
+String f() => "hi";
diff --git a/tests/isolate/deferred_in_isolate2_test.dart b/tests/isolate/deferred_in_isolate2_test.dart
new file mode 100644
index 0000000..fa016a4
--- /dev/null
+++ b/tests/isolate/deferred_in_isolate2_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library deferred_in_isolate2_test;
+
+import 'dart:isolate';
+import 'dart:async';
+import 'package:unittest/unittest.dart';
+
+import 'deferred_in_isolate2_lib.dart' deferred as lib;
+
+loadDeferred(port) {
+  lib.loadLibrary().then((_) {
+    port.send(lib.f());
+  });
+}
+
+main() {
+  test("Deferred loading in isolate", () {
+    ReceivePort port = new ReceivePort();
+    port.first.then(expectAsync((msg) {
+       expect(msg, equals("hi"));
+    }));
+    Isolate.spawn(loadDeferred, port.sendPort);
+  });
+}
diff --git a/tests/language/deferred_in_isolate_app.dart b/tests/isolate/deferred_in_isolate_app.dart
similarity index 100%
rename from tests/language/deferred_in_isolate_app.dart
rename to tests/isolate/deferred_in_isolate_app.dart
diff --git a/tests/language/deferred_in_isolate_lib.dart b/tests/isolate/deferred_in_isolate_lib.dart
similarity index 100%
rename from tests/language/deferred_in_isolate_lib.dart
rename to tests/isolate/deferred_in_isolate_lib.dart
diff --git a/tests/language/deferred_in_isolate_test.dart b/tests/isolate/deferred_in_isolate_test.dart
similarity index 100%
rename from tests/language/deferred_in_isolate_test.dart
rename to tests/isolate/deferred_in_isolate_test.dart
diff --git a/tests/language/enum_const_test.dart b/tests/isolate/enum_const_test.dart
similarity index 100%
rename from tests/language/enum_const_test.dart
rename to tests/isolate/enum_const_test.dart
diff --git a/tests/corelib/int_from_environment_default_value_test.dart b/tests/isolate/int_from_environment_default_value_test.dart
similarity index 100%
rename from tests/corelib/int_from_environment_default_value_test.dart
rename to tests/isolate/int_from_environment_default_value_test.dart
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 02e3fa6..b0356bb 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -9,7 +9,7 @@
 [ $runtime == vm && $arch == mips && $mode == debug ]
 mandel_isolate_test: Skip # Uses 600 MB Ram on our 1 GB test device.
 
-[ $compiler == none || $compiler == dart2dart ]
+[ $compiler == none ]
 compile_time_error_test/01: Skip # Issue 12587
 ping_test: Skip           # Resolve test issues
 ping_pause_test: Skip     # Resolve test issues
@@ -31,7 +31,8 @@
 browser/*: SkipByDesign  # Browser specific tests
 
 [ $compiler == dart2js && $runtime == jsshell ]
-pause_test: Fail  # non-zero timer not supported.
+pause_test: Fail, OK  # non-zero timer not supported.
+timer_isolate_test: Fail, OK # Needs Timer to run.
 
 [ $compiler == dart2js && $runtime == safari ]
 cross_isolate_message_test: Skip # Issue 12627
@@ -50,6 +51,7 @@
 message3_test/constMap: RuntimeError  # Issue 21817
 message3_test/constInstance: RuntimeError # Issue 21817
 browser/issue_12474_test: CompileTimeError # Issue 22529
+enum_const_test/02: RuntimeError # Issue 21817
 
 [ $compiler == dart2js && $jscl ]
 spawn_uri_test: SkipByDesign # Loading another file is not supported in JS shell
@@ -59,17 +61,6 @@
 
 mandel_isolate_test: Pass, Timeout # TODO(kasperl): Please triage.
 
-[ $compiler == dart2dart ]
-illegal_msg_mirror_test: RuntimeError    # Issue 16548
-spawn_uri_multi_test/none: RuntimeError  # Issue 16549
-spawn_uri_nested_vm_test: RuntimeError   # Issue 16549
-spawn_uri_test: RuntimeError             # Issue 16549
-spawn_uri_vm_test: RuntimeError          # Issue 16549
-spawn_uri_exported_main_test: RuntimeError # Issue 16549
-issue_21398_parent_isolate_test: RuntimeError  # Issue 16549
-issue_21398_parent_isolate1_test: RuntimeError # Issue 16549
-issue_21398_parent_isolate2_test: Skip # Not implemented yet
-
 [ $compiler == dart2js && ( $runtime == ff || $runtime == safari || $runtime == drt || $runtime == chrome || $runtime == chromeOnAndroid) ]
 isolate_stress_test: Pass, Slow # Issue 10697
 
@@ -82,7 +73,7 @@
 [ $jscl ]
 spawn_uri_multi_test/none: RuntimeError # Issue 13544
 
-[ ($compiler == none || $compiler == dart2dart) && ($runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ]
+[ $compiler == none && ($runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ]
 pause_test: Fail         # Not implemented yet
 
 [ $compiler == none && $runtime == ContentShellOnAndroid ]
@@ -92,6 +83,7 @@
 spawn_uri_nested_vm_test: Skip # Issue 14479: This test is timing out.
 
 [ $compiler == none && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ]
+typed_message_test: Crash, Fail # Issue 13921, 14400
 message_enum_test: Fail, OK # Issue 13921 Dom isolates don't support spawnFunction
 compile_time_error_test/none: Fail, OK # Issue 13921 Dom isolates don't support spawnFunction
 isolate_import_test/none: Fail, OK # Issue 13921 Dom isolates don't support spawnFunction
@@ -114,6 +106,11 @@
 handle_error_test: Fail, OK  # 13921 Dom isolates don't support spawnFunction
 handle_error2_test: Fail, OK  # 13921 Dom isolates don't support spawnFunction
 handle_error3_test: Fail, OK  # 13921 Dom isolates don't support spawnFunction
+timer_isolate_test: Fail, Pass # Issue 15487. Issue 13921: Dom isolates don't support spawnFunction
+deferred_in_isolate2_test: Fail, OK  # Issue 16209, 13921 Dom isolates don't support spawnFunction
+bool_from_environment_default_value_test: Skip
+int_from_environment_default_value_test: Skip
+string_from_environment_default_value_test: Skip
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 browser/typed_data_message_test: StaticWarning
@@ -123,58 +120,62 @@
 package_root_test: SkipByDesign # Uses dart:io.
 
 [ $compiler == dart2js && $cps_ir ]
-capability_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-compile_time_error_test/01: Crash # handleStaticFunctionGet: function(entry)
-compile_time_error_test/none: Crash # handleStaticFunctionGet: function(entry)
-count_test: Crash # cannot compile methods that need interceptor calling convention.
-cross_isolate_message_test: Crash # cannot compile methods that need interceptor calling convention.
-function_send_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-handle_error2_test: Crash #  Unhandled node
-handle_error3_test: Crash #  Unhandled node
-handle_error_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-illegal_msg_function_test: Crash # cannot compile methods that need interceptor calling convention.
-illegal_msg_mirror_test: Crash # cannot compile methods that need interceptor calling convention.
-isolate_complex_messages_test: Crash # cannot compile methods that need interceptor calling convention.
-isolate_current_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-isolate_import_test/01: Crash # (Isolate): Error expression `Isolate` unhandled.
-isolate_import_test/none: Crash # handleStaticFunctionGet: function(entry)
-isolate_stress_test: Crash # handleStaticFunctionGet: function(worker)
-issue_22778_test: Crash # (throw new ExpectException(message)): Unhandled node
-kill2_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-kill_self_test: Crash # handleStaticFunctionGet: function(isomain1)
-kill_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-mandel_isolate_test: Crash # cannot compile methods that need interceptor calling convention.
-message2_test: Crash # cannot compile methods that need interceptor calling convention.
-message3_test/byteBuffer: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message3_test/constInstance: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message3_test/constList: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message3_test/constList_identical: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message3_test/constMap: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message3_test/fun: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message3_test/int32x4: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message3_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-message_enum_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-message_test: Crash # cannot compile methods that need interceptor calling convention.
-mint_maker_test: Crash # cannot compile methods that need interceptor calling convention.
-nested_spawn2_test: Crash # cannot compile methods that need interceptor calling convention.
-nested_spawn_test: Crash # cannot compile methods that need interceptor calling convention.
-object_leak_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-ondone_test: Crash # handleStaticFunctionGet: function(isomain)
-pause_test: Crash # handleStaticFunctionGet: function(isomain1)
-ping_pause_test: Crash # (throw new ExpectException(message)): Unhandled node
-ping_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-port_test: Crash # (throw new ExpectException(message)): Unhandled node
-raw_port_test: Crash # cannot compile methods that need interceptor calling convention.
-request_reply_test: Crash # cannot compile methods that need interceptor calling convention.
-simple_message_test/01: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-simple_message_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-spawn_function_custom_class_test: Crash # cannot compile methods that need interceptor calling convention.
-spawn_function_test: Crash # cannot compile methods that need interceptor calling convention.
-spawn_uri_missing_from_isolate_test: Crash # handleStaticFunctionGet: function(isolate)
-spawn_uri_missing_test: Crash # handleStaticFunctionGet: function(doTest)
-spawn_uri_multi_test/01: Crash # cannot compile methods that need interceptor calling convention.
-spawn_uri_multi_test/none: Crash # cannot compile methods that need interceptor calling convention.
-stacktrace_message_test: Crash # cannot compile methods that need interceptor calling convention.
-start_paused_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-static_function_test: Crash # cannot compile methods that need interceptor calling convention.
-unresolved_ports_test: Crash # cannot compile methods that need interceptor calling convention.
+bool_from_environment_default_value_test: Crash # (test): handleStaticFunctionGet: function(test)
+compile_time_error_test/01: Crash # (entry): handleStaticFunctionGet: function(entry)
+compile_time_error_test/none: Crash # (entry): handleStaticFunctionGet: function(entry)
+count_test: Crash # (main): handleStaticFunctionGet: function(main)
+cross_isolate_message_test: Crash # (main): handleStaticFunctionGet: function(main)
+function_send_test: Crash # (toplevel): handleStaticFunctionGet: function(toplevel)
+handle_error2_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+handle_error3_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+handle_error_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+illegal_msg_function_test: Crash # (main): handleStaticFunctionGet: function(main)
+illegal_msg_mirror_test: Crash # (main): handleStaticFunctionGet: function(main)
+int_from_environment_default_value_test: Crash # (test): handleStaticFunctionGet: function(test)
+isolate_complex_messages_test: Crash # (main): handleStaticFunctionGet: function(main)
+isolate_current_test: Crash # (i2l): handleStaticFunctionGet: function(i2l)
+isolate_import_test/01: Crash # (entry): handleStaticFunctionGet: function(entry)
+isolate_import_test/none: Crash # (entry): handleStaticFunctionGet: function(entry)
+isolate_stress_test: Crash # (worker): handleStaticFunctionGet: function(worker)
+issue_22778_test: Crash # (func): handleStaticFunctionGet: function(func)
+kill2_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+kill_self_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+kill_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+mandel_isolate_test: Crash # (main): handleStaticFunctionGet: function(main)
+message2_test: Crash # (main): handleStaticFunctionGet: function(main)
+message3_test/byteBuffer: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message3_test/constInstance: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message3_test/constList: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message3_test/constList_identical: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message3_test/constMap: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message3_test/fun: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message3_test/int32x4: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message3_test/none: Crash # (echoMain): handleStaticFunctionGet: function(echoMain)
+message_enum_test: Crash # (sendIt): handleStaticFunctionGet: function(sendIt)
+message_test: Crash # (main): handleStaticFunctionGet: function(main)
+mint_maker_test: Crash # (main): handleStaticFunctionGet: function(main)
+nested_spawn2_test: Crash # (main): handleStaticFunctionGet: function(main)
+nested_spawn_test: Crash # (main): handleStaticFunctionGet: function(main)
+object_leak_test: Crash # (fun): handleStaticFunctionGet: function(fun)
+ondone_test: Crash # (isomain): handleStaticFunctionGet: function(isomain)
+pause_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+ping_pause_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+ping_test: Crash # (isomain1): handleStaticFunctionGet: function(isomain1)
+raw_port_test: Crash # (main): handleStaticFunctionGet: function(main)
+request_reply_test: Crash # (main): handleStaticFunctionGet: function(main)
+simple_message_test/01: Crash # (entry): handleStaticFunctionGet: function(entry)
+simple_message_test/none: Crash # (entry): handleStaticFunctionGet: function(entry)
+spawn_function_custom_class_test: Crash # (main): handleStaticFunctionGet: function(main)
+spawn_function_test: Crash # (main): handleStaticFunctionGet: function(main)
+spawn_uri_missing_from_isolate_test: Crash # (isolate): handleStaticFunctionGet: function(isolate)
+spawn_uri_missing_test: Crash # (doTest): handleStaticFunctionGet: function(doTest)
+spawn_uri_multi_test/01: Crash # unsupported element kind: _defaultEnvironment:field
+spawn_uri_multi_test/none: Crash # unsupported element kind: _defaultEnvironment:field
+stacktrace_message_test: Crash # (main): handleStaticFunctionGet: function(main)
+start_paused_test: Crash # (notyet): handleStaticFunctionGet: function(notyet)
+static_function_test: Crash # (main): handleStaticFunctionGet: function(main)
+string_from_environment_default_value_test: Crash # (test): handleStaticFunctionGet: function(test)
+timer_isolate_test: Crash # cannot compile methods that need interceptor calling convention.
+typed_message_test: Crash # (logMessages): handleStaticFunctionGet: function(logMessages)
+unresolved_ports_test: Crash # (main): handleStaticFunctionGet: function(main)
+
diff --git a/tests/corelib/string_from_environment_default_value.dart b/tests/isolate/string_from_environment_default_value_test.dart
similarity index 100%
rename from tests/corelib/string_from_environment_default_value.dart
rename to tests/isolate/string_from_environment_default_value_test.dart
diff --git a/tests/lib/async/timer_isolate_test.dart b/tests/isolate/timer_isolate_test.dart
similarity index 100%
rename from tests/lib/async/timer_isolate_test.dart
rename to tests/isolate/timer_isolate_test.dart
diff --git a/tests/language/typed_message_test.dart b/tests/isolate/typed_message_test.dart
similarity index 100%
rename from tests/language/typed_message_test.dart
rename to tests/isolate/typed_message_test.dart
diff --git a/tests/language/deferred_call_empty_before_load_lib.dart b/tests/language/deferred_call_empty_before_load_lib.dart
new file mode 100644
index 0000000..32dd376
--- /dev/null
+++ b/tests/language/deferred_call_empty_before_load_lib.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+thefun() {}
diff --git a/tests/language/deferred_call_empty_before_load_test.dart b/tests/language/deferred_call_empty_before_load_test.dart
new file mode 100644
index 0000000..c241c6a9
--- /dev/null
+++ b/tests/language/deferred_call_empty_before_load_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that calling a function, even though it itself has no effect, will
+// trigger an error if the corresponding deferred library has not been loaded.
+
+import "package:expect/expect.dart";
+import "deferred_call_empty_before_load_lib.dart" deferred as lib1;
+
+main() {
+  Expect.throws(() => lib1.thefun());
+}
diff --git a/tests/language/deferred_inheritance_constraints_test.dart b/tests/language/deferred_inheritance_constraints_test.dart
index 8fb023c..ff009e6 100644
--- a/tests/language/deferred_inheritance_constraints_test.dart
+++ b/tests/language/deferred_inheritance_constraints_test.dart
@@ -22,7 +22,7 @@
 class D { 
   D() ;
   factory D.factory() = 
-    lib. /// redirecting_constructor: static type warning, runtime error
+    lib. /// redirecting_constructor: static type warning
     Foo2;
 }
 
@@ -30,5 +30,7 @@
   new A();
   new B();
   new C();
-  new D.factory();
+  Expect.throws(() { /// redirecting_constructor: continued
+    new D.factory();
+  }); /// redirecting_constructor: continued
 }
\ No newline at end of file
diff --git a/tests/language/deferred_redirecting_factory_lib1.dart b/tests/language/deferred_redirecting_factory_lib1.dart
new file mode 100644
index 0000000..e9100fb
--- /dev/null
+++ b/tests/language/deferred_redirecting_factory_lib1.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library lib1;
+
+import "deferred_redirecting_factory_lib2.dart" deferred as lib2;
+import "deferred_redirecting_factory_test.dart" as main;
+
+loadLib2() {
+  return lib2.loadLibrary();
+}
+
+class C extends main.C {
+  String get foo => "lib1";
+  C();
+  factory C.a() = lib2.C;
+}
\ No newline at end of file
diff --git a/tests/language/deferred_redirecting_factory_lib2.dart b/tests/language/deferred_redirecting_factory_lib2.dart
new file mode 100644
index 0000000..62cbf14
--- /dev/null
+++ b/tests/language/deferred_redirecting_factory_lib2.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library lib2;
+
+import "deferred_redirecting_factory_lib1.dart" as lib1;
+
+class C extends lib1.C {
+  String get foo => "lib2";
+}
\ No newline at end of file
diff --git a/tests/language/deferred_redirecting_factory_test.dart b/tests/language/deferred_redirecting_factory_test.dart
new file mode 100644
index 0000000..e5f4e5d
--- /dev/null
+++ b/tests/language/deferred_redirecting_factory_test.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+library main;
+
+import "deferred_redirecting_factory_lib1.dart" deferred as lib1;
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+class C {
+  String get foo => "main";
+  C();
+  factory C.a() = lib1.C;
+  factory C.b() = lib1.C.a;
+}
+
+test1() async {
+  Expect.throws(() {
+    new C.a();
+  });
+  Expect.throws(() {
+    new C.b();
+  });
+}
+
+test2() async {
+  await lib1.loadLibrary();
+  Expect.equals("lib1", new C.a().foo);
+  Expect.throws(() {
+    new C.b();
+  });
+}
+
+test3() async {
+  await lib1.loadLibrary();
+  await lib1.loadLib2();
+  Expect.equals("lib1", new C.a().foo);
+  Expect.equals("lib2", new C.b().foo);
+}
+
+
+test() async {
+  await test1();
+  await test2();
+  await test3();
+}
+
+void main() {
+  asyncStart();
+  test().then((_) => asyncEnd());
+}
\ No newline at end of file
diff --git a/tests/language/language.status b/tests/language/language.status
index 1b36eea..bc11d57 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -28,27 +28,8 @@
 conditional_property_access_test: Fail
 conditional_method_invocation_test: Fail
 
-[ $compiler == dart2dart ]
-deferred_load_library_wrong_args_test/none: Fail # Issue 17523
-deferred_load_inval_code_test: Fail # Issue 17523
-deferred_not_loaded_check_test: Fail # Issue 17523
-deferred_constraints_type_annotation_test/*: Fail, Pass # Issue 17523
-deferred_constraints_constants_test/*: Fail, Pass # Issue 17523
-deferred_shadow_load_library_test: Fail # Issue 17523
-deferred_closurize_load_library_test: Fail  # Issue 17523
-deferred_inlined_test: Fail  # Issue 17523
-deferred_optimized_test: Fail  # Issue 17523
-regress_22443_test: Fail # Issue 17523
-enum_mirror_test: Skip # Issue 11511.
-getter_setter_in_lib_test: Fail # Issue 23288
-
-override_inheritance_mixed_test/08: Fail # Issue 18124
-override_inheritance_mixed_test/09: Fail # Issue 18124
-
-[ $compiler == dart2dart ]
-multiline_strings_test: Fail # Issue (pending)
-
-[ $compiler == none || $compiler == dart2dart ]
+deferred_redirecting_factory_test: Fail # Issue 23408
+[ $compiler == none ]
 # Non-contractive types are not supported in the vm.
 cyclic_type_test/02: Fail, OK
 cyclic_type_test/04: Fail, OK
@@ -90,7 +71,6 @@
 
 [ $compiler == none && ( $runtime == dartium || $runtime == drt || $runtime == ContentShellOnAndroid) ]
 issue13474_test: Pass, Fail # Issue 14651.
-typed_message_test: Crash, Fail # Issue 13921, 14400
 vm/optimized_guarded_field_isolates_test: Fail # Issue 13921.
 main_test/01: Fail # Issue 20028
 main_test/02: Fail # Issue 20028
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index be1c3a2..0e736bf 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -18,7 +18,7 @@
 await_for_test: Skip # Jsshell does not provide periodic timers, Issue 7728
 async_star_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
 
-[ $compiler == dart2js || $compiler == dart2dart ]
+[ $compiler == dart2js ]
 symbol_literal_test/*: Fail # Issue 21825
 constructor_duplicate_final_test/01: Fail # Issue 13363
 constructor_duplicate_final_test/02: Fail # Issue 13363
@@ -93,7 +93,7 @@
 malbounded_type_test2_test: Fail # Issue 14121
 default_factory2_test/01: Fail # Issue 14121
 
-[ ($compiler == dart2js || $compiler == dart2dart) && $checked ]
+[ $compiler == dart2js && $checked ]
 compile_time_constant_checked5_test/06: Fail # Issue 23182
 compile_time_constant_checked5_test/07: Fail # Issue 23182
 compile_time_constant_checked5_test/10: Fail # Issue 23182
@@ -120,7 +120,6 @@
 positional_parameters_type_test/01: MissingRuntimeError, OK
 positional_parameters_type_test/02: MissingRuntimeError, OK
 issue13474_test: RuntimeError, OK
-generic_field_mixin3_test: Crash # Issue 18651
 
 [ $compiler == dart2js && $unchecked && $minified ]
 f_bounded_quantification5_test: Fail, OK # Issue 12605
@@ -175,8 +174,6 @@
 const_switch_test/02: RuntimeError # Issue 17960
 const_switch_test/04: RuntimeError # Issue 17960
 
-enum_const_test/02: RuntimeError # Issue 21817
-
 const_dynamic_type_literal_test/02: CompileTimeError # Issue 23009
 const_dynamic_type_literal_test/03: CompileTimeError # Issue 23009
 
@@ -217,84 +214,6 @@
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
 override_field_test/02: Pass, Slow # TODO(kasperl): Please triage.
 
-[ $compiler == dart2dart && $builder_tag == new_backend ]
-regress_13494_test: Pass # Issue 22370, passes for the wrong reason
-
-[ $compiler == dart2dart && $minified == true ]
-type_variable_conflict2_test/01: RuntimeError # Issue 16180
-
-[ $compiler == dart2dart ]
-sync_generator2_test/07: MissingCompileTimeError # Issue 22324
-sync_generator2_test/08: MissingCompileTimeError # Issue 22324
-sync_generator2_test/10: MissingCompileTimeError # Issue 22324
-
-regress_13494_test: Fail # Issue 22370
-
-enum_duplicate_test/01: CompileTimeError # Issue 22169
-
-built_in_identifier_prefix_test: Fail # Issue 6972
-constructor_initializer_test/none: Fail # Issue 12633
-
-# Mixins fail on the VM.
-mixin_with_two_implicit_constructors_test: Fail # Issue 11889
-
-# Calling unresolved class constructor:
-call_nonexistent_constructor_test/01: Fail # Issue 13082
-call_nonexistent_constructor_test/02: Fail # Issue 13082
-private_access_test/05: Fail # Issue 13082
-private_access_test/06: Fail # Issue 13082
-
-bad_override_test/01: Fail # Issue 11496
-bad_override_test/02: Fail # Issue 11496
-
-constructor_named_arguments_test/01: Fail # Issue 5519
-not_enough_positional_arguments_test/01: Fail # Issue 12839
-not_enough_positional_arguments_test/02: Fail # Issue 12839
-not_enough_positional_arguments_test/05: Fail # Issue 12839
-
-metadata_test: Fail # Issue 12762
-const_evaluation_test/01: Fail # Issue 12762
-built_in_identifier_test/01: Fail # Issue 13022
-method_override4_test: Fail # Issue 12810
-method_override5_test: Fail # Issue 12810
-scope_variable_test/01: Fail # Issue 13016
-factory_redirection_test/01: Fail # Issue 12753
-
-# DartVM problem.
-constructor5_test: Fail
-constructor6_test: Fail
-closure_in_initializer_test: Fail
-
-new_expression_type_args_test/00: Fail # Wrongly reports compile-time error.
-new_expression_type_args_test/01: Fail # Wrongly reports compile-time error.
-
-deferred*: skip # Issue 17523
-cha_deopt1_test: skip # Issue 17523
-cha_deopt2_test: skip # Issue 17523
-cha_deopt3_test: skip # Issue 17523
-issue_1751477_test: skip # Issue 17523
-
-external_test/21: MissingCompileTimeError # Issue 12888
-external_test/24: MissingCompileTimeError # Issue 12888
-
-function_propagation_test: RuntimeError # Issue 21673
-function_subtype_call0_test: RuntimeError # Issue 21673
-function_subtype_call1_test: RuntimeError # Issue 21673
-function_subtype_call2_test: RuntimeError # Issue 21673
-
-instance_creation_in_function_annotation_test: Fail # Issue 23363
-
-[ $compiler == dart2dart && $minified ]
-cyclic_type_test/0*: Fail # Issue 12605.
-cyclic_type2_test: Fail # Issue 12605.
-super_getter_setter_test: Fail # Issue 11065.
-f_bounded_quantification4_test: Fail # Issue 12605.
-f_bounded_quantification5_test: Fail # Issue 12605.
-type_variable_typedef_test: Fail # Issue 11467
-
-invocation_mirror_test: Fail, OK # Issue 12706 (hardcoded names).
-super_call4_test: Fail, OK # hardcoded names.
-
 [ $minified ]
 stack_trace_test: Fail, OK # Stack trace not preserved in minified code.
 regress_21795_test: RuntimeError # Issue 12605
@@ -309,58 +228,35 @@
 
 [ $compiler == dart2js && $cps_ir ]
 aborting_switch_case_test: Crash # (switch (42){case 42:foo();foo();break;}): Unhandled node
-abstract_exact_selector_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-abstract_exact_selector_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-abstract_getter_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-abstract_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-abstract_object_method_test: Crash # (throw new ExpectException(message)): Unhandled node
-abstract_runtime_error_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-abstract_runtime_error_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-abstract_runtime_error_test/03: Crash # (throw new ExpectException(message)): Unhandled node
-abstract_runtime_error_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-abstract_syntax_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-abstract_syntax_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-abstract_syntax_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-ackermann_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-adjacent_const_string_literals_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-adjacent_string_literals_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-allocate_large_object_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-allocate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-allocation_sinking_inlining_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-and_operation_on_non_integer_operand_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-application_negative_test: Crash # (Expect): Error expression `Expect` unhandled.
-argument_definition_test/01: Crash # (test(1,b:2,c:3)): Error expression `test(1,b:2,c:3)` unhandled.
-argument_definition_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-arithmetic2_test: Crash # (throw new ExpectException(message)): Unhandled node
-arithmetic_canonicalization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-arithmetic_smi_overflow_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-arithmetic_test: Crash # (throw new ExpectException(message)): Unhandled node
-assertion_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-assign_op_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-assign_top_method_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-assign_to_type_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-assign_to_type_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-assign_to_type_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-assign_to_type_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async_and_or_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_await_catch_regression_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+abstract_exact_selector_test/01: Crash # unsupported element kind: a:field
+abstract_exact_selector_test/none: Crash # unsupported element kind: a:field
+abstract_getter_test/01: Crash # (noMethod): handleStaticFunctionGet: function(noMethod)
+abstract_object_method_test: Crash # unsupported element kind: a:field
+abstract_runtime_error_test/01: Crash # (interface): handleStaticFunctionGet: function(interface)
+abstract_runtime_error_test/02: Crash # (abstractClass): handleStaticFunctionGet: function(abstractClass)
+arithmetic2_test: Crash # (A.foo): handleStaticFunctionGet: function(A#foo)
+arithmetic_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+assign_to_type_test/01: Crash # (noMethod): handleStaticFunctionGet: function(noMethod)
+assign_to_type_test/02: Crash # (noMethod): handleStaticFunctionGet: function(noMethod)
+assign_to_type_test/03: Crash # (noMethod): handleStaticFunctionGet: function(noMethod)
+assign_to_type_test/04: Crash # (noMethod): handleStaticFunctionGet: function(noMethod)
+assign_top_method_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+async_and_or_test: Crash # (test()async{await test1();await test2();}): cannot handle async/sync*/async* functions
+async_await_catch_regression_test: Crash #  cannot handle async/sync*/async* functions
 async_await_syntax_test/a01a: Crash # (a01a()async=>null;): cannot handle async/sync*/async* functions
 async_await_syntax_test/a02a: Crash # (a02a()async{}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a03a: Crash # (a03a()async*{}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a03b: Crash # (a03b()async*{}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a04a: Crash # (a04a()sync*{}): cannot handle async/sync*/async* functions
-async_await_syntax_test/a04b: Crash # (a04b()): Error expression `a04b()` unhandled.
 async_await_syntax_test/a04c: Crash # (a04c()sync*{}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a05a: Crash # (a05a()async{await 0;}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a05b: Crash # (a05b()async{await (a){};await (0);}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a06a: Crash # (a06a()async{await for(var o in st){}}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a07a: Crash # (a07a()sync*{yield 0;}): cannot handle async/sync*/async* functions
-async_await_syntax_test/a07b: Crash # (a07b()): Error expression `a07b()` unhandled.
 async_await_syntax_test/a08a: Crash # (a08a()sync*{yield* [] ;}): cannot handle async/sync*/async* functions
-async_await_syntax_test/a08b: Crash # (a08b()): Error expression `a08b()` unhandled.
 async_await_syntax_test/a09a: Crash # (a09a()async*{yield 0;}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a10a: Crash # (a10a()async*{yield* [] ;}): cannot handle async/sync*/async* functions
-async_await_syntax_test/a11a: Crash # (sync): Error expression `sync` unhandled.
+async_await_syntax_test/a11a: Crash # Please triage this failure.
 async_await_syntax_test/a11b: Crash # (get sync sync*{}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a11c: Crash # (get async async{}): cannot handle async/sync*/async* functions
 async_await_syntax_test/a11d: Crash # (get async async*{}): cannot handle async/sync*/async* functions
@@ -403,39 +299,34 @@
 async_await_test/02: Crash # (f()async{return id(42);}): cannot handle async/sync*/async* functions
 async_await_test/03: Crash # (f()async{return id(42);}): cannot handle async/sync*/async* functions
 async_await_test/none: Crash # (f()async{return id(42);}): cannot handle async/sync*/async* functions
-async_break_in_finally_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_continue_label_test/await_in_body: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_continue_label_test/await_in_condition: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_continue_label_test/await_in_init: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_continue_label_test/await_in_update: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_continue_label_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_control_structures_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+async_break_in_finally_test: Crash #  cannot handle async/sync*/async* functions
+async_continue_label_test/await_in_body: Crash #  cannot handle async/sync*/async* functions
+async_continue_label_test/await_in_condition: Crash #  cannot handle async/sync*/async* functions
+async_continue_label_test/await_in_init: Crash #  cannot handle async/sync*/async* functions
+async_continue_label_test/await_in_update: Crash #  cannot handle async/sync*/async* functions
+async_continue_label_test/none: Crash #  cannot handle async/sync*/async* functions
+async_control_structures_test: Crash # Instance of 'TypeOperator': type check unimplemented for Future.
 async_finally_rethrow_test: Crash #  cannot handle async/sync*/async* functions
-async_or_generator_return_type_stacktrace_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async_or_generator_return_type_stacktrace_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async_or_generator_return_type_stacktrace_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async_or_generator_return_type_stacktrace_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async_regression_23058_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+async_or_generator_return_type_stacktrace_test/01: Crash # (void badReturnTypeAsync()async{}): cannot handle async/sync*/async* functions
+async_or_generator_return_type_stacktrace_test/02: Crash # (void badReturnTypeAsyncStar()async*{}): cannot handle async/sync*/async* functions
+async_or_generator_return_type_stacktrace_test/03: Crash # (void badReturnTypeSyncStar()sync*{}): cannot handle async/sync*/async* functions
+async_regression_23058_test: Crash # (foo()async{return x.foo==2?42:x.foo;}): cannot handle async/sync*/async* functions
 async_rethrow_test: Crash #  cannot handle async/sync*/async* functions
-async_return_types_test/nestedFuture: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_return_types_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_return_types_test/tooManyTypeParameters: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_return_types_test/wrongReturnType: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_return_types_test/wrongTypeParameter: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_star_cancel_and_throw_in_finally_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-asyncstar_concat_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_star_regression_23116_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+async_return_types_test/nestedFuture: Crash # (test): handleStaticFunctionGet: function(test)
+async_return_types_test/none: Crash # (test): handleStaticFunctionGet: function(test)
+async_return_types_test/tooManyTypeParameters: Crash # (test): handleStaticFunctionGet: function(test)
+async_return_types_test/wrongReturnType: Crash # (test): handleStaticFunctionGet: function(test)
+async_return_types_test/wrongTypeParameter: Crash # (test): handleStaticFunctionGet: function(test)
+async_star_cancel_and_throw_in_finally_test: Crash #  cannot handle async/sync*/async* functions
+async_star_regression_23116_test: Crash #  cannot handle async/sync*/async* functions
 async_star_test/01: Crash # (f()async*{}): cannot handle async/sync*/async* functions
 async_star_test/02: Crash # (f()async*{}): cannot handle async/sync*/async* functions
 async_star_test/03: Crash # (f()async*{}): cannot handle async/sync*/async* functions
 async_star_test/04: Crash # (f()async*{}): cannot handle async/sync*/async* functions
 async_star_test/05: Crash # (f()async*{}): cannot handle async/sync*/async* functions
 async_star_test/none: Crash # (f()async*{}): cannot handle async/sync*/async* functions
-asyncstar_throw_in_catch_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-asyncstar_yieldstar_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-asyncstar_yield_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_switch_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_switch_test/withDefault: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+async_switch_test/none: Crash #  cannot handle async/sync*/async* functions
+async_switch_test/withDefault: Crash #  cannot handle async/sync*/async* functions
 async_test/constructor2: Crash # (bar(int p1,p2)async{var z=8;return p2+z+foo;}): cannot handle async/sync*/async* functions
 async_test/constructor3: Crash # (bar(int p1,p2)async{var z=8;return p2+z+foo;}): cannot handle async/sync*/async* functions
 async_test/constructor4: Crash # (bar(int p1,p2)async{var z=8;return p2+z+foo;}): cannot handle async/sync*/async* functions
@@ -445,592 +336,284 @@
 async_test/type-mismatch2: Crash # (bar(int p1,p2)async{var z=8;return p2+z+foo;}): cannot handle async/sync*/async* functions
 async_test/type-mismatch3: Crash # (bar(int p1,p2)async{var z=8;return p2+z+foo;}): cannot handle async/sync*/async* functions
 async_test/type-mismatch4: Crash # (bar(int p1,p2)async{var z=8;return p2+z+foo;}): cannot handle async/sync*/async* functions
-async_this_bound_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_throw_in_catch_test/forceAwait: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async_throw_in_catch_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-await_backwards_compatibility_test/await1: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-await_backwards_compatibility_test/await2: Crash # (test1()): Error expression `test1()` unhandled.
-await_backwards_compatibility_test/await3: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-await_backwards_compatibility_test/await4: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-await_backwards_compatibility_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-await_exceptions_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-await_for_cancel_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-await_for_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-await_for_use_local_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-await_future_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+async_this_bound_test: Crash # (test()async{await testA();await testB();}): cannot handle async/sync*/async* functions
+async_throw_in_catch_test/forceAwait: Crash # (test): handleStaticFunctionGet: function(test)
+async_throw_in_catch_test/none: Crash # (test): handleStaticFunctionGet: function(test)
+asyncstar_concat_test: Crash #  cannot handle async/sync*/async* functions
+asyncstar_throw_in_catch_test: Crash # (test): handleStaticFunctionGet: function(test)
+asyncstar_yield_test: Crash #  cannot handle async/sync*/async* functions
+asyncstar_yieldstar_test: Crash #  cannot handle async/sync*/async* functions
+await_backwards_compatibility_test/await1: Crash # (test1()async{var x=await 9;Expect.equals(9,x);}): cannot handle async/sync*/async* functions
+await_backwards_compatibility_test/await2: Crash # (test0()async{var x=await 7;Expect.equals(7,x);}): cannot handle async/sync*/async* functions
+await_backwards_compatibility_test/await3: Crash # (test1()async{var x=await 9;Expect.equals(9,x);}): cannot handle async/sync*/async* functions
+await_backwards_compatibility_test/await4: Crash # (test1()async{var x=await 9;Expect.equals(9,x);}): cannot handle async/sync*/async* functions
+await_backwards_compatibility_test/none: Crash # (test1()async{var x=await 9;Expect.equals(9,x);}): cannot handle async/sync*/async* functions
+await_exceptions_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+await_for_cancel_test: Crash # (test()async{await test1();await test2();}): cannot handle async/sync*/async* functions
+await_for_test: Crash # unsupported element kind: t4:field
+await_for_use_local_test: Crash #  cannot handle async/sync*/async* functions
+await_future_test: Crash #  cannot handle async/sync*/async* functions
 await_nonfuture_test: Crash # (foo()async{Expect.equals(X,10);return await 5;}): cannot handle async/sync*/async* functions
-await_not_started_immediately_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-await_postfix_expr_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+await_not_started_immediately_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+await_postfix_expr_test: Crash #  cannot handle async/sync*/async* functions
 await_regression_test: Crash #  cannot handle async/sync*/async* functions
 await_test: Crash #  cannot handle async/sync*/async* functions
-bad_constructor_test/06: Crash # (new A()): Error expression `new A()` unhandled.
-bad_named_constructor_negative_test: Crash #  Error expression `BadNamedConstructorNegativeTest.testMain()` unhandled.
-bad_named_parameters2_test/01: Crash # (try {caught=false;np.foo(b:25);}on NoSuchMethodError catch (e){caught=true;}): "on T" catch block
-bad_named_parameters2_test/none: Crash # (try {caught=false;}on NoSuchMethodError catch (e){caught=true;}): "on T" catch block
-bad_named_parameters_test/01: Crash #  "on T" catch block
-bad_named_parameters_test/02: Crash # (try {caught=false;}on NoSuchMethodError catch (e){caught=true;}): "on T" catch block
-bad_named_parameters_test/03: Crash # (try {caught=false;}on NoSuchMethodError catch (e){caught=true;}): "on T" catch block
-bad_named_parameters_test/04: Crash # (try {caught=false;}on NoSuchMethodError catch (e){caught=true;}): "on T" catch block
-bad_named_parameters_test/05: Crash # (try {caught=false;}on NoSuchMethodError catch (e){caught=true;}): "on T" catch block
-bad_named_parameters_test/none: Crash # (try {caught=false;}on NoSuchMethodError catch (e){caught=true;}): "on T" catch block
-bailout2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout3_test: Crash # (throw 0): Unhandled node
-bailout4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bailout_container_type_test: Crash # (throw 'Test failed'): Unhandled node
-bailout_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bind_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bit_operations_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-bit_operations_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-bit_operations_test/03: Crash # (throw new ExpectException(message)): Unhandled node
-bit_operations_test/04: Crash # (throw new ExpectException(message)): Unhandled node
-bit_operations_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-bit_shift_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bool_check_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bool_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bound_closure_equality_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-bound_closure_primitives_test: Crash # (throw new ExpectException(message)): Unhandled node
-branch_canonicalization_test: Crash # (throw new ExpectException(message)): Unhandled node
-branches_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-break_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-built_in_identifier_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_argument_inference_test: Crash # (throw new ExpectException(message)): Unhandled node
-call_closurization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_constructor_on_unresolvable_class_test/01: Crash # (new A()): Error expression `new A()` unhandled.
-call_constructor_on_unresolvable_class_test/02: Crash # (new A.foo()): Error expression `new A.foo()` unhandled.
-call_constructor_on_unresolvable_class_test/03: Crash # (new lib.A()): Error expression `new lib.A()` unhandled.
-call_constructor_on_unresolvable_class_test/04: Crash # (new A()): Error expression `new A()` unhandled.
-call_constructor_on_unresolvable_class_test/05: Crash # (new A.foo()): Error expression `new A.foo()` unhandled.
-call_constructor_on_unresolvable_class_test/06: Crash # (new lib.A()): Error expression `new lib.A()` unhandled.
-call_constructor_on_unresolvable_class_test/07: Crash # (new A()): Error expression `new A()` unhandled.
-call_nonexistent_constructor_test/01: Crash #  "on T" catch block
-call_nonexistent_constructor_test/02: Crash # (try {}on NoSuchMethodError catch (e){i=-1;}on String catch (e){i=1;}): "on T" catch block
-call_nonexistent_constructor_test/none: Crash # (try {}on NoSuchMethodError catch (e){i=-1;}on String catch (e){i=1;}): "on T" catch block
-call_nonexistent_static_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_nonexistent_static_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_operator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_property_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_this_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_through_getter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_through_null_getter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_type_literal_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-call_with_no_such_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-canonical_const2_test: Crash # (throw new ExpectException(message)): Unhandled node
-canonical_const3_test: Crash # (throw new ExpectException(message)): Unhandled node
-canonical_const_test: Crash # Please triage this failure.
-cascade_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cascade2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cascade_in_expression_function_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cascade_in_initializer_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cascade_precedence_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cascade_test/none: Crash # cannot compile methods that need interceptor calling convention.
-cast2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cast_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-catch_liveness_test: Crash # Please triage this failure.
-cha_deopt1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cha_deopt2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cha_deopt3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-char_escape_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-checked_null_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-checked_setter2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-checked_setter3_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-checked_setter3_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-checked_setter3_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-checked_setter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_codegen_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_cycle_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_cycle_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_cycle_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_cycle_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_cycle_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/17: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/18: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/19: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/20: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/21: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/22: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/23: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/24: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/25: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_literal_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-class_override_test/00: Crash # (try {instance.foo();}on NoSuchMethodError catch (error){}finally {}): "on T" catch block
-class_override_test/none: Crash # (try {instance.foo();}finally {}): not exactly one catch block
-class_syntax2_test: Crash # (throw new ExpectException(message)): Unhandled node
-class_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure8_test: Crash # cannot compile methods that need interceptor calling convention.
-closure_break1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_break2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_break_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_in_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_in_field_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_in_initializer2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_in_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_internals_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_parameter_types_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_self_reference_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_shared_state_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_side_effect_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closures_initializer2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closures_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closures_with_complex_params_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_type_test/01: Crash #  "on T" catch block
-closure_type_test/none: Crash #  "on T" catch block
-closure_type_variables_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_type_variable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_variable_shadow_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_with_super_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-closure_with_super_send_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-code_after_try_is_executed_test/01: Crash # (try {throw 'foo';}on String catch (ex){exception=ex;}): "on T" catch block
-code_after_try_is_executed_test/none: Crash # (try {throw 'foo';}on String catch (ex){exception=ex;}): "on T" catch block
-comparison_test: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant10_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant10_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant10_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant11_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant6_test: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant8_test: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant9_test: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant_a_test: Crash # Please triage this failure.
-compile_time_constant_b_test: Crash # Please triage this failure.
-compile_time_constant_d_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_e_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_f_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_g_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_h_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_i_test: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant_j_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_k_test/01: Crash # Please triage this failure.
-compile_time_constant_k_test/02: Crash # Please triage this failure.
-compile_time_constant_k_test/03: Crash # Please triage this failure.
-compile_time_constant_k_test/none: Crash # Please triage this failure.
-compile_time_constant_l_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_m_test: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant_n_test: Crash # (throw new ExpectException(message)): Unhandled node
-compile_time_constant_o_test/01: Crash # Please triage this failure.
-compile_time_constant_o_test/02: Crash # Please triage this failure.
-compile_time_constant_o_test/none: Crash # Please triage this failure.
-compile_time_constant_p_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_p_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-compile_time_constant_test/01: Crash # unable to build cps definition of generative_constructor(Bad#)
-compound_assignment_operator_test: Crash # (throw new ExpectException(message)): Unhandled node
-cond_expr_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-condition_bailout_test: Crash # (throw new ExpectException(message)): Unhandled node
-constant_fold_equals_test: Crash # (throw new ExpectException(message)): Unhandled node
-constant_propagation_phis_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_string_interpolation_test: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/03: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/04: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/05: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/06: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/07: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/08: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/09: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/10: Crash # (throw new ExpectException(message)): Unhandled node
-const_conditional_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-const_constructor_nonconst_field_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_constructor_nonconst_field_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_constructor_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_counter_negative_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_dynamic_type_literal_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-const_escape_frog_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_evaluation_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_evaluation_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_factory_redirection_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_global_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_init_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_locals_test: Crash # (throw new ExpectException(message)): Unhandled node
-const_local_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_map2_test/none: Crash # Please triage this failure.
-const_map3_test/none: Crash # Please triage this failure.
-const_map4_test: Crash # Please triage this failure.
-const_map_test: Crash # Please triage this failure.
-const_named_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+bailout4_test: Crash # unsupported element kind: a:field
+bailout5_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+bailout6_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+bailout7_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+bailout_container_type_test: Crash # unsupported element kind: a:field
+bailout_test: Crash # unsupported element kind: reachedAfoo:field
+bool_check_test: Crash # (ifNull): handleStaticFunctionGet: function(ifNull)
+call_closurization_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+call_nonexistent_static_test/01: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/02: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/03: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/04: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/05: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/06: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/07: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/08: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/09: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/10: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_nonexistent_static_test/none: Crash # (alwaysThrows): handleStaticFunctionGet: function(alwaysThrows)
+call_property_test: Crash # Instance of 'TypeOperator': type check unimplemented for F.
+call_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+call_through_null_getter_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+call_type_literal_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+cascade2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+cast2_test/01: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast2_test/none: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/01: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/02: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/03: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/04: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/05: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/07: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/08: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/10: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/12: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/13: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/14: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/15: Crash # Instance of 'TypeOperator': type casts not implemented.
+cast_test/none: Crash # Instance of 'TypeOperator': type casts not implemented.
+cha_deopt1_test: Crash # (d.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+cha_deopt2_test: Crash # (d.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+cha_deopt3_test: Crash # (d.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+checked_null_test/01: Crash # (bar): handleStaticFunctionGet: function(bar)
+checked_setter2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+checked_setter3_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+checked_setter3_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+checked_setter3_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+checked_setter_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/07: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/08: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/09: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/10: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/11: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/12: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/13: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/14: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/15: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/16: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/17: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/18: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/19: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/20: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/21: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/22: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/23: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/24: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_literal_test/25: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+class_override_test/00: Crash # (try {instance.foo();}on NoSuchMethodError catch (error){}finally {}): try/finally
+class_override_test/none: Crash # (try {instance.foo();}finally {}): try/finally
+closure3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+closure_in_constructor_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+closure_internals_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+closure_self_reference_test: Crash # (try {return inner(value-1);}finally {counter++ ;}): try/finally
+closure_shared_state_test: Crash # (setupPlain): handleStaticFunctionGet: function(setupPlain)
+closure_side_effect_test: Crash # unsupported element kind: c:field
+closure_type_test/01: Crash # (root): handleStaticFunctionGet: function(root)
+closure_type_test/none: Crash # (root): handleStaticFunctionGet: function(root)
+closure_type_variables_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<int>.
+closures_initializer2_test: Crash # Please triage this failure.
+closures_initializer_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+compile_time_constant10_test/01: Crash # (Expect.isTrue): handleStaticFunctionGet: function(Expect#isTrue)
+compile_time_constant10_test/02: Crash # (Expect.isTrue): handleStaticFunctionGet: function(Expect#isTrue)
+compile_time_constant10_test/none: Crash # (Expect.isTrue): handleStaticFunctionGet: function(Expect#isTrue)
+compile_time_constant_a_test: Crash # (isUnsupportedError): handleStaticFunctionGet: function(isUnsupportedError)
+compile_time_constant_b_test: Crash # (isUnsupportedError): handleStaticFunctionGet: function(isUnsupportedError)
+const_evaluation_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+const_evaluation_test/none: RuntimeError # Please triage this failure.
 const_nested_test: Crash # Please triage this failure.
-const_objects_are_immutable_test/01: Crash # Please triage this failure.
-const_objects_are_immutable_test/none: Crash # Please triage this failure.
+const_objects_are_immutable_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+const_objects_are_immutable_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+const_switch2_test/none: Crash # (switch (a){case 1:print("OK");}): Unhandled node
+const_switch_test/01: Crash #  Unhandled node
+const_switch_test/02: Crash #  Unhandled node
+const_switch_test/03: Crash #  Unhandled node
+const_switch_test/04: Crash #  Unhandled node
+constant_propagation_phis_test: RuntimeError # Please triage this failure.
 constructor10_test/01: Crash # Please triage this failure.
 constructor10_test/02: Crash # Please triage this failure.
-constructor11_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor12_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+constructor11_test: Crash # Please triage this failure.
+constructor12_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<int>.
 constructor3_negative_test: Crash # Please triage this failure.
-constructor3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor8_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_body_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+constructor5_test: Crash # Please triage this failure.
 constructor_call_wrong_argument_count_negative_test: Crash # Please triage this failure.
-constructor_default_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_initializer_test/01: Crash # (new A(3)): Error expression `new A(3)` unhandled.
-constructor_initializer_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_name_clash_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_named_arguments_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_named_arguments_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_name_test/01: Crash # (new Foo.Foo()): Error expression `new Foo.Foo()` unhandled.
-constructor_name_test/02: Crash # (new Foo()): Error expression `new Foo()` unhandled.
-constructor_name_test/03: Crash # (new Foo()): Error expression `new Foo()` unhandled.
-constructor_redirect_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_redirect_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_return_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_return_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_return_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_return_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_return_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_return_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constructor_with_mixin_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_string_test: Crash # (throw new ExpectException(message)): Unhandled node
-const_switch2_test/none: Crash # (switch (a){case 1:print("OK");}): Unhandled node
-const_switch_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_switch_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_switch_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_switch_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_syntax_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-const_types_test/23: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/24: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/25: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/26: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/27: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/28: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/29: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/30: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-const_types_test/41: Crash # (new Superclass()): Error expression `new Superclass()` unhandled.
-context2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-context_args_with_defaults_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-context_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+constructor_initializer_test/01: Crash # Please triage this failure.
+constructor_with_mixin_test: Crash # Please triage this failure.
 continue_test: Crash # (switch (0){case 0:i=22;continue;default:i=25;break;}): Unhandled node
-core_type_check_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-crash_12118_test: Crash # (throw 'Test failed'): Unhandled node
-crash_6725_test/01: Crash # (throw 'f.key != 42 (${f.key})'): Unhandled node
-create_unresolved_type_test/01: Crash # (new F<int>()): Error expression `new F<int>()` unhandled.
-critical_edge2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-critical_edge_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-ct_const3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-ct_const4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-ct_const_test: Crash #  "on T" catch block
+core_type_check_test: Crash # Instance of 'TypeOperator': type check unimplemented for Comparable.
+crash_12118_test: Crash # Please triage this failure.
+crash_6725_test/01: Crash # Please triage this failure.
 custom_await_stack_trace_test: Crash #  cannot handle async/sync*/async* functions
-cyclic_import_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cyclic_type2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cyclic_type_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cyclic_type_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cyclic_type_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cyclic_type_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-cyclic_type_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dangling_else_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-default_class_implicit_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-default_factory_library_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-default_factory_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-default_factory_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-default_implementation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-default_init_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deferred_closurize_load_library_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constant_list_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/constructor1: Crash # (const lib.Const()): Error expression `const lib.Const()` unhandled.
-deferred_constraints_constants_test/constructor2: Crash #  Error expression `const lib.Const.namedConstructor()` unhandled.
-deferred_constraints_constants_test/default_argument1: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/default_argument2: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/metadata1: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/metadata2: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/metadata3: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/reference1: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/reference2: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_constants_test/reference_after_load: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/as_operation: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/catch_check: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/is_check: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/new_before_load: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/new: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/new: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/new_generic1: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/new_generic1: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/new_generic2: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/new_generic2: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/new_generic3: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/new_generic3: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/none: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/static_method: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/static_method: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/type_annotation1: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-deferred_constraints_type_annotation_test/type_annotation_generic1: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/type_annotation_generic1: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/type_annotation_generic2: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/type_annotation_generic2: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/type_annotation_generic3: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/type_annotation_generic3: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/type_annotation_generic4: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/type_annotation_generic4: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/type_annotation_null: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/type_annotation_null: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_constraints_type_annotation_test/type_annotation_top_level: CompileTimeError # Please triage this failure.
-deferred_constraints_type_annotation_test/type_annotation_top_level: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_function_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deferred_global_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_inheritance_constraints_test/mixin: Crash # (new C()): Error expression `new C()` unhandled.
-deferred_inlined_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deferred_load_constants_test/01: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_load_constants_test/02: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_load_constants_test/03: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_load_constants_test/04: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_load_constants_test/05: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_load_constants_test/none: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_load_inval_code_test: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-deferred_load_library_wrong_args_test/01: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-deferred_load_library_wrong_args_test/none: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-deferred_mixin_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_no_such_method_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_not_loaded_check_test: Crash # (throw new ExpectException(message)): Unhandled node
-deferred_only_constant_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deferred_optimized_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deferred_regression_22995_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deferred_shadow_load_library_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deferred_shared_and_unshared_classes_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deferred_static_seperate_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-deoptimized_function_on_stack_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deopt_inlined_function_lazy_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deopt_inlined_function_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deopt_lazy_finalization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deopt_no_feedback_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-deopt_smi_op_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-div_by_zero_test: Crash # (throw new ExpectException(message)): Unhandled node
-div_with_power_of_two2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-div_with_power_of_two_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_int_addition_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_int_to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_modulo_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_nan_comparison_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_exponential2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_exponential3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_exponential_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_fixed2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_fixed_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_precision2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_precision3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_as_precision_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-do_while2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-do_while3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-do_while4_test: Crash # (throw new ExpectException(message)): Unhandled node
-do_while_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-duplicate_implements_test/03: Crash # (new Z()): Error expression `new Z()` unhandled.
-duplicate_implements_test/04: Crash # (new Z()): Error expression `new Z()` unhandled.
-duplicate_interface_negative_test: Crash # (Expect): Error expression `Expect` unhandled.
-duplicate_interface_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dynamic_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dynamic_field_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dynamic_field_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dynamic_prefix_core_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dynamic_prefix_core_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-dynamic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-dynamic_type_literal_test: Crash # (throw new ExpectException(message)): Unhandled node
-emit_const_fields_test: Crash # Please triage this failure.
-empty_block_case_test: Crash #  "on T" catch block
-enum_const_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-enum_const_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-enum_duplicate_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_duplicate_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_duplicate_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_index_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_mirror_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_private_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_private_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_private_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-enum_syntax_test/09: Crash # handleStaticFunctionGet: function(topLevelFunction)
-enum_syntax_test/10: Crash # (C.bla): Error expression `C.bla` unhandled.
-enum_test: Crash #  Unhandled node
-equality_test: Crash # (throw new ExpectException(message)): Unhandled node
-error_stacktrace_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-evaluation_redirecting_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-example_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-exception_identity_test: Crash # (throw exception): Unhandled node
-exception_test: Crash # (try {throw "Hello";}on String catch (s){print(s);i+= 10;}): "on T" catch block
-execute_finally10_test: Crash # (throw 'Expected exception'): Unhandled node
-execute_finally11_test: Crash # (throw 'Expected exception'): Unhandled node
-execute_finally12_test: Crash # (throw new ExpectException(message)): Unhandled node
-execute_finally1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally8_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-execute_finally9_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-exhaustive_for_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-expect_test: Crash # (try {Expect.fail("fail now");}on Exception catch (msg){print(msg);return;}): "on T" catch block
-extends_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-extend_type_parameter2_negative_test: Crash # (new A()): Error expression `new A()` unhandled.
-external_test/16: Crash # (new Foo()): Error expression `new Foo()` unhandled.
-factory3_test: Crash # (throw "0 is not a T"): Unhandled node
-factory_arrow_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_implementation_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_implementation_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection3_cyclic_test/01: Crash # (new A.foo()): Error expression `new A.foo()` unhandled.
-factory_redirection_test/01: Crash # (new A<List>.test01()): Error expression `new A<List>.test01()` unhandled.
-factory_redirection_test/02: Crash # (new A<List>.test02()): Error expression `new A<List>.test02()` unhandled.
-factory_redirection_test/03: Crash # (new A<List>.test03()): Error expression `new A<List>.test03()` unhandled.
-factory_redirection_test/04: Crash # (new C.test04()): Error expression `new C.test04()` unhandled.
-factory_redirection_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_redirection_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_return_type_checked_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_type_parameter2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-factory_type_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fannkuch_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fast_method_extraction_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fauxverride_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-f_bounded_equality_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-f_bounded_quantification4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-f_bounded_quantification5_test: Crash #  "on T" catch block
-f_bounded_quantification_test/01: Crash #  "on T" catch block
-f_bounded_quantification_test/02: Crash # (try {}on TypeError catch (error){got_type_error=true;}): "on T" catch block
-f_bounded_quantification_test/none: Crash # (try {}on TypeError catch (error){got_type_error=true;}): "on T" catch block
-fibo_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field3a_negative_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field3_negative_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_increment_bailout_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_inference_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_initialization_order_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_optimization2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_optimization3_test: Crash # (throw new ExpectException(message)): Unhandled node
-field_optimization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override3_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override4_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override4_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override4_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override4_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_override_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_field_initialization_order_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_for_in_variable_test/01: Crash # (i=4): Error expression `i=4` unhandled.
-final_is_not_const_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_is_not_const_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-finally_test: Crash # (try {i=12;}finally {Expect.equals(12,i);executedFinally=true;}): not exactly one catch block
-final_param_test/01: Crash # (x=2): Error expression `x=2` unhandled.
-final_syntax_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_syntax_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_syntax_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_syntax_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_syntax_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_syntax_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-final_used_in_try_test: Crash # (rethrow;): Unhandled node
-final_variable_assignment_test/01: Crash # (x=0): Error expression `x=0` unhandled.
-final_variable_assignment_test/02: Crash # (x+= 1): Error expression `x+= 1` unhandled.
-final_variable_assignment_test/03: Crash # ( ++x): Error expression ` ++x` unhandled.
-final_variable_assignment_test/04: Crash # (x++ ): Error expression `x++ ` unhandled.
-first_class_types_constants_test: Crash # (throw new ExpectException(message)): Unhandled node
-first_class_types_libraries_test: Crash # (throw new ExpectException(message)): Unhandled node
-first_class_types_literals_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_literals_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-first_class_types_test: Crash # (throw new ExpectException(message)): Unhandled node
-fixed_length_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable2_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable2_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable2_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable2_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable2_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-fixed_type_variable_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+cyclic_type2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Derived1<Derived1, Derived2>.
+cyclic_type_test/00: RuntimeError # Please triage this failure.
+cyclic_type_test/01: RuntimeError # Please triage this failure.
+cyclic_type_test/02: RuntimeError # Please triage this failure.
+cyclic_type_test/03: RuntimeError # Please triage this failure.
+cyclic_type_test/04: RuntimeError # Please triage this failure.
+deferred_call_empty_before_load_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+deferred_closurize_load_library_test: RuntimeError # Please triage this failure.
+deferred_constant_list_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/constructor1: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/constructor2: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/default_argument1: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/default_argument2: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/metadata1: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/metadata2: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/metadata3: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/none: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/reference1: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/reference2: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_constants_test/reference_after_load: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/as_operation: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/catch_check: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/is_check: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/new: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/new_before_load: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/new_generic1: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/new_generic2: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/new_generic3: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/none: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/static_method: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation1: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation_generic1: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation_generic2: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation_generic3: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation_generic4: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation_null: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_constraints_type_annotation_test/type_annotation_top_level: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_function_type_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_global_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_inheritance_constraints_test/redirecting_constructor: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+deferred_inlined_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_constants_test/01: Crash # (foo.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_constants_test/02: Crash # (foo.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_constants_test/03: Crash # (foo.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_constants_test/04: Crash # (foo.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_constants_test/05: Crash # (foo.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_constants_test/none: Crash # (foo.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_inval_code_test: Crash # (d.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_library_wrong_args_test/01: Crash # (lib.loadLibrary(10)): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_load_library_wrong_args_test/none: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_mixin_test: Crash # (lib1.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_no_such_method_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_not_loaded_check_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+deferred_only_constant_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_optimized_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_redirecting_factory_test: Crash #  cannot handle async/sync*/async* functions
+deferred_regression_22995_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_shadow_load_library_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deferred_shared_and_unshared_classes_test: Crash # (asyncSuccess): handleStaticFunctionGet: function(asyncSuccess)
+deferred_static_seperate_test: Crash # (lib1.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+deopt_inlined_function_lazy_test: Crash # (try {return x+12342353257893275483274832;}finally {}): try/finally
+deopt_inlined_function_test: Crash # unsupported element kind: obj:field
+div_with_power_of_two2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+div_with_power_of_two_test: Crash # unsupported element kind: expectedResults:field
+double_to_string_as_exponential2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_to_string_as_fixed2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+double_to_string_as_precision2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+dynamic_prefix_core_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+dynamic_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iface<dynamic, num>.
+empty_block_case_test: Crash # (switch (1){case 1:{}case 2:Expect.equals(true,false);}): Unhandled node
+enum_mirror_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+enum_private_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+enum_syntax_test/09: Crash # (topLevelFunction): handleStaticFunctionGet: function(topLevelFunction)
+enum_test: Crash # (test1): handleStaticFunctionGet: function(test1)
+equality_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+error_stacktrace_test: RuntimeError # Please triage this failure.
+evaluation_redirecting_constructor_test: RuntimeError # Please triage this failure.
+execute_finally10_test: Crash #  try/finally
+execute_finally11_test: Crash #  try/finally
+execute_finally12_test: Crash # (try {try {}finally {a=8;break;}}finally {return a==8;}): try/finally
+execute_finally1_test: Crash # (try {int j;j=func();i=1;return i;}finally {i=i+800;}): try/finally
+execute_finally2_test: Crash #  try/finally
+execute_finally3_test: Crash #  try/finally
+execute_finally4_test: Crash # (try {int j;j=func();i=1;}finally {i=i+10;}): try/finally
+execute_finally5_test: Crash #  try/finally
+execute_finally6_test: Crash #  try/finally
+execute_finally7_test: Crash #  try/finally
+execute_finally8_test: Crash # (try {sum+= 1;return 'hi';}finally {sum+= 1;throw 'ball';sum+= 1;}): try/finally
+execute_finally9_test: Crash #  try/finally
+f_bounded_equality_test: RuntimeError # Please triage this failure.
+factory3_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+factory_redirection3_cyclic_test/01: Crash # Please triage this failure.
+factory_redirection_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/07: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/08: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/09: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/10: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/11: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/12: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/13: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/14: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_redirection_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+factory_return_type_checked_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+factory_type_parameter2_test: Crash # Please triage this failure.
+factory_type_parameter_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<List>.
+fast_method_extraction_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+field_inference_test: Crash # unsupported element kind: array:field
+final_is_not_const_test/none: RuntimeError # Please triage this failure.
+final_syntax_test/03: Crash # unsupported element kind: P3:field
+final_syntax_test/04: Crash # unsupported element kind: P3:field
+final_syntax_test/08: Crash # unsupported element kind: A3:field
+final_syntax_test/09: Crash # unsupported element kind: P3:field
+final_syntax_test/10: Crash # unsupported element kind: B3:field
+final_syntax_test/none: Crash # unsupported element kind: P3:field
+finally_test: Crash # (try {i=12;}finally {Expect.equals(12,i);executedFinally=true;}): try/finally
+first_class_types_literals_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/07: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/08: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/09: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/10: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/11: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+first_class_types_literals_test/12: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+fixed_type_variable2_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+fixed_type_variable2_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+fixed_type_variable2_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+fixed_type_variable2_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+fixed_type_variable2_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+fixed_type_variable2_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+fixed_type_variable_test/02: RuntimeError # Please triage this failure.
+fixed_type_variable_test/04: RuntimeError # Please triage this failure.
+fixed_type_variable_test/06: RuntimeError # Please triage this failure.
 flatten_test/01: Crash # (test()async{int x=await new Derived<int>();}): cannot handle async/sync*/async* functions
 flatten_test/02: Crash # (test()async{Future<int> f()async=>new Derived<int>();}): cannot handle async/sync*/async* functions
 flatten_test/03: Crash #  cannot handle async/sync*/async* functions
@@ -1045,1135 +628,537 @@
 flatten_test/12: Crash #  cannot handle async/sync*/async* functions
 flatten_test/none: Crash # (test()async{}): cannot handle async/sync*/async* functions
 for2_test: Crash # Please triage this failure.
-for_in2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-for_inlining_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-for_in_side_effects_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-for_in_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-for_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+for_in2_test: Crash # unsupported element kind: set:field
+for_in_side_effects_test: Crash # unsupported element kind: array:field
 for_variable_capture_test: Crash # (i=0): For-loop variable captured in loop header
-forwarding_factory_constructor_default_values_test: Crash # (throw "FAILED"): Unhandled node
 forwarding_factory_constructor_default_values_test: RuntimeError # Please triage this failure.
-for_without_condition_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-full_stacktrace1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-full_stacktrace2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-full_stacktrace3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_argument_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_getter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_literals2_test: Crash # (throw new ExpectException(message)): Unhandled node
-function_literals_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_malformed_result_type_test: Crash # (try {f();}on TypeError catch (error){got_type_error=true;}): "on T" catch block
-function_propagation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure5a_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_bound_closure7_test: Crash # (throw new ExpectException(message)): Unhandled node
-function_subtype_call0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_call1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_call2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_cast0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_cast1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_cast2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_cast3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_checked0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_closure0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_closure1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_factory0_test: Crash # (throw new ExpectException(message)): Unhandled node
-function_subtype_factory1_test: Crash # (throw new ExpectException(message)): Unhandled node
-function_subtype_inline0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_inline1_test: Crash # (throw new ExpectException(message)): Unhandled node
-function_subtype_inline2_test: Crash #  "on T" catch block
-function_subtype_local0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_local1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_local2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_local3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_local4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_local5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_named1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_named2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_not0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_not1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_not2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_not3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_optional1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_optional2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_setter0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_simple0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_simple1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_simple2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_top_level0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_top_level1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_typearg0_test: Crash # (throw new ExpectException(message)): Unhandled node
-function_subtype_typearg1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_typearg2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_typearg3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_subtype_typearg4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/05: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/06: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/07: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/11: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/12: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/13: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/16: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/17: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/18: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/19: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/20: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/21: Crash # (testNestedFunctions()): Error expression `testNestedFunctions()` unhandled.
-function_syntax_test/22: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/23: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/24: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/25: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/26: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/27: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/28: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/29: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/30: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/31: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/32: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/33: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/34: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/35: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/36: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/37: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/44: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/45: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/46: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/47: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/48: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/49: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/50: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/51: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/52: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/53: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/54: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/55: Crash # (testFunctionExpressions()): Error expression `testFunctionExpressions()` unhandled.
-function_syntax_test/64: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/65: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/66: Crash # (testPrecedence()): Error expression `testPrecedence()` unhandled.
-function_syntax_test/67: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/68: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/69: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/70: Crash #  Error expression `testFunctionIdentifierExpression()` unhandled.
-function_syntax_test/71: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/72: Crash # (testFunctionIdentifierStatement()): Error expression `testFunctionIdentifierStatement()` unhandled.
-function_syntax_test/73: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_syntax_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type2_test: Crash # (try {new B<String>();}on TypeError catch (e){caughtException=true;}): "on T" catch block
-function_type3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_alias2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_alias3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_alias4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_alias6_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+function_propagation_test: Crash # Instance of 'TypeOperator': type check unimplemented for F.
+function_subtype0_test: Crash # (int_): handleStaticFunctionGet: function(int_)
+function_subtype1_test: Crash # Please triage this failure.
+function_subtype2_test: Crash # Instance of 'TypeOperator': type check unimplemented for T1.
+function_subtype_bound_closure0_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_bound_closure1_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<bool>.
+function_subtype_bound_closure2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<T>.
+function_subtype_bound_closure3_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_bound_closure4_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_bound_closure5_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<T>.
+function_subtype_bound_closure5a_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<T>.
+function_subtype_bound_closure6_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<T>.
+function_subtype_bound_closure7_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_subtype_call0_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_call1_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_call2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_cast0_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_subtype_cast1_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+function_subtype_cast2_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_subtype_cast3_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_subtype_checked0_test: Crash # (boz): handleStaticFunctionGet: function(boz)
+function_subtype_closure0_test: Crash # (X.f1): handleStaticFunctionGet: function(X#f1)
+function_subtype_closure1_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+function_subtype_factory0_test: Crash # (method): handleStaticFunctionGet: function(method)
+function_subtype_factory1_test: Crash # (method): handleStaticFunctionGet: function(method)
+function_subtype_inline0_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_inline2_test: Crash # (m4): handleStaticFunctionGet: function(m4)
+function_subtype_local0_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_local1_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<bool>.
+function_subtype_local2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<T>.
+function_subtype_local3_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_local4_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_local5_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<T>.
+function_subtype_named1_test: Crash # (void___a_int): handleStaticFunctionGet: function(void___a_int)
+function_subtype_named2_test: Crash # Please triage this failure.
+function_subtype_not0_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_subtype_not1_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+function_subtype_not2_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_subtype_not3_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_subtype_optional1_test: Crash # (void___int): handleStaticFunctionGet: function(void___int)
+function_subtype_optional2_test: Crash # Please triage this failure.
+function_subtype_setter0_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+function_subtype_simple0_test: Crash # (args0): handleStaticFunctionGet: function(args0)
+function_subtype_simple1_test: Crash # (args0): handleStaticFunctionGet: function(args0)
+function_subtype_simple2_test: Crash # (args0_1): handleStaticFunctionGet: function(args0_1)
+function_subtype_top_level0_test: Crash # (foo): handleStaticFunctionGet: function(foo)
+function_subtype_top_level1_test: Crash # (foo): handleStaticFunctionGet: function(foo)
+function_subtype_typearg0_test: Crash # Please triage this failure.
+function_subtype_typearg1_test: Crash # Please triage this failure.
+function_subtype_typearg2_test: Crash # Please triage this failure.
+function_subtype_typearg3_test: Crash # Please triage this failure.
+function_subtype_typearg4_test: Crash # Please triage this failure.
+function_type3_test: Crash # Instance of 'TypeOperator': type check unimplemented for F.
+function_type_alias2_test: Crash # (baz): handleStaticFunctionGet: function(baz)
+function_type_alias3_test: Crash # Instance of 'TypeOperator': type check unimplemented for F.
+function_type_alias4_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+function_type_alias6_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for F.
 function_type_alias8_test: Crash # unsupported element kind: fromThing:field
-function_type_alias_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_call_getter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_parameter2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-function_type_test: Crash # (try {FListInt fli=f();}on TypeError catch (error){got_type_error=true;}): "on T" catch block
-function_type_this_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic2_test: Crash # (throw new ExpectException(message)): Unhandled node
-generic_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_constructor_mixin2_test: Crash #  "on T" catch block
-generic_constructor_mixin3_test: Crash #  "on T" catch block
-generic_constructor_mixin_test: Crash #  "on T" catch block
-generic_creation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_deep_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_field_mixin2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_field_mixin6_test/01: Crash #  "on T" catch block
-generic_field_mixin_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_inheritance_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_instanceof2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_instanceof3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_instanceof4_test: Crash # (throw new ExpectException(message)): Unhandled node
-generic_instanceof5_test: Crash # (throw new ExpectException(message)): Unhandled node
-generic_instanceof_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_is_check_test: Crash # (throw new ExpectException(message)): Unhandled node
-generic_list_checked_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_native_test: Crash # (throw new ExpectException(message)): Unhandled node
-generic_object_type_test: Crash # (throw new ExpectException(message)): Unhandled node
-generic_parameterized_extends_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generics_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_syntax_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-generic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_closure_execution_order_test: Crash # (throw "${failures.length~/2} tests failed."): Unhandled node
-getter_no_setter2_test/00: Crash # (throw new ExpectException(message)): Unhandled node
-getter_no_setter2_test/01: Crash # (nextVar++ ): Error expression `nextVar++ ` unhandled.
-getter_no_setter2_test/03: Crash # (throw new ExpectException(message)): Unhandled node
-getter_no_setter_test/00: Crash # (throw new ExpectException(message)): Unhandled node
-getter_no_setter_test/01: Crash # (nextVar=0): Error expression `nextVar=0` unhandled.
-getter_no_setter_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-getter_no_setter_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-getter_override2_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_override2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_override2_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_override2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_override_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_override_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_setter_in_lib_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_setter_interceptor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getter_setter_order_test: Crash # (throw new ExpectException(message)): Unhandled node
-getters_setters2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters2_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters2_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters_type2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters_type3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters_type_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-getters_setters_type_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-guess_cid_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-gvn_field_access_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-gvn_interceptor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-gvn_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hash_code_mangling_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hash_map_null_key_foreach_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-hello_script_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-identical_closure2_test: Crash # (throw new ExpectException(message)): Unhandled node
-identical_closure_test: Crash # (throw new ExpectException(message)): Unhandled node
-identical_const_test/05: Crash # Please triage this failure.
-identical_const_test/06: Crash # Please triage this failure.
-identical_const_test/07: Crash # Please triage this failure.
-identical_const_test/08: Crash # Please triage this failure.
-identical_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-if_and_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-if_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-illegal_invocation_test/01: Crash # (foo()): Error expression `foo()` unhandled.
-implicit_closure1_test: Crash # handleStaticFunctionGet: function(Hello#handler1)
-implicit_closure2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-implicit_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-implicit_scope_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-implicit_super_constructor_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-implicit_this_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-implicit_this_test/02: Crash # (new Abstract()): Error expression `new Abstract()` unhandled.
-implicit_this_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-implicit_this_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-implied_interface_test: Crash #  "on T" catch block
-import_combinators_negative_test: Crash # (ugly): Error expression `ugly` unhandled.
-import_combinators_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-import_core_prefix_test: Crash # (throw new ExpectException(message)): Unhandled node
-import_self_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-import_self_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-import_show_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-incr_op_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-index_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inference_captured_variable2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inference_captured_variable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inference_list_or_null_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inference_mixin_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inference_super_constructor_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_closure_test: Crash # (throw 'Test failed'): Unhandled node
-inferrer_constructor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_constructor3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_constructor4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_constructor5_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_named_parameter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inferrer_synthesized_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+function_type_alias_test: Crash # Instance of 'TypeOperator': type check unimplemented for Fun.
+function_type_call_getter_test: Crash # Instance of 'TypeOperator': type check unimplemented for F.
+generic2_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+generic_closure_test: Crash # Instance of 'TypeOperator': type check unimplemented for F.
+generic_constructor_mixin2_test: Crash # Please triage this failure.
+generic_constructor_mixin3_test: Crash # Please triage this failure.
+generic_constructor_mixin_test: Crash # Please triage this failure.
+generic_creation_test: RuntimeError # Please triage this failure.
+generic_deep_test: Crash # Instance of 'TypeOperator': type check unimplemented for S<Z>.
+generic_field_mixin2_test: Crash # Please triage this failure.
+generic_field_mixin3_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<T>.
+generic_field_mixin_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<int>.
+generic_inheritance_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<Object>.
+generic_instanceof2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo<int, num>.
+generic_instanceof3_test: Crash # Instance of 'TypeOperator': type check unimplemented for I<String>.
+generic_instanceof4_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+generic_instanceof5_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+generic_instanceof_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<T>.
+generic_is_check_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<int>.
+generic_list_checked_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+generic_native_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+generic_object_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+generic_parameterized_extends_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<Object>.
+generic_test: Crash # Instance of 'TypeOperator': type check unimplemented for B<AA>.
+implicit_closure1_test: Crash # (handler1): handleStaticFunctionGet: function(Hello#handler1)
+implicit_super_constructor_call_test: Crash # Please triage this failure.
+import_self_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inference_captured_variable2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inference_captured_variable_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inference_list_or_null_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inference_mixin_field_test: Crash # Please triage this failure.
+inference_super_constructor_call_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inferrer_closure_test: Crash # unsupported element kind: closure:field
+inferrer_constructor2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inferrer_constructor3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inferrer_constructor4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inferrer_constructor5_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inferrer_constructor_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inferrer_synthesized_constructor_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 inferrer_synthesized_super_constructor_test: Crash # Please triage this failure.
-inferrer_this_access_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-infinite_switch_label_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-infinity_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_argument_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_closure_with_constant_arguments_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inlined_conditional_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inlined_throw_test: Crash # (throw new ExpectException(message)): Unhandled node
-inline_effect_context_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_getter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_in_for_initializer_and_bailout_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_super_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_super_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_test_context_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inline_value_context_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-instance_compound_assignment_operator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-instance_field_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-instance_incr_deopt_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-instance_inline_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-instanceof2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-instanceof3_test: Crash #  "on T" catch block
-instanceof4_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-instanceof4_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-instanceof_optimized_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-instanceof_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-inst_field_initializer1_negative_test: Crash # unable to build cps definition of generative_constructor(A#)
-inst_field_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-integer_division_by_zero_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interceptor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interceptor3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interceptor4_test: Crash # (throw new ExpectException(message)): Unhandled node
-interceptor5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interceptor6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interceptor7_test: Crash # (throw new ExpectException(message)): Unhandled node
+inferrer_this_access_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+infinite_switch_label_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+inline_super_test: Crash # Please triage this failure.
+inlined_conditional_test: Crash # (main): handleStaticFunctionGet: function(main)
+inlined_throw_test: Crash # (hest): handleStaticFunctionGet: function(hest)
+instance_creation_in_function_annotation_test: Crash # (f): handleStaticFunctionGet: function(f)
+instanceof2_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+instanceof3_test: Crash # Instance of 'TypeOperator': type check unimplemented for UndeclaredType.
+instanceof4_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for List<T>.
+instanceof4_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for List<T>.
+instanceof_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+integer_division_by_zero_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+interceptor6_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+interceptor7_test: Crash # unsupported element kind: array:field
 interceptor8_test: Crash # unsupported element kind: a:field
-interceptor9_test: Crash # (throw e): Unhandled node
-interceptor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interface_constants_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-interface_static_method_negative_test: Crash # (new A()): Error expression `new A()` unhandled.
-interface_static_non_final_fields_negative_test: Crash #  Error expression `InterfaceStaticNonFinalFieldsNegativeTest` unhandled.
+interceptor9_test: Crash # (boom): handleStaticFunctionGet: function(boom)
+interceptor_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 internal_library_test/01: Crash # (JS('int','0')): handleStaticFunctionInvoke: foreign: function(JS)
-internal_library_test/02: Crash # (JS('int','0')): Error expression `JS('int','0')` unhandled.
-intrinsified_methods_test: Crash # (throw new ExpectException(message)): Unhandled node
-int_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-invocation_mirror2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-invocation_mirror_invoke_on2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-invocation_mirror_invoke_on_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-invocation_mirror_test: Crash # cannot compile methods that need interceptor calling convention.
-is_function_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_interfaces2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_interfaces_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_malformed_type_test/94: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_malformed_type_test/95: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_malformed_type_test/96: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_malformed_type_test/97: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_malformed_type_test/98: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_malformed_type_test/99: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_nan_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_not_class1_negative_test: Crash #  Error expression `IsNotClass1NegativeTest.testMain()` unhandled.
-is_not_class2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_not_class4_negative_test: Crash #  Error expression `IsNotClass4NegativeTest.testMain()` unhandled.
-isnot_malformed_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_object_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_operator_clash_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-is_operator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue10204_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue10321_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue10561_test: Crash # (throw new ExpectException(message)): Unhandled node
-issue10581_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue10721_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue10747_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue10783_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue11724_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+invocation_mirror_invoke_on2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+invocation_mirror_invoke_on_test: RuntimeError # Please triage this failure.
+invocation_mirror_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+is_function_test: Crash # (staticMethod): handleStaticFunctionGet: function(staticMethod)
+is_malformed_type_test/94: Crash # Instance of 'TypeOperator': type casts not implemented.
+is_malformed_type_test/95: Crash # Instance of 'TypeOperator': type check unimplemented for Undefined.
+is_malformed_type_test/96: Crash # Instance of 'TypeOperator': type casts not implemented.
+is_malformed_type_test/97: Crash # Instance of 'TypeOperator': type check unimplemented for Undefined.
+is_malformed_type_test/98: Crash # Instance of 'TypeOperator': type casts not implemented.
+is_malformed_type_test/99: Crash # Instance of 'TypeOperator': type check unimplemented for Undefined.
+is_nan_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+is_not_class2_test: Crash #  function(IsNotClass2NegativeTest#testMain)
+is_object_test: RuntimeError # Please triage this failure.
+isnot_malformed_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+issue10581_test: Crash #  Unhandled node
+issue10721_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+issue10747_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+issue10783_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+issue11724_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 issue11793_test: Crash # unsupported element kind: otherArray:field
 issue12023_test: Crash #  Unhandled node
-issue12284_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue12336_test: Crash # (throw new ExpectException(message)): Unhandled node
-issue13179_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue13474_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue1363_test: Crash # (try {contents=libCup.getContents();}on TypeError catch (e){hasThrown=true;}): "on T" catch block
-issue13673_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue14014_3_test: Crash # (throw 'Test failed'): Unhandled node
-issue15606_test/01: Crash # (Unresolved): Error expression `Unresolved` unhandled.
-issue_1751477_test: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-issue20476_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue21159_test: Crash # (try {foo();}on StackOverflowError catch (e){exceptionCaught=true;}): "on T" catch block
-issue4515170_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue7513_test: Crash # (throw new ExpectException(message)): Unhandled node
-issue7525_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue9687_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-issue9939_test: Crash # (throw e): Unhandled node
-issue9949_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-js_properties_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-label8_negative_test: Crash # (Label8NegativeTest.errorMethod()): Error expression `Label8NegativeTest.errorMethod()` unhandled.
-label_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-large_class_declaration_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+issue12284_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+issue12336_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+issue13474_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+issue13673_test: Crash # unsupported element kind: topLevel:field
+issue14014_3_test: Crash # Please triage this failure.
+issue20476_test: Crash # (try {try {return 1;}catch (e1){}finally {return 3;}}catch (e2){}finally {return 5;}): try/finally
+issue7525_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+issue9687_test: Crash # unsupported element kind: array:field
+issue9939_test: Crash # unsupported element kind: globalVar:field
+issue9949_test: Crash # Instance of 'TypeOperator': type check unimplemented for Expando.
+issue_1751477_test: Crash # (lib1.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+label_test: Crash # (switch (i){case 111:while(doAgain()){break L;}default:i-- ;}): Unhandled node
+large_class_declaration_test: Crash # Please triage this failure.
 large_implicit_getter_test: Crash # unsupported element kind: panels:field
-lazy_map_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-lazy_static2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-lazy_static3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-lazy_static4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-lazy_static5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-lazy_static6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-lazy_static_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-left_shift_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-library1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-library5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-library_ambiguous_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-library_juxtaposition_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-library_negative_test: Crash # (LibraryNegativeTest.testMain(args)): handleStaticFunctionIncompatibleInvoke
-library_prefixes_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-library_private_in_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-library_same_name_used_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-licm2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-licm3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-licm_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_double_index_in_loop2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_double_index_in_loop_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_in_closure_test: Crash # (throw new ExpectException(message)): Unhandled node
-list_is_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_length_tracer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal_negative_test: Crash #  Error expression `ListLiteralNegativeTest.testMain()` unhandled.
-list_literal_syntax_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal_syntax_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal_syntax_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal_syntax_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_literal_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-list_tracer_in_map_test: Crash # (throw 'Test failed'): Unhandled node
-list_tracer_return_from_tearoff_closure_test: Crash # (throw 'Test failed'): Unhandled node
-liveness_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-load_indexed_constant_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-local_export_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-local_function2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-local_function3_test: Crash # (try {f.xyz(0);}on NoSuchMethodError catch (e){exception_caught=true;}): "on T" catch block
-local_function_non_equal_test: Crash # (throw new ExpectException(message)): Unhandled node
-local_function_test: Crash # (try {f(1,2);}on NoSuchMethodError catch (e){exception_caught=true;}): "on T" catch block
-logical_expression2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-logical_expression3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-logical_expression4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-logical_expression5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-logical_expression_test: Crash # (throw new ExpectException(message)): Unhandled node
-loop_exchange2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-loop_exchange3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-loop_exchange4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-loop_exchange_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-loop_hoist_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malbounded_type_cast2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malbounded_type_cast_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malbounded_type_literal_test: Crash # (throw new ExpectException(message)): Unhandled node
-malbounded_type_test2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malbounded_type_test_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malbounded_type_test_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malbounded_type_test_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malbounded_type_test_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malformed2_test/00: Crash # (throw 'Test failed.'): Unhandled node
-malformed_inheritance_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+lazy_map_test: Crash # unsupported element kind: data:field
+lazy_static2_test: Crash # unsupported element kind: x:field
+lazy_static3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+lazy_static4_test: Crash # unsupported element kind: v:field
+lazy_static5_test: Crash # unsupported element kind: x:field
+lazy_static6_test: Crash # unsupported element kind: x:field
+lazy_static_test: Crash # unsupported element kind: t2:field
+library_ambiguous_test/04: Crash # (main): handleStaticFunctionGet: function(main)
+licm2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+licm3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_double_index_in_loop2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_double_index_in_loop_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_is_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+list_length_tracer_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_literal3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+list_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<A>.
+list_tracer_in_map_test: Crash # unsupported element kind: b:field
+list_tracer_return_from_tearoff_closure_test: Crash # (foo): handleStaticFunctionGet: function(foo)
+logical_expression_test: Crash # unsupported element kind: globalList:field
+malbounded_type_cast2_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+malbounded_type_cast_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+malbounded_type_test2_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<T>.
+malbounded_type_test_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for Super<int>.
+malbounded_type_test_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for Super<String>.
+malformed2_test/00: Crash # Instance of 'TypeOperator': type check unimplemented for List<Unresolved>.
+malformed_inheritance_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for A<String>.
 malformed_inheritance_test/03: Crash # Please triage this failure.
-malformed_inheritance_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-malformed_inheritance_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+malformed_inheritance_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for A<String>.
+malformed_inheritance_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for A<String>.
 malformed_inheritance_test/09: Crash # Please triage this failure.
 malformed_inheritance_test/10: Crash # Please triage this failure.
-malformed_test/06: Crash #  "on T" catch block
-malformed_test/none: Crash #  "on T" catch block
+malformed_test/06: Crash # Please triage this failure.
+malformed_test/none: Crash # Please triage this failure.
 malformed_type_test: Crash # unsupported element kind: x:field
-many_calls_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-many_generic_instanceof_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-many_named_arguments_test: Crash # (throw new ExpectException(message)): Unhandled node
-many_overridden_no_such_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_literal10_test: Crash # Please triage this failure.
-map_literal2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_literal3_test: Crash # Please triage this failure.
-map_literal4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_literal5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_literal6_test: Crash # Please triage this failure.
-map_literal7_test: Crash # (throw new ExpectException(message)): Unhandled node
-map_literal8_test: Crash # (throw new ExpectException(message)): Unhandled node
-map_literal9_test: Crash # Please triage this failure.
-map_literal_negative_test: Crash # (MapLiteralNegativeTest.testMain()): Error expression `MapLiteralNegativeTest.testMain()` unhandled.
-map_literal_syntax_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_literal_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-map_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mega_load_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-megamorphic_no_such_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_binding_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_invocation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_name_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override3_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override3_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override3_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override3_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override7_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override7_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override8_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override8_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override8_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-method_override_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-methods_as_constants2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-methods_as_constants_test: Crash # Please triage this failure.
-minify_closure_variable_collision_test: Crash # (throw 'Test failed'): Unhandled node
-mint_arithmetic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mint_compares_test: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_black_listed_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_black_listed_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_black_listed_test/05: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_black_listed_test/06: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_black_listed_test/07: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_black_listed_test/08: Crash # (new F2()): Error expression `new F2()` unhandled.
-mixin_black_listed_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_bound_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+many_generic_instanceof_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<T>.
+many_overridden_no_such_method_test: RuntimeError # Please triage this failure.
+megamorphic_no_such_method_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+method_binding_test: Crash # (topLevel99): handleStaticFunctionGet: function(topLevel99)
+method_override4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+method_override5_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+method_override_test: Crash # Instance of 'TypeOperator': type check unimplemented for RemoveFunctionType<String, String>.
+methods_as_constants_test: RuntimeError # Please triage this failure.
+minify_closure_variable_collision_test: Crash # unsupported element kind: array:field
+mint_arithmetic_test: Crash #  try/finally
+mint_compares_test: Crash # (lt1): handleStaticFunctionGet: function(lt1)
+mixin_bound_test: Crash # Please triage this failure.
 mixin_cyclic_test/01: Crash # Please triage this failure.
-mixin_extends_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_extends_is_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_extends_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_field_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_forwarding_constructor1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_forwarding_constructor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_forwarding_constructor3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_generic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_getter_regression_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+mixin_extends_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mixin_extends_method_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mixin_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mixin_forwarding_constructor1_test: Crash # Please triage this failure.
+mixin_forwarding_constructor3_test: Crash # Please triage this failure.
+mixin_generic_test: Crash # Instance of 'TypeOperator': type check unimplemented for S<Map<int, bool>>.
 mixin_illegal_constructor_test/13: MissingRuntimeError # Please triage this failure.
-mixin_illegal_constructor_test/14: Crash # (new C0.named()): Error expression `new C0.named()` unhandled.
 mixin_illegal_constructor_test/15: MissingRuntimeError # Please triage this failure.
-mixin_illegal_constructor_test/16: Crash # (new D0.named()): Error expression `new D0.named()` unhandled.
 mixin_illegal_cycles_test/02: Crash # Please triage this failure.
 mixin_illegal_cycles_test/03: Crash # Please triage this failure.
 mixin_illegal_cycles_test/04: Crash # Please triage this failure.
 mixin_illegal_cycles_test/06: Crash # Please triage this failure.
-mixin_illegal_static_access_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_super_use_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_illegal_syntax_test/13: Crash # (new T0()): Error expression `new T0()` unhandled.
-mixin_implements_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+mixin_illegal_static_access_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 mixin_invalid_inheritance1_test/01: Crash # Please triage this failure.
 mixin_invalid_inheritance1_test/02: Crash # Please triage this failure.
 mixin_invalid_inheritance1_test/03: Crash # Please triage this failure.
-mixin_invalid_inheritance2_test/01: Crash # (new C<C>()): Error expression `new C<C>()` unhandled.
-mixin_invalid_inheritance2_test/02: Crash # (new C<C>()): Error expression `new C<C>()` unhandled.
-mixin_invalid_inheritance2_test/03: Crash # (new C<C>()): Error expression `new C<C>()` unhandled.
-mixin_issue10216_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_issue10216_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_is_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_lib_extends_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_lib_extends_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin_bound2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin_bound_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_mixin_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_naming_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_only_for_rti_test: Crash # (throw new ExpectException(message)): Unhandled node
-mixin_override_regression_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_prefix_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_regress_11398_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_regress_13688_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_super_constructor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_super_constructor_default_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_super_constructor_multiple_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_super_constructor_named_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_super_constructor_named_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+mixin_issue10216_2_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mixin_issue10216_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mixin_lib_extends_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mixin_lib_extends_method_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mixin_method_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mixin_mixin4_test: Crash # Instance of 'TypeOperator': type check unimplemented for I<List<bool>>.
+mixin_mixin5_test: Crash # Instance of 'TypeOperator': type check unimplemented for K<int>.
+mixin_mixin6_test: Crash # Instance of 'TypeOperator': type check unimplemented for K<int>.
+mixin_mixin7_test: Crash # Instance of 'TypeOperator': type check unimplemented for K<int>.
+mixin_mixin_bound2_test: Crash # Instance of 'TypeOperator': type check unimplemented for K<int>.
+mixin_mixin_bound_test: Crash # Instance of 'TypeOperator': type check unimplemented for I<List<bool>>.
+mixin_only_for_rti_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+mixin_super_constructor2_test: Crash # Please triage this failure.
+mixin_super_constructor_default_test: Crash # Please triage this failure.
+mixin_super_constructor_multiple_test: Crash # Please triage this failure.
+mixin_super_constructor_named_test/01: Crash # Please triage this failure.
+mixin_super_constructor_named_test/none: Crash # Please triage this failure.
 mixin_super_constructor_positionals_test/01: Crash # Please triage this failure.
-mixin_super_constructor_positionals_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_super_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_this_use_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_typedef_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameter1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameter2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameter3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameter4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameters_mixin_extends_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameters_mixin_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameters_simple_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameters_super_extends_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_type_parameters_super_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mixin_with_two_implicit_constructors_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-modulo_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mul_recipr_test: Crash # (throw new ExpectException(message)): Unhandled node
-multi_assign_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-multiline_strings_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-multi_pass2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-multi_pass_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+mixin_super_constructor_positionals_test/none: Crash # Please triage this failure.
+mixin_super_constructor_test: Crash # Please triage this failure.
+mixin_type_parameter1_test: Crash # Instance of 'TypeOperator': type check unimplemented for Mixin1<num>.
+mixin_type_parameter2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Mixin1<num>.
+mixin_type_parameter3_test: Crash # Instance of 'TypeOperator': type check unimplemented for Mixin1<num>.
+mixin_type_parameter4_test: Crash # Instance of 'TypeOperator': type check unimplemented for R<bool, int>.
+mixin_type_parameters_mixin_extends_test: Crash # Instance of 'TypeOperator': type check unimplemented for M.
+mixin_type_parameters_mixin_test: Crash # Instance of 'TypeOperator': type check unimplemented for M.
+mixin_type_parameters_super_extends_test: Crash # Instance of 'TypeOperator': type check unimplemented for S.
+mixin_type_parameters_super_test: Crash # Instance of 'TypeOperator': type check unimplemented for S.
+mixin_typedef_constructor_test: Crash # Please triage this failure.
+mixin_with_two_implicit_constructors_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+modulo_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 multiple_field_assignment_constructor_test: Crash # unsupported element kind: a:field
-named_argument_in_const_creation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_argument_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_constructor_test/01: Crash # (new Class.named<int>()): Error expression `new Class.named<int>()` unhandled.
-named_constructor_test/03: Crash # (new prefix<int>.Class()): Error expression `new prefix<int>.Class()` unhandled.
-named_constructor_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameter_clash_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters2_test: Crash # (try {test(10,25,b:26);}on NoSuchMethodError catch (e){foundError=true;}): "on T" catch block
-named_parameters3_test: Crash # (try {test(10,x:99);}on NoSuchMethodError catch (e){foundError=true;}): "on T" catch block
-named_parameters4_test: Crash # (try {test(10,x:99);}on NoSuchMethodError catch (e){foundError=true;}): "on T" catch block
-named_parameters_aggregated_test/02: Crash #  Error expression `NamedParametersAggregatedTests.f_missing_comma(10,25)` unhandled.
-named_parameters_aggregated_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_named_count_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_passing_false_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_passing_falsy_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_passing_null_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_passing_zero_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_with_conversions_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_with_dollars_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-named_parameters_with_object_property_names_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-namer2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-namer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-naming2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-naming3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-naming_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-native_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-nested_comments_test: Crash # (throw new ExpectException(message)): Unhandled node
-nested_if_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+named_parameter_clash_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+named_parameters_aggregated_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+named_parameters_passing_falsy_test: Crash # (TestClass.staticMethod): handleStaticFunctionGet: function(TestClass#staticMethod)
+named_parameters_with_dollars_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+namer2_test: Crash # Instance of 'TypeOperator': type check unimplemented for A.
+naming_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 nested_switch_label_test: Crash #  Unhandled node
-new_expression1_negative_test: Crash # (NewExpression1NegativeTest): Error expression `NewExpression1NegativeTest` unhandled.
-new_expression2_negative_test: Crash # (NewExpression2NegativeTest): Error expression `NewExpression2NegativeTest` unhandled.
-new_expression3_negative_test: Crash # (NewExpression3NegativeTest): Error expression `NewExpression3NegativeTest` unhandled.
-new_prefix_test/01: Crash # (new prefix()): Error expression `new prefix()` unhandled.
-new_statement_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-non_const_constructor_without_body_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-non_const_super_negative_test: Crash # Please triage this failure.
-non_dominating_loop_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-no_such_constructor2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+no_such_constructor2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 no_such_constructor_test/01: MissingRuntimeError # Please triage this failure.
-no_such_method2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-no_such_method3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-no_such_method_dispatcher_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-no_such_method_empty_selector_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-no_such_method_subtype_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-no_such_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+no_such_method_dispatcher_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+no_such_method_empty_selector_test: Crash # unsupported element kind: b:field
+no_such_method_test: RuntimeError # Please triage this failure.
+non_const_super_negative_test: Crash # Please triage this failure.
 not_enough_positional_arguments_test/00: MissingRuntimeError # Please triage this failure.
 not_enough_positional_arguments_test/03: Crash # Please triage this failure.
-not_enough_positional_arguments_test/06: Crash # (foo(b:1)): handleStaticFunctionIncompatibleInvoke
-not_enough_positional_arguments_test/06: MissingRuntimeError # Please triage this failure.
-not_enough_positional_arguments_test/07: Crash # Please triage this failure.
-null2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_access_error_test: Crash #  "on T" catch block
-null_inline_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_is2_test: Crash # (throw new ExpectException(message)): Unhandled node
-null_is_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_method_test: Crash # (throw new ExpectException(message)): Unhandled node
+null2_test: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+null_inline_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+null_is2_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+null_is_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
 null_no_such_method_test: Crash # unsupported element kind: array:field
-null_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_to_string2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-null_to_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-number_constant_folding1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-number_identifier_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-number_identifier_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-number_identifier_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-number_identifier_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-number_identity2_test: Crash # (throw new ExpectException(message)): Unhandled node
-number_identity_test: Crash # (throw new ExpectException(message)): Unhandled node
-numbers_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-number_syntax_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-on_catch_malformed_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator2_negative_test: Crash # (new Helper(10)): Error expression `new Helper(10)` unhandled.
-operator2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator5_test: Crash # (try {Expect.equals(42,a>=a);}on TypeError catch (e){}): "on T" catch block
-operator6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator_equals_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator_index_evaluation_order_test: Crash # (throw new ExpectException(message)): Unhandled node
-operator_negate_and_method_negate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-operator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimized_constant_array_string_access_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimized_hoisting_checked_mode_assert_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimized_isempty_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimized_lists_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimized_setter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimized_string_charat_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimized_string_charcodeat_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optimize_redundant_array_load_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-optional_named_parameters_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-ordered_maps_test: Crash # Please triage this failure.
-osr_test: Crash # (throw "No progress made"): Unhandled node
-overridden_no_such_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-override_inheritance_no_such_method_test/03: Crash # cannot compile methods that need interceptor calling convention.
-override_inheritance_no_such_method_test/04: Crash # cannot compile methods that need interceptor calling convention.
-override_inheritance_no_such_method_test/08: Crash # cannot compile methods that need interceptor calling convention.
-override_inheritance_no_such_method_test/11: Crash # cannot compile methods that need interceptor calling convention.
-override_inheritance_no_such_method_test/13: Crash # cannot compile methods that need interceptor calling convention.
-override_method_with_field_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-override_method_with_field_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-param2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-parameter_initializer2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-parameter_initializer4_negative_test: Crash # Please triage this failure.
-parameter_initializer6_negative_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-parameter_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-parameter_name_conflict_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-parameter_types_specialization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-param_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-parse_closures_in_initializers_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-parser_quirks_test: Crash # handleStaticFunctionGet: function(f)
-parse_types_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-partial_min_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-patch_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+null_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+null_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+null_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+null_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for dynamic.
+number_identifier_test/05: Crash # Instance of 'TypeOperator': type casts not implemented.
+number_identifier_test/08: Crash # Instance of 'TypeOperator': type casts not implemented.
+number_identifier_test/09: Crash # Instance of 'TypeOperator': type casts not implemented.
+number_identifier_test/none: Crash # Instance of 'TypeOperator': type casts not implemented.
+on_catch_malformed_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+operator4_test: RuntimeError # Please triage this failure.
+operator_equals_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+optimize_redundant_array_load_test: Crash # unsupported element kind: A:field
+optimized_constant_array_string_access_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+optimized_string_charat_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+optimized_string_charcodeat_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+osr_test: Crash # (create): handleStaticFunctionGet: function(create)
+overridden_no_such_method_test: RuntimeError # Please triage this failure.
+parser_quirks_test: Crash # (f): handleStaticFunctionGet: function(f)
 phi_merge_test: Crash # (switch (value){case 42:break;case 43:break;}): Unhandled node
-positive_bit_operations_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix101_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix10_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix11_negative_test: Crash # (new lib12.Library11(1)): Error expression `new lib12.Library11(1)` unhandled.
-prefix11_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix12_negative_test: Crash # (lib12.top_level11): Error expression `lib12.top_level11` unhandled.
-prefix12_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix14_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix15_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix16_test: Crash # (try {myFunc i=0;}on TypeError catch (error){got_type_error=true;}): "on T" catch block
-prefix1_negative_test: Crash # (library1): Error expression `library1` unhandled.
-prefix21_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix24_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix2_negative_test: Crash # (lib2.Library2): Error expression `lib2.Library2` unhandled.
-prefix3_negative_test: Crash # (lib2.foo=1): Error expression `lib2.foo=1` unhandled.
-prefix4_negative_test: Crash # (new lib11.Library11(1)): Error expression `new lib11.Library11(1)` unhandled.
-prefix5_negative_test: Crash # (lib11): Error expression `lib11` unhandled.
-prefix_new_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-prefix_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private3_test: Crash # Please triage this failure.
-private4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_access_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_access_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_access_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_access_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_access_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_access_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_clash_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_mixin2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-private_selector_test: Crash # (throw new ExpectException(message)): Unhandled node
-private_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-propagated_argument_type_check_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-propagate_past_constant_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-property_field_override_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-pure_function2_test: Crash # (throw new ExpectException(message)): Unhandled node
-pure_function_test: Crash # (throw new ExpectException(message)): Unhandled node
-range_analysis2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-range_analysis3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-range_analysis_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-raw_string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-recursive_calls_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-recursive_loop_phis_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-redirecting_factory_default_values_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-redirecting_factory_default_values_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-redirecting_factory_default_values_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-redirecting_factory_incompatible_signature_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-redirecting_factory_long_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reexport_core_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-ref_before_declaration_test/00: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/01: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/02: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/03: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/04: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/05: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/06: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/07: Crash # (throw "ball"): Unhandled node
-ref_before_declaration_test/none: Crash # (throw "ball"): Unhandled node
-refine_receiver_null_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reg_exp2_test: Crash # (throw new ExpectException(message)): Unhandled node
-reg_exp3_test: Crash # (try {RegExp exp=new RegExp("[");i=100;}on FormatException catch (e){i=0;}): "on T" catch block
-reg_exp_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_10996_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_11010_test: Crash # (throw 'unexpected result'): Unhandled node
-regress_11800_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_12561_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_13494_test: Crash # (A.unknown=p(2)): Error expression `A.unknown=p(2)` unhandled.
-regress_14105_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_17382_test: Crash # (tl(m(0))): Error expression `tl(m(0))` unhandled.
+prefix14_test: Crash # (myClass.func2): handleStaticFunctionGet: function(myClass#func2)
+prefix16_test: Crash # Instance of 'TypeOperator': type check unimplemented for myFunc.
+prefix21_test: Crash # (badFunction): handleStaticFunctionGet: function(badFunction)
+private4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+private_access_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+private_access_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+private_access_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+private_access_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+private_access_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+private_access_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+private_mixin2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+pure_function2_test: Crash # (foo): handleStaticFunctionGet: function(foo)
+range_analysis2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+range_analysis_test: Crash # (f): handleStaticFunctionGet: function(f)
+redirecting_factory_default_values_test/none: RuntimeError # Please triage this failure.
+redirecting_factory_incompatible_signature_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+redirecting_factory_long_test: Crash # Instance of 'TypeOperator': type check unimplemented for X<int>.
+ref_before_declaration_test/00: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/01: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/02: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/03: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/04: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/05: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/06: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/07: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+ref_before_declaration_test/none: Crash # (switch (x){case 0:var x='Does fuzzy logic tickle?';}): Unhandled node
+refine_receiver_null_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+reg_exp_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regress_11010_test: Crash # unsupported element kind: caller:field
+regress_12561_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+regress_14105_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<int>.
 regress_18435_test: Crash # Please triage this failure.
-regress_18535_test: Crash # cannot compile methods that need interceptor calling convention.
-regress_19413_test/01: Crash # (foo.f()): Error expression `foo.f()` unhandled.
+regress_18535_test: Crash # Instance of 'TypeOperator': type check unimplemented for V.
 regress_21016_test: Crash # unsupported element kind: list:field
-regress_21793_test/01: Crash # (new A()(499)): Error expression `new A()(499)` unhandled.
-regress_21795_test: Crash # (throw "Expected foo in stacktrace!"): Unhandled node
-regress_21998_1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_21998_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_21998_3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_21998_4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+regress_21795_test: Crash # (try {foo(t);}finally {if(t==0){try {}catch (err,st){}}}): try/finally
 regress_22438_test: Crash #  cannot handle async/sync*/async* functions
-regress_22443_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+regress_22443_test: Crash # (D.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
 regress_22445_test: Crash #  cannot handle async/sync*/async* functions
 regress_22579_test: Crash #  cannot handle async/sync*/async* functions
 regress_22700_test: Crash # Please triage this failure.
-regress_22719_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
 regress_22728_test: Crash #  cannot handle async/sync*/async* functions
-regress_22777_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-regress_22822_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_22858_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-regress_22936_test/01: Crash # (try {x=foo();}on NoSuchMethodError {}): "on T" catch block
-regress_22936_test/none: Crash # (try {foo();}on NoSuchMethodError {}): "on T" catch block
-regress_23046_test: Crash # Please triage this failure.
-regress_r24720_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reify_typevar_static_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reify_typevar_static_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reify_typevar_static_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reify_typevar_static_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reify_typevar_static_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-reify_typevar_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-resolution_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-resolve_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rethrow_test: Crash #  "on T" catch block
-return_in_loop_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-return_this_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-return_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_assign_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_compound_assign_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_conditional_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_for_update_order_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_if_empty_then_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_if_return_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_if_swap_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_implicit_this_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_logical_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_nested_if1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_nested_if2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_nested_if3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_swap_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_variable_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_while_many_exits_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-rewrite_while_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-round_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-runtime_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-savannah_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-scoped_variables_try_catch_test: Crash # Please triage this failure.
-scope_variable_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-scope_variable_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-second_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter0_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_no_getter_call_test/01: Crash # (topLevel(3)): Error expression `topLevel(3)` unhandled.
-setter_no_getter_call_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_no_getter_test/01: Crash # (topLevel++ ): Error expression `topLevel++ ` unhandled.
-setter_override2_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_override2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_override2_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_override2_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_override2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_override_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_override_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-setter_override_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-side_effect_throw_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-skip_expression_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-smaller_4_Interface_Types_A11_t01_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-smaller_4_Interface_Types_A11_t02_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-smi_type_test: Crash # (throw new ExpectException(message)): Unhandled node
-stack_overflow_stacktrace_test: Crash #  "on T" catch block
-stack_overflow_test: Crash #  "on T" catch block
-stacktrace_rethrow_error_test/none: Crash # (throw "Expected: ${expected} actual: ${actual}"): Unhandled node
-stacktrace_rethrow_error_test/withtraceparameter: Crash # (throw "Expected: ${expected} actual: ${actual}"): Unhandled node
-stacktrace_rethrow_nonerror_test: Crash # (throw "Expected: ${expected} actual: ${actual}"): Unhandled node
-stacktrace_test: Crash #  "on T" catch block
-stack_trace_test: Crash # (throw new ExpectException(message)): Unhandled node
-state_mangling2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-state_mangling3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-state_mangling4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-state_mangling_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-statement_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_call_wrong_argument_count_negative_test: Crash # (Niesen.goodCall(1,2,3,4)): handleStaticFunctionIncompatibleInvoke
-static_call_wrong_argument_count_negative_test: Fail # Please triage this failure.
-static_closure_identical_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_const_field_test: Crash # Please triage this failure.
-static_field3_test/01: Crash # (Foo.x): Error expression `Foo.x` unhandled.
-static_field3_test/02: Crash # (Foo.m): Error expression `Foo.m` unhandled.
-static_field3_test/03: Crash # (Foo.m=1): Error expression `Foo.m=1` unhandled.
-static_field3_test/04: Crash # (Foo.x=1): Error expression `Foo.x=1` unhandled.
-static_field_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_field_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_field_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_field_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_field_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_final_field2_test/01: Crash # (A.x=2): Error expression `A.x=2` unhandled.
-static_implicit_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_initializer_type_error_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_inline_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-static_postfix_operator_test: Crash # (throw new ExpectException(message)): Unhandled node
-strict_equal_test: Crash # (throw new ExpectException(message)): Unhandled node
-string_charcode_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_escapes_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolate2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolate_null_test: Crash # (try {s="Hello Mr. ${a.name}";}on NoSuchMethodError catch (e){return;}): "on T" catch block
-string_interpolate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolation1_negative_test: Crash #  Error expression `StringInterpolation1NegativeTest.testMain()` unhandled.
-string_interpolation2_negative_test: Crash #  Error expression `StringInterpolation2NegativeTest.testMain()` unhandled.
-string_interpolation4_negative_test: Crash #  Error expression `StringInterpolation4NegativeTest.testMain()` unhandled.
-string_interpolation5_negative_test: Crash #  Error expression `StringInterpolation5NegativeTest.testMain()` unhandled.
-string_interpolation6_negative_test: Crash #  Error expression `StringInterpolation6NegativeTest.testMain()` unhandled.
-string_interpolation7_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolation8_test: Crash # (throw new ExpectException(message)): Unhandled node
-string_interpolation_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_interpolation_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_intrinsics_test: Crash # (throw new ExpectException(message)): Unhandled node
-string_join_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_optimizations_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_supertype_checked_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-string_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-substring_test/01: Crash #  "on T" catch block
-substring_test/none: Crash # (try {}on TypeError catch (e){}on ArgumentError catch (e){}): "on T" catch block
-super_abstract_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_all_named_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_assign_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_bound_closure_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_bound_closure_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_call3_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_call3_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_call3_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_call4_test: Crash # (throw new ExpectException(message)): Unhandled node
-super_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_field_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_field_access_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_first_constructor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_getter_setter_test: Crash # cannot compile methods that need interceptor calling convention.
-super_implicit_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_inferrer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_operator_index2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_operator_index3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_operator_index4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_operator_index5_test: Crash # cannot compile methods that need interceptor calling convention.
-super_operator_index6_test: Crash # cannot compile methods that need interceptor calling convention.
-super_operator_index7_test: Crash # cannot compile methods that need interceptor calling convention.
-super_operator_index8_test: Crash # cannot compile methods that need interceptor calling convention.
-super_operator_index_test/01: Crash # cannot compile methods that need interceptor calling convention.
-super_operator_index_test/02: Crash # cannot compile methods that need interceptor calling convention.
-super_operator_index_test/03: Crash # (super[4]=42): Error expression `super[4]=42` unhandled.
-super_operator_index_test/04: Crash # (super[4]+=5): Error expression `super[4]+=5` unhandled.
-super_operator_index_test/05: Crash # (super[4]=42): Error expression `super[4]=42` unhandled.
-super_operator_index_test/06: Crash # (super[4]+=5): Error expression `super[4]+=5` unhandled.
-super_operator_index_test/07: Crash # (super[2]): Error expression `super[2]` unhandled.
-super_operator_index_test/none: Crash # cannot compile methods that need interceptor calling convention.
-super_operator_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_setter_interceptor_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_setter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-super_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+regress_22777_test: Crash #  cannot handle async/sync*/async* functions
+regress_22822_test: Crash # (try {for(int i=0;i<10;i++ ){return ()=>i+b;}}finally {b=10;}): try/finally
+regress_22936_test/01: Crash # Please triage this failure.
+regress_22936_test/none: Crash # Please triage this failure.
+regress_r24720_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<int>.
+reify_typevar_static_test/01: Crash # Please triage this failure.
+return_type_test: Crash # (returnString1): handleStaticFunctionGet: function(returnString1)
+side_effect_throw_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+skip_expression_test: Crash # Instance of 'TypeOperator': type check unimplemented for OneArg.
+smaller_4_Interface_Types_A11_t02_test: Crash # Instance of 'TypeOperator': type check unimplemented for G<C, C, C>.
+smi_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for Comparable<double>.
+stack_trace_test: Crash #  try/finally
+statement_test: Crash #  try/finally
+static_closure_identical_test: Crash # (main): handleStaticFunctionGet: function(main)
+static_field_test/02: Crash # (m): handleStaticFunctionGet: function(StaticField1aRunNegativeTest#m)
+static_field_test/04: Crash # (m): handleStaticFunctionGet: function(StaticField2aRunNegativeTest#m)
+static_implicit_closure_test: Crash # (First.foo): handleStaticFunctionGet: function(First#foo)
+static_postfix_operator_test: Crash # (try {if(a++ ==0){inIt=true;}}finally {}): try/finally
+string_charcode_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+string_interpolation_test/01: Crash # (m): handleStaticFunctionGet: function(StringInterpolationTest#m)
+string_interpolation_test/none: Crash # (m): handleStaticFunctionGet: function(StringInterpolationTest#m)
+string_optimizations_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+super_all_named_constructor_test: Crash # Please triage this failure.
+super_bound_closure_test/01: RuntimeError # Please triage this failure.
+super_bound_closure_test/none: RuntimeError # Please triage this failure.
+super_call4_test: RuntimeError # Please triage this failure.
+super_getter_setter_test: RuntimeError # Please triage this failure.
+super_implicit_closure_test: RuntimeError # Please triage this failure.
+super_inferrer_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+super_operator_index2_test: RuntimeError # Please triage this failure.
+super_operator_index5_test: Crash # (super[0]=42): visitUnresolvedSuperIndexSet
+super_operator_index5_test: RuntimeError # Please triage this failure.
+super_operator_index6_test: Crash # (super[0]+=1): visitUnresolvedSuperGetterCompoundIndexSet
+super_operator_index6_test: RuntimeError # Please triage this failure.
+super_operator_index7_test: Crash # (super[0]=42): visitUnresolvedSuperIndexSet
+super_operator_index7_test: RuntimeError # Please triage this failure.
+super_operator_index8_test: Crash # (super[f()]=g()): visitUnresolvedSuperIndexSet
+super_operator_index8_test: RuntimeError # Please triage this failure.
+super_operator_index_test/01: Crash # (super[4]+=5): visitUnresolvedSuperGetterCompoundIndexSet
+super_operator_index_test/03: Crash # (super[4]=42): visitUnresolvedSuperIndexSet
+super_operator_index_test/04: Crash # (super[4]+=5): visitUnresolvedSuperSetterCompoundIndexSet
+super_operator_index_test/05: Crash # (super[4]=42): visitUnresolvedSuperIndexSet
+super_operator_index_test/06: Crash # (super[4]+=5): visitUnresolvedSuperGetterCompoundIndexSet
+super_operator_test: Crash # (testRegression6403): handleStaticFunctionGet: function(testRegression6403)
 switch6_test: Crash # (switch (a){case 0:{x=0;break;}case 1:x=1;break;}): Unhandled node
 switch8_test: Crash # (switch (new List(1)[0]){case const A():throw 'Test failed';}): Unhandled node
-switch_bad_case_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-switch_bad_case_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-switch_bad_case_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+switch_bad_case_test/02: Crash # (switch (n){case 1:return "I";case 4:return "IV";}): Unhandled node
+switch_bad_case_test/none: Crash # (switch (n){case 1:return "I";case 4:return "IV";}): Unhandled node
 switch_case_static_const_test: Crash # (switch (p){case S:break;case A.S:break;case 'abc':break;}): Unhandled node
 switch_case_test/none: Crash # (switch (new B()){}): Unhandled node
-switch_fallthru_test: Crash # (try {test(1);}on FallThroughError catch (e){fallthroughCaught=true;}): "on T" catch block
+switch_fallthru_test: Crash # (switch (n){case 0:result="zero";break;case 1:result="one";case 9:result="nine";}): Unhandled node
 switch_label2_test: Crash #  Unhandled node
-switch_label_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+switch_label_test: Crash #  Unhandled node
 switch_scope_test: Crash #  Unhandled node
 switch_test: Crash # (switch (input){case true:result=12;break;case false:result=22;}): Unhandled node
-switch_try_catch_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator1_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator1_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/20: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/30: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/40: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/41: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/50: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/51: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/52: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator3_test/test1: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-sync_generator3_test/test2: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+switch_try_catch_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+sync_generator1_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+sync_generator1_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+sync_generator2_test/01: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/02: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/03: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/04: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/05: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/06: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/07: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/08: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/09: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/10: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/11: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/20: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/30: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/40: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/41: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/50: Crash # (test02()sync*{yield 12321;}): cannot handle async/sync*/async* functions
+sync_generator2_test/51: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/52: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator2_test/none: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
+sync_generator3_test/test1: Crash #  cannot handle async/sync*/async* functions
+sync_generator3_test/test2: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+syncstar_yield_test/copyParameters: Crash #  cannot handle async/sync*/async* functions
+syncstar_yield_test/none: Crash #  cannot handle async/sync*/async* functions
 syncstar_yieldstar_test: Crash #  cannot handle async/sync*/async* functions
-syncstar_yield_test/copyParameters: Crash # (throw new ExpectException(message)): Unhandled node
-syncstar_yield_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-temp_mangling_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-ternary_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-test_negative_test: Crash # (TestNegativeTest): Error expression `TestNegativeTest` unhandled.
-third_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throw1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throw2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throw3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throw4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throw5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throw6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throw8_test: Crash # (throw new ExpectException(message)): Unhandled node
-throw_expr_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-throwing_lazy_variable_test: Crash # (throw 'Test failed'): Unhandled node
-throw_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-top_level_func_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-top_level_getter_arrow_syntax_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-top_level_in_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-top_level_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-top_level_multiple_files_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-top_level_non_prefixed_library_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-top_level_prefixed_declaration_test: Crash # (throw new ExpectException(message)): Unhandled node
-top_level_var_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-transitive_private_library_access_test: Crash # (ClassID): Error expression `ClassID` unhandled.
-tree_shake_typed_selector_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-truncdiv_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-truncdiv_uint32_test: Crash # (throw 'Test failed'): Unhandled node
-try_catch2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-try_catch3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-try_catch4_test: Crash # (throw new ExpectException(message)): Unhandled node
-try_catch5_test: Crash # (throw new ExpectException(message)): Unhandled node
-try_catch_on_syntax_test/02: Crash # (test1()): Error expression `test1()` unhandled.
-try_catch_on_syntax_test/03: Crash # (test1()): Error expression `test1()` unhandled.
-try_catch_on_syntax_test/04: Crash # (test1()): Error expression `test1()` unhandled.
-try_catch_on_syntax_test/05: Crash # (test1()): Error expression `test1()` unhandled.
-try_catch_on_syntax_test/06: Crash # (test1()): Error expression `test1()` unhandled.
-try_catch_on_syntax_test/07: Crash # (throw "catch this!"): Unhandled node
-try_catch_on_syntax_test/10: Crash # (throw "catch this!"): Unhandled node
-try_catch_on_syntax_test/11: Crash # (throw "catch this!"): Unhandled node
-try_catch_on_syntax_test/none: Crash # (throw "catch this!"): Unhandled node
-try_catch_optimized1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-try_catch_optimized2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-try_catch_optimized3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-try_catch_optimized4_test: Crash # (try {String res=m.maythrow(i);failed=true;}on MyError catch (e){}): "on T" catch block
-try_catch_osr_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-try_catch_syntax_test/02: Crash # (testMissingTry()): Error expression `testMissingTry()` unhandled.
-try_catch_syntax_test/03: Crash # (testMissingTry()): Error expression `testMissingTry()` unhandled.
-try_catch_syntax_test/04: Crash # (testMissingTry()): Error expression `testMissingTry()` unhandled.
-try_catch_syntax_test/06: Crash # (testIllegalFinally()): Error expression `testIllegalFinally()` unhandled.
-try_catch_syntax_test/08: Crash # (try {}on MammaMia catch (e){}): "on T" catch block
-try_catch_test/01: Crash #  "on T" catch block
-try_catch_test/none: Crash # (throw "up"): Unhandled node
-type_argument_in_super_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_argument_substitution_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_check_const_function_typedef2_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_check_const_function_typedef2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_check_const_function_typedef_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_checks_in_factory_method_test: Crash #  "on T" catch block
-type_check_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_conversion_ssa_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typedef_is_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_equality_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_message_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-typed_selector_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_error_test: Crash #  "on T" catch block
-type_guard_conversion_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_intersection_test: Crash # (throw new ExpectException(message)): Unhandled node
-type_literal_prefix_call_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_literal_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_parameter_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/15: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/16: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_closure_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/14: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_functions_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/08: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/10: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/11: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/12: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/13: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_promotion_more_specific_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_propagation2_test: Crash # cannot compile methods that need interceptor calling convention.
-type_propagation3_test: Crash # (throw 'Test failed'): Unhandled node
-type_propagation_assert_assignable_test: Crash # (throw new ExpectException(message)): Unhandled node
-type_propagation_in_for_update_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_propagation_phi_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_propagation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/06: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds3_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_bounds4_test/01: Crash #  "on T" catch block
-type_variable_bounds4_test/none: Crash #  "on T" catch block
-type_variable_closure2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_conflict2_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_conflict2_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_conflict2_test/04: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_conflict2_test/05: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_conflict2_test/07: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_conflict2_test/09: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_field_initializer_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_field_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_function_type_test: Crash # (throw new ExpectException(message)): Unhandled node
-type_variable_identifier_expression_test: Crash # (try {var buf=new B<A>().doFunc();print(buf);}on NoSuchMethodError catch (e){}): "on T" catch block
-type_variable_initializer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_nested_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-type_variable_scope2_test: Crash #  "on T" catch block
+temp_mangling_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+throw1_test: Crash #  try/finally
+throw2_test: Crash #  try/finally
+throw3_test: Crash #  try/finally
+throw4_test: Crash #  try/finally
+throw5_test: Crash #  try/finally
+throw6_test: Crash #  try/finally
+throw8_test: Crash #  try/finally
+throw_expr_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+throw_test: Crash #  try/finally
+throwing_lazy_variable_test: Crash # unsupported element kind: a:field
+top_level_in_initializer_test: Crash # unable to build cps definition of generative_constructor(Foo#second)
+truncdiv_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+truncdiv_uint32_test: Crash # unsupported element kind: a:field
+try_catch3_test: Crash #  try/finally
+try_catch4_test: Crash #  try/finally
+try_catch5_test: Crash # (try {try {a=8;return;}finally {b=8==a;entered=true;continue;}}finally {continue;}): try/finally
+try_catch_on_syntax_test/07: Crash # Instance of 'TypeOperator': type check unimplemented for UndefinedClass.
+try_catch_optimized1_test: RuntimeError # Please triage this failure.
+try_catch_optimized2_test: Crash # (try {bar();}finally {}): try/finally
+try_catch_optimized3_test: RuntimeError # Please triage this failure.
+try_catch_optimized4_test: Crash # unsupported element kind: a:field
+try_catch_osr_test: Crash # (try {if(x==null)throw 42;return 99;}finally {}): try/finally
+try_catch_syntax_test/08: Crash # Instance of 'TypeOperator': type check unimplemented for MammaMia.
+try_catch_test/01: Crash # Please triage this failure.
+try_catch_test/none: Crash # Please triage this failure.
+type_argument_in_super_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_argument_substitution_test: Crash # Instance of 'TypeOperator': type check unimplemented for X<A<String>>.
+type_check_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+type_conversion_ssa_test: Crash # unsupported element kind: array:field
+type_error_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+type_guard_conversion_test: Crash # Instance of 'TypeOperator': type check unimplemented for Comparable.
+type_literal_prefix_call_test/00: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_parameter_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+type_parameter_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+type_parameter_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+type_parameter_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+type_parameter_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+type_parameter_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+type_parameter_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for Set.
+type_promotion_closure_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/07: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/08: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/09: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/10: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/11: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/12: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/13: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/14: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/15: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/16: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_closure_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for List<B>.
+type_promotion_functions_test/01: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/02: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/03: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/04: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/05: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/06: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/07: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/08: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/09: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/10: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/11: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/12: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/13: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/14: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_functions_test/none: Crash # (func): handleStaticFunctionGet: function(func)
+type_promotion_more_specific_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/07: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/08: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/09: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/10: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/11: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/12: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/13: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_promotion_more_specific_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for E.
+type_propagation_in_for_update_test: Crash # (foo1): handleStaticFunctionGet: function(foo1)
+type_variable_bounds2_test/00: Crash # Instance of 'TypeOperator': type check unimplemented for I.
+type_variable_bounds2_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for I.
+type_variable_bounds2_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for I.
+type_variable_bounds2_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for I.
+type_variable_bounds2_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for J.
+type_variable_bounds2_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for K.
+type_variable_bounds2_test/06: Crash # Instance of 'TypeOperator': type check unimplemented for I.
+type_variable_bounds2_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for I.
+type_variable_bounds3_test/00: Crash # Instance of 'TypeOperator': type check unimplemented for A<X>.
+type_variable_closure2_test: Crash # Instance of 'TypeOperator': type check unimplemented for A<int>.
+type_variable_closure_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_variable_conflict2_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_variable_conflict2_test/04: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_variable_conflict2_test/05: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_variable_conflict2_test/07: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_variable_conflict2_test/09: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+type_variable_field_initializer_closure_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+type_variable_field_initializer_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+type_variable_function_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for Func<S>.
+type_variable_initializer_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<int, int>.
+type_variable_nested_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+type_variable_scope2_test: Crash # Instance of 'TypeOperator': type check unimplemented for Foo.
+type_variable_typedef_test: Crash # (foo): handleStaticFunctionGet: function(foo)
+typed_equality_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+typedef_is_test: Crash # Instance of 'TypeOperator': type check unimplemented for Func1.
 typevariable_substitution2_test/01: Crash # Please triage this failure.
-typevariable_substitution2_test/02: Crash #  "on T" catch block
+typevariable_substitution2_test/02: Crash # Please triage this failure.
 typevariable_substitution2_test/none: Crash # Please triage this failure.
-type_variable_typedef_test: Crash # (throw new ExpectException(message)): Unhandled node
-unary2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unary_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unicode_bom_middle_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unicode_hash_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unnamed_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unqual_name_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unresolved_default_constructor_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-unresolved_in_factory_negative_test: Crash # (foo()): Error expression `foo()` unhandled.
+unresolved_default_constructor_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 unresolved_top_level_method_negative_test: Crash # unsupported element kind: a:field
 unresolved_top_level_var_negative_test: Crash # unsupported element kind: a:field
-value_range2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-value_range3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-value_range_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-variable_declaration_metadata_test/06: Crash # (new C()): Error expression `new C()` unhandled.
-variable_declaration_metadata_test/08: Crash # (new C()): Error expression `new C()` unhandled.
-var_init_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-void_type_test: Crash # (try {var x=func();}on TypeError catch (error){got_type_error=true;}): "on T" catch block
-while_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+value_range2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+value_range3_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+value_range_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+void_type_test: Crash # (f): handleStaticFunctionGet: function(f)
diff --git a/tests/lib/async/deferred/deferred_in_isolate_lib.dart b/tests/lib/async/deferred/deferred_in_isolate_lib.dart
deleted file mode 100644
index 64b38db..0000000
--- a/tests/lib/async/deferred/deferred_in_isolate_lib.dart
+++ /dev/null
@@ -1 +0,0 @@
-String f() => "hi";
diff --git a/tests/lib/async/deferred/deferred_in_isolate_test.dart b/tests/lib/async/deferred/deferred_in_isolate_test.dart
deleted file mode 100644
index 08cd0da..0000000
--- a/tests/lib/async/deferred/deferred_in_isolate_test.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-import 'dart:isolate';
-import 'dart:async';
-import 'package:unittest/unittest.dart';
-
-import 'deferred_in_isolate_lib.dart' deferred as lib;
-
-loadDeferred(port) {
-  lib.loadLibrary().then((_) {
-    port.send(lib.f());
-  });
-}
-
-main() {
-  test("Deferred loading in isolate", () {
-    ReceivePort port = new ReceivePort();
-    port.first.then(expectAsync((msg) {
-       expect(msg, equals("hi"));
-    }));
-    Isolate.spawn(loadDeferred, port.sendPort);
-  });
-}
diff --git a/tests/lib/async/deferred/deferred_library.dart b/tests/lib/async/deferred/deferred_library.dart
deleted file mode 100644
index 186a11a..0000000
--- a/tests/lib/async/deferred/deferred_library.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library deferred_api_library;
-
-foo(x) {
-  print('foo($x)');
-  return 42;
-}
diff --git a/tests/lib/async/future_constructor_test.dart b/tests/lib/async/future_constructor_test.dart
index 64d946c..55193d9 100644
--- a/tests/lib/async/future_constructor_test.dart
+++ b/tests/lib/async/future_constructor_test.dart
@@ -6,7 +6,6 @@
 
 import "package:expect/expect.dart";
 import 'dart:async';
-import 'dart:isolate';
 
 main() {
   compare(func) {
diff --git a/tests/lib/async/stream_controller_async_test.dart b/tests/lib/async/stream_controller_async_test.dart
index 8d61ef9..3fed8a8 100644
--- a/tests/lib/async/stream_controller_async_test.dart
+++ b/tests/lib/async/stream_controller_async_test.dart
@@ -6,7 +6,6 @@
 library stream_controller_async_test;
 
 import 'dart:async';
-import 'dart:isolate';
 import "package:expect/expect.dart";
 import 'package:unittest/unittest.dart';
 import 'event_helper.dart';
diff --git a/tests/lib/async/stream_first_where_test.dart b/tests/lib/async/stream_first_where_test.dart
index 2137a7a..6a35d26 100644
--- a/tests/lib/async/stream_first_where_test.dart
+++ b/tests/lib/async/stream_first_where_test.dart
@@ -6,7 +6,6 @@
 
 import "package:expect/expect.dart";
 import 'dart:async';
-import 'dart:isolate';
 import 'package:unittest/unittest.dart';
 import 'event_helper.dart';
 import 'stream_state_helper.dart';
diff --git a/tests/lib/async/stream_last_where_test.dart b/tests/lib/async/stream_last_where_test.dart
index 790ae62..f001502 100644
--- a/tests/lib/async/stream_last_where_test.dart
+++ b/tests/lib/async/stream_last_where_test.dart
@@ -6,7 +6,6 @@
 
 import "package:expect/expect.dart";
 import 'dart:async';
-import 'dart:isolate';
 import 'package:unittest/unittest.dart';
 import 'event_helper.dart';
 import 'stream_state_helper.dart';
diff --git a/tests/lib/async/stream_single_test.dart b/tests/lib/async/stream_single_test.dart
index 8b3174e..172580b 100644
--- a/tests/lib/async/stream_single_test.dart
+++ b/tests/lib/async/stream_single_test.dart
@@ -7,7 +7,6 @@
 
 import "package:expect/expect.dart";
 import 'dart:async';
-import 'dart:isolate';
 import 'package:unittest/unittest.dart';
 import 'event_helper.dart';
 
diff --git a/tests/lib/async/stream_single_to_multi_subscriber_test.dart b/tests/lib/async/stream_single_to_multi_subscriber_test.dart
index 766f1bd..2063881 100644
--- a/tests/lib/async/stream_single_to_multi_subscriber_test.dart
+++ b/tests/lib/async/stream_single_to_multi_subscriber_test.dart
@@ -7,7 +7,6 @@
 
 import "package:expect/expect.dart";
 import 'dart:async';
-import 'dart:isolate';
 import 'package:unittest/unittest.dart';
 import 'event_helper.dart';
 
diff --git a/tests/lib/async/timer_cancel_test.dart b/tests/lib/async/timer_cancel_test.dart
index 4d17fc4..d539cb7 100644
--- a/tests/lib/async/timer_cancel_test.dart
+++ b/tests/lib/async/timer_cancel_test.dart
@@ -5,7 +5,6 @@
 library timer_cancel_test;
 
 import 'dart:async';
-import 'dart:isolate';
 import 'package:unittest/unittest.dart';
 
 main() {
diff --git a/tests/lib/convert/json_pretty_test.dart b/tests/lib/convert/json_pretty_test.dart
index 0679ff4..a0c3bc6 100644
--- a/tests/lib/convert/json_pretty_test.dart
+++ b/tests/lib/convert/json_pretty_test.dart
@@ -6,12 +6,12 @@
 
 import 'dart:convert';
 
-import 'package:matcher/matcher.dart';
+import "package:expect/expect.dart";
 
 void _testIndentWithNullChar() {
   var encoder = const JsonEncoder.withIndent('\x00');
   var encoded = encoder.convert([[],[[]]]);
-  expect(encoded, "[\n\x00[],\n\x00[\n\x00\x00[]\n\x00]\n]");
+  Expect.equals("[\n\x00[],\n\x00[\n\x00\x00[]\n\x00]\n]", encoded);
 }
 
 void main() {
@@ -91,7 +91,7 @@
   var encoder = const JsonEncoder.withIndent('  ');
   var prettyOutput = encoder.convert(object);
 
-  expect(prettyOutput, expected);
+  Expect.equals(expected, prettyOutput);
 
   encoder = const JsonEncoder.withIndent('');
 
@@ -101,14 +101,14 @@
       .map((line) => line.trimLeft())
       .join('\n');
 
-  expect(flatOutput, flatExpected);
+  Expect.equals(flatExpected, flatOutput);
 
   var compactOutput = JSON.encode(object);
 
   encoder = const JsonEncoder.withIndent(null);
-  expect(encoder.convert(object), compactOutput);
+  Expect.equals(compactOutput, encoder.convert(object));
 
   var prettyDecoded = JSON.decode(prettyOutput);
 
-  expect(JSON.encode(prettyDecoded), compactOutput);
+  Expect.equals(compactOutput, JSON.encode(prettyDecoded));
 }
diff --git a/tests/lib/developer/inspect_test.dart b/tests/lib/developer/inspect_test.dart
new file mode 100644
index 0000000..9f06215
--- /dev/null
+++ b/tests/lib/developer/inspect_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:developer';
+import 'package:expect/expect.dart';
+
+class Point {
+  int x, y;
+  Point(this.x, this.y);
+}
+
+void main() {
+  var p_in = new Point(3, 4);
+  var p_out = inspect(p_in);
+  Expect.isTrue(identical(p_in, p_out));
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 750a87f..32c9bd9 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -138,7 +138,6 @@
 async/timer_cancel_test: RuntimeError,OK # Needs Timer to run.
 async/timer_cancel1_test: RuntimeError,OK # Needs Timer to run.
 async/timer_cancel2_test: RuntimeError,OK # Needs Timer to run.
-async/timer_isolate_test: Fail, OK # Needs Timer to run.
 async/timer_repeat_test: RuntimeError,OK # Needs Timer to run.
 async/timer_test: RuntimeError,OK # Needs Timer to run.
 async/stream_controller_async_test: RuntimeError # Timer interface not supported; Issue 7728.
@@ -193,13 +192,6 @@
 [ $runtime == vm ]
 js/*: Skip
 
-[ $compiler == dart2dart ]
-mirrors/*: Skip # Issue 11511
-async/schedule_microtask6_test: Fail             # Issue 10957 - may be related to issue 10910
-
-[ $compiler == dart2dart && $minified ]
-convert/json_lib_test: Fail # Issue 10961
-
 [ $compiler == dart2js && $minified ]
 mirrors/mirrors_used_get_name_test: RuntimeError
 mirrors/mirrors_used_get_name2_test: RuntimeError
@@ -251,7 +243,6 @@
 async/timer_test: Fail, Pass # Issue 15487
 async/multiple_timer_test: Fail, Pass # Issue 15487
 async/stream_periodic3_test: Fail, Pass # Issue 15487
-async/timer_isolate_test: Fail, Pass # Issue 15487. Issue 13921: spawnFunction is not allowed on Dartium's DOM thread.
 async/timer_isActive_test: Fail, Pass # Issue 22352
 mirrors/immutable_collections_test: SkipSlow # Dartium debug uses -O0, so this will just timeout and waste bot cycles.
 mirrors/mirrors_reader_test: SkipSlow # Dartium debug uses -O0, so this will just timeout and waste bot cycles.
@@ -276,14 +267,6 @@
 [ $compiler == dart2js && $runtime == safarimobilesim ]
 mirrors/mirrors_reader_test: SkipSlow # Times out. Issue 20806.
 
-[ $compiler == dart2dart ]
-# Deferred loading is not supported by dart2dart.
-async/deferred/deferred_in_isolate_test: Skip # Issue 17523
-
-[ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
-# Dart vm does not support spawn from a dom-enabled isolate.
-async/deferred/deferred_in_isolate_test: RuntimeError # Issue 16209
-
 [ $compiler == dart2js && $runtime == jsshell ]
 async/schedule_microtask_test: Fail  # Preamble file does not correctly implement scheduleImmediate.
 
@@ -342,515 +325,367 @@
 convert/streamed_conversion_json_utf8_decode_test: Skip  # Timeout.
 
 [ $compiler == dart2js && $cps_ir ]
-async/catch_errors11_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors12_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors13_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors14_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors15_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors16_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors17_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors18_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors19_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors20_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors21_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors22_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors23_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors24_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors25_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors26_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors27_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors28_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors2_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors3_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors4_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors5_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors6_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors7_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors8_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/catch_errors_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/deferred/deferred_in_isolate_test: Crash # cannot compile methods that need interceptor calling convention.
-async/first_regression_test: Crash # cannot compile methods that need interceptor calling convention.
-async/future_constructor_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/future_delayed_error_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/future_microtask_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/futures_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/future_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/future_timeout_test: Crash # cannot compile methods that need interceptor calling convention.
-async/future_value_chain2_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/future_value_chain3_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/future_value_chain4_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/future_value_chain_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/intercept_print1_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/intercept_schedule_microtask1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/intercept_schedule_microtask2_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/intercept_schedule_microtask3_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/intercept_schedule_microtask4_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/intercept_schedule_microtask5_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/intercept_schedule_microtask6_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/multiple_timer_test: Crash # cannot compile methods that need interceptor calling convention.
-async/print_test/01: Crash # cannot compile methods that need interceptor calling convention.
-async/print_test/none: Crash # cannot compile methods that need interceptor calling convention.
-async/run_zoned1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/run_zoned4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/run_zoned5_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/run_zoned6_test/01: Crash # (rethrow;): Unhandled node
-async/run_zoned6_test/none: Crash # (rethrow;): Unhandled node
-async/run_zoned7_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/run_zoned8_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/run_zoned9_test/01: Crash # (rethrow;): Unhandled node
-async/run_zoned9_test/none: Crash # (rethrow;): Unhandled node
-async/schedule_microtask2_test: Crash # cannot compile methods that need interceptor calling convention.
-async/schedule_microtask3_test: Crash # cannot compile methods that need interceptor calling convention.
-async/schedule_microtask5_test: Crash # cannot compile methods that need interceptor calling convention.
-async/schedule_microtask_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/slow_consumer2_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/slow_consumer3_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/slow_consumer_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace01_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace02_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace03_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace04_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace05_test: Crash # (throw "should never be reached"): Unhandled node
-async/stack_trace06_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace07_test: Crash # (throw "bad things happen"): Unhandled node
-async/stack_trace08_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace09_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace10_test: Crash # (throw "should never be reached"): Unhandled node
-async/stack_trace11_test: Crash # (throw "Unreachable"): Unhandled node
-async/stack_trace12_test: Crash # (throw "Unreachable"): Unhandled node
-async/stack_trace13_test: Crash # (throw "Unreachable"): Unhandled node
-async/stack_trace14_test: Crash # (throw "Unreachable"): Unhandled node
-async/stack_trace15_test: Crash # (throw "Unreachable"): Unhandled node
-async/stack_trace16_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace17_test: Crash # (throw "Unreachable"): Unhandled node
-async/stack_trace18_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace19_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace20_test: Crash # (throw "should never be reached"): Unhandled node
-async/stack_trace21_test: Crash #  Unhandled node
-async/stack_trace22_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stack_trace23_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/stack_trace24_test: Crash # (throw "should never be reached"): Unhandled node
-async/stack_trace25_test: Crash # (throw "unreachable"): Unhandled node
-async/stream_controller_async_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_controller_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stream_event_transformed_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stream_first_where_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_from_iterable_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_iterator_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_join_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_last_where_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_listen_zone_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stream_periodic2_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_periodic3_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_periodic4_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_periodic5_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_periodic_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_single_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_single_to_multi_subscriber_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_state_nonzero_timer_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_state_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_subscription_as_future_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_subscription_cancel_test: Crash # cannot compile methods that need interceptor calling convention.
+async/catch_errors2_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+async/catch_errors3_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+async/catch_errors_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+async/deferred/deferred_in_isolate_test: Crash # (loadDeferred): handleStaticFunctionGet: function(loadDeferred)
+async/first_regression_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/future_timeout_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/future_value_chain4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+async/intercept_print1_test: Crash # unsupported element kind: events:field
+async/intercept_schedule_microtask2_test: Crash # (body): handleStaticFunctionGet: function(body)
+async/intercept_schedule_microtask3_test: Crash # (body): handleStaticFunctionGet: function(body)
+async/intercept_schedule_microtask4_test: Crash # (body): handleStaticFunctionGet: function(body)
+async/intercept_schedule_microtask5_test: Crash # (handler): handleStaticFunctionGet: function(handler)
+async/intercept_schedule_microtask6_test: Crash # (body): handleStaticFunctionGet: function(body)
+async/multiple_timer_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/print_test/01: Crash # (interceptedPrint): handleStaticFunctionGet: function(interceptedPrint)
+async/print_test/none: Crash # (interceptedPrint): handleStaticFunctionGet: function(interceptedPrint)
+async/schedule_microtask2_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/schedule_microtask3_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/schedule_microtask5_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/schedule_microtask_test: Crash # Please triage this failure.
+async/stack_trace09_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+async/stream_controller_async_test: Crash # unsupported element kind: _defaultEnvironment:field
+async/stream_controller_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+async/stream_event_transformed_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+async/stream_first_where_test: Crash # unsupported element kind: _defaultEnvironment:field
+async/stream_from_iterable_test: Crash # unsupported element kind: _defaultEnvironment:field
+async/stream_iterator_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_join_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_last_where_test: Crash # unsupported element kind: _defaultEnvironment:field
+async/stream_listen_zone_test: Crash #  Unhandled node
+async/stream_periodic2_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_periodic3_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_periodic4_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+async/stream_periodic5_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_periodic_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_single_test: Crash # unsupported element kind: _defaultEnvironment:field
+async/stream_single_to_multi_subscriber_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_state_nonzero_timer_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_state_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_subscription_as_future_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_subscription_cancel_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
 async/stream_timeout_test: Crash # Please triage this failure.
-async/stream_transformation_broadcast_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_transformer_from_handlers_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/stream_transformer_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/stream_transform_test: Crash # cannot compile methods that need interceptor calling convention.
-async/stream_zones_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/timer_cancel1_test: Crash # cannot compile methods that need interceptor calling convention.
-async/timer_cancel2_test: Crash # cannot compile methods that need interceptor calling convention.
-async/timer_cancel_test: Crash # cannot compile methods that need interceptor calling convention.
-async/timer_isActive_test: Crash # cannot compile methods that need interceptor calling convention.
-async/timer_isolate_test: Crash # cannot compile methods that need interceptor calling convention.
-async/timer_not_available_test: Crash # (try {new Timer(ms*5,(){});}on UnsupportedError catch (e){failed=true;}): "on T" catch block
+async/stream_transform_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_transformation_broadcast_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/stream_transformer_from_handlers_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+async/stream_transformer_test: Crash # (_defaultData): handleStaticFunctionGet: function(_defaultData)
+async/timer_cancel1_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/timer_cancel2_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/timer_cancel_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/timer_isActive_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+async/timer_isolate_test: Crash # (createTimer): handleStaticFunctionGet: function(createTimer)
 async/timer_regress22626_test: Crash # unsupported element kind: rng:field
-async/timer_repeat_test: Crash # cannot compile methods that need interceptor calling convention.
-async/timer_test: Crash # cannot compile methods that need interceptor calling convention.
-async/zone_bind_callback_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/zone_bind_callback_unary_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/zone_bind_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_create_periodic_timer_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_create_timer2_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_create_timer_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_debug_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_empty_description2_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/zone_empty_description_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/zone_error_callback_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_fork_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/zone_future_schedule_microtask_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_register_callback_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/zone_register_callback_unary_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-async/zone_root_bind_test: Crash # (throw new ExpectException(message)): Unhandled node
-async/zone_run_guarded_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_run_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_run_unary_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-async/zone_value_test: Crash # (throw new ExpectException(message)): Unhandled node
-collection/hash_map_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-collection/hash_set_test: Crash # (throw new ExpectException(message)): Unhandled node
-collection/linked_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/ascii_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion_json_decode1_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/chunked_conversion_json_encode1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion_utf82_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion_utf83_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion_utf84_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/chunked_conversion_utf85_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/chunked_conversion_utf86_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion_utf87_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/chunked_conversion_utf88_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/chunked_conversion_utf89_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/chunked_conversion_utf8_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/codec1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/codec2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/encoding_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-convert/html_escape_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/json_chunk_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/json_lib_test: Crash # cannot compile methods that need interceptor calling convention.
-convert/json_pretty_test: Crash # Please triage this failure.
-convert/json_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/json_toEncodable_reviver_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/json_utf8_chunk_test: Crash #  "on T" catch block
-convert/json_util_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/latin1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/line_splitter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/streamed_conversion_json_decode1_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-convert/streamed_conversion_json_encode1_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-convert/streamed_conversion_json_utf8_decode_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-convert/streamed_conversion_json_utf8_encode_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-convert/streamed_conversion_utf8_decode_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-convert/streamed_conversion_utf8_encode_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-convert/utf82_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/utf83_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/utf84_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/utf85_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-convert/utf8_encode_test: Crash # (throw new ExpectException(message)): Unhandled node
-convert/utf8_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-js/datetime_roundtrip_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-js/null_test: Crash # cannot compile methods that need interceptor calling convention.
-math/coin_test: Crash # (throw new ExpectException(message)): Unhandled node
-math/double_pow_test: Crash # (throw new ExpectException(message)): Unhandled node
-math/low_test: Crash # (throw new ExpectException(message)): Unhandled node
-math/math2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-math/math_parse_double_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-math/math_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-math/min_max_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-math/pi_test: Crash # (throw new ExpectException(message)): Unhandled node
-math/point_test: Crash # cannot compile methods that need interceptor calling convention.
-math/random_big_test: Crash # (throw new ExpectException(message)): Unhandled node
-math/random_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+async/timer_repeat_test: Crash # (timeoutHandler): handleStaticFunctionGet: function(timeoutHandler)
+async/timer_test: Crash # (timeoutHandler): handleStaticFunctionGet: function(timeoutHandler)
+async/zone_debug_test: Crash # unsupported element kind: events:field
+async/zone_error_callback_test: Crash # unsupported element kind: replaceZoneSpec:field
+collection/linked_list_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/ascii_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/chunked_conversion2_test: RuntimeError # Please triage this failure.
+convert/chunked_conversion_json_decode1_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+convert/chunked_conversion_json_encode1_test: Crash # unsupported element kind: TESTS:field
+convert/chunked_conversion_utf82_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/chunked_conversion_utf84_test: Crash # unsupported element kind: UNICODE_TESTS:field
+convert/chunked_conversion_utf85_test: Crash # unsupported element kind: UNICODE_TESTS:field
+convert/chunked_conversion_utf86_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/chunked_conversion_utf87_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/chunked_conversion_utf8_test: Crash # unsupported element kind: UNICODE_TESTS:field
+convert/codec2_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+convert/encoding_test: Crash # unsupported element kind: UNICODE_TESTS:field
+convert/json_chunk_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/json_lib_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+convert/json_test: Crash # (badFormat): handleStaticFunctionGet: function(badFormat)
+convert/json_toEncodable_reviver_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+convert/json_utf8_chunk_test: Crash # unsupported element kind: UNICODE_TESTS:field
+convert/json_util_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/latin1_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/line_splitter_test: Crash # Please triage this failure.
+convert/streamed_conversion_json_decode1_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+convert/streamed_conversion_json_encode1_test: Crash # unsupported element kind: TESTS:field
+convert/streamed_conversion_json_utf8_decode_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+convert/streamed_conversion_json_utf8_encode_test: Crash # unsupported element kind: JSON_UTF8:field
+convert/streamed_conversion_utf8_decode_test: Crash # unsupported element kind: UNICODE_TESTS:field
+convert/streamed_conversion_utf8_encode_test: Crash # unsupported element kind: UNICODE_TESTS:field
+convert/utf82_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/utf8_encode_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+convert/utf8_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+js/null_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+math/double_pow_test: Crash # unsupported element kind: samples:field
+math/math_parse_double_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+math/min_max_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+math/point_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+math/random_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 math/rectangle_test: Crash # Please triage this failure.
-mirrors/abstract_class_test/00: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/abstract_class_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/abstract_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/accessor_cache_overflow_test: Crash # cannot compile methods that need interceptor calling convention.
-mirrors/basic_types_in_dart_core_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/circular_factory_redirection_test/01: Crash # (new A.circular()): Error expression `new A.circular()` unhandled.
-mirrors/circular_factory_redirection_test/02: Crash # (new A.circular2()): Error expression `new A.circular2()` unhandled.
-mirrors/circular_factory_redirection_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/class_declarations_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/class_declarations_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/class_mirror_location_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/class_mirror_type_variables_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/closures_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/closurization_equivalence_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/constructor_kinds_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/constructor_kinds_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/constructor_private_name_test: Crash # cannot compile methods that need interceptor calling convention.
-mirrors/constructors_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/dart2js_mirrors_test: Crash # (throw new StateError('FAILED: ${name}.\n${e}\n${trace}')): Unhandled node
-mirrors/declarations_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/deferred_mirrors_metadata_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-mirrors/deferred_mirrors_metatarget_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-mirrors/deferred_mirrors_update_test: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-mirrors/deferred_type_test: Crash # handleStaticFunctionGet: function(bad)
-mirrors/delegate_call_through_getter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/delegate_function_invocation_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/delegate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/enum_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/equality_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/fake_function_with_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/fake_function_without_call_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/field_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/function_type_mirror_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generic_bounded_by_type_parameter_test/01: Crash # (try {}on TypeError catch (e){Expect.isTrue(inCheckedMode());}): "on T" catch block
-mirrors/generic_bounded_by_type_parameter_test/02: Crash #  "on T" catch block
-mirrors/generic_bounded_by_type_parameter_test/none: Crash # (try {}on TypeError catch (e){Expect.isTrue(inCheckedMode());}): "on T" catch block
-mirrors/generic_bounded_test/01: Crash # (try {}on TypeError catch (e){Expect.isTrue(inCheckedMode());}): "on T" catch block
-mirrors/generic_bounded_test/02: Crash #  "on T" catch block
-mirrors/generic_bounded_test/none: Crash # (try {}on TypeError catch (e){Expect.isTrue(inCheckedMode());}): "on T" catch block
-mirrors/generic_class_declaration_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_f_bounded_mixin_application_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_f_bounded_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_f_bounded_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_function_typedef_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generic_interface_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_interface_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_list_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_local_function_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generic_mixin_applications_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generic_mixin_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generics_double_substitution_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generics_double_substitution_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generics_dynamic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generics_special_types_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/generics_substitution_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generics_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generics_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generic_superclass_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generic_superclass_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/generic_type_mirror_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/get_field_cache_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/get_field_static_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/get_field_static_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/get_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/get_symbol_name_no_such_method_test: Crash # (throw 'Expected: "${expected}", but got "${actual}"'): Unhandled node
-mirrors/globalized_closures2_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/globalized_closures2_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/globalized_closures_test/00: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/globalized_closures_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/hierarchy_invariants_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/hot_get_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/hot_set_field_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/immutable_collections_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/inference_and_no_such_method_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/inherited_metadata_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/inherit_field_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/initializing_formals_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/initializing_formals_test/03: Crash # cannot compile methods that need interceptor calling convention.
-mirrors/initializing_formals_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/instance_members_easier_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/instance_members_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/instance_members_unimplemented_interface_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/instance_members_with_override_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/instantiate_abstract_class_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/intercepted_cache_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/intercepted_class_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/intercepted_object_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/intercepted_superclass_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invocation_cache_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invocation_fuzz_test/emptyarray: Crash # unsupported element kind: queue:field
-mirrors/invocation_fuzz_test/false: Crash # unsupported element kind: queue:field
-mirrors/invocation_fuzz_test/none: Crash # unsupported element kind: queue:field
-mirrors/invocation_fuzz_test/smi: Crash # unsupported element kind: queue:field
-mirrors/invocation_fuzz_test/string: Crash # unsupported element kind: queue:field
-mirrors/invoke_call_on_closure_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_call_through_getter_previously_accessed_test/named: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_call_through_getter_previously_accessed_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_call_through_getter_test/named: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_call_through_getter_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_call_through_implicit_getter_previously_accessed_test/named: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_call_through_implicit_getter_previously_accessed_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_call_through_implicit_getter_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_closurization2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_closurization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_import_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_named_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_named_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_natives_malicious_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_private_test: Crash # cannot compile methods that need interceptor calling convention.
-mirrors/invoke_private_wrong_library_test: Crash #  Unhandled node
-mirrors/invoke_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/invoke_throws_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/is_odd_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/lazy_static_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/libraries_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/library_declarations_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_declarations_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_enumeration_deferred_loading_test: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-mirrors/library_exports_hidden_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_exports_shown_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_import_deferred_loading_test: Crash # handleStaticGetterInvoke: foreign: function(loadLibrary)
-mirrors/library_imports_bad_metadata_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_imports_bad_metadata_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_imports_deferred_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_imports_hidden_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_imports_metadata_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_imports_prefixed_show_hide_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_imports_prefixed_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_imports_shown_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/library_uri_package_test: Crash # cannot compile methods that need interceptor calling convention.
-mirrors/list_constructor_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/list_constructor_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/load_library_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/local_function_is_static_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/local_isolate_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/metadata_allowed_values_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/03: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/04: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/05: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/06: Crash # (I): Error expression `I` unhandled.
-mirrors/metadata_allowed_values_test/07: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/08: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/09: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/10: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/11: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/13: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/14: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/15: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/16: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/23: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/24: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/25: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/26: Crash # (JJ): Error expression `JJ` unhandled.
-mirrors/metadata_allowed_values_test/27: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_allowed_values_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructed_constant_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/03: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/04: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/05: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/06: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/07: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_constructor_arguments_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/02: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/03: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/04: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/05: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/06: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/07: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/08: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/09: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/metadata_nested_constructor_call_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/method_mirror_location_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/method_mirror_name_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/method_mirror_properties_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/method_mirror_returntype_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/method_mirror_source_line_ending_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/method_mirror_source_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+mirrors/abstract_class_test/00: Crash # (baz): handleStaticFunctionGet: function(baz)
+mirrors/abstract_class_test/none: Crash # (baz): handleStaticFunctionGet: function(baz)
+mirrors/abstract_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/accessor_cache_overflow_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/basic_types_in_dart_core_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/circular_factory_redirection_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/circular_factory_redirection_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/circular_factory_redirection_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/class_declarations_test/01: Crash # (stringify): handleStaticFunctionGet: function(stringify)
+mirrors/class_declarations_test/none: Crash # (stringify): handleStaticFunctionGet: function(stringify)
+mirrors/class_mirror_location_test: Crash # (main): handleStaticFunctionGet: function(main)
+mirrors/class_mirror_type_variables_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/closures_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/closurization_equivalence_test: Crash # (topLevelMethod): handleStaticFunctionGet: function(topLevelMethod)
+mirrors/constructor_kinds_test/01: Crash # (=Class.factoryConstructor;): Unhandled node
+mirrors/constructor_kinds_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/constructor_private_name_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/constructors_test: Crash # (compareSymbols): handleStaticFunctionGet: function(compareSymbols)
+mirrors/dart2js_mirrors_test: Crash # Instance of 'TypeOperator': type check unimplemented for Class.
+mirrors/declarations_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map<Symbol, DeclarationMirror>.
+mirrors/deferred_mirrors_metadata_test: Crash # (lib1.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+mirrors/deferred_mirrors_metatarget_test: Crash # (lib.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+mirrors/deferred_mirrors_update_test: Crash # (l.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+mirrors/deferred_type_test: Crash # (bad): handleStaticFunctionGet: function(bad)
+mirrors/delegate_call_through_getter_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/delegate_function_invocation_test: Crash # (topLevelFunction): handleStaticFunctionGet: function(topLevelFunction)
+mirrors/delegate_test: RuntimeError # Please triage this failure.
+mirrors/enum_test: Crash # (stringify): handleStaticFunctionGet: function(stringify)
+mirrors/equality_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/fake_function_with_call_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/fake_function_without_call_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/field_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/function_type_mirror_test: Crash # (bar): handleStaticFunctionGet: function(bar)
+mirrors/generic_bounded_by_type_parameter_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_bounded_by_type_parameter_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_bounded_by_type_parameter_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_bounded_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_bounded_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_bounded_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_class_declaration_test: Crash # (stringify): handleStaticFunctionGet: function(stringify)
+mirrors/generic_f_bounded_mixin_application_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_f_bounded_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_f_bounded_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_function_typedef_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/generic_interface_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_interface_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_list_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_local_function_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_mixin_applications_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_mixin_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_superclass_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_superclass_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generic_type_mirror_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generics_double_substitution_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generics_double_substitution_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generics_dynamic_test: Crash # Please triage this failure.
+mirrors/generics_special_types_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/generics_substitution_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/generics_test/01: Crash # Please triage this failure.
+mirrors/generics_test/none: Crash # Please triage this failure.
+mirrors/globalized_closures2_test/00: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/globalized_closures2_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/globalized_closures_test/00: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/globalized_closures_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/hierarchy_invariants_test: Crash # (checkLibrary): handleStaticFunctionGet: function(checkLibrary)
+mirrors/hot_get_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/hot_set_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/immutable_collections_test: Crash # (checkLibrary): handleStaticFunctionGet: function(checkLibrary)
+mirrors/inference_and_no_such_method_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/inherit_field_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/inherited_metadata_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/initializing_formals_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/initializing_formals_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/initializing_formals_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/instance_members_easier_test: Crash # (=Superclass.inheritedNormalFactory;): Unhandled node
+mirrors/instance_members_test: Crash # (=Superclass.inheritedNormalFactory;): Unhandled node
+mirrors/instance_members_unimplemented_interface_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/instance_members_with_override_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/instantiate_abstract_class_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/intercepted_cache_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/intercepted_class_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/intercepted_object_test: Crash # Instance of 'TypeOperator': type check unimplemented for List.
+mirrors/intercepted_superclass_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invocation_fuzz_test/emptyarray: Crash # (checkLibrary): handleStaticFunctionGet: function(checkLibrary)
+mirrors/invocation_fuzz_test/false: Crash # (checkLibrary): handleStaticFunctionGet: function(checkLibrary)
+mirrors/invocation_fuzz_test/none: Crash # (checkLibrary): handleStaticFunctionGet: function(checkLibrary)
+mirrors/invocation_fuzz_test/smi: Crash # (checkLibrary): handleStaticFunctionGet: function(checkLibrary)
+mirrors/invocation_fuzz_test/string: Crash # (checkLibrary): handleStaticFunctionGet: function(checkLibrary)
+mirrors/invoke_call_on_closure_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_call_through_getter_previously_accessed_test/named: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_call_through_getter_previously_accessed_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_call_through_getter_test/named: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_call_through_getter_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_call_through_implicit_getter_previously_accessed_test/named: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_call_through_implicit_getter_previously_accessed_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_call_through_implicit_getter_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_closurization2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_closurization_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_import_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_named_test/01: Crash # (a): handleStaticFunctionGet: function(a)
+mirrors/invoke_named_test/none: Crash # (a): handleStaticFunctionGet: function(a)
+mirrors/invoke_natives_malicious_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_private_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/invoke_private_wrong_library_test: Crash # (asyncSuccess): handleStaticFunctionGet: function(asyncSuccess)
+mirrors/invoke_test: Crash # (isNoSuchMethodError): handleStaticFunctionGet: function(isNoSuchMethodError)
+mirrors/invoke_throws_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/is_odd_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/lazy_static_test: Crash # unsupported element kind: hello:field
+mirrors/libraries_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/library_declarations_test/01: Crash # (stringify): handleStaticFunctionGet: function(stringify)
+mirrors/library_declarations_test/none: Crash # (stringify): handleStaticFunctionGet: function(stringify)
+mirrors/library_enumeration_deferred_loading_test: Crash # (other.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+mirrors/library_exports_hidden_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/library_exports_shown_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/library_import_deferred_loading_test: Crash # (other.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+mirrors/library_imports_bad_metadata_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/library_imports_bad_metadata_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/library_imports_deferred_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/library_imports_hidden_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/library_imports_metadata_test: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/library_imports_prefixed_show_hide_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/library_imports_prefixed_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/library_imports_shown_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/library_uri_package_test: Crash # (_defaultErrorFormatter): handleStaticFunctionGet: function(_defaultErrorFormatter)
+mirrors/list_constructor_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/list_constructor_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/load_library_test: Crash # (asyncSuccess): handleStaticFunctionGet: function(asyncSuccess)
+mirrors/local_function_is_static_test: Crash # (topLevel): handleStaticFunctionGet: function(topLevel)
+mirrors/local_isolate_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/metadata_allowed_values_test/01: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/02: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/03: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/04: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/05: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/06: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/07: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/08: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/09: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/10: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/11: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/13: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/14: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/15: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/16: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/23: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/24: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/25: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/26: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/27: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_allowed_values_test/none: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructed_constant_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/metadata_constructor_arguments_test/01: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructor_arguments_test/02: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructor_arguments_test/03: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructor_arguments_test/04: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructor_arguments_test/05: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructor_arguments_test/06: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructor_arguments_test/07: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_constructor_arguments_test/none: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/01: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/02: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/03: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/04: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/05: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/06: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/07: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/08: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/09: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/metadata_nested_constructor_call_test/none: Crash # (reflect): handleStaticFunctionGet: origin function(reflect)
+mirrors/method_mirror_location_test: Crash # (topLevelInMainFile): handleStaticFunctionGet: function(topLevelInMainFile)
+mirrors/method_mirror_name_test: Crash # (doNothing42): handleStaticFunctionGet: function(doNothing42)
+mirrors/method_mirror_properties_test: Crash # (doNothing42): handleStaticFunctionGet: function(doNothing42)
+mirrors/method_mirror_returntype_test: Crash # (intFunc): handleStaticFunctionGet: function(intFunc)
+mirrors/method_mirror_source_line_ending_test: Crash # (oneLineLF): handleStaticFunctionGet: function(oneLineLF)
+mirrors/method_mirror_source_test: Crash # Instance of 'TypeOperator': type casts not implemented.
 mirrors/mirror_in_static_init_test/01: Crash # unsupported element kind: staticField:field
 mirrors/mirror_in_static_init_test/none: Crash # unsupported element kind: staticField:field
-mirrors/mirrors_nsm_test/dart2js: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/mirrors_nsm_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mirrors_reader_test: Crash # (throw 'Unexpected errors occurred reading mirrors.'): Unhandled node
-mirrors/mirrors_resolve_fields_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mirrors_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mirrors_used_get_name2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mirrors_used_get_name_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mirrors_used_inheritance_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mirrors_used_typedef_declaration_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mirrors_used_typedef_declaration_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mixin_application_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/mixin_members_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/mixin_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/model_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/native_class_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/new_instance_optional_arguments_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/new_instance_with_type_arguments_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/no_metadata_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/null2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/null_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/operator_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/optional_parameters_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/parameter_annotation_mirror_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/parameter_is_const_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/parameter_is_const_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/parameter_metadata_test: Crash # (throw 'Null metadata on ${mirror}'): Unhandled node
-mirrors/parameter_of_mixin_app_constructor_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/parameter_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/parameter_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/private_symbol_mangling_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/private_symbol_test: Crash # cannot compile methods that need interceptor calling convention.
-mirrors/private_types_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/proxy_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/raw_type_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/raw_type_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/redirecting_factory_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/redirecting_factory_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/redirecting_factory_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflect_class_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflect_class_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflect_class_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_classes_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_classes_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_classes_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_classes_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_function_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_special_types_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_test/02: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_test/03: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_typedefs_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflected_type_typevars_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflectively_instantiate_uninstantiated_class_test: Crash #  "on T" catch block
-mirrors/reflect_model_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/reflect_two_classes_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/regress_14304_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/regress_19731_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/relation_assignable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/relation_subclass_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/relation_subtype_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/removed_api_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/repeated_private_anon_mixin_app_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/return_type_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/runtime_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/set_field_with_final_inheritance_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/set_field_with_final_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/spawn_function_root_library_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/static_members_easier_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/static_members_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/static_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/superclass2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/superclass_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/symbol_validation_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/symbol_validation_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/synthetic_accessor_properties_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/top_level_accessors_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/to_string_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/type_argument_is_type_variable_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/typearguments_mirror_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/typedef_deferred_library_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-mirrors/typedef_in_signature_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/typedef_library_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/typedef_metadata_test: Crash # (throw 'Null metadata on ${mirror}'): Unhandled node
-mirrors/typedef_reflected_type_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/typedef_reflected_type_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/typedef_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/type_mirror_for_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/type_variable_is_static_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/type_variable_owner_test/01: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/type_variable_owner_test/none: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/unmangled_type_test: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/unnamed_library_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-mirrors/variable_is_const_test/01: Crash # (throw new ExpectException(message)): Unhandled node
-mirrors/variable_is_const_test/none: Crash # (throw new ExpectException(message)): Unhandled node
-profiler/metrics_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-profiler/user_tags_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/byte_data_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/constructor_checks_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/endianness_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_clamp_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_cross_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_shuffle_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_sign_mask_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_transpose_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_two_arg_shuffle_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_unbox_phi_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float32x4_unbox_regress_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/float64x2_functional_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/int32x4_arithmetic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/int32x4_bigint_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/int32x4_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/int32x4_shuffle_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/int32x4_sign_mask_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/int32x4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/int64_list_load_store_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/setRange_1_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/setRange_2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/setRange_3_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/setRange_4_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/setRange_5_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/simd_store_to_load_forward_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/typed_data_hierarchy_int64_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/typed_data_hierarchy_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/typed_data_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/typed_data_load2_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/typed_data_sublist_type_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-typed_data/typed_list_iterable_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+mirrors/mirrors_nsm_test/dart2js: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/mirrors_nsm_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/mirrors_reader_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+mirrors/mirrors_resolve_fields_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/mirrors_test: Crash # Instance of 'TypeOperator': type check unimplemented for Class.
+mirrors/mirrors_used_inheritance_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/mixin_application_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/mixin_members_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/mixin_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/model_test: Crash # (isNoSuchMethodError): handleStaticFunctionGet: function(isNoSuchMethodError)
+mirrors/native_class_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/new_instance_with_type_arguments_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/no_metadata_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/null2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/null_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/operator_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/parameter_is_const_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/parameter_is_const_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/parameter_of_mixin_app_constructor_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/parameter_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/parameter_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/private_symbol_mangling_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/private_symbol_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/private_types_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/proxy_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/raw_type_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/raw_type_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/redirecting_factory_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for Class<String, int>.
+mirrors/redirecting_factory_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for Class<String, int>.
+mirrors/redirecting_factory_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for Class<String, int>.
+mirrors/reflect_class_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflect_class_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflect_class_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflect_model_test: Crash # (isNoSuchMethodError): handleStaticFunctionGet: function(isNoSuchMethodError)
+mirrors/reflected_type_classes_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_classes_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_classes_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_classes_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_function_type_test: Crash # (somePredicate): handleStaticFunctionGet: function(somePredicate)
+mirrors/reflected_type_special_types_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_test/02: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_test/03: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_typedefs_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/reflected_type_typevars_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/regress_14304_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/regress_19731_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/relation_assignable_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/relation_subclass_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/relation_subtype_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/removed_api_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/repeated_private_anon_mixin_app_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/return_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/set_field_with_final_inheritance_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/set_field_with_final_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/spawn_function_root_library_test: Crash # (child): handleStaticFunctionGet: function(child)
+mirrors/static_members_easier_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/static_members_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/static_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/superclass2_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/superclass_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/symbol_validation_test/01: Crash # (validSymbol): handleStaticFunctionGet: function(validSymbol)
+mirrors/symbol_validation_test/none: Crash # (validSymbol): handleStaticFunctionGet: function(validSymbol)
+mirrors/synthetic_accessor_properties_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/to_string_test: Crash # (main): handleStaticFunctionGet: function(main)
+mirrors/top_level_accessors_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/type_argument_is_type_variable_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/type_mirror_for_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for C<Type>.
+mirrors/type_variable_is_static_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/type_variable_owner_test/01: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/type_variable_owner_test/none: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/typearguments_mirror_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/typedef_deferred_library_test: Crash # (def.loadLibrary()): handleStaticGetterInvoke: foreign: function(loadLibrary)
+mirrors/typedef_reflected_type_test/01: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/typedef_reflected_type_test/none: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+mirrors/unnamed_library_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+mirrors/variable_is_const_test/01: Crash # Instance of 'TypeOperator': type casts not implemented.
+mirrors/variable_is_const_test/none: Crash # Instance of 'TypeOperator': type casts not implemented.
+profiler/metrics_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+profiler/user_tags_test: Crash # (testExhaust): handleStaticFunctionGet: function(testExhaust)
+typed_data/constructor_checks_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+typed_data/float32x4_list_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<Float32x4>.
+typed_data/float32x4_shuffle_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+typed_data/float32x4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+typed_data/int32x4_list_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<Int32x4>.
+typed_data/int32x4_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+typed_data/setRange_1_test: Crash # (makeInt16List): handleStaticFunctionGet: function(makeInt16List)
+typed_data/setRange_2_test: Crash # (makeInt16List): handleStaticFunctionGet: function(makeInt16List)
+typed_data/typed_data_hierarchy_int64_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+typed_data/typed_data_hierarchy_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<double>.
+typed_data/typed_data_list_test: Crash # Instance of 'TypeOperator': type check unimplemented for Map.
+typed_data/typed_data_sublist_type_test: Crash # Instance of 'TypeOperator': type check unimplemented for T.
+typed_data/typed_list_iterable_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
diff --git a/tests/lib/mirrors/invocation_fuzz_test.dart b/tests/lib/mirrors/invocation_fuzz_test.dart
index 4afd372..7a43d3cbb 100644
--- a/tests/lib/mirrors/invocation_fuzz_test.dart
+++ b/tests/lib/mirrors/invocation_fuzz_test.dart
@@ -26,6 +26,9 @@
   // Don't kill random other processes.
   'dart.io.Process.killPid',
 
+  // Don't break into the debugger.
+  'dart.developer.debugger',
+
   // Don't run blocking io calls.
   new RegExp(r".*Sync$"),
 
diff --git a/tests/standalone/io/http_100_continue.dart b/tests/standalone/io/http_100_continue.dart
new file mode 100644
index 0000000..96411ec
--- /dev/null
+++ b/tests/standalone/io/http_100_continue.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import 'dart:convert';
+import "dart:io";
+
+import "package:expect/expect.dart";
+
+void test(responseBytes, bodyLength) async {
+  fullRequest(bytes) {
+    var len = bytes.length;
+    return len > 4 &&
+           bytes[len - 4] == 13 &&
+           bytes[len - 3] == 10 &&
+           bytes[len - 2] == 13 &&
+           bytes[len - 1] == 10;
+  }
+
+  handleSocket(socket) async {
+    var bytes = [];
+    await for (var data in socket) {
+        bytes.addAll(data);
+        if (fullRequest(bytes)) {
+          socket.add(responseBytes);
+          socket.close();
+        }
+    }
+  }
+
+  var server = await ServerSocket.bind('127.0.0.1', 0);
+  server.listen(handleSocket);
+
+  var client = new HttpClient();
+  var request =
+      await client.getUrl(Uri.parse('http://127.0.0.1:${server.port}/'));
+  var response = await request.close();
+  Expect.equals(response.statusCode, 200);
+  Expect.equals(bodyLength,
+                (await response.fold([], (p, e) => p..addAll(e))).length);
+  server.close();
+}
+
+main() {
+  var r1 = '''
+HTTP/1.1 100 Continue\r
+\r
+HTTP/1.1 200 OK\r
+\r
+''';
+
+  var r2 = '''
+HTTP/1.1 100 Continue\r
+My-Header-1: hello\r
+My-Header-2: world\r
+\r
+HTTP/1.1 200 OK\r
+\r
+''';
+
+  var r3 = '''
+HTTP/1.1 100 Continue\r
+\r
+HTTP/1.1 200 OK\r
+Content-Length: 2\r
+\r
+AB''';
+
+  test(ASCII.encode(r1), 0);
+  test(ASCII.encode(r2), 0);
+  test(ASCII.encode(r3), 2);
+}
diff --git a/tests/standalone/io/web_socket_pipe_test.dart b/tests/standalone/io/web_socket_pipe_test.dart
index b487b74..5439e8a 100644
--- a/tests/standalone/io/web_socket_pipe_test.dart
+++ b/tests/standalone/io/web_socket_pipe_test.dart
@@ -40,7 +40,6 @@
         }
       }
 
-      next();
       client.listen(
           (data) {
             count++;
@@ -52,6 +51,8 @@
             next();
           },
           onDone: () => print("Client received close"));
+
+      next();
     });
   });
 }
diff --git a/tests/standalone/io/web_socket_test.dart b/tests/standalone/io/web_socket_test.dart
index 97059042..f3213e6 100644
--- a/tests/standalone/io/web_socket_test.dart
+++ b/tests/standalone/io/web_socket_test.dart
@@ -173,6 +173,36 @@
   }
 
 
+  void testCloseNoListen() {
+    createServer().then((server) {
+      server.transform(new WebSocketTransformer()).listen((webSocket) {
+        server.close();
+        webSocket.close();
+      });
+
+      createClient(server.port).then((webSocket) {
+        webSocket.close();
+      });
+    });
+  }
+
+
+  void testListenAfterClose() {
+    createServer().then((server) {
+      server.transform(new WebSocketTransformer()).listen((webSocket) {
+        server.close();
+        webSocket.close();
+        Expect.throws(() => webSocket.drain());
+      });
+
+      createClient(server.port).then((webSocket) {
+        webSocket.close();
+        Expect.throws(() => webSocket.drain());
+      });
+    });
+  }
+
+
   void testDoubleCloseClient() {
     createServer().then((server) {
       server.transform(new WebSocketTransformer()).listen((webSocket) {
@@ -208,10 +238,10 @@
       server.listen((request) {
         WebSocketTransformer.upgrade(request)
             .then((webSocket) {
-              webSocket.close();
               webSocket.listen(
                   (_) { Expect.fail("Unexpected message"); },
                   onDone: server.close);
+              webSocket.close();
             });
       });
 
@@ -239,10 +269,10 @@
       });
 
       createClient(server.port).then((webSocket) {
-          webSocket.close();
           webSocket.listen(
               (_) { Expect.fail("Unexpected message"); },
               onDone: webSocket.close);
+          webSocket.close();
         });
     });
   }
@@ -512,6 +542,8 @@
     testMessageLength(127);
     testMessageLength(65535);
     testMessageLength(65536);
+    testCloseNoListen();
+    testListenAfterClose();
     testDoubleCloseClient();
     testDoubleCloseServer();
     testImmediateCloseServer();
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index b2e91a8..5518c1d 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -107,10 +107,6 @@
 [ $compiler == dart2js && $browser ]
 *: Skip
 
-[ $compiler == dart2dart ]
-# Skip until we stabilize language tests.
-*: Skip
-
 [ $arch == simarm || $arch == simarmv5te || $arch == simmips]
 out_of_memory_test: Skip # passes on Mac, crashes on Linux
 oom_error_stacktrace_test: Skip # Fails on Linux
@@ -169,217 +165,107 @@
 io/http_client_stays_alive_test: Skip  # Timeout.
 
 [ $compiler == dart2js && $cps_ir ]
-array_bounds_check_generalization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-assert_test: Crash #  "on T" catch block
-byte_array_view_optimized_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-constant_left_shift_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-coverage_test: Crash # unsupported element kind: context:field
-deoptimization_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_temp_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-double_to_int_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-int_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/addlatexhash_test: Crash # (try {test(tempDir.path);}finally {tempDir.delete(recursive:true);}): not exactly one catch block
-io/async_catch_errors_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/code_collection_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/create_recursive_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/dart_std_io_pipe_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/delete_symlink_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+array_bounds_check_generalization_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+constant_left_shift_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+coverage_test: Crash # (onCoverageOutput): handleStaticFunctionGet: function(onCoverageOutput)
+io/addlatexhash_test: Crash # (testSameHash): handleStaticFunctionGet: function(testSameHash)
+io/async_catch_errors_test: Crash # unsupported element kind: events:field
+io/create_recursive_test: Crash # unsupported element kind: context:field
 io/dependency_graph_test: Crash # unsupported element kind: UnableToRun:field
-io/directory_chdir_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/directory_create_race_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/directory_error_test: Crash #  Unhandled node
-io/directory_fuzz_test: Crash # Please triage this failure.
-io/directory_invalid_arguments_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/directory_list_nonexistent_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+io/directory_chdir_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/directory_error_test: Crash # (testCreateInNonExistent): handleStaticFunctionGet: function(testCreateInNonExistent)
+io/directory_fuzz_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/directory_invalid_arguments_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/directory_list_nonexistent_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 io/directory_list_pause_test: Crash # Please triage this failure.
-io/directory_non_ascii_sync_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/directory_non_ascii_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/directory_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/directory_uri_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/echo_server_stream_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/file_absolute_path_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/file_constructor_test: Crash #  "on T" catch block
-io/file_copy_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_error_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_fuzz_test: Crash # Please triage this failure.
-io/file_input_stream_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/file_invalid_arguments_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_lock_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_non_ascii_sync_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/file_non_ascii_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/file_output_stream_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_read_encoded_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/file_read_special_device_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/file_stat_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_stream_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_system_async_links_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_system_delete_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/file_system_exists_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/file_system_links_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/file_system_uri_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+io/directory_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/directory_uri_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/echo_server_stream_test: Crash # (startEchoServer): handleStaticFunctionGet: function(startEchoServer)
+io/file_copy_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/file_error_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/file_invalid_arguments_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/file_lock_test: Crash # unsupported element kind: context:field
+io/file_read_encoded_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/file_stat_test: Crash # unsupported element kind: context:field
+io/file_system_delete_test: Crash # (Expect.isFalse): handleStaticFunctionGet: function(Expect#isFalse)
+io/file_system_exists_test: Crash # (Expect.isTrue): handleStaticFunctionGet: function(Expect#isTrue)
+io/file_system_links_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 io/file_system_watcher_test: Crash # unsupported element kind: context:field
-io/file_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+io/file_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 io/file_typed_data_test: Crash # Please triage this failure.
-io/file_uri_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/file_windows_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/file_write_as_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/http_10_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_advanced_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_auth_digest_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_auth_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_basic_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+io/file_uri_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/http_advanced_test: Crash # (startIsolatedHttpServer): handleStaticFunctionGet: function(startIsolatedHttpServer)
+io/http_basic_test: Crash # (startTestServer): handleStaticFunctionGet: function(startTestServer)
 io/http_bind_test: Crash #  cannot handle async/sync*/async* functions
-io/http_client_connect_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/http_client_exception_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_client_request_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_close_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_compression_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_connection_header_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_connection_info_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_content_length_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_cookie_date_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_cookie_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_cross_process_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_date_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_detach_socket_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_head_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_headers_state_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_headers_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_ipv6_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_keep_alive_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_no_reason_phrase_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_outgoing_size_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_parser_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_proxy_configuration_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+io/http_client_exception_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/http_content_length_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/http_cookie_date_test: Crash # Please triage this failure.
+io/http_date_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/http_detach_socket_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/http_headers_state_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/http_headers_test: Crash # Instance of 'TypeOperator': type check unimplemented for Iterable.
+io/http_parser_test: Crash #  Unhandled node
 io/http_proxy_test: Crash # Please triage this failure.
-io/http_read_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_redirect_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_request_pipeling_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_requested_uri_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/http_response_deadline_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_server_early_client_close_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_server_response_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/http_server_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/http_session_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/https_bad_certificate_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/https_client_certificate_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/https_client_exception_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/https_server_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/https_unauthorized_test: Crash # (throw e): Unhandled node
-io/internet_address_invalid_arguments_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/internet_address_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/io_sink_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+io/http_read_test: Crash # (startIsolatedHttpServer): handleStaticFunctionGet: function(startIsolatedHttpServer)
+io/http_server_early_client_close_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
+io/http_server_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/https_bad_certificate_test: Crash #  cannot handle async/sync*/async* functions
+io/https_server_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/internet_address_invalid_arguments_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/internet_address_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 io/issue_22636_test: Crash #  cannot handle async/sync*/async* functions
 io/issue_22637_test: Crash #  cannot handle async/sync*/async* functions
-io/link_async_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/link_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/link_uri_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/network_interface_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/observatory_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/parent_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/pipe_server_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/platform_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/print_sync_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_check_arguments_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_detached_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_environment_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_exit_negative_test: Crash # (a): Error expression `a` unhandled.
-io/process_exit_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_invalid_arguments_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/process_kill_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/process_non_ascii_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/process_path_environment_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_path_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_pid_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/process_run_output_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/process_run_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_segfault_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_set_exit_code_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_start_exception_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_stderr_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_stdin_transform_unsubscribe_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_stdout_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_sync_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/process_working_directory_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/raw_datagram_read_all_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+io/link_async_test: Crash # (testCreateLoopingLink): handleStaticFunctionGet: function(testCreateLoopingLink)
+io/link_test: Crash # unsupported element kind: context:field
+io/link_uri_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/observatory_test: Crash # (asyncSuccess): handleStaticFunctionGet: function(asyncSuccess)
+io/parent_test: Crash # (testObjects): handleStaticFunctionGet: function(testObjects)
+io/pipe_server_test: Crash # (startPipeServer): handleStaticFunctionGet: function(startPipeServer)
+io/platform_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/process_invalid_arguments_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/process_run_test: Crash # Instance of 'TypeOperator': type check unimplemented for List<int>.
 io/raw_datagram_socket_test: Crash #  Unhandled node
-io/raw_secure_server_closing_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/raw_secure_server_socket_argument_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/raw_secure_server_socket_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+io/raw_secure_server_closing_test: Crash # Please triage this failure.
+io/raw_secure_server_socket_argument_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/raw_secure_server_socket_test: Crash # Please triage this failure.
 io/raw_secure_socket_pause_test: Crash #  Unhandled node
 io/raw_secure_socket_test: Crash #  Unhandled node
-io/raw_server_socket_cancel_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/raw_socket_cross_process_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/raw_socket_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+io/raw_server_socket_cancel_test: Crash #  Unhandled node
+io/raw_socket_cross_process_test: Crash #  Unhandled node
+io/raw_socket_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
 io/raw_socket_typed_data_test: Crash # Please triage this failure.
-io/raw_socket_write_destroy_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/read_into_const_list_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/regress_10026_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
 io/regress_21160_test: Crash #  Unhandled node
-io/regress_21987_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/regress_7679_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/regress_8828_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/regress_9194_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/resolve_symbolic_links_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_bad_certificate_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/secure_builtin_roots_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/secure_client_raw_server_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_client_server_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_multiple_client_server_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_server_client_certificate_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_server_client_no_certificate_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_server_closing_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_server_socket_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_session_resume_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_socket_alpn_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_socket_argument_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/secure_socket_bad_data_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/secure_socket_renegotiate_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/secure_socket_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/secure_unauthorized_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/signals_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+io/resolve_symbolic_links_test: Crash # (asyncSuccess): handleStaticFunctionGet: function(asyncSuccess)
+io/secure_client_raw_server_test: Crash # (testClient): handleStaticFunctionGet: function(testClient)
+io/secure_client_server_test: Crash # (testClient): handleStaticFunctionGet: function(testClient)
+io/secure_multiple_client_server_test: Crash # (testClient): handleStaticFunctionGet: function(testClient)
+io/secure_server_closing_test: Crash # Please triage this failure.
+io/secure_server_socket_test: Crash # Please triage this failure.
+io/secure_socket_alpn_test: Crash # Instance of 'TypeOperator': type casts not implemented.
+io/secure_socket_argument_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/secure_socket_bad_data_test: Crash # (runClient): handleStaticFunctionGet: function(runClient)
 io/skipping_dart2js_compilations_test: Crash # unsupported element kind: currentWorkingDirectory:field
-io/sleep_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/snapshot_fail_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/socket_bind_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/socket_close_test: Crash #  Unhandled node
-io/socket_cross_process_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/socket_exception_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/socket_info_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/socket_invalid_arguments_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/socket_ipv6_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/socket_many_connections_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/socket_port_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/socket_source_address_test: Crash #  cannot handle async/sync*/async* functions
-io/socket_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/socket_upgrade_to_secure_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/status_file_parser_test: Crash # (throw new Exception('Cannot find test status file ${path}')): Unhandled node
-io/stdio_nonblocking_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/stdout_bad_argument_test: Crash # handleStaticFunctionGet: function(print)
-io/stdout_close_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/stdout_stderr_non_blocking_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/stdout_stderr_terminal_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/stdout_stderr_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/stream_pipe_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/test_extension_fail_test: Crash # (throw new StateError("bad exit code")): Unhandled node
-io/test_extension_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+io/sleep_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/socket_bind_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+io/socket_close_test: Crash # (asyncEnd): handleStaticFunctionGet: function(asyncEnd)
+io/socket_exception_test: Crash # Please triage this failure.
+io/socket_many_connections_test: Crash # (startTestServer): handleStaticFunctionGet: function(startTestServer)
+io/socket_source_address_test: Crash # (RawSocket.connect): handleStaticFunctionGet: origin function(RawSocket#connect)
+io/socket_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/socket_upgrade_to_secure_test: Crash # Please triage this failure.
+io/status_file_parser_test: Crash # unsupported element kind: IssueNumberPattern:field
+io/stdout_bad_argument_test: Crash # (print): handleStaticFunctionGet: function(print)
+io/stdout_stderr_terminal_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/test_extension_fail_test: Crash # unsupported element kind: context:field
+io/test_extension_test: Crash # unsupported element kind: context:field
 io/test_runner_test: Crash #  Unhandled node
-io/uri_platform_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/web_socket_error_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/web_socket_ping_test: Crash # (throw new StateError('Hash update method called after digest was retrieved')): Unhandled node
-io/web_socket_pipe_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/web_socket_protocol_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/web_socket_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/web_socket_typed_data_test: Crash # (throw new ExpectException(message)): Unhandled node
-io/windows_environment_test: Crash # (throw "Exit code not 0"): Unhandled node
-io/windows_file_system_async_links_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-io/windows_file_system_links_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-io/zlib_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-medium_integer_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-oom_error_stacktrace_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
-out_of_memory_test: Crash #  "on T" catch block
-priority_queue_stress_test: Crash # cannot compile methods that need interceptor calling convention.
-slowpath_safepoints_test: Crash # handleStaticFunctionGet: function(noop)
-status_expression_test: Crash # (throw new ExpectException(message)): Unhandled node
-typed_array_test: Crash # Instance of 'TypeOperator': unimplemented in CodeGenerator
+io/uri_platform_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/web_socket_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/windows_environment_test: Crash # unsupported element kind: context:field
+io/windows_file_system_links_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+io/zlib_test: Crash # Instance of 'TypeOperator': type check unimplemented for _Nullary.
+priority_queue_stress_test: RuntimeError # Please triage this failure.
+slowpath_safepoints_test: Crash # (noop): handleStaticFunctionGet: function(noop)
+status_expression_test: Crash # unsupported element kind: regexp:field
+typed_array_test: Crash # (float64_sender): handleStaticFunctionGet: function(float64_sender)
 verified_mem_test: Crash # unsupported element kind: a:field
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index 25aefd7..ba281b8 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -28,11 +28,7 @@
 recursive_import_test: Pass, RuntimeError # Issue 17662
 source_mirrors_test: Pass, RuntimeError # Issue 17662
 
-[ $compiler == dart2dart && $builder_tag != new_backend ]
-source_mirrors_test: Slow, Pass
-dummy_compiler_test: Slow, Pass
-
 [ $compiler == dart2js && $cps_ir ]
-dummy_compiler_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-recursive_import_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
-source_mirrors_test: Crash # (throw _buildException('asyncEnd() was called before asyncStart().')): Unhandled node
+dummy_compiler_test: Crash # (provider): handleStaticFunctionGet: function(provider)
+recursive_import_test: Crash # (asyncSuccess): handleStaticFunctionGet: function(asyncSuccess)
+source_mirrors_test: Crash # (provider): handleStaticFunctionGet: function(provider)
diff --git a/tools/FAKE_COMMITS b/tools/FAKE_COMMITS
index 9645a59..ef8c59f 100644
--- a/tools/FAKE_COMMITS
+++ b/tools/FAKE_COMMITS
@@ -10,3 +10,4 @@
 CIT outage
 Testing update steps
 Testing bots after GOLO <> gcs failures
+Trigger bots after github outage
diff --git a/tools/VERSION b/tools/VERSION
index 7a0a147..72681a8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 11
 PATCH 0
-PRERELEASE 0
-PRERELEASE_PATCH 1
+PRERELEASE 1
+PRERELEASE_PATCH 0
diff --git a/tools/bots/bot.py b/tools/bots/bot.py
index 550cb47..0015f47 100644
--- a/tools/bots/bot.py
+++ b/tools/bots/bot.py
@@ -25,7 +25,7 @@
   """
   Encapsulation of build information.
 
-  - compiler: None, 'dart2dart' or 'dart2js'
+  - compiler: None or 'dart2js'
   - runtime: 'd8', 'ie', 'ff', 'safari', 'chrome', 'opera', or None.
   - mode: 'debug' or 'release'.
   - system: 'linux', 'mac', or 'win7'.
diff --git a/tools/bots/dart_sdk.py b/tools/bots/dart_sdk.py
new file mode 100644
index 0000000..b2a3b06
--- /dev/null
+++ b/tools/bots/dart_sdk.py
@@ -0,0 +1,177 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import os.path
+import shutil
+import sys
+
+import bot
+import bot_utils
+
+utils = bot_utils.GetUtils()
+
+BUILD_OS = utils.GuessOS()
+
+(bot_name, _) = bot.GetBotName()
+CHANNEL = bot_utils.GetChannelFromName(bot_name)
+
+def BuildSDK():
+  with bot.BuildStep('Build SDK'):
+    Run([sys.executable, './tools/build.py', '--mode=release',
+         '--arch=ia32,x64', 'create_sdk'])
+
+def BuildAPIDocs():
+  with bot.BuildStep('Build API docs'):
+    Run([sys.executable, './tools/build.py', '--mode=release',
+         '--arch=ia32', 'api_docs'])
+    Run([sys.executable, './tools/build.py', '--mode=release',
+         '--arch=ia32', 'dartdocgen'])
+
+def CreateUploadSDKZips():
+  with bot.BuildStep('Create and upload sdk zips'):
+    sdk32_path = os.path.join(bot_utils.DART_DIR,
+                              utils.GetBuildRoot(BUILD_OS, 'release', 'ia32'),
+                              'dart-sdk')
+    sdk64_path = os.path.join(bot_utils.DART_DIR,
+                              utils.GetBuildRoot(BUILD_OS, 'release', 'x64'),
+                              'dart-sdk')
+
+    sdk32_zip = os.path.join(bot_utils.DART_DIR,
+                             utils.GetBuildRoot(BUILD_OS, 'release', 'ia32'),
+                             'dartsdk-%s-32.zip' % BUILD_OS)
+    sdk64_zip = os.path.join(bot_utils.DART_DIR,
+                             utils.GetBuildRoot(BUILD_OS, 'release', 'x64'),
+                             'dartsdk-%s-64.zip' % BUILD_OS)
+    FileDelete(sdk32_zip)
+    FileDelete(sdk64_zip)
+    CreateZip(sdk32_path, sdk32_zip)
+    CreateZip(sdk64_path, sdk64_zip)
+    DartArchiveUploadSDKs(BUILD_OS, sdk32_zip, sdk64_zip)
+
+def DartArchiveUploadSDKs(system, sdk32_zip, sdk64_zip):
+  namer = bot_utils.GCSNamer(CHANNEL, bot_utils.ReleaseType.RAW)
+  revision = utils.GetSVNRevision()
+  for revision in [revision, 'latest']:
+    path32 = namer.sdk_zipfilepath(revision, system, 'ia32', 'release')
+    path64 = namer.sdk_zipfilepath(revision, system, 'x64', 'release')
+    DartArchiveFile(sdk32_zip, path32, checksum_files=True)
+    DartArchiveFile(sdk64_zip, path64, checksum_files=True)
+
+def CreateUploadSDK():
+  BuildSDK()
+  CreateUploadSDKZips()
+
+def CreateUploadAPIDocs():
+  api_path = os.path.join(bot_utils.DART_DIR,
+                          utils.GetBuildRoot(BUILD_OS, 'release', 'ia32'),
+                          'api_docs')
+  api_zip = os.path.join(bot_utils.DART_DIR,
+                         utils.GetBuildRoot(BUILD_OS, 'release', 'ia32'),
+                         'dart-api-docs.zip')
+  shutil.rmtree(api_path, ignore_errors=True)
+  FileDelete(api_zip)
+  BuildAPIDocs()
+  UploadApiDocs(api_path)
+  CreateZip(api_path, api_zip)
+  DartArchiveUploadAPIDocs(api_zip)
+
+def DartArchiveUploadAPIDocs(api_zip):
+  namer = bot_utils.GCSNamer(CHANNEL, bot_utils.ReleaseType.RAW)
+  revision = utils.GetSVNRevision()
+  for revision in [revision, 'latest']:
+    destination = (namer.apidocs_directory(revision) + '/' +
+        namer.apidocs_zipfilename())
+    DartArchiveFile(api_zip, destination, checksum_files=False)
+
+def UploadApiDocs(dir_name):
+  apidocs_namer = bot_utils.GCSNamerApiDocs(CHANNEL)
+  revision = utils.GetSVNRevision()
+  apidocs_destination_gcsdir = apidocs_namer.docs_dirpath(revision)
+  apidocs_destination_latestfile = apidocs_namer.docs_latestpath(revision)
+
+  # Return early if the documents have already been uploaded.
+  # (This can happen if a build was forced, or a commit had no changes in the
+  # dart repository (e.g. DEPS file update).)
+  if GsutilExists(apidocs_destination_gcsdir):
+    print ("Not uploading api docs, since %s is already present."
+           % apidocs_destination_gcsdir)
+    return
+
+  # Upload everything inside the built apidocs directory.
+  gsutil = bot_utils.GSUtil()
+  gsutil.upload(dir_name, apidocs_destination_gcsdir, recursive=True,
+                public=True)
+
+  # Update latest.txt to contain the newest revision.
+  with utils.TempDir('latest_file') as temp_dir:
+    latest_file = os.path.join(temp_dir, 'latest.txt')
+    with open(latest_file, 'w') as f:
+      f.write('%s' % revision)
+    DartArchiveFile(latest_file, apidocs_destination_latestfile)
+
+def GsutilExists(gsu_path):
+  # This is a little hackish, but it is basically a one off doing very
+  # specialized check that we don't use elsewhere.
+  gsutilTool = os.path.join(bot_utils.DART_DIR,
+                            'third_party', 'gsutil', 'gsutil')
+  (_, stderr, returncode) = bot_utils.run(
+      [gsutilTool, 'ls', gsu_path],
+      throw_on_error=False)
+  # If the returncode is nonzero and we can find a specific error message,
+  # we know there are no objects with a prefix of [gsu_path].
+  missing = (returncode and 'CommandException: No such object' in stderr)
+  # Either the returncode has to be zero or the object must be missing,
+  # otherwise throw an exception.
+  if not missing and returncode:
+    raise Exception("Failed to determine whether %s exists" % gsu_path)
+  return not missing
+
+
+def CreateZip(directory, target_file):
+  if 'win' in BUILD_OS:
+    CreateZipWindows(directory, target_file)
+  else:
+    CreateZipPosix(directory, target_file)
+
+def CreateZipPosix(directory, target_file):
+  with utils.ChangedWorkingDirectory(os.path.dirname(directory)):
+    command = ['zip', '-yrq9', target_file, os.path.basename(directory)]
+    Run(command)
+
+def CreateZipWindows(directory, target_file):
+  with utils.ChangedWorkingDirectory(os.path.dirname(directory)):
+    zip_win = os.path.join(bot_utils.DART_DIR, 'third_party', '7zip', '7za')
+    command = [zip_win, 'a', '-tzip', target_file, os.path.basename(directory)]
+    Run(command)
+
+def FileDelete(f):
+  if os.path.exists(f):
+    os.remove(f)
+
+def DartArchiveFile(local_path, remote_path, checksum_files=False):
+  gsutil = bot_utils.GSUtil()
+  gsutil.upload(local_path, remote_path, public=True)
+  if checksum_files:
+    # 'local_path' may have a different filename than 'remote_path'. So we need
+    # to make sure the *.md5sum file contains the correct name.
+    assert '/' in remote_path and not remote_path.endswith('/')
+
+    mangled_filename = remote_path[remote_path.rfind('/') + 1:]
+    local_md5sum = bot_utils.CreateMD5ChecksumFile(local_path,
+                                                   mangled_filename)
+    gsutil.upload(local_md5sum, remote_path + '.md5sum', public=True)
+    local_sha256 = bot_utils.CreateSha256ChecksumFile(local_path,
+                                                      mangled_filename)
+    gsutil.upload(local_sha256, remote_path + '.sha256sum', public=True)
+
+def Run(command):
+  print "Running %s" % ' '.join(command)
+  return bot.RunProcess(command)
+
+if __name__ == '__main__':
+  CreateUploadSDK()
+  if BUILD_OS == 'linux':
+    CreateUploadAPIDocs()
diff --git a/tools/bots/functional_testing.py b/tools/bots/functional_testing.py
deleted file mode 100644
index 9b06ba5..0000000
--- a/tools/bots/functional_testing.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""
-Buildbot steps for functional testing master and slaves
-"""
-
-import os
-import os.path
-import re
-import shutil
-import subprocess
-import sys
-
-import bot
-import bot_utils
-
-utils = bot_utils.GetUtils()
-
-FT_BUILDER = r'ft-slave-(linux|mac)'
-FT_MASTER = r'ft-master'
-
-HOST_OS = utils.GuessOS()
-
-def IsWindows():
-  return HOST_OS == 'win32'
-
-def SrcConfig(name, is_buildbot):
-  """Returns info for the current buildbot based on the name of the builder.
-
-  - mode: always "release"
-  - system: always "linux" or "mac"
-  """
-  pattern = re.match(FT_BUILDER, name)
-  master_pattern = re.match(FT_MASTER, name)
-  if not pattern and not master_pattern:
-    return None
-  if master_pattern:
-    tag = 'master'
-    system = 'linux'
-  else:
-    tag = 'slave'
-    system = pattern.group(1)
-  return bot.BuildInfo('none', 'none', 'release', system,
-                       builder_tag=tag)
-
-def Run(args):
-  print "Running: %s" % ' '.join(args)
-  sys.stdout.flush()
-  bot.RunProcess(args)
-
-def FTSlave(config):
-
-  # Run SWTBot tests
-  if len(sys.argv) > 0:
-    scriptdir = os.path.dirname(sys.argv[0])
-    builddir = os.path.join(scriptdir, '..', '..', 'editor', 'build')
-    testScript = os.path.join(builddir, 'testswteditor.py')
-    cmd = [sys.executable, testScript]
-    try:
-      subprocess.call(cmd, shell=IsWindows())
-    except:
-      pass
-
-  # Prepare to run EggPlant tests
-  with bot.BuildStep('Fetching editor'):
-    revision = int(os.environ['BUILDBOT_GOT_REVISION'])
-    bot_name, _ = bot.GetBotName()
-    print bot_name
-    channel = bot_utils.GetChannelFromName(bot_name)
-    namer = bot_utils.GCSNamer(channel=channel)
-    system = config.system
-    if system == 'mac':
-      system = 'macos'
-    editor_path = namer.editor_zipfilepath(revision, system, 'x64')
-    gsutils = bot_utils.GSUtil()
-    editor_location='/home/chrome-bot/Desktop'
-    if system == 'macos':
-      editor_location='/Users/chrome-bot/Desktop'
-    local_path = os.path.join(editor_location, 'editor.zip')
-    if os.path.exists(local_path):
-      os.remove(local_path)
-    local_extracted = os.path.join(editor_location, 'dart')
-    shutil.rmtree(local_extracted, ignore_errors=True)
-    gsutils.execute(['cp', editor_path, local_path])
-    Run(['unzip', local_path, '-d', editor_location])
-
-def FTMaster(config):
-  run = int(os.environ['BUILDBOT_ANNOTATED_STEPS_RUN'])
-  with bot.BuildStep('Master run %s' % run):
-    if run == 1:
-      print 'Not doing anything on master before the triggers'
-      return
-    else:
-      builddir = os.path.join(bot_utils.DART_DIR,
-                              utils.GetBuildDir(HOST_OS),
-                              'functional_testing')
-      shutil.rmtree(builddir, ignore_errors=True)
-      os.makedirs(builddir)
-      script_locations = os.path.join(bot_utils.DART_DIR, 'editor', 'ft')
-      Run(['/home/chrome-bot/func-test/bot-run', builddir, script_locations])
-      #TODO Copy builddir to shared storage somewhere.
-
-def FTSteps(config):
-  if config.builder_tag == 'master':
-    FTMaster(config)
-  else:
-    FTSlave(config)
-
-if __name__ == '__main__':
-  bot.RunBot(SrcConfig, FTSteps, build_step=None)
diff --git a/tools/compiler_scripts/dart_analyzer.sh b/tools/compiler_scripts/dart_analyzer.sh
deleted file mode 100644
index c07f5bc..0000000
--- a/tools/compiler_scripts/dart_analyzer.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash --posix
-# Copyright (c) 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.
-
-set -e
-
-# Setting SCRIPT_DIR this way is ugly, but is needed to handle the case where
-# dart-sdk/bin has been symlinked to. On MacOS, readlink doesn't work
-# with this case.
-SCRIPT_DIR="$(cd "${0%/*}" ; pwd -P)"
-DART_ANALYZER_HOME="$(cd "${SCRIPT_DIR%/*}" ; pwd -P)"
-
-FOUND_BATCH=0
-FOUND_SDK=0
-for ARG in "$@"
-do
-  case $ARG in
-    -batch|--batch)
-      FOUND_BATCH=1
-      ;;
-    --dart-sdk)
-      FOUND_SDK=1
-      ;;
-    *)
-      ;;
-  esac
-done
-
-DART_SDK=""
-if [ $FOUND_SDK = 0 ] ; then
-  if [ -f $DART_ANALYZER_HOME/lib/core/core.dart ] ; then
-    DART_SDK="--dart-sdk $DART_ANALYZER_HOME"
-  else
-    DART_SDK_HOME=$(dirname $DART_ANALYZER_HOME)/dart-sdk
-    if [ -d $DART_SDK_HOME ] ; then
-      DART_SDK="--dart-sdk $DART_SDK_HOME"
-    else
-      DART_SDK_HOME=$(dirname $DART_SDK_HOME)/dart-sdk
-      if [ -d $DART_SDK_HOME ] ; then
-        DART_SDK="--dart-sdk $DART_SDK_HOME"
-      else
-        echo "Couldn't find Dart SDK. Specify with --dart-sdk cmdline argument"
-      fi
-    fi
-  fi
-fi
-
-if [ -f $DART_SDK_HOME/util/analyzer/dart_analyzer.jar ] ; then
-  DART_ANALYZER_LIBS=$DART_SDK_HOME/util/analyzer
-elif [ -f $DART_ANALYZER_HOME/util/analyzer/dart_analyzer.jar ] ; then
-  DART_ANALYZER_LIBS=$DART_ANALYZER_HOME/util/analyzer
-else
-  echo "Configuration problem. Couldn't find dart_analyzer.jar."
-  exit 1
-fi
-
-if [ -x /usr/libexec/java_home ]; then
-  export JAVA_HOME=$(/usr/libexec/java_home -v '1.6+')
-fi
-
-EXTRA_JVMARGS="-Xss2M "
-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.
-  EXTRA_JVMARGS+=" -Xmx256M -client "
-else
-  # On other architectures
-  # -batch invocations will do better with a server vm
-  # invocations for analyzing a single file do better with a client vm
-  if [ $FOUND_BATCH = 0 ] ; then
-    EXTRA_JVMARGS+=" -client "
-  fi
-fi
-
-exec java $EXTRA_JVMARGS $DART_JVMARGS -ea -classpath "@CLASSPATH@" \
-  com.google.dart.compiler.DartCompiler ${DART_SDK} $@
diff --git a/tools/compiler_scripts/generate_my_projects.py b/tools/compiler_scripts/generate_my_projects.py
deleted file mode 100644
index cc41bf3..0000000
--- a/tools/compiler_scripts/generate_my_projects.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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 os
-import sys
-
-
-def Main():
-  def normjoin(*args):
-    return os.path.normpath(os.path.join(*args))
-
-  dart_dir = normjoin(__file__, '..', '..', '..')
-  compiler_scripts = normjoin(dart_dir, 'tools', 'compiler_scripts')
-  editor = normjoin(dart_dir, 'editor')
-
-  locations = {
-    'compiler_scripts': compiler_scripts,
-    'editor': editor,
-  }
-
-  generate_source_list_calls = [
-    # The paths are relative to dart/editor/
-    {
-        "name" : "plugin_engine_java",
-        "output" : "%(editor)s/plugin_engine_sources" % locations,
-        "path" : "tools/plugins/com.google.dart.engine",
-    },
-    {
-        "name" : "plugin_command_analyze_java",
-        "output" : "%(editor)s/plugin_command_analyze_sources" % locations,
-        "path" : "tools/plugins/com.google.dart.command.analyze",
-    },
-  ]
-
-  for call_options in generate_source_list_calls:
-    command = (("python %(compiler_scripts)s/generate_source_list.py "
-                % locations) +
-               ("%(name)s %(output)s %(path)s" % call_options))
-    exit_code = os.system(command)
-    if exit_code:
-      return exit_code
-
-  if '--no-gyp' in sys.argv:
-    print '--no-gyp is deprecated.'
-
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(Main())
diff --git a/tools/compiler_scripts/generate_source_list.py b/tools/compiler_scripts/generate_source_list.py
deleted file mode 100644
index 2966d40..0000000
--- a/tools/compiler_scripts/generate_source_list.py
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-from __future__ import with_statement
-import StringIO
-import os
-import sys
-
-class GenerateError(Exception):
-
-  def __init__(self, value):
-    self.value = value
-
-  def __str__(self):
-    return repr(self.value)
-
-
-class Generator:
-
-  def __init__(self, base_directory, name, output, path, *excludes):
-    self.base_directory = base_directory
-    self.name = name
-    self.output = output
-    self.path = path
-    self.excludes = set()
-    for x in excludes:
-      self.excludes.add(x)
-    self.sources = []
-    self.resources = []
-
-  def _list_files(self):
-    start_directory = os.path.join(self.base_directory, self.path)
-    for fullpath, dirs, filenames in os.walk(start_directory):
-      path = fullpath[len(start_directory) + 1:]
-      remove_me = [d for d in dirs if d.startswith('.') or
-          d == 'CVS' or
-          (d in self.excludes)]
-      for d in remove_me:
-        dirs.remove(d)
-      for filename in filenames:
-        if (filename.endswith('.java')):
-          self.sources.append(os.path.join(path, filename))
-        elif (filename.endswith('~')):
-          pass
-        elif (filename.endswith('.pyc')):
-          pass
-        else:
-          self.resources.append(os.path.join(path, filename))
-    self.sources.sort()
-    self.resources.sort()
-
-  def _print_gypi_files(self, out, name, files):
-    out.write("    '%s': [\n" % name)
-    for filename in files:
-      out.write('''      r'%s/%s',%s''' % (self.path, filename,'\n'))
-    out.write("    ],\n")
-
-  def _print_txt_files(self, out, files):
-    for filename in files:
-      out.write('%s\n' % os.path.join(self.path, filename))
-
-  def _print_ant_files(self, out, name, files):
-    out.write("  <filelist id='%s' dir='%s'>\n" % (name, self.path))
-    for filename in files:
-      out.write("    <file name='%s'/>\n" % filename)
-    out.write("  </filelist>\n")
-    out.write("  <pathconvert pathsep=',' property='%s' refid='%s'>\n"
-              % (name, name))
-    out.write("    <map from='${basedir}/%s/' to=''/>\n" % self.path)
-    out.write("  </pathconvert>\n")
-
-  def _make_output(self, file_name):
-    if os.path.exists(file_name):
-      return StringIO.StringIO()
-    else:
-      return file(file_name, 'w')
-
-  def _close(self, file_name, output):
-    if not isinstance(output, StringIO.StringIO):
-      output.close()
-      return
-    new_text = output.getvalue()
-    output.close()
-    with open(file_name, 'r') as f:
-      old_text = f.read()
-    if old_text == new_text:
-      return
-    sys.stderr.write('Updating %s\n' % file_name)
-    with open(file_name, 'w') as f:
-      f.write(new_text)
-
-  def generate(self):
-    self._list_files()
-
-    file_name = self.output + '.gypi'
-    gypi = self._make_output(file_name)
-    gypi.write("{\n  'variables': {\n")
-    self._print_gypi_files(gypi, self.name + '_sources', self.sources)
-    self._print_gypi_files(gypi, self.name + '_resources', self.resources)
-    gypi.write("  },\n}\n")
-    self._close(file_name, gypi)
-
-    file_name = self.output + '.xml'
-    ant = self._make_output(file_name)
-    ant.write("<project>\n")
-    self._print_ant_files(ant, self.name + '_sources', self.sources)
-    self._print_ant_files(ant, self.name + '_resources', self.resources)
-    ant.write("</project>\n")
-    self._close(file_name, ant)
-
-    file_name = self.output + '.txt'
-    txt = self._make_output(file_name)
-    self._print_txt_files(txt, self.sources)
-    self._close(file_name, txt)
-
-
-def Main(script_name = None, name = None, output = None, path = None,
-         *rest):
-  if not path:
-    raise GenerateError("usage: %s NAME OUTPUT PATH EXCLUDE_DIR_NAME ..."
-                        % script_name)
-  base_directory = os.path.dirname(output)
-  Generator(base_directory, name, output, path, *rest).generate()
-
-
-if __name__ == '__main__':
-  sys.exit(Main(*sys.argv))
diff --git a/tools/create_editor.py b/tools/create_editor.py
deleted file mode 100644
index 74fa133..0000000
--- a/tools/create_editor.py
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-#
-# A script which will be invoked from gyp to create a build of the editor.
-#
-# Usage: ./tools/create_editor.py
-#            [--mode <mode>] [--arch <arch>] [--out <output>] [--build <build>]
-#
-# DO NOT CALL THIS SCRIPT DIRECTLY, instead invoke:
-# ./tools/build.py -mrelease editor
-
-import glob
-import optparse
-import os
-import shutil
-import subprocess
-import sys
-import utils
-import zipfile
-
-from os.path import join
-
-OUTPUT = None
-BUILD = None
-
-OS_CONFIG = {
-  'win32': 'win32, win32',
-  'linux': 'linux, gtk',
-  'macos': 'macosx, cocoa'
-}
-
-ARCH_CONFIG = {
-  'ia32': 'x86',
-  'x64': 'x86_64'
-}
-
-def AntPath():
-  parent = join('third_party', 'apache_ant', '1.8.4', 'bin')
-  if utils.IsWindows():
-    return join(parent, 'ant.bat')
-  else:
-    return join(parent, 'ant')
-
-
-def ProcessEditorArchive(arch, archive, outDir):
-  tempDir = join(GetEditorTemp(), 'editor.out')
-  try:
-    os.makedirs(tempDir)
-  except OSError:
-    # Directory already exists.
-    pass
-
-  if utils.IsWindows():
-    f = zipfile.ZipFile(archive)
-    f.extractall(tempDir)
-    f.close()
-  else:
-    subprocess.call(['unzip', '-q', archive, '-d', tempDir])
-
-  if arch == 'x64':
-    if utils.GuessOS() == 'macos':
-      inifile = join(tempDir, 'dart', 'DartEditor.app', 'Contents', 'MacOS',
-                     'DartEditor.ini')
-    else:
-      inifile = join(tempDir, 'dart', 'DartEditor.ini')
-    Modify64BitDartEditorIni(inifile)
-
-  for src in glob.glob(join(tempDir, 'dart', '*')):
-    shutil.move(src, outDir)
-
-  shutil.rmtree(tempDir)
-  os.unlink(archive)
-
-
-def Modify64BitDartEditorIni(iniFilePath):
-  f = open(iniFilePath, 'r')
-  lines = f.readlines()
-  f.close()
-  lines[lines.index('-Xms40m\n')] = '-Xms256m\n'
-  lines[lines.index('-Xmx1024m\n')] = '-Xmx2000m\n'
-  # Add -d64 to give better error messages to user in 64 bit mode.
-  lines[lines.index('-vmargs\n')] = '-vmargs\n-d64\n'
-  f = open(iniFilePath, 'w')
-  f.writelines(lines)
-  f.close()
-
-
-def GetEditorTemp():
-  return join(BUILD, 'editor.build.temp')
-
-
-def GetDownloadCache():
-  return GetEclipseBuildRoot()
-
-
-def GetEclipseBuildRoot():
-  return join(BUILD, 'editor.build.cache')
-
-
-def GetSdkPath():
-  return join(os.path.dirname(OUTPUT), 'dart-sdk')
-
-
-def GetOutputParent():
-  return os.path.dirname(os.path.dirname(OUTPUT))
-
-
-def BuildOptions():
-  options = optparse.OptionParser(usage='usage: %prog [options] <output>')
-  options.add_option("-m", "--mode", metavar='[debug,release]')
-  options.add_option("-a", "--arch", metavar='[ia32,x64]')
-  options.add_option("-o", "--out")
-  options.add_option("-b", "--build")
-  return options
-
-
-def Main():
-  global OUTPUT
-  global BUILD
-
-  parser = BuildOptions()
-  (options, args) = parser.parse_args()
-
-  if args:
-    parser.print_help()
-    return 1
-
-  osName = utils.GuessOS()
-  mode = 'debug'
-  arch = utils.GuessArchitecture()
-
-  if not options.build:
-    print >> sys.stderr, 'Error: no --build option specified'
-    exit(1)
-  else:
-    BUILD = options.build
-
-  if not options.out:
-    print >> sys.stderr, 'Error: no --out option specified'
-    exit(1)
-  else:
-    # TODO(devoncarew): Currently we scrape the output path to determine the
-    # mode and arch. This is fragile and should moved into one location
-    # (utils.py?) or made more explicit.
-    OUTPUT = options.out
-    mode = ('release', 'debug')['Debug' in OUTPUT]
-    arch = ('ia32', 'x64')['X64' in OUTPUT]
-
-  # Use explicit mode and arch information.
-  if options.mode:
-    mode = options.mode
-  if options.arch:
-    arch = options.arch
-
-  OUTPUT = os.path.abspath(OUTPUT)
-  BUILD = os.path.abspath(BUILD)
-
-  print "\nBuilding the editor"
-  print "  config : %s, %s, %s" % (osName, arch, mode)
-  print "  output : %s" % OUTPUT
-
-  # Clean the editor output directory.
-  print '\ncleaning %s' % OUTPUT
-  shutil.rmtree(OUTPUT, True)
-
-  # These are the valid eclipse build configurations that we can produce.
-  # We synthesize these up from the OS_CONFIG and ARCH_CONFIG information.
-  # macosx, cocoa, x86 & macosx, cocoa, x86_64
-  # win32, win32, x86 & win32, win32, x86_64
-  # linux, gtk, x86 & linux, gtk, x86_64
-
-  buildConfig = OS_CONFIG[osName] + ', ' + ARCH_CONFIG[arch]
-
-  print "\ninvoking build_rcp.xml with buildConfig = [%s]\n" % buildConfig
-
-  sys.stdout.flush()
-  sys.stderr.flush()
-
-  buildScript = join('editor', 'tools', 'features',
-                     'com.google.dart.tools.deploy.feature_releng',
-                     'build_rcp.xml')
-  build_cmd = [AntPath(),
-      '-lib',
-      join('third_party', 'bzip2', 'bzip2.jar'),
-      '-Dbuild.out=' + OUTPUT,
-      '-Dbuild.configs=' + buildConfig,
-      '-Dbuild.root=' + GetEclipseBuildRoot(),
-      '-Dbuild.downloads=' + GetDownloadCache(),
-      '-Dbuild.source=' + os.path.abspath('editor'),
-      '-Dbuild.dart.sdk=' + GetSdkPath(),
-      '-Dbuild.no.properties=true',
-      '-Dbuild.channel=' + utils.GetChannel(),
-      '-Dbuild.revision=' + utils.GetSVNRevision(),
-      '-Dbuild.version.qualifier=' + utils.GetEclipseVersionQualifier(),
-      '-Ddart.version.full=' + utils.GetVersion(),
-      '-buildfile',
-      buildScript]
-  print build_cmd
-  buildRcpStatus = subprocess.call(build_cmd, shell=utils.IsWindows())
-
-  if buildRcpStatus != 0:
-    sys.exit(buildRcpStatus)
-
-  # build_rcp.xml will put the built editor archive in the OUTPUT directory
-  # (dart-editor-macosx.cocoa.x86.zip). It contains the editor application in a
-  # dart/ subdirectory. We unzip the contents of the archive into OUTPUT. It
-  # will use the ../dart-sdk directory as its SDK.
-  archives = glob.glob(join(OUTPUT, 'd*.zip'))
-
-  if archives:
-    ProcessEditorArchive(arch, archives[0], OUTPUT)
-
-  if os.path.exists(GetEditorTemp()):
-    shutil.rmtree(GetEditorTemp())
-
-  print('\nEditor build successful')
-
-
-if __name__ == '__main__':
-  sys.exit(Main())
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 1424c4d..c9dec1b 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -205,12 +205,12 @@
   for library in [join('_blink', 'dartium'),
                   join('_chrome', 'dart2js'), join('_chrome', 'dartium'),
                   join('_internal', 'compiler'),
-                  'async', 'collection', 'convert', 'core',
+                  'async', 'collection', 'convert', 'core', 'developer',
                   'internal', 'io', 'isolate',
                   join('html', 'dart2js'), join('html', 'dartium'),
                   join('html', 'html_common'),
                   join('indexed_db', 'dart2js'), join('indexed_db', 'dartium'),
-                  'js', 'math', 'mirrors', 'typed_data', 'profiler',
+                  'js', 'math', 'mirrors', 'profiler', 'typed_data',
                   join('svg', 'dart2js'), join('svg', 'dartium'),
                   join('web_audio', 'dart2js'), join('web_audio', 'dartium'),
                   join('web_gl', 'dart2js'), join('web_gl', 'dartium'),
diff --git a/tools/create_windows_installer.py b/tools/create_windows_installer.py
deleted file mode 100644
index 64fe994..0000000
--- a/tools/create_windows_installer.py
+++ /dev/null
@@ -1,391 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-# A script to generate a windows installer for the editor bundle.
-# As input the script takes a zip file, a version and the location
-# to store the resulting msi file in.
-#
-# Usage: ./tools/create_windows_installer.py --version <version>
-#            --zip_file_location <zip_file> --msi_location <output>
-#            [--wix_bin <wix_bin_location>]
-#            [--print_wxs]
-#
-# This script assumes that wix is either in path or passed in as --wix_bin.
-# You can get wix from http://wixtoolset.org/.
-
-import optparse
-import os
-import subprocess
-import sys
-import utils
-import zipfile
-
-# This should _never_ change, please don't change this value.
-UPGRADE_CODE = '7bacdc33-2e76-4f36-a206-ea58220c0b44'
-
-# The content of the xml
-xml_content = []
-
-# The components we want to add to our feature.
-feature_components = []
-
-# Indentation level, each level is indented 2 spaces
-current_indentation = 0
-
-def GetOptions():
-  options = optparse.OptionParser(usage='usage: %prog [options]')
-  options.add_option("--zip_file_location",
-      help='Where the zip file including the editor is located.')
-  options.add_option("--input_directory",
-      help='Directory where all the files needed is located.')
-  options.add_option("--msi_location",
-      help='Where to store the resulting msi.')
-  options.add_option("--version",
-      help='The version specified as Major.Minor.Build.Patch.')
-  options.add_option("--wix_bin",
-      help='The location of the wix binary files.')
-  options.add_option("--print_wxs", action="store_true", dest="print_wxs",
-                    default=False,
-                    help="Prints the generated wxs to stdout.")
-  (options, args) = options.parse_args()
-  if len(args) > 0:
-    raise Exception("This script takes no arguments, only options")
-  ValidateOptions(options)
-  return options
-
-def ValidateOptions(options):
-  if not options.version:
-    raise Exception('You must supply a version')
-  if options.zip_file_location and options.input_directory:
-    raise Exception('Please pass either zip_file_location or input_directory')
-  if not options.zip_file_location and not options.input_directory:
-    raise Exception('Please pass either zip_file_location or input_directory')
-  if (options.zip_file_location and
-      not os.path.isfile(options.zip_file_location)):
-    raise Exception('Passed in zip file not found')
-  if (options.input_directory and
-      not os.path.isdir(options.input_directory)):
-    raise Exception('Passed in directory not found')
-
-def GetInputDirectory(options, temp_dir):
-  if options.zip_file_location:
-    ExtractZipFile(options.zip_file_location, temp_dir)
-    return os.path.join(temp_dir, 'dart')
-  return options.input_directory
-
-# We combine the build and patch into a single entry since
-# the windows installer does _not_ consider a change in Patch
-# to require a new install.
-# In addition to that, the limits on the size are:
-# Major: 256
-# Minor: 256
-# Patch: 65536
-# To circumvent this we create the version like this:
-#   Major.Minor.X
-# from "major.minor.patch-prerelease.prerelease_patch"
-# where X is "patch<<10 + prerelease<<5 + prerelease_patch"
-# Example version 1.2.4-dev.2.3 will go to 1.2.4163
-def GetMicrosoftProductVersion(version):
-  version_parts = version.split('.')
-  if len(version_parts) is not 5:
-    raise Exception(
-      "Version string (%s) does not follow specification" % version)
-  (major, minor, patch, prerelease, prerelease_patch) = map(int, version_parts)
-
-  if major > 255 or minor > 255:
-    raise Exception('Major/Minor can not be above 256')
-  if patch > 63:
-    raise Exception('Patch can not be above 63')
-  if prerelease > 31:
-    raise Exception('Prerelease can not be above 31')
-  if prerelease_patch > 31:
-    raise Exception('PrereleasePatch can not be above 31')
-
-  combined = (patch << 10) + (prerelease << 5) + prerelease_patch
-  return '%s.%s.%s' % (major, minor, combined)
-
-# Append using the current indentation level
-def Append(data, new_line=True):
-  str = (('  ' * current_indentation) +
-         data +
-         ('\n' if new_line else ''))
-  xml_content.append(str)
-
-# Append without any indentation at the current position
-def AppendRaw(data, new_line=True):
-  xml_content.append(data + ('\n' if new_line else ''))
-
-def AppendComment(comment):
-  Append('<!--%s-->' % comment)
-
-def AppendBlankLine():
-  Append('')
-
-def GetContent():
-  return ''.join(xml_content)
-
-def XmlHeader():
-  Append('<?xml version="1.0" encoding="UTF-8"?>')
-
-def TagIndent(str, indentation_string):
-  return ' ' * len(indentation_string) + str
-
-def IncreaseIndentation():
-  global current_indentation
-  current_indentation += 1
-
-def DecreaseIndentation():
-  global current_indentation
-  current_indentation -= 1
-
-class WixAndProduct(object):
-  def __init__(self, version):
-    self.version = version
-    self.product_name = 'Dart Editor'
-    self.manufacturer = 'Google Inc.'
-    self.upgrade_code = UPGRADE_CODE
-
-  def __enter__(self):
-    self.start_wix()
-    self.start_product()
-
-  def __exit__(self, *_):
-    self.close_product()
-    self.close_wix()
-
-  def get_product_id(self):
-    # This needs to change on every install to guarantee that
-    # we get a full uninstall + reinstall
-    # We let wix choose. If we need to do patch releases later on
-    # we need to retain the value over several installs.
-    return '*'
-
-  def start_product(self):
-    product = '<Product '
-    Append(product, new_line=False)
-    AppendRaw('Id="%s"' % self.get_product_id())
-    Append(TagIndent('Version="%s"' % self.version, product))
-    Append(TagIndent('Name="%s"' % self.product_name, product))
-    Append(TagIndent('UpgradeCode="%s"' % self.upgrade_code,
-                     product))
-    Append(TagIndent('Language="1033"', product))
-    Append(TagIndent('Manufacturer="%s"' % self.manufacturer,
-                     product),
-           new_line=False)
-    AppendRaw('>')
-    IncreaseIndentation()
-
-  def close_product(self):
-    DecreaseIndentation()
-    Append('</Product>')
-
-  def start_wix(self):
-    Append('<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">')
-    IncreaseIndentation()
-
-  def close_wix(self):
-    DecreaseIndentation()
-    Append('</Wix>')
-
-class Directory(object):
-  def __init__(self, id, name=None):
-    self.id = id
-    self.name = name
-
-  def __enter__(self):
-    directory = '<Directory '
-    Append(directory, new_line=False)
-    AppendRaw('Id="%s"' % self.id, new_line=self.name is not None)
-    if self.name:
-      Append(TagIndent('Name="%s"' % self.name, directory), new_line=False)
-    AppendRaw('>')
-    IncreaseIndentation()
-
-  def __exit__(self, *_):
-    DecreaseIndentation()
-    Append('</Directory>')
-
-class Component(object):
-  def __init__(self, id):
-    self.id = 'CMP_%s' % id
-
-  def __enter__(self):
-    component = '<Component '
-    Append(component, new_line=False)
-    AppendRaw('Id="%s"' % self.id)
-    Append(TagIndent('Guid="*">', component))
-    IncreaseIndentation()
-
-  def __exit__(self, *_):
-    DecreaseIndentation()
-    Append('</Component>')
-    feature_components.append(self.id)
-
-class Feature(object):
-  def __enter__(self):
-    feature = '<Feature '
-    Append(feature, new_line=False)
-    AppendRaw('Id="MainFeature"')
-    Append(TagIndent('Title="Dart Editor"', feature))
-    # Install by default
-    Append(TagIndent('Level="1">', feature))
-    IncreaseIndentation()
-
-  def __exit__(self, *_):
-    DecreaseIndentation()
-    Append('</Feature>')
-
-def Package():
-  package = '<Package '
-  Append(package, new_line=False)
-  AppendRaw('InstallerVersion="301"')
-  Append(TagIndent('Compressed="yes" />', package))
-
-def MediaTemplate():
-  Append('<MediaTemplate EmbedCab="yes" />')
-
-def File(name, id):
-  file = '<File '
-  Append(file, new_line=False)
-  AppendRaw('Id="FILE_%s"' % id)
-  Append(TagIndent('Source="%s"' % name, file))
-  Append(TagIndent('KeyPath="yes" />', file))
-
-def Shortcut(id, name, ref):
-  shortcut = '<Shortcut '
-  Append(shortcut, new_line=False)
-  AppendRaw('Id="%s"' % id)
-  Append(TagIndent('Name="%s"' % name, shortcut))
-  Append(TagIndent('Target="%s" />' % ref, shortcut))
-
-def RemoveFolder(id):
-  remove = '<RemoveFolder '
-  Append(remove, new_line=False)
-  AppendRaw('Id="%s"' % id)
-  Append(TagIndent('On="uninstall" />', remove))
-
-def RegistryEntry(location):
-  registry = '<RegistryValue '
-  Append(registry, new_line=False)
-  AppendRaw('Root="HKCU"')
-  Append(TagIndent('Key="Software\\Microsoft\\%s"' % location, registry))
-  Append(TagIndent('Name="installed"', registry))
-  Append(TagIndent('Type="integer"', registry))
-  Append(TagIndent('Value="1"', registry))
-  Append(TagIndent('KeyPath="yes" />', registry))
-
-
-def MajorUpgrade():
-  upgrade = '<MajorUpgrade '
-  Append(upgrade, new_line=False)
-  down_message = 'You already have a never version installed.'
-  AppendRaw('DowngradeErrorMessage="%s" />' % down_message)
-
-
-# This is a very simplistic id generation.
-# Unfortunately there is no easy way to generate good names,
-# since there is a 72 character limit, and we have way longer
-# paths. We don't really have an issue with files and ids across
-# releases since we do full installs.
-counter = 0
-def FileToId(name):
-  global counter
-  counter += 1
-  return '%s' % counter
-
-def ListFiles(path):
-  for entry in os.listdir(path):
-    full_path = os.path.join(path, entry)
-    id = FileToId(full_path)
-    if os.path.isdir(full_path):
-      with Directory('DIR_%s' % id, entry):
-        ListFiles(full_path)
-    elif os.path.isfile(full_path):
-      # We assume 1 file per component, a File is always a KeyPath.
-      # A KeyPath on a file makes sure that we can always repair and
-      # remove that file in a consistent manner. A component
-      # can only have one child with a KeyPath.
-      with Component(id):
-        File(full_path, id)
-
-def ComponentRefs():
-  for component in feature_components:
-    Append('<ComponentRef Id="%s" />' % component)
-
-def ExtractZipFile(zip, temp_dir):
-  print 'Extracting files'
-  f = zipfile.ZipFile(zip)
-  f.extractall(temp_dir)
-  f.close()
-
-def GenerateInstaller(wxs_content, options, temp_dir):
-  wxs_file = os.path.join(temp_dir, 'installer.wxs')
-  wixobj_file = os.path.join(temp_dir, 'installer.wixobj')
-  print 'Saving wxs output to: %s' % wxs_file
-  with open(wxs_file, 'w') as f:
-    f.write(wxs_content)
-
-  candle_bin = 'candle.exe'
-  light_bin = 'light.exe'
-  if options.wix_bin:
-    candle_bin = os.path.join(options.wix_bin, 'candle.exe')
-    light_bin = os.path.join(options.wix_bin, 'light.exe')
-  print 'Calling candle on %s' % wxs_file
-  subprocess.check_call('%s %s -o %s' % (candle_bin, wxs_file,
-                                         wixobj_file))
-  print 'Calling light on %s' % wixobj_file
-  subprocess.check_call('%s %s -o %s' % (light_bin, wixobj_file,
-                                         options.msi_location))
-  print 'Created msi file to %s' % options.msi_location
-
-
-def Main(argv):
-  if sys.platform != 'win32':
-    raise Exception("This script can only be run on windows")
-  options = GetOptions()
-  version = GetMicrosoftProductVersion(options.version)
-  with utils.TempDir('installer') as temp_dir:
-    input_location = GetInputDirectory(options, temp_dir)
-    print "Generating wix XML"
-    XmlHeader()
-    with WixAndProduct(version):
-      AppendBlankLine()
-      Package()
-      MediaTemplate()
-      AppendComment('We always do a major upgrade, at least for now')
-      MajorUpgrade()
-
-      AppendComment('Directory structure')
-      with Directory('TARGETDIR', 'SourceDir'):
-        with Directory('ProgramFilesFolder'):
-          with Directory('RootInstallDir', 'Dart Editor'):
-            AppendComment("Add all files and directories")
-            print 'Installing files and directories in xml'
-            ListFiles(input_location)
-        AppendBlankLine()
-        AppendComment("Create shortcuts")
-        with Directory('ProgramMenuFolder'):
-          with Directory('ShortcutFolder', 'Dart Editor'):
-            with Component('shortcut'):
-              # When generating a shortcut we need an entry with
-              # a KeyPath (RegistryEntry) below - to be able to remove
-              # the shortcut again. The RemoveFolder tag is needed
-              # to clean up everything
-              Shortcut('editor_shortcut', 'Dart Editor',
-                       '[RootInstallDir]DartEditor.exe')
-              RemoveFolder('RemoveShortcuts')
-              RegistryEntry('DartEditor')
-      with Feature():
-        # We have only one feature, and it consists of all the
-        # files=components we have listed above"
-        ComponentRefs()
-    xml = GetContent()
-    if options.print_wxs:
-      print xml
-    GenerateInstaller(xml, options, temp_dir)
-
-if __name__ == '__main__':
-  sys.exit(Main(sys.argv))
diff --git a/tools/dart2js/angular2_testing_deps/CURRENT_ANGULAR_DEPS b/tools/dart2js/angular2_testing_deps/CURRENT_ANGULAR_DEPS
index 561545a..5cdd92f 100644
--- a/tools/dart2js/angular2_testing_deps/CURRENT_ANGULAR_DEPS
+++ b/tools/dart2js/angular2_testing_deps/CURRENT_ANGULAR_DEPS
@@ -1 +1 @@
-dd3e6271c259d1fb3e150a4a43bf2f3dac1413e8
+e30ad2ec2c7cf75c3bfc8823a305c967a1a507a4
diff --git a/tools/dom/docs/docs.status b/tools/dom/docs/docs.status
index 7cd95de..c40bfc0 100644
--- a/tools/dom/docs/docs.status
+++ b/tools/dom/docs/docs.status
@@ -3,5 +3,5 @@
 # BSD-style license that can be found in the LICENSE file.
 
 # docs.dart is a tool that only runs on the VM
-[ $compiler == dart2js || $compiler == dart2dart || $runtime == drt || $runtime == dartium ]
+[ $compiler == dart2js || $runtime == drt || $runtime == dartium ]
 *: Skip
diff --git a/tools/gyp/configurations_android.gypi b/tools/gyp/configurations_android.gypi
index c60d776..80ff1c6 100644
--- a/tools/gyp/configurations_android.gypi
+++ b/tools/gyp/configurations_android.gypi
@@ -57,7 +57,7 @@
               '-fno-omit-frame-pointer',
             ],
             'defines': [
-              'PROFILE_NATIVE_CODE'
+              'NATIVE_CODE_HAS_FRAME_POINTERS'
             ],
           }],
         ],
@@ -82,7 +82,7 @@
               '-fno-omit-frame-pointer',
             ],
             'defines': [
-              'PROFILE_NATIVE_CODE'
+              'NATIVE_CODE_HAS_FRAME_POINTERS'
             ],
           }],
         ],
diff --git a/tools/gyp/configurations_make.gypi b/tools/gyp/configurations_make.gypi
index 1556f16..15eee37 100644
--- a/tools/gyp/configurations_make.gypi
+++ b/tools/gyp/configurations_make.gypi
@@ -200,7 +200,7 @@
               '-fno-omit-frame-pointer',
             ],
             'defines': [
-              'PROFILE_NATIVE_CODE'
+              'NATIVE_CODE_HAS_FRAME_POINTERS'
             ],
           }],
         ],
@@ -217,7 +217,7 @@
               '-fno-omit-frame-pointer',
             ],
             'defines': [
-              'PROFILE_NATIVE_CODE'
+              'NATIVE_CODE_HAS_FRAME_POINTERS'
             ],
           }],
         ],
diff --git a/tools/gyp/configurations_msvs.gypi b/tools/gyp/configurations_msvs.gypi
index 46604eb..3c859ce 100644
--- a/tools/gyp/configurations_msvs.gypi
+++ b/tools/gyp/configurations_msvs.gypi
@@ -63,7 +63,7 @@
               },
             },
             'defines': [
-              'PROFILE_NATIVE_CODE'
+              'NATIVE_CODE_HAS_FRAME_POINTERS'
             ],
           }],
         ],
@@ -107,7 +107,7 @@
               },
             },
             'defines': [
-              'PROFILE_NATIVE_CODE'
+              'NATIVE_CODE_HAS_FRAME_POINTERS'
             ],
           }],
         ],
diff --git a/tools/gyp/configurations_xcode.gypi b/tools/gyp/configurations_xcode.gypi
index 6bd0452..3f22df5 100644
--- a/tools/gyp/configurations_xcode.gypi
+++ b/tools/gyp/configurations_xcode.gypi
@@ -63,7 +63,7 @@
               ],
             },
             'defines': [
-              'PROFILE_NATIVE_CODE',
+              'NATIVE_CODE_HAS_FRAME_POINTERS',
             ],
           }],
         ],
diff --git a/tools/mac_build_editor_bundle.sh b/tools/mac_build_editor_bundle.sh
deleted file mode 100755
index 14b8054..0000000
--- a/tools/mac_build_editor_bundle.sh
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by
-# BSD-style license that can be found in the LICENSE file.
-
-# Fail if a command failed
-set -e
-
-if [ $# -ne 5 ]; then
-  echo "Usage $0 <app-folder> <editor-build-directory> <dart-sdk> " \
-       "<Chromium.app> <icon.icns>"
-  exit 1
-fi
-
-OUTPUT_APP_FOLDER=$1
-INPUT_EDITOR_BUILD_DIRECTORY=$2
-INPUT_DART_SDK_DIRECTORY=$3
-INPUT_CHROMIUM_APP_DIRECTORY=$4
-INPUT_ICON_PATH=$5
-
-# Input validations
-if [ "${OUTPUT_APP_FOLDER##*.}" != "app" ]; then
-  echo "Application folder has to end in '.app' " \
-       "(but was $APP_FOLDER_NAME)."
-  exit 1
-fi
-if [ "${INPUT_ICON_PATH##*.}" != "icns" ]; then
-  echo "Application icon has to end in '.icns'."
-  exit 1
-fi
-
-function ensure_exists {
-  if [ ! -e "$1" ]; then
-    echo "Directory or file does not exist: $1."
-    exit 1
-  fi
-}
-ensure_exists "$INPUT_EDITOR_BUILD_DIRECTORY"
-ensure_exists "$INPUT_DART_SDK_DIRECTORY"
-
-# Remove old directory if present
-if [ -e "$OUTPUT_APP_FOLDER" ]; then
-  rm -r "$OUTPUT_APP_FOLDER"
-fi
-
-# Make directory structure and copy necessary files
-mkdir -p "$OUTPUT_APP_FOLDER/Contents/MacOS"
-LAUNCHER_SUBPATH="DartEditor.app/Contents/MacOS/DartEditor"
-cp "$INPUT_EDITOR_BUILD_DIRECTORY/$LAUNCHER_SUBPATH" \
-   "$OUTPUT_APP_FOLDER/Contents/MacOS/"
-cp "$INPUT_EDITOR_BUILD_DIRECTORY/$LAUNCHER_SUBPATH.ini" \
-   "$OUTPUT_APP_FOLDER/Contents/MacOS/"
-mkdir -p "$OUTPUT_APP_FOLDER/Contents/Resources"
-cp "$INPUT_ICON_PATH" "$OUTPUT_APP_FOLDER/Contents/Resources/dart.icns"
-cp -R "$INPUT_DART_SDK_DIRECTORY" \
-      "$OUTPUT_APP_FOLDER/Contents/Resources/dart-sdk"
-cp -R "$INPUT_CHROMIUM_APP_DIRECTORY" \
-   "$OUTPUT_APP_FOLDER/Contents/Resources/Chromium.app"
-for dirname in $(echo configuration plugins features samples); do
-  cp -R "$INPUT_EDITOR_BUILD_DIRECTORY/$dirname" \
-        "$OUTPUT_APP_FOLDER/Contents/Resources/"
-done
-
-EQUINOX_LAUNCHER_JARFILE=$(cd "$OUTPUT_APP_FOLDER"; \
-  ls Contents/Resources/plugins/org.eclipse.equinox.launcher_*.jar);
-
-EQUINOX_LAUNCHER_LIBRARY=$(cd "$OUTPUT_APP_FOLDER"; ls \
-  Contents/Resources/plugins/org.eclipse.equinox.launcher.cocoa.*/eclipse_*.so);
-
-cat > "$OUTPUT_APP_FOLDER/Contents/Info.plist" << EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
-          "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-  <dict>
-    <key>NSHighResolutionCapable</key>
-      <true/>
-    <key>CFBundleExecutable</key>
-      <string>DartEditor</string>
-    <key>CFBundleGetInfoString</key>
-      <string>Eclipse 3.7 for Mac OS X, Copyright IBM Corp. and others 2002,
-              2011. All rights reserved.</string>
-    <key>CFBundleIconFile</key>
-      <string>dart.icns</string>
-    <key>CFBundleIdentifier</key>
-      <string>org.eclipse.eclipse</string>
-    <key>CFBundleInfoDictionaryVersion</key>
-      <string>6.0</string>
-    <key>CFBundleName</key>
-      <string>DartEditor</string>
-    <key>CFBundlePackageType</key>
-      <string>APPL</string>
-    <key>CFBundleShortVersionString</key>
-      <string>3.7</string>
-    <key>CFBundleSignature</key>
-      <string>????</string>
-    <key>CFBundleVersion</key>
-      <string>3.7</string>
-    <key>CFBundleDevelopmentRegion</key>
-      <string>English</string>
-    <key>CFBundleLocalizations</key>
-      <array>
-        <string>en</string>
-        <key>WorkingDirectory</key>
-        <string>\$APP_PACKAGE/Contents/Resources</string>
-      </array>
-    <key>Eclipse</key>
-      <array>
-        <string>-startup</string>
-        <string>\$APP_PACKAGE/$EQUINOX_LAUNCHER_JARFILE</string>
-        <string>--launcher.library</string>
-        <string>\$APP_PACKAGE/$EQUINOX_LAUNCHER_LIBRARY</string>
-        <string>-keyring</string><string>~/.eclipse_keyring</string>
-        <string>-showlocation</string>
-        <key>WorkingDirectory</key>
-        <string>\$APP_PACKAGE/Contents/Resources</string>
-      </array>
-  </dict>
-</plist>
-EOF
-
diff --git a/tools/mac_build_editor_dmg.sh b/tools/mac_build_editor_dmg.sh
deleted file mode 100755
index 15b70e1..0000000
--- a/tools/mac_build_editor_dmg.sh
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by
-# BSD-style license that can be found in the LICENSE file.
-
-# This is partly based on
-# https://bitbucket.org/rmacnak/nsvm/src/
-#   b2de52432a2baff9c4ada099430fb16a771d34ef/vm/onebuild/installer-Darwin.gmk
-
-# Fail if a command failed
-set -e
-set -o errexit
-set -o nounset
-
-if [ $# -ne 4 ]; then
-  echo "Usage $0 <output.dmg> <raw-editor-bundle> <folder-icon> <volume-name>"
-  exit 1
-fi
-
-OUTPUT_DMG_FILE=$1
-INPUT_FOLDER_PATH=$2
-FOLDER_ICON=$3
-INPUT_VOLUME_NAME=$4
-
-FOLDER_NAME="Dart"
-VOLUME_MOUNTPOINT="/Volumes/$INPUT_VOLUME_NAME"
-SPARSEIMAGE="$OUTPUT_DMG_FILE.sparseimage"
-
-# Input validations
-if [ ! -d "$INPUT_FOLDER_PATH" ]; then
-  echo "Editor bundle folder does not exist ($INPUT_FOLDER_PATH)"
-  exit 1
-fi
-
-# If an old image is still mounted, umount it
-if [ -e "$VOLUME_MOUNTPOINT" ]; then
-  hdiutil eject "$VOLUME_MOUNTPOINT"
-fi
-
-# Remove old output files
-if [ -f "$SPARSEIMAGE" ]; then
-  rm "$SPARSEIMAGE"
-fi
-if [ -f "$OUTPUT_DMG_FILE" ]; then
-  rm "$OUTPUT_DMG_FILE"
-fi
-
-# This function will set (or replace) the icon of a folder.
-# Finder displays a default folder icon. Since the installer
-# will consist of a folder and a link to "/Applications", we want
-# the folder to have a nice icon.
-# In order to make Finder display a custom icon, we need to
-#  - Have a "FOLDER/Icon\r" file which contains the icon resource
-#    (i.e. the metadata of this file will contain an icon)
-#  - Have the 'custom icon' attribute set on "FOLDER"
-# Additionally we mark the "FOLDER/Icon\r" file as invisible, so it
-# is not shown in Finder (although it's visible on the commandline).
-replace_folder_icon() {
-  FOLDER="$1"
-  ICON="$2"
-  TEMP_ICON_RESOURCE='/tmp/icns.rsrc'
-  ICON_RESOURCE="$FOLDER"/$'Icon\r'
-
-  # Add finder icon to the image file
-  sips -i "$ICON" > /dev/null
-
-  # Extract the finder icon resource
-  DeRez -only icns "$ICON" > "$TEMP_ICON_RESOURCE"
-
-  # Create the icon resource
-  rm -f "$ICON_RESOURCE"
-  Rez -append "$TEMP_ICON_RESOURCE" -o "$ICON_RESOURCE"
-  rm "$TEMP_ICON_RESOURCE"
-
-  # Set the 'custom icon' attribute on $FOLDER
-  SetFile -a C "$FOLDER"
-
-  # Make the $ICON_RESOURCE invisible for finder
-  SetFile -a V "$ICON_RESOURCE"
-}
-
-
-# Create a new image and attach it
-hdiutil create -size 400m -type SPARSE -volname "$INPUT_VOLUME_NAME" -fs \
-  'Journaled HFS+' "$SPARSEIMAGE"
-hdiutil attach "$SPARSEIMAGE"
-
-# Add link to /Applications (so the user can drag-and-drop into it)
-ln -s /Applications "$VOLUME_MOUNTPOINT/"
-# Copy our application
-ditto "$INPUT_FOLDER_PATH" "$VOLUME_MOUNTPOINT/$FOLDER_NAME"
-# Set custom icon on this folder
-replace_folder_icon "$VOLUME_MOUNTPOINT/$FOLDER_NAME" "$FOLDER_ICON"
-# Make sure that the dmg gets opened when mounting the image
-bless --folder "$VOLUME_MOUNTPOINT" --openfolder "$VOLUME_MOUNTPOINT"
-
-# Use an applescript to setup the layout of the folder.
-osascript << EOF
-tell application "Finder"
-  tell disk "$INPUT_VOLUME_NAME"
-    open
-    tell container window
-      set current view to icon view
-      set toolbar visible to false
-      set statusbar visible to false
-      set position to {100, 100}
-      set bounds to {100, 100, 512, 256}
-    end tell
-    tell icon view options of container window
-      set arrangement to not arranged
-      set icon size to 128
-    end tell
-    set position of item "$FOLDER_NAME" to {64, 64}
-    set position of item "Applications" to {320, 64}
-    eject
-  end tell
-end tell
-EOF
-
-# Wait until the script above has umounted the image
-while [ -e "$VOLUME_MOUNTPOINT" ]; do
-  echo "Waiting for Finder to eject $VOLUME_MOUNTPOINT"
-  sleep 2
-done
-
-# Compress the sparse image
-hdiutil convert "$SPARSEIMAGE" -format UDBZ -o "$OUTPUT_DMG_FILE"
-
-# Remove sparse image
-rm "$SPARSEIMAGE"
-
diff --git a/tools/promote.py b/tools/promote.py
new file mode 100644
index 0000000..5d3a3c4
--- /dev/null
+++ b/tools/promote.py
@@ -0,0 +1,183 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 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.
+
+# Dart Editor promote tools.
+
+import imp
+import optparse
+import os
+import subprocess
+import sys
+import time
+import urllib
+import bots.bot_utils as bot_utils
+
+from os.path import join
+
+DART_PATH = os.path.abspath(os.path.join(__file__, '..', '..'))
+DRY_RUN = False
+
+def BuildOptions():
+  usage = """usage: %prog promote [options]
+  where:
+    promote - Will promote builds from raw/signed locations to release
+              locations.
+
+    Example: Promote revision r29962 on dev channel:
+        python editor/build/promote.py promote --channel=dev --revision=29962
+  """
+
+  result = optparse.OptionParser(usage=usage)
+
+  group = optparse.OptionGroup(
+      result, 'Promote', 'options used to promote code')
+  group.add_option(
+      '--revision', help='The svn revision to promote', action='store')
+  group.add_option(
+      '--channel', type='string', help='Channel to promote.', default=None)
+  group.add_option("--dry", help='Dry run', default=False, action="store_true")
+  result.add_option_group(group)
+
+  return result
+
+
+def main():
+  parser = BuildOptions()
+  (options, args) = parser.parse_args()
+
+  def die(msg):
+    print msg
+    parser.print_help()
+    sys.exit(1)
+
+  if not args:
+    die('At least one command must be specified')
+
+  if args[0] == 'promote':
+    command = 'promote'
+    if options.revision is None:
+      die('You must specify a --revision to specify which revision to promote')
+
+    # Make sure revision is a valid integer
+    try:
+      _ = int(options.revision)
+    except:
+      die('You must supply a valid integer argument to --revision to promote')
+
+    # Make sure options.channel is a valid
+    if not options.channel:
+      die('Specify --channel=be/dev/stable')
+    if options.channel not in bot_utils.Channel.ALL_CHANNELS:
+      die('You must supply a valid channel to --channel to promote')
+  else:
+    die('Invalid command specified: {0}.  See help below'.format(args[0]))
+
+  if options.dry:
+    global DRY_RUN
+    DRY_RUN = True
+  if command == 'promote':
+    _PromoteDartArchiveBuild(options.channel, options.revision)
+
+
+def UpdateDocs():
+  try:
+    print 'Updating docs'
+    url = "http://api.dartlang.org/docs/releases/latest/?force_reload=true"
+    f = urllib.urlopen(url)
+    f.read()
+    print 'Successfully updated api docs'
+  except Exception as e:
+    print 'Could not update api docs, please manually update them'
+    print 'Failed with: %s' % e
+
+
+def _PromoteDartArchiveBuild(channel, revision):
+  # These namer objects will be used to create GCS object URIs. For the
+  # structure we use, please see tools/bots/bot_utils.py:GCSNamer
+  raw_namer = bot_utils.GCSNamer(channel, bot_utils.ReleaseType.RAW)
+  signed_namer = bot_utils.GCSNamer(channel, bot_utils.ReleaseType.SIGNED)
+  release_namer = bot_utils.GCSNamer(channel, bot_utils.ReleaseType.RELEASE)
+
+  def promote(to_revision):
+    def safety_check_on_gs_path(gs_path, revision, channel):
+      if not ((revision == 'latest' or int(revision) > 0)
+              and len(channel) > 0
+              and ('%s' % revision) in gs_path
+              and channel in gs_path):
+        raise Exception(
+            "InternalError: Sanity check failed on GS URI: %s" % gs_path)
+
+    # Google cloud storage has read-after-write, read-after-update,
+    # and read-after-delete consistency, but not list after delete consistency.
+    # Because gsutil uses list to figure out if it should do the unix styly
+    # copy to or copy into, this means that if the directory is reported as
+    # still being there (after it has been deleted) gsutil will copy
+    # into the directory instead of to the directory.
+    def wait_for_delete_to_be_consistent_with_list(gs_path):
+      while True:
+        if DRY_RUN:
+          break
+        (_, _, exit_code) = Gsutil(['ls', gs_path], throw_on_error=False)
+        # gsutil will exit 1 if the "directory" does not exist
+        if exit_code != 0:
+          break
+        time.sleep(1)
+
+    def remove_gs_directory(gs_path):
+      safety_check_on_gs_path(gs_path, to_revision, channel)
+      Gsutil(['-m', 'rm', '-R', '-f', gs_path])
+      wait_for_delete_to_be_consistent_with_list(gs_path)
+
+    # Copy sdk directory.
+    from_loc = raw_namer.sdk_directory(revision)
+    to_loc = release_namer.sdk_directory(to_revision)
+    remove_gs_directory(to_loc)
+    Gsutil(['-m', 'cp', '-a', 'public-read', '-R', from_loc, to_loc])
+
+    # Copy eclipse update directory.
+    from_loc = raw_namer.editor_eclipse_update_directory(revision)
+    to_loc = release_namer.editor_eclipse_update_directory(to_revision)
+    remove_gs_directory(to_loc)
+    Gsutil(['-m', 'cp', '-a', 'public-read', '-R', from_loc, to_loc])
+
+    # Copy api-docs zipfile.
+    from_loc = raw_namer.apidocs_zipfilepath(revision)
+    to_loc = release_namer.apidocs_zipfilepath(to_revision)
+    Gsutil(['-m', 'cp', '-a', 'public-read', from_loc, to_loc])
+
+    # Copy dartium directory.
+    from_loc = raw_namer.dartium_directory(revision)
+    to_loc = release_namer.dartium_directory(to_revision)
+    remove_gs_directory(to_loc)
+    Gsutil(['-m', 'cp', '-a', 'public-read', '-R', from_loc, to_loc])
+
+    # Copy wheezy linux deb and src packages.
+    from_loc = raw_namer.linux_packages_directory(revision, 'debian_wheezy')
+    to_loc = release_namer.linux_packages_directory(to_revision,
+                                                    'debian_wheezy')
+    remove_gs_directory(to_loc)
+    Gsutil(['-m', 'cp', '-a', 'public-read', '-R', from_loc, to_loc])
+
+    # Copy VERSION file.
+    from_loc = raw_namer.version_filepath(revision)
+    to_loc = release_namer.version_filepath(to_revision)
+    Gsutil(['cp', '-a', 'public-read', from_loc, to_loc])
+
+
+  promote(revision)
+  promote('latest')
+
+def Gsutil(cmd, throw_on_error=True):
+  gsutilTool = join(DART_PATH, 'third_party', 'gsutil', 'gsutil')
+  command = [sys.executable, gsutilTool] + cmd
+  if DRY_RUN:
+    print "DRY runnning: %s" % command
+    return
+  return bot_utils.run(command, throw_on_error=throw_on_error)
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/tools/status_clean.dart b/tools/status_clean.dart
index fb97590..f406258 100644
--- a/tools/status_clean.dart
+++ b/tools/status_clean.dart
@@ -41,7 +41,6 @@
      "tests/benchmark_smoke/benchmark_smoke.status"],
     ["co19", "tests/co19/src", "tests/co19/co19-analyzer2.status"],
     ["co19", "tests/co19/src", "tests/co19/co19-analyzer.status"],
-    ["co19", "tests/co19/src", "tests/co19/co19-dart2dart.status"],
     ["co19", "tests/co19/src", "tests/co19/co19-dart2js.status"],
     ["co19", "tests/co19/src", "tests/co19/co19-co19.status"],
     ["co19", "tests/co19/src", "tests/co19/co19-dartium.status"],
diff --git a/tools/testing/dart/co19_test.dart b/tools/testing/dart/co19_test.dart
index ad05dca..7c7b27e 100644
--- a/tools/testing/dart/co19_test.dart
+++ b/tools/testing/dart/co19_test.dart
@@ -30,8 +30,6 @@
     const <String>['-mrelease,debug', '-rvm', '-cnone', '--checked'],
     const <String>['-mrelease', '-rnone', '-cdartanalyzer'],
     const <String>['-mrelease', '-rnone', '-cdart2analyzer'],
-    const <String>['-mrelease', '-rvm', '-cdart2dart', '--use-sdk'],
-    const <String>['-mrelease', '-rvm', '-cdart2dart', '--use-sdk', '--minified'],
     const <String>['-mrelease', '-rd8', '-cdart2js', '--use-sdk'],
     const <String>['-mrelease', '-rd8,jsshell', '-cdart2js', '--use-sdk',
                    '--minified'],
diff --git a/tools/testing/dart/co19_test_config.dart b/tools/testing/dart/co19_test_config.dart
index e8d6492..813038d 100644
--- a/tools/testing/dart/co19_test_config.dart
+++ b/tools/testing/dart/co19_test_config.dart
@@ -18,7 +18,6 @@
                "tests/co19/co19-analyzer.status",
                "tests/co19/co19-analyzer2.status",
                "tests/co19/co19-runtime.status",
-               "tests/co19/co19-dart2dart.status",
                "tests/co19/co19-dart2js.status",
                "tests/co19/co19-dartium.status"]);
 
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 3681bae..e2b0d18 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -77,10 +77,6 @@
             isHostChecked: isHostChecked, useCps: useCps, useSdk: useSdk,
             isCsp: isCsp, extraDart2jsOptions:
                 TestUtils.getExtraOptions(configuration, 'dart2js_options'));
-      case 'dart2dart':
-        return new Dart2dartCompilerConfiguration(
-            isDebug: isDebug, isChecked: isChecked,
-            isHostChecked: isHostChecked, useSdk: useSdk);
       case 'none':
         return new NoneCompilerConfiguration(
             isDebug: isDebug, isChecked: isChecked,
@@ -166,8 +162,7 @@
   }
 }
 
-/// Common configuration for dart2js-based tools, such as, dart2js and
-/// dart2dart.
+/// Common configuration for dart2js-based tools, such as, dart2js
 class Dart2xCompilerConfiguration extends CompilerConfiguration {
   final String moniker;
   static Map<String, List<Uri>> _bootstrapDependenciesCache =
@@ -290,54 +285,6 @@
   }
 }
 
-/// Configuration for dart2dart compiler.
-class Dart2dartCompilerConfiguration extends Dart2xCompilerConfiguration {
-  Dart2dartCompilerConfiguration({
-      bool isDebug,
-      bool isChecked,
-      bool isHostChecked,
-      bool useSdk})
-      : super(
-          'dart2dart',
-          isDebug: isDebug, isChecked: isChecked,
-          isHostChecked: isHostChecked, useSdk: useSdk);
-
-  CommandArtifact computeCompilationArtifact(
-      String buildDir,
-      String tempDir,
-      CommandBuilder commandBuilder,
-      List arguments,
-      Map<String, String> environmentOverrides) {
-    String outputFileName = '$tempDir/out.dart';
-    arguments = new List.from(arguments)..add('--output-type=dart');
-    return new CommandArtifact(
-        <Command>[
-            this.computeCompilationCommand(
-                outputFileName,
-                buildDir,
-                CommandBuilder.instance,
-                arguments,
-                environmentOverrides)],
-        outputFileName,
-        'application/dart');
-  }
-
-  List<String> computeRuntimeArguments(
-      RuntimeConfiguration runtimeConfiguration,
-      String buildDir,
-      TestInformation info,
-      List<String> vmOptions,
-      List<String> sharedOptions,
-      List<String> originalArguments,
-      CommandArtifact artifact) {
-    // TODO(antonm): support checked.
-    return <String>[]
-        ..addAll(vmOptions)
-        ..add('--ignore-unrecognized-flags')
-        ..add(artifact.filename);
-  }
-}
-
 /// Common configuration for analyzer-based tools, such as, dartanalyzer.
 class AnalyzerCompilerConfiguration extends CompilerConfiguration {
   final String moniker;
diff --git a/tools/testing/dart/status_reporter.dart b/tools/testing/dart/status_reporter.dart
index 7536e13..0e744d0 100644
--- a/tools/testing/dart/status_reporter.dart
+++ b/tools/testing/dart/status_reporter.dart
@@ -19,12 +19,6 @@
       'compiler' : 'none'
     },
     {
-      'runtimes' : ['vm'],
-      'modes' : ['release'],
-      'archs' : ['ia32', 'x64'],
-      'compiler' : 'dart2dart'
-    },
-    {
       'runtimes' : ['d8', 'jsshell', 'chrome', 'ff'],
       'modes' : ['release'],
       'archs' : ['ia32'],
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index 9bd9aaa..a33224a 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -60,9 +60,6 @@
    none: Do not compile the Dart code (run native Dart code on the VM).
          (only valid with the following runtimes: vm, drt)
 
-   dart2dart: Compile Dart code to Dart code
-              (only valid with the following runtimes: vm, drt)
-
    dart2js: Compile dart code to JavaScript by running dart2js.
          (only valid with the following runtimes: d8, drt, chrome,
          safari, ie9, ie10, ie11, firefox, opera, chromeOnAndroid,
@@ -72,7 +69,7 @@
    dart2analyzer: Perform static analysis on Dart code by running the analyzer on Dart.
           (only valid with the following runtimes: none)''',
               ['-c', '--compiler'],
-              ['none', 'dart2dart', 'dart2js', 'dartanalyzer', 'dart2analyzer'],
+              ['none', 'dart2js', 'dartanalyzer', 'dart2analyzer'],
               'none'),
           // TODO(antonm): fix the option drt.
           new _TestOptionSpecification(
@@ -651,7 +648,6 @@
         validRuntimes = const ['none'];
         break;
       case 'none':
-      case 'dart2dart':
         validRuntimes = const ['vm', 'drt', 'dartium',
                                'ContentShellOnAndroid', 'DartiumOnAndroid'];
         break;
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index 2fb96b4..97ad17a 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -1564,7 +1564,7 @@
     if (hasCrashed) return Expectation.CRASH;
     if (hasTimedOut) return Expectation.TIMEOUT;
 
-    // Handle dart2js/dart2dart specific crash detection
+    // Handle dart2js specific crash detection
     if (exitCode == DART2JS_EXITCODE_CRASH ||
         exitCode == VmCommandOutputImpl.DART_VM_EXITCODE_COMPILE_TIME_ERROR ||
         exitCode == VmCommandOutputImpl.DART_VM_EXITCODE_UNCAUGHT_EXCEPTION) {
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 07a56d1..e6c6778 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -1328,7 +1328,7 @@
         contentShellOptions.add('--no-timeout');
         contentShellOptions.add('--dump-render-tree');
 
-        if (compiler == 'none' || compiler == 'dart2dart') {
+        if (compiler == 'none') {
           dartFlags.add('--ignore-unrecognized-flags');
           if (configuration["checked"]) {
             dartFlags.add('--enable_asserts');
@@ -1455,7 +1455,7 @@
   /** Helper to create a compilation command for a single input file. */
   Command _compileCommand(String inputFile, String outputFile,
       String compiler, String dir, optionsFromFile) {
-    assert (['dart2js', 'dart2dart'].contains(compiler));
+    assert(compiler == 'dart2js');
     List<String> args;
     if (compilerPath.endsWith('.dart')) {
       // Run the compiler script via the Dart VM.
@@ -1495,7 +1495,6 @@
   String get scriptType {
     switch (configuration['compiler']) {
       case 'none':
-      case 'dart2dart':
         return 'application/dart';
       case 'dart2js':
       case 'dartanalyzer':
@@ -1592,7 +1591,7 @@
    *
    *     // VMOptions=--flag1 --flag2
    *
-   *   - Flags can be passed to dart2js, dart2dart or vm by adding a comment
+   *   - Flags can be passed to dart2js or vm by adding a comment
    *   to the test file:
    *
    *     // SharedOptions=--flag1 --flag2
@@ -1744,18 +1743,14 @@
   }
 
   List<List<String>> getVmOptions(Map optionsFromFile) {
-    var COMPILERS = const ['none', 'dart2dart'];
+    var COMPILERS = const ['none'];
     var RUNTIMES = const ['none', 'vm', 'drt', 'dartium',
                           'ContentShellOnAndroid', 'DartiumOnAndroid'];
     var needsVmOptions = COMPILERS.contains(configuration['compiler']) &&
                          RUNTIMES.contains(configuration['runtime']);
     if (!needsVmOptions) return [[]];
     final vmOptions = optionsFromFile['vmOptions'];
-    if (configuration['compiler'] != 'dart2dart') return vmOptions;
-    // Temporary workaround for race in test suite: tests with different
-    // vm options are still compiled into the same output file which
-    // may lead to reads from empty files.
-    return [vmOptions[0]];
+    return vmOptions;
   }
 
   /**
@@ -2203,7 +2198,7 @@
       args.add("--enable_type_checks");
     }
     String compiler = configuration["compiler"];
-    if (compiler == "dart2js" || compiler == "dart2dart") {
+    if (compiler == "dart2js") {
       args = [];
       if (configuration["checked"]) {
         args.add('--enable-checked-mode');
@@ -2214,7 +2209,7 @@
         args.add("--categories=all");
       }
     }
-    if ((compiler == "dart2js" || compiler == "dart2dart") &&
+    if ((compiler == "dart2js") &&
         configuration["minified"]) {
       args.add("--minify");
     }
