Version 0.3.1.0

svn merge -r 17047:17322 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@17325 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/.gitignore b/.gitignore
index 7562384..72b2e8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,7 @@
 /out
 /xcodebuild
 /.flaky.log
+/.debug.log
 /*.Makefile
 /*.opensdf
 /*.pyc
diff --git a/client/dart.js b/client/dart.js
index 1777e22..f13841a 100644
--- a/client/dart.js
+++ b/client/dart.js
@@ -2,6 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+var warning = [
+  'WARNING: This page is using a deprecated dart.js file. ',
+  'Please update this page as described here: ',
+  'http://news.dartlang.org/2013/01/big-breaking-change-dartjs-bootstrap-file-moving-to-pub.html'
+].join('');
+console.error(warning);
+
 // Bootstrap support for Dart scripts on the page as this script.
 if (navigator.webkitStartDart) {
   if (!navigator.webkitStartDart()) {
diff --git a/compiler/dart-compiler.gyp b/compiler/dart-compiler.gyp
index 53a2db0..2dd44c0 100644
--- a/compiler/dart-compiler.gyp
+++ b/compiler/dart-compiler.gyp
@@ -53,7 +53,7 @@
             '<(PRODUCT_DIR)/analyzer/util/analyzer/guava/r09/guava-r09.jar',
           ],
           'action' : [
-            '../third_party/apache_ant/v1_7_1/bin/ant<(script_suffix)',
+            '../third_party/apache_ant/1.8.4/bin/ant<(script_suffix)',
             '-f', 'dart_analyzer.xml',
             '-Dbuild.dir=<(INTERMEDIATE_DIR)/<(_target_name)',
             '-Ddist.dir=<(PRODUCT_DIR)/analyzer',
diff --git a/compiler/dart_analyzer.xml b/compiler/dart_analyzer.xml
index 0d3acd6..01a5adc 100644
--- a/compiler/dart_analyzer.xml
+++ b/compiler/dart_analyzer.xml
@@ -74,7 +74,8 @@
            fork="true"
            debug="true"
            source="1.6"
-           target="1.6">
+           target="1.6"
+           includeAntRuntime="false">
       <classpath refid="classpath.compile"/>
     </javac>
     <!--
@@ -99,7 +100,8 @@
            fork="true"
            debug="true"
            source="1.6"
-           target="1.6">
+           target="1.6"
+           includeAntRuntime="false">
       <classpath refid="classpath.compile.tests"/>
     </javac>
     <!--
diff --git a/compiler/dartium.gyp b/compiler/dartium.gyp
index 91f0ec4..3be681b 100644
--- a/compiler/dartium.gyp
+++ b/compiler/dartium.gyp
@@ -23,7 +23,7 @@
             'dummy_target',
           ],
           'action' : [
-            '../third_party/apache_ant/v1_7_1/bin/ant',
+            '../third_party/apache_ant/1.8.4/bin/ant',
             '-Dbuild.dir=<(PRODUCT_DIR)/ant-out',
             'clean',
             'dist',
diff --git a/dart.gyp b/dart.gyp
index 72827a0..4978590 100644
--- a/dart.gyp
+++ b/dart.gyp
@@ -117,19 +117,25 @@
       'target_name': 'samples',
       'type': 'none',
       'conditions': [
-         ['OS=="android"', {
-            'dependencies': [
-              'samples/android_sample/android_sample.gyp:android_sample',
-            ],
+        ['OS=="android"', {
+           'dependencies': [
+             'samples/android_sample/android_sample.gyp:android_sample',
+           ],
           },
         ],
-         ['OS!="android"', {
-            'dependencies': [
-              'samples/sample_extension/sample_extension.gyp:sample_extension',
-            ],
+        ['OS=="win"', {
+           'dependencies': [
+             'samples/sample_extension/sample_extension.gyp:sample_extension',
+           ],
           },
-        ]
-      ],
+        ],
+        ['OS=="mac" or OS=="linux"', {
+           'dependencies': [
+             'samples/sample_extension/sample_extension.gyp:sample_extension',
+           ],
+          },
+        ],
+      ]
     },
     {
       'target_name': 'packages',
diff --git a/pkg/http/lib/src/multipart_request.dart b/pkg/http/lib/src/multipart_request.dart
index 0272a0b..b5ca43c 100644
--- a/pkg/http/lib/src/multipart_request.dart
+++ b/pkg/http/lib/src/multipart_request.dart
@@ -94,7 +94,7 @@
     headers['content-transfer-encoding'] = 'binary';
     super.finalize();
 
-    var controller = new StreamController<List<int>>.singleSubscription();
+    var controller = new StreamController<List<int>>();
 
     void writeAscii(String string) {
       assert(isPlainAscii(string));
@@ -123,7 +123,7 @@
       controller.close();
     });
 
-    return new ByteStream(controller);
+    return new ByteStream(controller.stream);
   }
 
   /// All character codes that are valid in multipart boundaries. From
diff --git a/pkg/http/lib/src/streamed_request.dart b/pkg/http/lib/src/streamed_request.dart
index ded21e0..a87d27b 100644
--- a/pkg/http/lib/src/streamed_request.dart
+++ b/pkg/http/lib/src/streamed_request.dart
@@ -33,13 +33,13 @@
   /// Creates a new streaming request.
   StreamedRequest(String method, Uri url)
     : super(method, url),
-      _controller = new StreamController<List<int>>.singleSubscription();
+      _controller = new StreamController<List<int>>();
 
   /// Freezes all mutable fields other than [stream] and returns a
   /// single-subscription [ByteStream] that emits the data being written to
   /// [sink].
   ByteStream finalize() {
     super.finalize();
-    return new ByteStream(_controller);
+    return new ByteStream(_controller.stream);
   }
 }
diff --git a/pkg/http/lib/src/utils.dart b/pkg/http/lib/src/utils.dart
index bca314d..1449080 100644
--- a/pkg/http/lib/src/utils.dart
+++ b/pkg/http/lib/src/utils.dart
@@ -155,11 +155,11 @@
 ByteStream wrapInputStream(InputStream stream) {
   if (stream.closed) return emptyStream;
 
-  var controller = new StreamController.singleSubscription();
+  var controller = new StreamController();
   stream.onClosed = controller.close;
   stream.onData = () => controller.add(stream.read());
   stream.onError = (e) => controller.signalError(new AsyncError(e));
-  return new ByteStream(controller);
+  return new ByteStream(controller.stream);
 }
 
 // TODO(nweiz): remove this once issue 7785 is fixed.
@@ -242,10 +242,10 @@
 /// Creates a single-subscription stream that emits the items in [iter] and then
 /// ends.
 Stream streamFromIterable(Iterable iter) {
-  var stream = new StreamController.singleSubscription();
-  iter.forEach(stream.add);
-  stream.close();
-  return stream.stream;
+  var controller = new StreamController();
+  iter.forEach(controller.add);
+  controller.close();
+  return controller.stream;
 }
 
 // TODO(nweiz): remove this when issue 7787 is fixed.
@@ -253,8 +253,8 @@
 /// errors from [stream]. This is useful if [stream] is single-subscription but
 /// multiple subscribers are necessary.
 Pair<Stream, Stream> tee(Stream stream) {
-  var controller1 = new StreamController.singleSubscription();
-  var controller2 = new StreamController.singleSubscription();
+  var controller1 = new StreamController();
+  var controller2 = new StreamController();
   stream.listen((value) {
     controller1.add(value);
     controller2.add(value);
diff --git a/pkg/http/test/mock_client_test.dart b/pkg/http/test/mock_client_test.dart
index 02e713b..1ffc373 100644
--- a/pkg/http/test/mock_client_test.dart
+++ b/pkg/http/test/mock_client_test.dart
@@ -35,13 +35,13 @@
   test('handles a streamed request', () {
     var client = new MockClient.streaming((request, bodyStream) {
       return bodyStream.bytesToString().then((bodyString) {
-        var stream = new StreamController<List<int>>.singleSubscription();
+        var controller = new StreamController<List<int>>();
         async.then((_) {
-          stream.add('Request body was "$bodyString"'.charCodes);
-          stream.close();
+          controller.add('Request body was "$bodyString"'.charCodes);
+          controller.close();
         });
 
-        return new http.StreamedResponse(stream, 200, -1);
+        return new http.StreamedResponse(controller.stream, 200, -1);
       });
     });
 
diff --git a/pkg/http/test/multipart_test.dart b/pkg/http/test/multipart_test.dart
index ab6d25a..64fd330 100644
--- a/pkg/http/test/multipart_test.dart
+++ b/pkg/http/test/multipart_test.dart
@@ -156,8 +156,8 @@
 
   test('with a stream file', () {
     var request = new http.MultipartRequest('POST', dummyUrl);
-    var stream = new StreamController.singleSubscription();
-    request.files.add(new http.MultipartFile('file', stream, 5));
+    var controller = new StreamController();
+    request.files.add(new http.MultipartFile('file', controller.stream, 5));
 
     expect(request, bodyMatches('''
         --{{boundary}}
@@ -168,14 +168,14 @@
         --{{boundary}}--
         '''));
 
-    stream.add([104, 101, 108, 108, 111]);
-    stream.close();
+    controller.add([104, 101, 108, 108, 111]);
+    controller.close();
   });
 
   test('with an empty stream file', () {
     var request = new http.MultipartRequest('POST', dummyUrl);
-    var stream = new StreamController.singleSubscription();
-    request.files.add(new http.MultipartFile('file', stream, 0));
+    var controller = new StreamController();
+    request.files.add(new http.MultipartFile('file', controller.stream, 0));
 
     expect(request, bodyMatches('''
         --{{boundary}}
@@ -186,7 +186,7 @@
         --{{boundary}}--
         '''));
 
-    stream.close();
+    controller.close();
   });
 
   test('with a byte file', () {
diff --git a/pkg/http/test/response_test.dart b/pkg/http/test/response_test.dart
index db19f88..252df4a 100644
--- a/pkg/http/test/response_test.dart
+++ b/pkg/http/test/response_test.dart
@@ -44,26 +44,27 @@
 
   group('.fromStream()', () {
     test('sets body', () {
-      var stream = new StreamController.singleSubscription();
-      var streamResponse = new http.StreamedResponse(stream, 200, 13);
+      var controller = new StreamController();
+      var streamResponse = new http.StreamedResponse(
+          controller.stream, 200, 13);
       var future = http.Response.fromStream(streamResponse)
         .then((response) => response.body);
       expect(future, completion(equals("Hello, world!")));
 
-      stream.add([72, 101, 108, 108, 111, 44, 32]);
-      stream.add([119, 111, 114, 108, 100, 33]);
-      stream.close();
+      controller.add([72, 101, 108, 108, 111, 44, 32]);
+      controller.add([119, 111, 114, 108, 100, 33]);
+      controller.close();
     });
 
     test('sets bodyBytes', () {
-      var stream = new StreamController.singleSubscription();
-      var streamResponse = new http.StreamedResponse(stream, 200, 5);
+      var controller = new StreamController();
+      var streamResponse = new http.StreamedResponse(controller.stream, 200, 5);
       var future = http.Response.fromStream(streamResponse)
         .then((response) => response.bodyBytes);
       expect(future, completion(equals([104, 101, 108, 108, 111])));
 
-      stream.add([104, 101, 108, 108, 111]);
-      stream.close();
+      controller.add([104, 101, 108, 108, 111]);
+      controller.close();
     });
   });
 }
diff --git a/pkg/http/test/utils.dart b/pkg/http/test/utils.dart
index 003cf39..66ab824 100644
--- a/pkg/http/test/utils.dart
+++ b/pkg/http/test/utils.dart
@@ -138,7 +138,7 @@
   }
 }
 
-// TODO(nweiz): remove this once it's built in to unittest
+// TODO(nweiz): remove this once it's built in to unittest (issue 7922).
 /// A matcher for StateErrors.
 const isStateError = const _StateError();
 
diff --git a/pkg/intl/test/find_default_locale_browser_test.dart b/pkg/intl/test/find_default_locale_browser_test.dart
index 51fdaf6..1cc177eb 100644
--- a/pkg/intl/test/find_default_locale_browser_test.dart
+++ b/pkg/intl/test/find_default_locale_browser_test.dart
@@ -21,7 +21,11 @@
 
 verifyLocale(_) {
   expect(Intl.systemLocale, isNot(equals("xx_YY")));
+  // Allow either en_US or just en type locales. Windows in particular may
+  // give us just ru for ru_RU
   var pattern = new RegExp(r"\w\w_[A-Z0-9]+");
+  var shortPattern = new RegExp(r"\w\w");
   var match = pattern.hasMatch(Intl.systemLocale);
-  expect(match, isTrue);
+  var shortMatch = shortPattern.hasMatch(Intl.systemLocale);
+  expect(match || shortMatch, isTrue);
 }
diff --git a/pkg/intl/test/find_default_locale_standalone_test.dart b/pkg/intl/test/find_default_locale_standalone_test.dart
index 82ebd28..b27b578 100644
--- a/pkg/intl/test/find_default_locale_standalone_test.dart
+++ b/pkg/intl/test/find_default_locale_standalone_test.dart
@@ -22,6 +22,8 @@
 verifyLocale(_) {
   expect(Intl.systemLocale, isNot(equals("xx_YY")));
   var pattern = new RegExp(r"\w\w_[A-Z0-9]+");
+  var shortPattern = new RegExp(r"\w\w");
   var match = pattern.hasMatch(Intl.systemLocale);
-  expect(match, isTrue);
+  var shortMatch = shortPattern.hasMatch(Intl.systemLocale);
+  expect(match || shortMatch, isTrue);
 }
diff --git a/pkg/serialization/lib/serialization.dart b/pkg/serialization/lib/serialization.dart
index d3e437b..7225476 100644
--- a/pkg/serialization/lib/serialization.dart
+++ b/pkg/serialization/lib/serialization.dart
@@ -87,7 +87,7 @@
  *      addressToMap(a) => {"number" : a.number, "street" : a.street,
  *          "city" : a.city};
  *      createAddress(Map m) => new Address.create(m["number"], m["street"]);
- *      fillInAddress(Map m, Address a) => a.city = m["city"];
+ *      fillInAddress(Address a, Map m) => a.city = m["city"];
  *      var serialization = new Serialization()
  *        ..addRule(
  *            new ClosureRule(anAddress.runtimeType,
diff --git a/pkg/serialization/lib/src/serialization_rule.dart b/pkg/serialization/lib/src/serialization_rule.dart
index d9aed0f..49cd82a 100644
--- a/pkg/serialization/lib/src/serialization_rule.dart
+++ b/pkg/serialization/lib/src/serialization_rule.dart
@@ -446,9 +446,14 @@
   clear() => _throw();
   removeAt(x) => _throw();
   removeLast() => _throw();
+  remove(x) => _throw();
+  removeAll(x) => _throw();
+  retainAll(x) => _throw();
+  removeMatching(x) => _throw();
+  retainMatching(x) => _throw();
   getRange(x, y) => _throw();
   setRange(x, y, z, [a]) => _throw();
   removeRange(x, y) => _throw();
   insertRange(x, y, [z]) => _throw();
   void set length(x) => _throw();
-}
\ No newline at end of file
+}
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index daaa757..c0ca3de 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -453,8 +453,11 @@
   VerifyLoaded(library);
   library = LoadGenericSnapshotCreationScript(Builtin::kCryptoLibrary);
   VerifyLoaded(library);
+  // TODO(regis): Reenable this code for arm and mips when possible.
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
   library = LoadGenericSnapshotCreationScript(Builtin::kIOLibrary);
   VerifyLoaded(library);
+#endif
 }
 
 
diff --git a/runtime/dart-runtime.gyp b/runtime/dart-runtime.gyp
index 435847d..45f4967 100644
--- a/runtime/dart-runtime.gyp
+++ b/runtime/dart-runtime.gyp
@@ -7,7 +7,6 @@
     'tools/gyp/runtime-configurations.gypi',
     'vm/vm.gypi',
     'bin/bin.gypi',
-    'embedders/android/android_embedder.gypi',
     'third_party/double-conversion/src/double-conversion.gypi',
     'third_party/jscre/jscre.gypi',
     '../tools/gyp/source_filter.gypi',
@@ -15,7 +14,19 @@
   'variables': {
     'version_in_cc_file': 'vm/version_in.cc',
     'version_cc_file': '<(SHARED_INTERMEDIATE_DIR)/version.cc',
+
+    # Disable the OpenGLUI embedder by default on desktop OSes.  Note,
+    # to build this on the desktop, you need GLUT installed.
+    'enable_openglui%': 0,
   },
+  'conditions': [
+    ['OS=="android" or enable_openglui==1', {
+        'includes': [
+          'embedders/openglui/openglui_embedder.gypi',
+        ],
+      },
+    ],
+  ],
   'targets': [
     {
       'target_name': 'libdart',
diff --git a/runtime/embedders/android/android_embedder.gypi b/runtime/embedders/android/android_embedder.gypi
deleted file mode 100644
index 629155c..0000000
--- a/runtime/embedders/android/android_embedder.gypi
+++ /dev/null
@@ -1,75 +0,0 @@
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-{
-  'conditions': [
-    ['OS=="android"',
-      {
-        'targets': [
-          {
-            # Dart shared library for Android.
-            'target_name': 'android_embedder',
-            'type': 'shared_library',
-            'dependencies': [
-              'libdart_lib_withcore',
-              'libdart_vm',
-              'libjscre',
-              'libdouble_conversion',
-              'generate_version_cc_file',
-            ],
-            'include_dirs': [
-              '../..',
-              '../../../third_party/android_tools/ndk/sources/android/native_app_glue',
-            ],
-            'defines': [
-              'DART_SHARED_LIB'
-            ],
-            'sources': [
-              '../../include/dart_api.h',
-              '../../include/dart_debugger_api.h',
-              '../../vm/dart_api_impl.cc',
-              '../../vm/debugger_api_impl.cc',
-              '../../vm/version.h',
-              'activity_handler.h',
-              'android_extension.cc',
-              'android_extension.h',
-              'context.h',
-              'dart_host.cc',
-              'dart_host.h',
-              'eventloop.cc',
-              'eventloop.h',
-              'graphics.cc',
-              'graphics.h',
-              'input_handler.h',
-              'input_service.cc',
-              'input_service.h',
-              'log.h',
-              'main.cc',
-              'resource.h',
-              'sound_service.cc',
-              'sound_service.h',
-              'support_android.cc',
-              'timer.cc',
-              'timer.h',
-              'types.h',
-              'vm_glue.cc',
-              'vm_glue.h',
-              '<(version_cc_file)',
-            ],
-            'link_settings': {
-              'libraries': [ '-llog', '-lc', '-landroid', '-lEGL', '-lGLESv2', '-lOpenSLES' ],
-              'ldflags': [
-                '-z', 'muldefs'
-              ],
-              'ldflags!': [
-                '-Wl,--exclude-libs=ALL',
-              ],
-            },
-          },
-        ],
-      },
-    ]
-  ],
-}
-
diff --git a/runtime/embedders/android/context.h b/runtime/embedders/android/context.h
deleted file mode 100644
index 560828c..0000000
--- a/runtime/embedders/android/context.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef EMBEDDERS_ANDROID_CONTEXT_H_
-#define EMBEDDERS_ANDROID_CONTEXT_H_
-
-class Graphics;
-class InputHandler;
-class SoundService;
-class Timer;
-class VMGlue;
-
-struct Context {
-  Graphics* graphics;
-  InputHandler* input_handler;
-  SoundService* sound_service;
-  Timer* timer;
-  VMGlue* vm_glue;
-};
-
-#endif  // EMBEDDERS_ANDROID_CONTEXT_H_
diff --git a/runtime/embedders/android/eventloop.cc b/runtime/embedders/android/eventloop.cc
deleted file mode 100644
index a3cdbb5..0000000
--- a/runtime/embedders/android/eventloop.cc
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "embedders/android/eventloop.h"
-#include "embedders/android/log.h"
-
-EventLoop::EventLoop(android_app* application)
-    : enabled_(false),
-      quit_(false),
-      application_(application),
-      activity_handler_(NULL),
-      input_handler_(NULL) {
-  application_->onAppCmd = ActivityCallback;
-  application_->onInputEvent = InputCallback;
-  application_->userData = this;
-}
-
-void EventLoop::Run(ActivityHandler* activity_handler,
-                    Context* context) {
-  int32_t result;
-  int32_t events;
-  android_poll_source* source;
-
-  // TODO(vsm): We need to link in native_app_glue.
-  // app_dummy();
-  activity_handler_ = activity_handler;
-  input_handler_ = context->input_handler;
-  LOGI("Starting event loop");
-  while (true) {
-    // If not enabled, block on events. If enabled, don't block
-    // so we can do useful work in onStep.
-    while ((result = ALooper_pollAll(enabled_ ? 0 : -1,
-                                     NULL,
-                                     &events,
-                                     reinterpret_cast<void**>(&source))) >= 0) {
-      if (source != NULL) {
-        source->process(application_, source);
-      }
-      if (application_->destroyRequested) {
-        return;
-      }
-    }
-    if (enabled_ && !quit_) {
-      LOGI("step");
-      if (activity_handler_->OnStep() != 0) {
-        quit_ = true;
-        ANativeActivity_finish(application_->activity);
-      }
-    }
-  }
-}
-
-// Called when we gain focus.
-void EventLoop::Activate() {
-  LOGI("activate");
-  if (!enabled_ && application_->window != NULL) {
-    quit_ = false;
-    enabled_ = true;
-    if (activity_handler_->OnActivate() != 0) {
-      quit_ = true;
-      ANativeActivity_finish(application_->activity);
-    }
-  }
-}
-
-// Called when we lose focus.
-void EventLoop::Deactivate() {
-  LOGI("deactivate");
-  if (enabled_) {
-    activity_handler_->OnDeactivate();
-    enabled_ = false;
-  }
-}
-
-void EventLoop::ProcessActivityEvent(int32_t command) {
-  switch (command) {
-    case APP_CMD_CONFIG_CHANGED:
-      activity_handler_->OnConfigurationChanged();
-      break;
-    case APP_CMD_INIT_WINDOW:
-      activity_handler_->OnCreateWindow();
-      break;
-    case APP_CMD_DESTROY:
-      activity_handler_->OnDestroy();
-      break;
-    case APP_CMD_GAINED_FOCUS:
-      Activate();
-      activity_handler_->OnGainedFocus();
-      break;
-    case APP_CMD_LOST_FOCUS:
-      activity_handler_->OnLostFocus();
-      Deactivate();
-      break;
-    case APP_CMD_LOW_MEMORY:
-      activity_handler_->OnLowMemory();
-      break;
-    case APP_CMD_PAUSE:
-      activity_handler_->OnPause();
-      Deactivate();
-      break;
-    case APP_CMD_RESUME:
-      activity_handler_->OnResume();
-      break;
-    case APP_CMD_SAVE_STATE:
-      activity_handler_->OnSaveState(&application_->savedState,
-                                    &application_->savedStateSize);
-      break;
-    case APP_CMD_START:
-      activity_handler_->OnStart();
-      break;
-    case APP_CMD_STOP:
-      activity_handler_->OnStop();
-      break;
-    case APP_CMD_TERM_WINDOW:
-      activity_handler_->OnDestroyWindow();
-      Deactivate();
-      break;
-    default:
-      break;
-  }
-}
-
-int32_t EventLoop::ProcessInputEvent(AInputEvent* event) {
-  int32_t event_type = AInputEvent_getType(event);
-  LOGI("Got input event type %d", event_type);
-  switch (event_type) {
-    case AINPUT_EVENT_TYPE_MOTION:
-      if (AInputEvent_getSource(event) == AINPUT_SOURCE_TOUCHSCREEN) {
-          return input_handler_->OnTouchEvent(event);
-      }
-      break;
-    case AINPUT_EVENT_TYPE_KEY:
-      return input_handler_->OnKeyEvent(event);
-  }
-  return 0;
-}
-
-void EventLoop::ActivityCallback(android_app* application, int32_t command) {
-  EventLoop* event_loop = reinterpret_cast<EventLoop*>(application->userData);
-  event_loop->ProcessActivityEvent(command);
-}
-
-int32_t EventLoop::InputCallback(android_app* application,
-                                 AInputEvent* event) {
-  EventLoop* event_loop = reinterpret_cast<EventLoop*>(application->userData);
-  return event_loop->ProcessInputEvent(event);
-}
diff --git a/runtime/embedders/android/eventloop.h b/runtime/embedders/android/eventloop.h
deleted file mode 100644
index ffc52a7..0000000
--- a/runtime/embedders/android/eventloop.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef EMBEDDERS_ANDROID_EVENTLOOP_H_
-#define EMBEDDERS_ANDROID_EVENTLOOP_H_
-
-#include <android_native_app_glue.h>
-#include "embedders/android/activity_handler.h"
-#include "embedders/android/context.h"
-#include "embedders/android/input_handler.h"
-
-class EventLoop {
-  public:
-    explicit EventLoop(android_app* application);
-    void Run(ActivityHandler* activityHandler, Context* context);
-
-  protected:
-    void Activate();
-    void Deactivate();
-    void ProcessActivityEvent(int32_t command);
-    int32_t ProcessInputEvent(AInputEvent* event);
-
-    static void ActivityCallback(android_app* application, int32_t command);
-    static int32_t InputCallback(android_app* application, AInputEvent* event);
-
-  private:
-    bool enabled_;
-    bool quit_;
-    android_app* application_;
-    ActivityHandler* activity_handler_;
-    InputHandler* input_handler_;
-};
-
-#endif  // EMBEDDERS_ANDROID_EVENTLOOP_H_
diff --git a/runtime/embedders/android/graphics.cc b/runtime/embedders/android/graphics.cc
deleted file mode 100644
index 3d73c8b..0000000
--- a/runtime/embedders/android/graphics.cc
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "embedders/android/graphics.h"
-
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-
-#include "embedders/android/log.h"
-
-extern void CheckGLError(const char *function);
-
-Graphics::Graphics(android_app* application, Timer* timer)
-    : application_(application),
-      timer_(timer),
-      width_(0),
-      height_(0),
-      display_(EGL_NO_DISPLAY),
-      surface_(EGL_NO_SURFACE),
-      context_(EGL_NO_CONTEXT) {
-}
-
-const int32_t& Graphics::height() {
-  return height_;
-}
-
-const int32_t& Graphics::width() {
-  return width_;
-}
-
-int32_t Graphics::Start() {
-  EGLint format, numConfigs;
-  EGLConfig config;
-  const EGLint attributes[] = {
-      EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
-      EGL_NONE
-  };
-  static const EGLint ctx_attribs[] = {
-    EGL_CONTEXT_CLIENT_VERSION, 2,
-    EGL_NONE
-  };
-
-  display_ = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-  if (display_ != EGL_NO_DISPLAY) {
-    LOGI("eglInitialize");
-    if (eglInitialize(display_, NULL, NULL)) {
-      LOGI("eglChooseConfig");
-      if (eglChooseConfig(display_, attributes, &config, 1, &numConfigs) &&
-          numConfigs > 0) {
-        LOGI("eglGetConfigAttrib");
-        if (eglGetConfigAttrib(display_, config,
-                               EGL_NATIVE_VISUAL_ID, &format)) {
-          ANativeWindow_setBuffersGeometry(application_->window, 0, 0, format);
-          surface_ = eglCreateWindowSurface(display_, config,
-                              (EGLNativeWindowType)application_->window, NULL);
-          if (surface_ != EGL_NO_SURFACE) {
-            LOGI("eglCreateContext");
-            context_ = eglCreateContext(display_, config, EGL_NO_CONTEXT,
-                                        ctx_attribs);
-            if (context_ != EGL_NO_CONTEXT) {
-              if (eglMakeCurrent(display_, surface_, surface_, context_) &&
-                  eglQuerySurface(display_, surface_, EGL_WIDTH, &width_) &&
-                  width_ > 0 &&
-                  eglQuerySurface(display_, surface_, EGL_HEIGHT, &height_) &&
-                  height_ > 0) {
-                SetViewport(0, 0, width_, height_);
-                return 0;
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  LOGE("Error starting graphics");
-  Stop();
-  return -1;
-}
-
-void Graphics::Stop() {
-  LOGI("Stopping graphics");
-  if (display_ != EGL_NO_DISPLAY) {
-    eglMakeCurrent(display_, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-    if (context_ != EGL_NO_CONTEXT) {
-      eglDestroyContext(display_, context_);
-      context_ = EGL_NO_CONTEXT;
-    }
-    if (surface_ != EGL_NO_SURFACE) {
-      eglDestroySurface(display_, surface_);
-      surface_ = EGL_NO_SURFACE;
-    }
-    eglTerminate(display_);
-    display_ = EGL_NO_DISPLAY;
-  }
-}
-
-int32_t Graphics::Update() {
-  return 0;
-}
-
-void Graphics::SwapBuffers() {
-  EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-  EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
-  eglSwapBuffers(display, surface);
-}
-
-void Graphics::SetViewport(int left, int top, int width, int height) {
-  glViewport(left, top, width, height);
-  CheckGLError("glViewPort");
-}
-
-int Graphics::BuildProgram(const char* vertexShaderSource,
-                                 const char* fragmentShaderSource) const {
-  int vertexShader = BuildShader(vertexShaderSource, GL_VERTEX_SHADER);
-  int fragmentShader = BuildShader(fragmentShaderSource, GL_FRAGMENT_SHADER);
-  if (vertexShader < 0 || fragmentShader < 0) {
-    return -1;
-  }
-
-  GLuint programHandle = glCreateProgram();
-  glAttachShader(programHandle, static_cast<GLuint>(vertexShader));
-  glAttachShader(programHandle, static_cast<GLuint>(fragmentShader));
-  glLinkProgram(programHandle);
-
-  GLint linkSuccess;
-  glGetProgramiv(programHandle, GL_LINK_STATUS, &linkSuccess);
-  if (linkSuccess == GL_FALSE) {
-    GLint infoLogLength;
-    glGetProgramiv(programHandle, GL_INFO_LOG_LENGTH, &infoLogLength);
-    GLchar* strInfoLog = new GLchar[infoLogLength + 1];
-    glGetProgramInfoLog(programHandle, infoLogLength, NULL, strInfoLog);
-    strInfoLog[infoLogLength] = 0;
-    LOGE("Link failed: %s", strInfoLog);
-    delete[] strInfoLog;
-    return -1;
-  }
-  return static_cast<int>(programHandle);
-}
-
-int Graphics::BuildShader(const char* source, GLenum shaderType) const {
-  GLuint shaderHandle = glCreateShader(shaderType);
-  glShaderSource(shaderHandle, 1, &source, NULL);
-  glCompileShader(shaderHandle);
-
-  GLint compileSuccess;
-  glGetShaderiv(shaderHandle, GL_COMPILE_STATUS, &compileSuccess);
-
-  if (compileSuccess == GL_FALSE) {
-    GLint infoLogLength = 0;
-    glGetShaderiv(shaderHandle, GL_INFO_LOG_LENGTH, &infoLogLength);
-    GLchar* strInfoLog = new GLchar[infoLogLength + 1];
-    glGetShaderInfoLog(shaderHandle, infoLogLength, NULL, strInfoLog);
-    strInfoLog[infoLogLength] = 0;
-    LOGE("Shader compile failed: %s", strInfoLog);
-    delete [] strInfoLog;
-    return -1;
-  }
-  return static_cast<int>(shaderHandle);
-}
-
diff --git a/runtime/embedders/android/graphics.h b/runtime/embedders/android/graphics.h
deleted file mode 100644
index 58e8922..0000000
--- a/runtime/embedders/android/graphics.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef EMBEDDERS_ANDROID_GRAPHICS_H_
-#define EMBEDDERS_ANDROID_GRAPHICS_H_
-
-#include <android_native_app_glue.h>
-#include <EGL/egl.h>
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-
-#include "embedders/android/timer.h"
-
-class Graphics {
-  public:
-    Graphics(android_app* application, Timer* timer);
-
-    const int32_t& height();
-    const int32_t& width();
-    int32_t Start();
-    void Stop();
-    void SwapBuffers();
-    int32_t Update();
-    void SetViewport(int left, int top, int width, int height);
-    int BuildProgram(const char* vertexShaderSource,
-                        const char* fragmentShaderSource) const;
-    int BuildShader(const char* source, GLenum shaderType) const;
-
-  private:
-    android_app* application_;
-    Timer* timer_;
-    int32_t width_, height_;
-    EGLDisplay display_;
-    EGLSurface surface_;
-    EGLContext context_;
-};
-
-#endif  // EMBEDDERS_ANDROID_GRAPHICS_H_
diff --git a/runtime/embedders/android/input_handler.h b/runtime/embedders/android/input_handler.h
deleted file mode 100644
index b3f80ae..0000000
--- a/runtime/embedders/android/input_handler.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef EMBEDDERS_ANDROID_INPUT_HANDLER_H_
-#define EMBEDDERS_ANDROID_INPUT_HANDLER_H_
-
-#include <android/input.h>
-
-class InputHandler {
-  public:
-    virtual int32_t Start() { return 0; }
-    virtual bool OnTouchEvent(AInputEvent* event) = 0;
-    virtual bool OnKeyEvent(AInputEvent* event) = 0;
-    virtual ~InputHandler() {}
-};
-
-#endif  // EMBEDDERS_ANDROID_INPUT_HANDLER_H_
diff --git a/runtime/embedders/android/input_service.cc b/runtime/embedders/android/input_service.cc
deleted file mode 100644
index 68410f1..0000000
--- a/runtime/embedders/android/input_service.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include <android_native_app_glue.h>
-#include <cmath>
-
-#include "embedders/android/input_service.h"
-#include "embedders/android/log.h"
-
-InputService::InputService(android_app* application,
-                           VMGlue* vm_glue,
-                           const int32_t& width,
-                           const int32_t& height) :
-  application_(application),
-  vm_glue_(vm_glue),
-  width_(width),
-  height_(height) {
-}
-
-int32_t InputService::Start() {
-  if ((width_ == 0) || (height_ == 0)) {
-    return -1;
-  }
-  return 0;
-}
-
-bool InputService::OnTouchEvent(AInputEvent* event) {
-  int32_t type = AMotionEvent_getAction(event);
-  const char *function = NULL;
-  switch (type) {
-    case AMOTION_EVENT_ACTION_DOWN:
-      function = "onMotionDown";
-      break;
-    case AMOTION_EVENT_ACTION_UP:
-      function = "onMotionUp";
-      break;
-    case AMOTION_EVENT_ACTION_MOVE:
-      function = "onMotionMove";
-      break;
-    case AMOTION_EVENT_ACTION_CANCEL:
-      function = "onMotionCancel";
-      break;
-    case AMOTION_EVENT_ACTION_OUTSIDE:
-      function = "onMotionOutside";
-      break;
-    case AMOTION_EVENT_ACTION_POINTER_DOWN:
-      function = "onMotionPointerDown";
-      break;
-    case AMOTION_EVENT_ACTION_POINTER_UP:
-      function = "onMotionPointerUp";
-      break;
-    default:
-      break;
-  }
-  if (function != NULL) {
-    // For now we just get the last coords.
-    float move_x = AMotionEvent_getX(event, 0);
-    float move_y = AMotionEvent_getY(event, 0);
-    int64_t when = AMotionEvent_getEventTime(event);
-    LOGI("Got motion event %d at %f, %f", type, move_x, move_y);
-
-    if (vm_glue_->OnMotionEvent(function, when, move_x, move_y) != 0) {
-      return false;
-    }
-  } else {
-    return false;
-  }
-  return true;
-}
-
-bool InputService::OnKeyEvent(AInputEvent* event) {
-  int32_t type = AKeyEvent_getAction(event);
-  const char *function = NULL;
-  switch (type) {
-    case AKEY_EVENT_ACTION_DOWN:
-      function = "onKeyDown";
-      break;
-    case AKEY_EVENT_ACTION_UP:
-      function = "onKeyUp";
-      break;
-    case AKEY_EVENT_ACTION_MULTIPLE:
-      function = "onKeyMultiple";
-      break;
-  }
-  if (function != NULL) {
-    int32_t flags = AKeyEvent_getFlags(event);
-    /* Get the key code of the key event.
-     * This is the physical key that was pressed, not the Unicode character. */
-    int32_t key_code = AKeyEvent_getKeyCode(event);
-    /* Get the meta key state. */
-    int32_t meta_state = AKeyEvent_getMetaState(event);
-    /* Get the repeat count of the event.
-     * For both key up an key down events, this is the number of times the key
-     * has repeated with the first down starting at 0 and counting up from
-     * there.  For multiple key events, this is the number of down/up pairs
-     * that have occurred. */
-    int32_t repeat = AKeyEvent_getRepeatCount(event);
-
-    /* Get the time of the most recent key down event, in the	
-     * java.lang.System.nanoTime() time base.  If this is a down event,	
-     * this will be the same as eventTime.	
-     * Note that when chording keys, this value is the down time of the most	
-     * recently pressed key, which may not be the same physical key of this	
-     * event. */	
-    // TODO(gram): Use or remove this.
-    // int64_t key_down_time = AKeyEvent_getDownTime(event);
-
-    /* Get the time this event occurred, in the
-     * java.lang.System.nanoTime() time base. */
-    int64_t when = AKeyEvent_getEventTime(event);
-
-    LOGI("Got key event %d %d", type, key_code);
-    if (vm_glue_->OnKeyEvent(function, when, flags, key_code,
-                             meta_state, repeat) != 0) {
-      return false;
-    }
-  } else {
-    return false;
-  }
-  return true;
-}
diff --git a/runtime/embedders/android/input_service.h b/runtime/embedders/android/input_service.h
deleted file mode 100644
index a327db8..0000000
--- a/runtime/embedders/android/input_service.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef EMBEDDERS_ANDROID_INPUT_SERVICE_H_
-#define EMBEDDERS_ANDROID_INPUT_SERVICE_H_
-
-#include <android_native_app_glue.h>
-#include "embedders/android/input_handler.h"
-#include "embedders/android/types.h"
-#include "embedders/android/vm_glue.h"
-
-class InputService : public InputHandler {
-  public:
-    InputService(android_app* application,
-                 VMGlue* vm_glue,
-                 const int32_t& width,
-                 const int32_t& height);
-
-  public:
-    int32_t Start();
-    bool OnTouchEvent(AInputEvent* event);
-    bool OnKeyEvent(AInputEvent* event);
-
-  private:
-    android_app* application_;
-    VMGlue* vm_glue_;
-    const int32_t& width_, &height_;
-};
-
-#endif  // EMBEDDERS_ANDROID_INPUT_SERVICE_H_
diff --git a/runtime/embedders/android/main.cc b/runtime/embedders/android/main.cc
deleted file mode 100644
index a0bca2b..0000000
--- a/runtime/embedders/android/main.cc
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "embedders/android/context.h"
-#include "embedders/android/dart_host.h"
-#include "embedders/android/eventloop.h"
-#include "embedders/android/graphics.h"
-#include "embedders/android/input_service.h"
-#include "embedders/android/vm_glue.h"
-
-SoundService* psound_service;
-
-void android_main(android_app* application) {
-  Timer timer;
-  Graphics graphics(application, &timer);
-  VMGlue vm_glue(&graphics);
-  InputService input_handler(application, &vm_glue,
-      graphics.width(), graphics.height());
-  SoundService sound_service(application);
-  Context app_context;
-  app_context.graphics = &graphics;
-  app_context.input_handler = &input_handler;
-  app_context.sound_service = &sound_service;
-  app_context.timer = &timer;
-  app_context.vm_glue = &vm_glue;
-  EventLoop eventLoop(application);
-  DartHost host(&app_context);
-  eventLoop.Run(&host, &app_context);
-}
-
-int32_t PlayBackgroundSound(const char* path) {
-  return psound_service->PlayBackground(path);
-}
-
-void StopBackgroundSound() {
-  psound_service->StopBackground();
-}
-
-int32_t LoadSoundSample(const char* path) {
-  return psound_service->LoadSample(path);
-}
-
-int32_t PlaySoundSample(const char* path) {
-  return psound_service->PlaySample(path);
-}
diff --git a/runtime/embedders/android/timer.cc b/runtime/embedders/android/timer.cc
deleted file mode 100644
index ccfd18b..0000000
--- a/runtime/embedders/android/timer.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "embedders/android/timer.h"
-
-Timer::Timer() : elapsed_(0.0f), last_time_(0.0) {
-}
-
-void Timer::reset() {
-  elapsed_ = 0.0f;
-  last_time_ = now();
-}
-
-void Timer::update() {
-  double current = now();
-  elapsed_ = (current - last_time_);
-  last_time_ = current;
-}
-
-double Timer::now() {
-  timespec timeval;
-  clock_gettime(CLOCK_MONOTONIC, &timeval);
-  return timeval.tv_sec + (timeval.tv_nsec * 1.0e-9);
-}
-
-float Timer::elapsed() {
-  return elapsed_;
-}
diff --git a/runtime/embedders/openglui/android/android_graphics_handler.cc b/runtime/embedders/openglui/android/android_graphics_handler.cc
new file mode 100644
index 0000000..3c694a7
--- /dev/null
+++ b/runtime/embedders/openglui/android/android_graphics_handler.cc
@@ -0,0 +1,81 @@
+// 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.
+
+#include "embedders/openglui/android/android_graphics_handler.h"
+#include "embedders/openglui/common/log.h"
+
+AndroidGraphicsHandler::AndroidGraphicsHandler(android_app* application)
+    : GLGraphicsHandler(),
+      application_(application),
+      display_(EGL_NO_DISPLAY),
+      surface_(EGL_NO_SURFACE),
+      context_(EGL_NO_CONTEXT) {
+}
+
+int32_t AndroidGraphicsHandler::Start() {
+  EGLint format, numConfigs;
+  EGLConfig config;
+  const EGLint attributes[] = {
+      EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+      EGL_NONE
+  };
+  static const EGLint ctx_attribs[] = {
+    EGL_CONTEXT_CLIENT_VERSION, 2,
+    EGL_NONE
+  };
+
+  display_ = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+  if (display_ != EGL_NO_DISPLAY) {
+    LOGI("eglInitialize");
+    if (eglInitialize(display_, NULL, NULL)) {
+      LOGI("eglChooseConfig");
+      if (eglChooseConfig(display_, attributes, &config, 1, &numConfigs) &&
+          numConfigs > 0) {
+        LOGI("eglGetConfigAttrib");
+        if (eglGetConfigAttrib(display_, config,
+                               EGL_NATIVE_VISUAL_ID, &format)) {
+          ANativeWindow_setBuffersGeometry(application_->window, 0, 0, format);
+          surface_ = eglCreateWindowSurface(display_, config,
+                              (EGLNativeWindowType)application_->window, NULL);
+          if (surface_ != EGL_NO_SURFACE) {
+            LOGI("eglCreateContext");
+            context_ = eglCreateContext(display_, config, EGL_NO_CONTEXT,
+                                        ctx_attribs);
+            if (context_ != EGL_NO_CONTEXT) {
+              if (eglMakeCurrent(display_, surface_, surface_, context_) &&
+                  eglQuerySurface(display_, surface_, EGL_WIDTH, &width_) &&
+                  width_ > 0 &&
+                  eglQuerySurface(display_, surface_, EGL_HEIGHT, &height_) &&
+                  height_ > 0) {
+                SetViewport(0, 0, width_, height_);
+                return 0;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  LOGE("Error starting graphics");
+  Stop();
+  return -1;
+}
+
+void AndroidGraphicsHandler::Stop() {
+  LOGI("Stopping graphics");
+  if (display_ != EGL_NO_DISPLAY) {
+    eglMakeCurrent(display_, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    if (context_ != EGL_NO_CONTEXT) {
+      eglDestroyContext(display_, context_);
+      context_ = EGL_NO_CONTEXT;
+    }
+    if (surface_ != EGL_NO_SURFACE) {
+      eglDestroySurface(display_, surface_);
+      surface_ = EGL_NO_SURFACE;
+    }
+    eglTerminate(display_);
+    display_ = EGL_NO_DISPLAY;
+  }
+}
+
diff --git a/runtime/embedders/openglui/android/android_graphics_handler.h b/runtime/embedders/openglui/android/android_graphics_handler.h
new file mode 100644
index 0000000..9684688
--- /dev/null
+++ b/runtime/embedders/openglui/android/android_graphics_handler.h
@@ -0,0 +1,26 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_ANDROID_ANDROID_GRAPHICS_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_ANDROID_ANDROID_GRAPHICS_HANDLER_H_
+
+#include <android_native_app_glue.h>
+#include "embedders/openglui/common/gl_graphics_handler.h"
+
+class AndroidGraphicsHandler : public GLGraphicsHandler {
+  public:
+    explicit AndroidGraphicsHandler(android_app* application);
+
+    int32_t Start();
+    void Stop();
+
+  private:
+    android_app* application_;
+    EGLDisplay display_;
+    EGLSurface surface_;
+    EGLContext context_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_ANDROID_ANDROID_GRAPHICS_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/android/android_input_handler.h b/runtime/embedders/openglui/android/android_input_handler.h
new file mode 100644
index 0000000..b39510a
--- /dev/null
+++ b/runtime/embedders/openglui/android/android_input_handler.h
@@ -0,0 +1,33 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef EMBEDDERS_OPENGLUI_ANDROID_ANDROID_INPUT_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_ANDROID_ANDROID_INPUT_HANDLER_H_
+
+#include "embedders/openglui/common/graphics_handler.h"
+#include "embedders/openglui/common/input_handler.h"
+
+class AndroidInputHandler : public InputHandler {
+  public:
+    AndroidInputHandler(VMGlue* vm_glue,
+                        GraphicsHandler* graphics_handler)
+      : InputHandler(vm_glue),
+        graphics_handler_(graphics_handler) {
+    }
+
+  public:
+    int32_t Start() {
+      if (graphics_handler_->width() == 0 ||
+          graphics_handler_->height() == 0) {
+        return -1;
+      }
+      return 0;
+    }
+
+  private:
+    GraphicsHandler* graphics_handler_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_ANDROID_ANDROID_INPUT_HANDLER_H_
+
diff --git a/runtime/embedders/android/log.h b/runtime/embedders/openglui/android/android_log.h
similarity index 74%
rename from runtime/embedders/android/log.h
rename to runtime/embedders/openglui/android/android_log.h
index 5ca638f..ff82d0b 100644
--- a/runtime/embedders/android/log.h
+++ b/runtime/embedders/openglui/android/android_log.h
@@ -2,8 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#ifndef EMBEDDERS_ANDROID_LOG_H_
-#define EMBEDDERS_ANDROID_LOG_H_
+#ifndef EMBEDDERS_OPENGLUI_ANDROID_ANDROID_LOG_H_
+#define EMBEDDERS_OPENGLUI_ANDROID_ANDROID_LOG_H_
 
 #include <android/log.h>
 
@@ -13,4 +13,5 @@
 #define LOGI(...) LOGX(ANDROID_LOG_INFO, __VA_ARGS__)
 #define LOGE(...) LOGX(ANDROID_LOG_ERROR, __VA_ARGS__)
 
-#endif  // EMBEDDERS_ANDROID_LOG_H_
+#endif  // EMBEDDERS_OPENGLUI_ANDROID_ANDROID_LOG_H_
+
diff --git a/runtime/embedders/android/resource.h b/runtime/embedders/openglui/android/android_resource.h
similarity index 69%
rename from runtime/embedders/android/resource.h
rename to runtime/embedders/openglui/android/android_resource.h
index 87c1b48..85e0614 100644
--- a/runtime/embedders/android/resource.h
+++ b/runtime/embedders/openglui/android/android_resource.h
@@ -2,26 +2,20 @@
 // for 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 EMBEDDERS_ANDROID_RESOURCE_H_
-#define EMBEDDERS_ANDROID_RESOURCE_H_
+#ifndef EMBEDDERS_OPENGLUI_ANDROID_ANDROID_RESOURCE_H_
+#define EMBEDDERS_OPENGLUI_ANDROID_ANDROID_RESOURCE_H_
 
 #include <android_native_app_glue.h>
 
-#include "embedders/android/log.h"
+#include "embedders/openglui/common/log.h"
+#include "embedders/openglui/common/resource.h"
 
-class Resource {
+class AndroidResource : public Resource {
   public:
-    Resource(android_app* application, const char* path)
-        :  asset_manager_(application->activity->assetManager),
-           path_(path),
-           asset_(NULL),
-           descriptor_(-1),
-           start_(0),
-           length_(-1) {
-    }
-
-    const char* path() {
-      return path_;
+    AndroidResource(android_app* application, const char* path)
+        : Resource(path),
+          asset_manager_(application->activity->assetManager),
+          asset_(NULL) {
     }
 
     int32_t descriptor() {
@@ -35,10 +29,6 @@
       return -1;
     }
 
-    off_t start() {
-      return start_;
-    }
-
     off_t length() {
       if (length_ < 0) {
         length_ = AAsset_getLength(asset_);
@@ -70,11 +60,8 @@
 
   private:
     AAssetManager* asset_manager_;
-    const char* path_;
     AAsset* asset_;
-    int32_t descriptor_;
-    off_t start_;
-    off_t length_;
 };
 
-#endif  // EMBEDDERS_ANDROID_RESOURCE_H_
+#endif  // EMBEDDERS_OPENGLUI_ANDROID_ANDROID_RESOURCE_H_
+
diff --git a/runtime/embedders/android/sound_service.cc b/runtime/embedders/openglui/android/android_sound_handler.cc
similarity index 86%
rename from runtime/embedders/android/sound_service.cc
rename to runtime/embedders/openglui/android/android_sound_handler.cc
index 484397e..6e97833 100644
--- a/runtime/embedders/android/sound_service.cc
+++ b/runtime/embedders/openglui/android/android_sound_handler.cc
@@ -2,13 +2,14 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#include "embedders/android/sound_service.h"
+#include "embedders/openglui/android/android_sound_handler.h"
 
-#include "embedders/android/log.h"
-#include "embedders/android/resource.h"
+#include "embedders/openglui/android/android_resource.h"
+#include "embedders/openglui/common/log.h"
 
-SoundService::SoundService(android_app* application)
-    : application_(application),
+AndroidSoundHandler::AndroidSoundHandler(android_app* application)
+    : SoundHandler(),
+      application_(application),
       engine_(NULL),
       engine_if_(NULL),
       output_mix_(NULL),
@@ -17,11 +18,11 @@
       background_player_seek_if_(NULL),
       sample_player_(NULL),
       sample_player_if_(NULL),
-      sample_player_queue_(NULL),
-      samples_() {
+      sample_player_queue_(NULL) {
+  SoundHandler::instance_ = this;
 }
 
-int32_t SoundService::Start() {
+int32_t AndroidSoundHandler::Start() {
   LOGI("Starting SoundService");
 
   const SLInterfaceID k_engine_mix_IIDs[] = { SL_IID_ENGINE };
@@ -53,7 +54,7 @@
   return -1;
 }
 
-void SoundService::Stop() {
+void AndroidSoundHandler::Stop() {
   StopBackground();
   if (output_mix_ != NULL) {
     (*output_mix_)->Destroy(output_mix_);
@@ -73,7 +74,7 @@
   samples_.clear();
 }
 
-int32_t SoundService::CreateAudioPlayer(SLEngineItf engine_if,
+int32_t AndroidSoundHandler::CreateAudioPlayer(SLEngineItf engine_if,
                                         const SLInterfaceID extra_if,
                                         SLDataSource data_source,
                                         SLDataSink data_sink,
@@ -104,10 +105,10 @@
   return -1;
 }
 
-int32_t SoundService::PlayBackground(const char* path) {
+int32_t AndroidSoundHandler::PlayBackground(const char* path) {
   LOGI("Creating audio player");
 
-  Resource resource(application_, path);
+  Resource resource(path);
   int fd = resource.descriptor();
   if (fd < 0) {
     LOGI("Could not open file %s", path);
@@ -169,7 +170,7 @@
   return 0;
 }
 
-void SoundService::StopBackground() {
+void AndroidSoundHandler::StopBackground() {
   if (background_player_if_ != NULL) {
     SLuint32 state;
     (*background_player_)->GetState(background_player_, &state);
@@ -185,7 +186,7 @@
   }
 }
 
-int32_t SoundService::StartSamplePlayer() {
+int32_t AndroidSoundHandler::StartSamplePlayer() {
   SLDataLocator_AndroidSimpleBufferQueue data_locator_in = {
     SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE,
     1
@@ -228,26 +229,7 @@
   return -1;
 }
 
-Sample* SoundService::GetSample(const char* path) {
-  for (samples_t::iterator sp = samples_.begin();
-       sp != samples_.end();
-       ++sp) {
-    Sample* sample = (*sp);
-    if (strcmp(sample->path(), path) == 0) {
-      return sample;
-    }
-  }
-  Sample* sample = new Sample(application_, path);
-  if (sample->Load() != 0) {
-    LOGI("Failed to load sample %s", path);
-    delete sample;
-    return NULL;
-  }
-  samples_.push_back(sample);
-  return sample;
-}
-
-int32_t SoundService::PlaySample(const char* path) {
+int32_t AndroidSoundHandler::PlaySample(const char* path) {
   SLuint32 state;
   (*sample_player_)->GetState(sample_player_, &state);
   if (state != SL_OBJECT_STATE_REALIZED) {
@@ -255,8 +237,8 @@
   } else {
     Sample* sample = GetSample(path);
     if (sample != NULL) {
-      int16_t* buffer = reinterpret_cast<int16_t*>(sample->buffer_);
-      off_t len = sample->length_;
+      int16_t* buffer = reinterpret_cast<int16_t*>(sample->buffer());
+      off_t len = sample->length();
 
       // Remove any current sample.
       int32_t res = (*sample_player_queue_)->Clear(sample_player_queue_);
diff --git a/runtime/embedders/android/sound_service.h b/runtime/embedders/openglui/android/android_sound_handler.h
similarity index 67%
rename from runtime/embedders/android/sound_service.h
rename to runtime/embedders/openglui/android/android_sound_handler.h
index 210fc68..027d644 100644
--- a/runtime/embedders/android/sound_service.h
+++ b/runtime/embedders/openglui/android/android_sound_handler.h
@@ -2,36 +2,31 @@
 // for 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 EMBEDDERS_ANDROID_SOUND_SERVICE_H_
-#define EMBEDDERS_ANDROID_SOUND_SERVICE_H_
+#ifndef EMBEDDERS_OPENGLUI_ANDROID_ANDROID_SOUND_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_ANDROID_ANDROID_SOUND_HANDLER_H_
 
 #include <android_native_app_glue.h>
 #include <SLES/OpenSLES.h>
 #include <SLES/OpenSLES_Android.h>
 #include <SLES/OpenSLES_AndroidConfiguration.h>
 #include <vector>
-#include "embedders/android/sample.h"
-#include "embedders/android/types.h"
 
-class SoundService {
+#include "embedders/openglui/common/sample.h"
+#include "embedders/openglui/common/sound_handler.h"
+#include "embedders/openglui/common/types.h"
+
+class AndroidSoundHandler : public SoundHandler {
   public:
-    explicit SoundService(android_app* application);
+    explicit AndroidSoundHandler(android_app* application);
     int32_t Start();
     void Stop();
 
     int32_t PlayBackground(const char* path);
     void StopBackground();
 
-    // Optional, for preloading.
-    int32_t LoadSample(const char* path) {
-       return (GetSample(path) == NULL) ? -1 : 0;
-    }
-
     int32_t PlaySample(const char* path);
 
   private:
-    typedef std::vector<Sample*> samples_t;
-
     int32_t CreateAudioPlayer(SLEngineItf engine_if,
                               const SLInterfaceID extra_if,
                               SLDataSource data_source,
@@ -40,7 +35,6 @@
                               SLPlayItf& player_if_out);
 
     int32_t StartSamplePlayer();
-    Sample* GetSample(const char* path);
 
     android_app* application_;
     SLObjectItf engine_;
@@ -52,9 +46,7 @@
     SLObjectItf sample_player_;
     SLPlayItf sample_player_if_;
     SLBufferQueueItf sample_player_queue_;
-    samples_t samples_;
 };
 
-int32_t PlayBackgroundSound(const char* path);
-void StopBackgroundSound();
-#endif  // EMBEDDERS_ANDROID_SOUND_SERVICE_H_
+#endif  // EMBEDDERS_OPENGLUI_ANDROID_ANDROID_SOUND_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/android/eventloop.cc b/runtime/embedders/openglui/android/eventloop.cc
new file mode 100644
index 0000000..db92107
--- /dev/null
+++ b/runtime/embedders/openglui/android/eventloop.cc
@@ -0,0 +1,238 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "embedders/openglui/android/eventloop.h"
+
+#include "embedders/openglui/common/log.h"
+
+EventLoop::EventLoop(android_app* application)
+    : enabled_(false),
+      quit_(false),
+      application_(application),
+      lifecycle_handler_(NULL),
+      input_handler_(NULL) {
+  application_->onAppCmd = ActivityCallback;
+  application_->onInputEvent = InputCallback;
+  application_->userData = this;
+}
+
+void EventLoop::Run(LifeCycleHandler* lifecycle_handler,
+                    InputHandler* input_handler) {
+  int32_t result;
+  int32_t events;
+  android_poll_source* source;
+
+  lifecycle_handler_ = lifecycle_handler;
+  input_handler_ = input_handler;
+  LOGI("Starting event loop");
+  while (true) {
+    // If not enabled, block on events. If enabled, don't block
+    // so we can do useful work in onStep.
+    while ((result = ALooper_pollAll(enabled_ ? 0 : -1,
+                                     NULL,
+                                     &events,
+                                     reinterpret_cast<void**>(&source))) >= 0) {
+      if (source != NULL) {
+        source->process(application_, source);
+      }
+      if (application_->destroyRequested) {
+        return;
+      }
+    }
+    if (enabled_ && !quit_) {
+      LOGI("step");
+      if (lifecycle_handler_->OnStep() != 0) {
+        quit_ = true;
+        ANativeActivity_finish(application_->activity);
+      }
+    }
+  }
+}
+
+// Called when we gain focus.
+void EventLoop::Activate() {
+  LOGI("activate");
+  if (!enabled_ && application_->window != NULL) {
+    quit_ = false;
+    enabled_ = true;
+    if (lifecycle_handler_->OnActivate() != 0) {
+      quit_ = true;
+      ANativeActivity_finish(application_->activity);
+    }
+  }
+}
+
+// Called when we lose focus.
+void EventLoop::Deactivate() {
+  LOGI("deactivate");
+  if (enabled_) {
+    lifecycle_handler_->OnDeactivate();
+    enabled_ = false;
+  }
+}
+
+void EventLoop::ProcessActivityEvent(int32_t command) {
+  switch (command) {
+    case APP_CMD_CONFIG_CHANGED:
+      lifecycle_handler_->OnConfigurationChanged();
+      break;
+    case APP_CMD_INIT_WINDOW:
+      lifecycle_handler_->OnCreateWindow();
+      break;
+    case APP_CMD_DESTROY:
+      lifecycle_handler_->OnDestroy();
+      break;
+    case APP_CMD_GAINED_FOCUS:
+      Activate();
+      lifecycle_handler_->OnGainedFocus();
+      break;
+    case APP_CMD_LOST_FOCUS:
+      lifecycle_handler_->OnLostFocus();
+      Deactivate();
+      break;
+    case APP_CMD_LOW_MEMORY:
+      lifecycle_handler_->OnLowMemory();
+      break;
+    case APP_CMD_PAUSE:
+      lifecycle_handler_->OnPause();
+      Deactivate();
+      break;
+    case APP_CMD_RESUME:
+      lifecycle_handler_->OnResume();
+      break;
+    case APP_CMD_SAVE_STATE:
+      lifecycle_handler_->OnSaveState(&application_->savedState,
+                                    &application_->savedStateSize);
+      break;
+    case APP_CMD_START:
+      lifecycle_handler_->OnStart();
+      break;
+    case APP_CMD_STOP:
+      lifecycle_handler_->OnStop();
+      break;
+    case APP_CMD_TERM_WINDOW:
+      lifecycle_handler_->OnDestroyWindow();
+      Deactivate();
+      break;
+    default:
+      break;
+  }
+}
+
+bool EventLoop::OnTouchEvent(AInputEvent* event) {
+  int32_t type = AMotionEvent_getAction(event);
+  MotionEvent motion_event;
+  switch (type) {
+    case AMOTION_EVENT_ACTION_DOWN:
+      motion_event = kMotionDown;
+      break;
+    case AMOTION_EVENT_ACTION_UP:
+      motion_event = kMotionUp;
+      break;
+    case AMOTION_EVENT_ACTION_MOVE:
+      motion_event = kMotionMove;
+      break;
+    case AMOTION_EVENT_ACTION_CANCEL:
+      motion_event = kMotionCancel;
+      break;
+    case AMOTION_EVENT_ACTION_OUTSIDE:
+      motion_event = kMotionOutside;
+      break;
+    case AMOTION_EVENT_ACTION_POINTER_DOWN:
+      motion_event = kMotionPointerDown;
+      break;
+    case AMOTION_EVENT_ACTION_POINTER_UP:
+      motion_event = kMotionPointerUp;
+      break;
+    default:
+      return false;
+  }
+  // For now we just get the last coords.
+  float move_x = AMotionEvent_getX(event, 0);
+  float move_y = AMotionEvent_getY(event, 0);
+  int64_t when = AMotionEvent_getEventTime(event);
+  LOGI("Got motion event %d at %f, %f", type, move_x, move_y);
+
+  if (input_handler_->OnMotionEvent(motion_event, when, move_x, move_y) != 0) {
+    return false;
+  }
+  return true;
+}
+
+bool EventLoop::OnKeyEvent(AInputEvent* event) {
+  int32_t type = AKeyEvent_getAction(event);
+  KeyEvent key_event;
+  switch (type) {
+    case AKEY_EVENT_ACTION_DOWN:
+      key_event = kKeyDown;
+      break;
+    case AKEY_EVENT_ACTION_UP:
+      key_event = kKeyUp;
+      break;
+    case AKEY_EVENT_ACTION_MULTIPLE:
+      key_event = kKeyMultiple;
+      break;
+    default:
+      return false;
+  }
+  int32_t flags = AKeyEvent_getFlags(event);
+  /* Get the key code of the key event.
+   * This is the physical key that was pressed, not the Unicode character. */
+  int32_t key_code = AKeyEvent_getKeyCode(event);
+  /* Get the meta key state. */
+  int32_t meta_state = AKeyEvent_getMetaState(event);
+  /* Get the repeat count of the event.
+   * For both key up an key down events, this is the number of times the key
+   * has repeated with the first down starting at 0 and counting up from
+   * there.  For multiple key events, this is the number of down/up pairs
+   * that have occurred. */
+  int32_t repeat = AKeyEvent_getRepeatCount(event);
+
+  /* Get the time of the most recent key down event, in the	
+   * java.lang.System.nanoTime() time base.  If this is a down event,	
+   * this will be the same as eventTime.	
+   * Note that when chording keys, this value is the down time of the most	
+   * recently pressed key, which may not be the same physical key of this	
+   * event. */	
+  // TODO(gram): Use or remove this.
+  // int64_t key_down_time = AKeyEvent_getDownTime(event);
+
+  /* Get the time this event occurred, in the
+   * java.lang.System.nanoTime() time base. */
+  int64_t when = AKeyEvent_getEventTime(event);
+
+  LOGI("Got key event %d %d", type, key_code);
+  if (input_handler_->OnKeyEvent(key_event, when, flags, key_code,
+                             meta_state, repeat) != 0) {
+    return false;
+  }
+  return true;
+}
+
+int32_t EventLoop::ProcessInputEvent(AInputEvent* event) {
+  int32_t event_type = AInputEvent_getType(event);
+  LOGI("Got input event type %d", event_type);
+  switch (event_type) {
+    case AINPUT_EVENT_TYPE_MOTION:
+      if (AInputEvent_getSource(event) == AINPUT_SOURCE_TOUCHSCREEN) {
+          return OnTouchEvent(event);
+      }
+      break;
+    case AINPUT_EVENT_TYPE_KEY:
+      return OnKeyEvent(event);
+  }
+  return 0;
+}
+
+void EventLoop::ActivityCallback(android_app* application, int32_t command) {
+  EventLoop* event_loop = reinterpret_cast<EventLoop*>(application->userData);
+  event_loop->ProcessActivityEvent(command);
+}
+
+int32_t EventLoop::InputCallback(android_app* application,
+                                 AInputEvent* event) {
+  EventLoop* event_loop = reinterpret_cast<EventLoop*>(application->userData);
+  return event_loop->ProcessInputEvent(event);
+}
+
diff --git a/runtime/embedders/openglui/android/eventloop.h b/runtime/embedders/openglui/android/eventloop.h
new file mode 100644
index 0000000..23b16db
--- /dev/null
+++ b/runtime/embedders/openglui/android/eventloop.h
@@ -0,0 +1,39 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef EMBEDDERS_OPENGLUI_ANDROID_EVENTLOOP_H_
+#define EMBEDDERS_OPENGLUI_ANDROID_EVENTLOOP_H_
+
+#include <android_native_app_glue.h>
+#include "embedders/openglui/common/events.h"
+#include "embedders/openglui/common/input_handler.h"
+#include "embedders/openglui/common/lifecycle_handler.h"
+
+class EventLoop {
+  public:
+    explicit EventLoop(android_app* application);
+    void Run(LifeCycleHandler* activity_handler,
+             InputHandler* input_handler);
+
+  protected:
+    void Activate();
+    void Deactivate();
+    void ProcessActivityEvent(int32_t command);
+    int32_t ProcessInputEvent(AInputEvent* event);
+    bool OnTouchEvent(AInputEvent* event);
+    bool OnKeyEvent(AInputEvent* event);
+
+    static void ActivityCallback(android_app* application, int32_t command);
+    static int32_t InputCallback(android_app* application, AInputEvent* event);
+
+  private:
+    bool enabled_;
+    bool quit_;
+    android_app* application_;
+    LifeCycleHandler* lifecycle_handler_;
+    InputHandler* input_handler_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_ANDROID_EVENTLOOP_H_
+
diff --git a/runtime/embedders/openglui/android/main.cc b/runtime/embedders/openglui/android/main.cc
new file mode 100644
index 0000000..4cd8790
--- /dev/null
+++ b/runtime/embedders/openglui/android/main.cc
@@ -0,0 +1,30 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "embedders/openglui/android/android_graphics_handler.h"
+#include "embedders/openglui/android/android_input_handler.h"
+#include "embedders/openglui/android/android_sound_handler.h"
+#include "embedders/openglui/android/eventloop.h"
+#include "embedders/openglui/common/context.h"
+#include "embedders/openglui/common/dart_host.h"
+#include "embedders/openglui/common/vm_glue.h"
+
+void android_main(android_app* application) {
+  app_dummy();  // Link in native_app_glue.
+  AndroidGraphicsHandler graphics_handler(application);
+  VMGlue vm_glue(&graphics_handler, "/data/data/com.google.dartndk/app_dart");
+  AndroidInputHandler input_handler(&vm_glue, &graphics_handler);
+  AndroidSoundHandler sound_handler(application);
+  Timer timer;
+  Context app_context;
+  app_context.graphics_handler = &graphics_handler;
+  app_context.input_handler = &input_handler;
+  app_context.sound_handler = &sound_handler;
+  app_context.timer = &timer;
+  app_context.vm_glue = &vm_glue;
+  EventLoop eventLoop(application);
+  DartHost host(&app_context);
+  eventLoop.Run(&host, &input_handler);
+}
+
diff --git a/runtime/embedders/android/support_android.cc b/runtime/embedders/openglui/android/support_android.cc
similarity index 100%
rename from runtime/embedders/android/support_android.cc
rename to runtime/embedders/openglui/android/support_android.cc
diff --git a/runtime/embedders/openglui/common/context.h b/runtime/embedders/openglui/common/context.h
new file mode 100644
index 0000000..54148fc
--- /dev/null
+++ b/runtime/embedders/openglui/common/context.h
@@ -0,0 +1,23 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_CONTEXT_H_
+#define EMBEDDERS_OPENGLUI_COMMON_CONTEXT_H_
+
+#include "embedders/openglui/common/graphics_handler.h"
+#include "embedders/openglui/common/input_handler.h"
+#include "embedders/openglui/common/sound_handler.h"
+#include "embedders/openglui/common/timer.h"
+#include "embedders/openglui/common/vm_glue.h"
+
+struct Context {
+  GraphicsHandler* graphics_handler;
+  InputHandler* input_handler;
+  SoundHandler* sound_handler;
+  Timer* timer;
+  VMGlue* vm_glue;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_CONTEXT_H_
+
diff --git a/runtime/embedders/android/dart_host.cc b/runtime/embedders/openglui/common/dart_host.cc
similarity index 80%
rename from runtime/embedders/android/dart_host.cc
rename to runtime/embedders/openglui/common/dart_host.cc
index 8dfb574..fae2eb4 100644
--- a/runtime/embedders/android/dart_host.cc
+++ b/runtime/embedders/openglui/common/dart_host.cc
@@ -2,17 +2,17 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#include "embedders/android/dart_host.h"
+#include "embedders/openglui/common/dart_host.h"
 
 #include <math.h>
 #include <unistd.h>
 
-#include "embedders/android/log.h"
+#include "embedders/openglui/common/log.h"
 
 DartHost::DartHost(Context *context)
-    : graphics_(context->graphics),
+    : graphics_handler_(context->graphics_handler),
       input_handler_(context->input_handler),
-      sound_service_(context->sound_service),
+      sound_handler_(context->sound_handler),
       timer_(context->timer),
       vm_glue_(context->vm_glue),
       active_(false) {
@@ -30,10 +30,10 @@
 int32_t DartHost::Activate() {
   if (!active_) {
     LOGI("Activating DartHost");
-    if (graphics_->Start() != 0) {
+    if (graphics_handler_->Start() != 0) {
       return -1;
     }
-    if (sound_service_->Start() != 0) {
+    if (sound_handler_->Start() != 0) {
       return -1;
     }
     if (input_handler_->Start() != 0) {
@@ -61,15 +61,16 @@
     active_ = false;
     vm_glue_->FinishMainIsolate();
     LOGI("Deactivating DartHost");
-    sound_service_->Stop();
-    graphics_->Stop();
+    input_handler_->Stop();
+    sound_handler_->Stop();
+    graphics_handler_->Stop();
   }
 }
 
 int32_t DartHost::OnStep() {
   timer_->update();
   vm_glue_->CallUpdate();
-  if (graphics_->Update() != 0) {
+  if (graphics_handler_->Update() != 0) {
     return -1;
   }
   return 0;
@@ -95,7 +96,7 @@
   LOGI("Destroying DartHost");
 }
 
-void DartHost::OnSaveState(void** data, size_t size) {
+void DartHost::OnSaveState(void** data, size_t* size) {
   LOGI("Saving DartHost state");
 }
 
@@ -123,7 +124,3 @@
   LOGI("DartHost lost focus");
 }
 
-void DartHost::Clear() {
-  memset(window_buffer_.bits, 0,
-         window_buffer_.stride * window_buffer_.height * sizeof(int32_t));
-}
diff --git a/runtime/embedders/android/dart_host.h b/runtime/embedders/openglui/common/dart_host.h
similarity index 63%
rename from runtime/embedders/android/dart_host.h
rename to runtime/embedders/openglui/common/dart_host.h
index d77500f..7c85d15 100644
--- a/runtime/embedders/android/dart_host.h
+++ b/runtime/embedders/openglui/common/dart_host.h
@@ -2,18 +2,17 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#ifndef EMBEDDERS_ANDROID_DART_HOST_H_
-#define EMBEDDERS_ANDROID_DART_HOST_H_
+#ifndef EMBEDDERS_OPENGLUI_COMMON_DART_HOST_H_
+#define EMBEDDERS_OPENGLUI_COMMON_DART_HOST_H_
 
-#include <android_native_app_glue.h>
+#include "embedders/openglui/common/context.h"
+#include "embedders/openglui/common/graphics_handler.h"
+#include "embedders/openglui/common/input_handler.h"
+#include "embedders/openglui/common/lifecycle_handler.h"
+#include "embedders/openglui/common/sound_handler.h"
+#include "embedders/openglui/common/timer.h"
+#include "embedders/openglui/common/vm_glue.h"
 #include "include/dart_api.h"
-#include "embedders/android/activity_handler.h"
-#include "embedders/android/context.h"
-#include "embedders/android/graphics.h"
-#include "embedders/android/input_service.h"
-#include "embedders/android/sound_service.h"
-#include "embedders/android/timer.h"
-#include "embedders/android/vm_glue.h"
 
 // Currently the life cycle management is very crude. We conservatively
 // shutdown the main isolate when we lose focus and create a new one when
@@ -21,42 +20,39 @@
 // and we need some hooks to tell the Dart script to save/restore state
 // (and an API that will support that).
 
-class DartHost : public ActivityHandler {
+class DartHost : public LifeCycleHandler {
  public:
   explicit DartHost(Context* context);
   virtual ~DartHost();
 
- protected:
-  int32_t OnActivate();
-  void OnDeactivate();
-  int32_t OnStep();
-
   void OnStart();
   void OnResume();
   void OnPause();
   void OnStop();
   void OnDestroy();
-
-  void OnSaveState(void** data, size_t size);
+  void OnSaveState(void** data, size_t* size);
   void OnConfigurationChanged();
   void OnLowMemory();
   void OnCreateWindow();
   void OnDestroyWindow();
   void OnGainedFocus();
   void OnLostFocus();
+  int32_t OnActivate();
+  void OnDeactivate();
+  int32_t OnStep();
 
  private:
   void Clear();
   int32_t Activate();
   void Deactivate();
 
-  ANativeWindow_Buffer window_buffer_;
-  Graphics* graphics_;
+  GraphicsHandler* graphics_handler_;
   InputHandler* input_handler_;
-  SoundService* sound_service_;
+  SoundHandler* sound_handler_;
   Timer* timer_;
   VMGlue* vm_glue_;
   bool active_;
 };
 
-#endif  // EMBEDDERS_ANDROID_DART_HOST_H_
+#endif  // EMBEDDERS_OPENGLUI_COMMON_DART_HOST_H_
+
diff --git a/runtime/embedders/openglui/common/events.h b/runtime/embedders/openglui/common/events.h
new file mode 100644
index 0000000..64c6951
--- /dev/null
+++ b/runtime/embedders/openglui/common/events.h
@@ -0,0 +1,39 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_EVENTS_H_
+#define EMBEDDERS_OPENGLUI_COMMON_EVENTS_H_
+
+typedef enum {
+  kStart,
+  kStop,
+  kGainedFocus,
+  kLostFocus,
+  kPause,
+  kResume,
+  kSaveState,
+  kConfigChanged,
+  kInitWindow,
+  kTermWindow,
+  kDestroy
+} LifecycleEvent;
+
+typedef enum {
+  kKeyDown,
+  kKeyUp,
+  kKeyMultiple
+} KeyEvent;
+
+typedef enum {
+  kMotionDown,
+  kMotionUp,
+  kMotionMove,
+  kMotionCancel,
+  kMotionOutside,
+  kMotionPointerDown,
+  kMotionPointerUp
+} MotionEvent;
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_EVENTS_H_
+
diff --git a/runtime/embedders/android/android_extension.cc b/runtime/embedders/openglui/common/extension.cc
similarity index 95%
rename from runtime/embedders/android/android_extension.cc
rename to runtime/embedders/openglui/common/extension.cc
index 48d76c0..2f3b90d 100644
--- a/runtime/embedders/android/android_extension.cc
+++ b/runtime/embedders/openglui/common/extension.cc
@@ -2,19 +2,15 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#include "embedders/android/android_extension.h"
+#include "embedders/openglui/common/extension.h"
 
-#include <android/log.h>
-#include <EGL/egl.h>
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-#include <jni.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include "embedders/openglui/common/log.h"
+#include "embedders/openglui/common/opengl.h"
 #include "include/dart_api.h"
-#include "embedders/android/log.h"
 
 Dart_Handle HandleError(Dart_Handle handle) {
   if (Dart_IsError(handle)) Dart_PropagateError(handle);
@@ -103,7 +99,7 @@
                           int* len_out) {
   Dart_Handle argHandle = HandleError(Dart_GetNativeArgument(arguments, index));
   if (Dart_IsList(argHandle)) {
-    int len;
+    intptr_t len;
     HandleError(Dart_ListLength(argHandle, &len));
     GLint* list = new GLint[len];
     for (int i = 0; i < len; i++) {
@@ -130,7 +126,7 @@
   Dart_Handle argHandle = HandleError(Dart_GetNativeArgument(arguments, 1));
 
   if (Dart_IsList(argHandle)) {
-    int len;
+    intptr_t len;
     HandleError(Dart_ListLength(argHandle, &len));
     GLfloat* list = new GLfloat[len];
     for (int i = 0; i < len; i++) {
@@ -164,13 +160,13 @@
 
 void Log(Dart_NativeArguments arguments) {
   Dart_EnterScope();
-  LOGI(GetArgAsString(arguments, 0));
+  LOGI("%s", GetArgAsString(arguments, 0));
   Dart_ExitScope();
 }
 
 void LogError(Dart_NativeArguments arguments) {
   Dart_EnterScope();
-  LOGE(GetArgAsString(arguments, 0));
+  LOGE("%s", GetArgAsString(arguments, 0));
   Dart_ExitScope();
 }
 
@@ -198,15 +194,11 @@
   Dart_ExitScope();
 }
 
-void EGLSwapBuffers(Dart_NativeArguments arguments) {
-  LOGI("GLSwapBuffers");
+void SwapBuffers(Dart_NativeArguments arguments) {
+  LOGI("SwapBuffers");
   Dart_EnterScope();
-
-  EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-  EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
-  eglSwapBuffers(display, surface);
-
-  CheckGLError("eglSwapBuffers");
+  GLSwapBuffers();
+  CheckGLError("GLSwapBuffers");
   Dart_ExitScope();
 }
 
@@ -244,7 +236,7 @@
   intptr_t size;
   HandleError(Dart_ListLength(dataHandle, &size));
 
-  LOGI("Size: %d", size);
+  LOGI("Size: %d", static_cast<int>(size));
 
   // TODO(vsm): No guarantee that this is a float!
   float* data = new float[size];
@@ -315,6 +307,7 @@
   glDrawArrays(mode, first, count);
   CheckGLError("glDrawArrays");
   Dart_ExitScope();
+  LOGI("Done GLDrawArrays");
 }
 
 void GLEnableVertexAttribArray(Dart_NativeArguments arguments) {
@@ -393,7 +386,6 @@
 
   GLint infoLogLength = 0;
   glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
-
   GLchar* strInfoLog = new GLchar[infoLogLength + 1];
   glGetShaderInfoLog(shader, infoLogLength, NULL, strInfoLog);
   strInfoLog[infoLogLength] = 0;
@@ -460,10 +452,10 @@
   Dart_Handle sourceHandle = HandleError(Dart_GetNativeArgument(arguments, 1));
   intptr_t length[1];
   HandleError(Dart_StringLength(sourceHandle, length));
-  LOGI("Source length is %d", length[0]);
+  LOGI("Source length is %d", static_cast<int>(length[0]));
   uint8_t* str[1];
   HandleError(Dart_StringToUTF8(sourceHandle, &str[0], length));
-  LOGI("Converted length is %d", length[0]);
+  LOGI("Converted length is %d", static_cast<int>(length[0]));
   str[0][*length] = 0;
 
   const GLchar* source =
@@ -736,8 +728,12 @@
   LOGI("GLClearDepth");
   Dart_EnterScope();
   double depth = GetArgAsDouble(arguments, 0);
+#if defined(__ANDROID__)
   glClearDepthf(depth);
-  CheckGLError("glClearDepthf");
+#else
+  glClearDepth(depth);
+#endif
+  CheckGLError("glClearDepth");
   Dart_ExitScope();
 }
 
@@ -770,6 +766,10 @@
   ReturnGLIntConstant(arguments, GL_COMPILE_STATUS);
 }
 
+void GLDeleteStatus(Dart_NativeArguments arguments) {
+  ReturnGLIntConstant(arguments, GL_DELETE_STATUS);
+}
+
 void GLDepthBufferBit(Dart_NativeArguments arguments) {
   ReturnGLIntConstant(arguments, GL_DEPTH_BUFFER_BIT);
 }
@@ -802,6 +802,10 @@
   ReturnGLIntConstant(arguments, GL_TRUE);
 }
 
+void GLValidateStatus(Dart_NativeArguments arguments) {
+  ReturnGLIntConstant(arguments, GL_VALIDATE_STATUS);
+}
+
 void GLVertexShader(Dart_NativeArguments arguments) {
   ReturnGLIntConstant(arguments, GL_VERTEX_SHADER);
 }
@@ -906,7 +910,7 @@
     {"LogError", LogError},
     {"SystemRand", SystemRand},
     {"SystemSrand", SystemSrand},
-    {"EGLSwapBuffers", EGLSwapBuffers},
+    {"SwapBuffers", SwapBuffers},
     {"GLAttachShader", GLAttachShader},
     {"GLBindBuffer", GLBindBuffer},
     {"GLBufferData", GLBufferData},
@@ -948,6 +952,7 @@
     {"GLArrayBuffer", GLArrayBuffer},
     {"GLColorBufferBit", GLColorBufferBit},
     {"GLCompileStatus", GLCompileStatus},
+    {"GLDeleteStatus", GLDeleteStatus},
     {"GLDepthBufferBit", GLDepthBufferBit},
     {"GLFloat", GLFloat},
     {"GLFragmentShader", GLFragmentShader},
@@ -956,6 +961,7 @@
     {"GLTriangles", GLTriangles},
     {"GLTrue", GLTrue},
     {"GLStaticDraw", GLStaticDraw},
+    {"GLValidateStatus", GLValidateStatus},
     {"GLVertexShader", GLVertexShader},
     {"GLGetShaderInfoLog", GLGetShaderInfoLog},
     {"GLGetProgramInfoLog", GLGetProgramInfoLog},
@@ -984,3 +990,4 @@
   Dart_ExitScope();
   return result;
 }
+
diff --git a/runtime/embedders/android/android_extension.h b/runtime/embedders/openglui/common/extension.h
similarity index 67%
rename from runtime/embedders/android/android_extension.h
rename to runtime/embedders/openglui/common/extension.h
index 76f7d95..4825d90 100644
--- a/runtime/embedders/android/android_extension.h
+++ b/runtime/embedders/openglui/common/extension.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
-#ifndef EMBEDDERS_ANDROID_ANDROID_EXTENSION_H_
-#define EMBEDDERS_ANDROID_ANDROID_EXTENSION_H_
+#ifndef EMBEDDERS_OPENGLUI_COMMON_EXTENSION_H_
+#define EMBEDDERS_OPENGLUI_COMMON_EXTENSION_H_
 
 #include "include/dart_api.h"
 
@@ -14,4 +14,5 @@
 extern int32_t LoadSoundSample(const char* path);
 extern int32_t PlaySoundSample(const char* path);
 
-#endif  // EMBEDDERS_ANDROID_ANDROID_EXTENSION_H_
+#endif  // EMBEDDERS_OPENGLUI_COMMON_EXTENSION_H_
+
diff --git a/runtime/embedders/openglui/common/gl.dart b/runtime/embedders/openglui/common/gl.dart
new file mode 100644
index 0000000..a916726
--- /dev/null
+++ b/runtime/embedders/openglui/common/gl.dart
@@ -0,0 +1,186 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library android_extension;
+
+// The simplest way to call native code: top-level functions.
+int systemRand() native "SystemRand";
+void systemSrand(int seed) native "SystemSrand";
+void log(String what) native "Log";
+
+// EGL functions.
+void glSwapBuffers() native "SwapBuffers";
+
+// GL functions.
+void glAttachShader(int program, int shader) native "GLAttachShader";
+void glBindBuffer(int target, int buffer) native "GLBindBuffer";
+void glBufferData(int target, List data, int usage) native "GLBufferData";
+void glClearColor(num r, num g, num b, num alpha) native "GLClearColor";
+void glClearDepth(num depth) native "GLClearDepth";
+void glClear(int mask) native "GLClear";
+void glCompileShader(int shader) native "GLCompileShader";
+int glCreateBuffer() native "GLCreateBuffer";
+int glCreateProgram() native "GLCreateProgram";
+int glCreateShader(int shaderType) native "GLCreateShader";
+void glDrawArrays(int mode, int first, int count) native "GLDrawArrays";
+void glEnableVertexAttribArray(int index) native "GLEnableVertexAttribArray";
+int glGetAttribLocation(int program, String name) native "GLGetAttribLocation";
+int glGetError() native "GLGetError";
+int glGetProgramParameter(int program, int param)
+    native "GLGetProgramParameter";
+int glGetShaderParameter(int shader, int param) native "GLGetShaderParameter";
+int glGetUniformLocation(int program, String name)
+    native "GLGetUniformLocation";
+void glLinkProgram(int program) native "GLLinkProgram";
+void glShaderSource(int shader, String source) native "GLShaderSource";
+void glUniform1f(int location, double v0) native "GLUniform1f";
+void glUniform2f(int location, double v0, double v1) native "GLUniform2f";
+void glUniform3f(int location, double v0, double v1, double v2)
+    native "GLUniform3f";
+void glUniform4f(int location, double v0, double v1, double v2, double v3)
+    native "GLUniform4f";
+void glUniform1i(int location, int v0) native "GLUniform1i";
+void glUniform2i(int location, int v0, int v1) native "GLUniform2i";
+void glUniform3i(int location, int v0, int v1, int v2) native "GLUniform3i";
+void glUniform4i(int location, int v0, int v1, int v2, int v3)
+    native "GLUniform4i";
+void glUniform1fv(int location, List values) native "GLUniform1fv";
+void glUniform2fv(int location, List values) native "GLUniform2fv";
+void glUniform3fv(int location, List values) native "GLUniform3fv";
+void glUniform4fv(int location, List values) native "GLUniform4fv";
+void glUniform1iv(int location, List values) native "GLUniform1iv";
+void glUniform2iv(int location, List values) native "GLUniform2iv";
+void glUniform3iv(int location, List values) native "GLUniform3iv";
+void glUniform4iv(int location, List values) native "GLUniform4iv";
+void glUseProgram(int program) native "GLUseProgram";
+void glVertexAttribPointer(int index, int size, int type, bool normalized,
+    int stride, int pointer) native "GLVertexAttribPointer";
+void glViewport(int x, int y, int width, int height) native "GLViewport";
+
+int glArrayBuffer() native "GLArrayBuffer";
+int glColorBufferBit() native "GLColorBufferBit";
+int glCompileStatus() native "GLCompileStatus";
+int glDeleteStatus() native "GLDeleteStatus";
+int glDepthBufferBit() native "GLDepthBufferBit";
+int glFloat() native "GLFloat";
+int glFragmentShader() native "GLFragmentShader";
+int glLinkStatus() native "GLLinkStatus";
+int glStaticDraw() native "GLStaticDraw";
+int glTriangleStrip() native "GLTriangleStrip";
+int glTriangles() native "GLTriangles";
+int glTrue() native "GLTrue";
+int glValidateStatus() native "GLValidateStatus";
+int glVertexShader() native "GLVertexShader";
+
+String glGetShaderInfoLog(int shader) native "GLGetShaderInfoLog";
+String glGetProgramInfoLog(int program) native "GLGetProgramInfoLog";
+
+class WebGLRenderingContext {
+  WebGLRenderingContext();
+
+  static get ARRAY_BUFFER => glArrayBuffer();
+  static get COLOR_BUFFER_BIT => glColorBufferBit();
+  static get COMPILE_STATUS => glCompileStatus();
+  static get DELETE_STATUS => glDeleteStatus();
+  static get DEPTH_BUFFER_BIT => glDepthBufferBit();
+  static get FLOAT => glFloat();
+  static get FRAGMENT_SHADER => glFragmentShader();
+  static get LINK_STATUS => glLinkStatus();
+  static get STATIC_DRAW => glStaticDraw();
+  static get TRUE => glTrue();
+  static get TRIANGLE_STRIP => glTriangleStrip();
+  static get TRIANGLES => glTriangles();
+  static get VALIDATE_STATUS => glValidateStatus();
+  static get VERTEX_SHADER => glVertexShader();
+
+  attachShader(program, shader) => glAttachShader(program, shader);
+  bindBuffer(target, buffer) => glBindBuffer(target, buffer);
+  bufferData(target, data, usage) => glBufferData(target, data, usage);
+  clearColor(r, g, b, alpha) => glClearColor(r, g, b, alpha);
+  clearDepth(depth) => glClearDepth(depth);
+  clear(mask) => glClear(mask);
+  compileShader(shader) => glCompileShader(shader);
+  createBuffer() => glCreateBuffer();
+  createProgram() => glCreateProgram();
+  createShader(shaderType) => glCreateShader(shaderType);
+  drawArrays(mode, first, count) => glDrawArrays(mode, first, count);
+  enableVertexAttribArray(index) => glEnableVertexAttribArray(index);
+  getAttribLocation(program, name) => glGetAttribLocation(program, name);
+  getError() => glGetError();
+  getProgramParameter(program, name) {
+    var rtn = glGetProgramParameter(program, name);
+    if (name == DELETE_STATUS ||
+        name == LINK_STATUS ||
+        name == VALIDATE_STATUS) {
+      return (rtn == 0) ? false : true;
+    }
+    return rtn;
+  }
+  getShaderParameter(shader, name) {
+    var rtn = glGetShaderParameter(shader, name);
+    if (name == DELETE_STATUS || name == COMPILE_STATUS) {
+      return (rtn == 0) ? false : true;
+    }
+    return rtn;
+  }
+  getUniformLocation(program, name) => glGetUniformLocation(program, name);
+  linkProgram(program) => glLinkProgram(program);
+  shaderSource(shader, source) => glShaderSource(shader, source);
+  uniform1f(location, v0) => glUniform1f(location, v0);
+  uniform2f(location, v0, v1) => glUniform2f(location, v0, v1);
+  uniform3f(location, v0, v1, v2) => glUniform3f(location, v0, v1, v2);
+  uniform4f(location, v0, v1, v2, v3) => glUniform4f(location, v0, v1, v2, v3);
+  uniform1i(location, v0) => glUniform1i(location, v0);
+  uniform2i(location, v0, v1) => glUniform2i(location, v0, v1);
+  uniform3i(location, v0, v1, v2) => glUniform3i(location, v0, v1, v2);
+  uniform4i(location, v0, v1, v2, v3) => glUniform4i(location, v0, v1, v2, v3);
+  uniform1fv(location, values) => glUniform1fv(location, values);
+  uniform2fv(location, values) => glUniform2fv(location, values);
+  uniform3fv(location, values) => glUniform3fv(location, values);
+  uniform4fv(location, values) => glUniform4fv(location, values);
+  uniform1iv(location, values) => glUniform1iv(location, values);
+  uniform2iv(location, values) => glUniform2iv(location, values);
+  uniform3iv(location, values) => glUniform3iv(location, values);
+  uniform4iv(location, values) => glUniform4iv(location, values);
+  useProgram(program) => glUseProgram(program);
+  vertexAttribPointer(index, size, type, normalized, stride, pointer) =>
+    glVertexAttribPointer(index, size, type, normalized, stride, pointer);
+  viewport(x, y, width, height) => glViewport(x, y, width, height);
+  getShaderInfoLog(shader) => glGetShaderInfoLog(shader);
+  getProgramInfoLog(program) => glGetProgramInfoLog(program);
+
+  // TODO(vsm): Kill.
+  noSuchMethod(invocation) {
+      throw new Exception('Unimplemented ${invocation.memberName}');
+  }
+}
+
+var gl = new WebGLRenderingContext();
+
+//------------------------------------------------------------------
+// Simple audio support.
+
+void playBackground(String path) native "PlayBackground";
+void stopBackground() native "StopBackground";
+
+//-------------------------------------------------------------------
+// Set up print().
+
+get _printClosure => (s) {
+  try {
+    log(s);
+  } catch (_) {
+    throw(s);
+  }
+};
+
+//------------------------------------------------------------------
+// Temp hack for compat with WebGL.
+
+class Float32Array extends List<double> {
+  Float32Array.fromList(List a) {
+    addAll(a);
+  }
+}
+
diff --git a/runtime/embedders/openglui/common/gl_graphics_handler.cc b/runtime/embedders/openglui/common/gl_graphics_handler.cc
new file mode 100644
index 0000000..5208b06
--- /dev/null
+++ b/runtime/embedders/openglui/common/gl_graphics_handler.cc
@@ -0,0 +1,64 @@
+// 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.
+
+#include "embedders/openglui/common/gl_graphics_handler.h"
+#include "embedders/openglui/common/log.h"
+
+extern void CheckGLError(const char *function);
+
+void GLGraphicsHandler::SetViewport(int left, int top, int width, int height) {
+  glViewport(left, top, width, height);
+  CheckGLError("glViewPort");
+}
+
+int GLGraphicsHandler::BuildProgram(const char* vertexShaderSource,
+                                 const char* fragmentShaderSource) const {
+  int vertexShader = BuildShader(vertexShaderSource, GL_VERTEX_SHADER);
+  int fragmentShader = BuildShader(fragmentShaderSource, GL_FRAGMENT_SHADER);
+  if (vertexShader < 0 || fragmentShader < 0) {
+    return -1;
+  }
+
+  GLuint programHandle = glCreateProgram();
+  glAttachShader(programHandle, static_cast<GLuint>(vertexShader));
+  glAttachShader(programHandle, static_cast<GLuint>(fragmentShader));
+  glLinkProgram(programHandle);
+
+  GLint linkSuccess;
+  glGetProgramiv(programHandle, GL_LINK_STATUS, &linkSuccess);
+  if (linkSuccess == GL_FALSE) {
+    GLint infoLogLength;
+    glGetProgramiv(programHandle, GL_INFO_LOG_LENGTH, &infoLogLength);
+    GLchar* strInfoLog = new GLchar[infoLogLength + 1];
+    glGetProgramInfoLog(programHandle, infoLogLength, NULL, strInfoLog);
+    strInfoLog[infoLogLength] = 0;
+    LOGE("Link failed: %s", strInfoLog);
+    delete[] strInfoLog;
+    return -1;
+  }
+  return static_cast<int>(programHandle);
+}
+
+int GLGraphicsHandler::BuildShader(const char* source,
+                                   GLenum shaderType) const {
+  GLuint shaderHandle = glCreateShader(shaderType);
+  glShaderSource(shaderHandle, 1, &source, NULL);
+  glCompileShader(shaderHandle);
+
+  GLint compileSuccess;
+  glGetShaderiv(shaderHandle, GL_COMPILE_STATUS, &compileSuccess);
+
+  if (compileSuccess == GL_FALSE) {
+    GLint infoLogLength = 0;
+    glGetShaderiv(shaderHandle, GL_INFO_LOG_LENGTH, &infoLogLength);
+    GLchar* strInfoLog = new GLchar[infoLogLength + 1];
+    glGetShaderInfoLog(shaderHandle, infoLogLength, NULL, strInfoLog);
+    strInfoLog[infoLogLength] = 0;
+    LOGE("Shader compile failed: %s", strInfoLog);
+    delete [] strInfoLog;
+    return -1;
+  }
+  return static_cast<int>(shaderHandle);
+}
+
diff --git a/runtime/embedders/openglui/common/gl_graphics_handler.h b/runtime/embedders/openglui/common/gl_graphics_handler.h
new file mode 100644
index 0000000..ca8b54f
--- /dev/null
+++ b/runtime/embedders/openglui/common/gl_graphics_handler.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_GL_GRAPHICS_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_COMMON_GL_GRAPHICS_HANDLER_H_
+
+#include "embedders/openglui/common/graphics_handler.h"
+#include "embedders/openglui/common/opengl.h"
+#include "embedders/openglui/common/timer.h"
+
+class GLGraphicsHandler : public GraphicsHandler {
+  public:
+    GLGraphicsHandler()
+      : GraphicsHandler() {
+    }
+
+    virtual int32_t Start() = 0;
+    virtual void Stop() = 0;
+
+    void SwapBuffers() {
+      GLSwapBuffers();
+    }
+
+    virtual int32_t Update() {
+      SwapBuffers();
+      return 0;
+    }
+
+    void SetViewport(int left, int top, int width, int height);
+    int BuildProgram(const char* vertexShaderSource,
+                     const char* fragmentShaderSource) const;
+    int BuildShader(const char* source, GLenum shaderType) const;
+
+    virtual ~GLGraphicsHandler() {
+    }
+};
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_GL_GRAPHICS_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/common/graphics_handler.h b/runtime/embedders/openglui/common/graphics_handler.h
new file mode 100644
index 0000000..1d02089
--- /dev/null
+++ b/runtime/embedders/openglui/common/graphics_handler.h
@@ -0,0 +1,47 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_GRAPHICS_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_COMMON_GRAPHICS_HANDLER_H_
+
+#include <stdint.h>
+
+#include "embedders/openglui/common/isized.h"
+#include "embedders/openglui/common/timer.h"
+
+class GraphicsHandler : public ISized {
+  public:
+    GraphicsHandler()
+      : width_(0),
+        height_(0) {
+    }
+
+    const int32_t& height() {
+      return height_;
+    }
+
+    const int32_t& width() {
+      return width_;
+    }
+
+    virtual int32_t Start() = 0;
+    virtual void Stop() = 0;
+
+    virtual void SwapBuffers() = 0;
+
+    virtual int32_t Update() {
+      return 0;
+    }
+
+    virtual void SetViewport(int left, int top, int width, int height) = 0;
+
+    virtual ~GraphicsHandler() {
+    }
+
+  protected:
+    int32_t width_, height_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_GRAPHICS_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/common/input_handler.cc b/runtime/embedders/openglui/common/input_handler.cc
new file mode 100644
index 0000000..6213de7
--- /dev/null
+++ b/runtime/embedders/openglui/common/input_handler.cc
@@ -0,0 +1,68 @@
+// 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.
+
+#include "embedders/openglui/common/input_handler.h"
+#include "embedders/openglui/common/log.h"
+
+InputHandler::InputHandler(VMGlue* vm_glue)
+  : vm_glue_(vm_glue) {
+}
+
+int InputHandler::OnMotionEvent(MotionEvent event,
+                                int64_t when,
+                                float x,
+                                float y) {
+  const char *function = NULL;
+  switch (event) {
+    case kMotionDown:
+      function = "onMotionDown";
+      break;
+    case kMotionUp:
+      function = "onMotionUp";
+      break;
+    case kMotionMove:
+      function = "onMotionMove";
+      break;
+    case kMotionCancel:
+      function = "onMotionCancel";
+      break;
+    case kMotionOutside:
+      function = "onMotionOutside";
+      break;
+    case kMotionPointerDown:
+      function = "onMotionPointerDown";
+      break;
+    case kMotionPointerUp:
+      function = "onMotionPointerUp";
+      break;
+    default:
+      return -1;
+  }
+  return vm_glue_->OnMotionEvent(function, when, x, y);
+}
+
+int InputHandler::OnKeyEvent(KeyEvent event,
+                             int64_t when,
+                             int32_t flags,
+                             int32_t key_code,
+                             int32_t meta_state,
+                             int32_t repeat) {
+  const char *function = NULL;
+  switch (event) {
+    case kKeyDown:
+      function = "onKeyDown";
+      break;
+    case kKeyUp:
+      function = "onKeyUp";
+      break;
+    case kKeyMultiple:
+      function = "onKeyMultiple";
+      break;
+    default:
+      return -1;
+  }
+  return vm_glue_->OnKeyEvent(function, when, flags, key_code,
+                              meta_state, repeat);
+}
+
diff --git a/runtime/embedders/openglui/common/input_handler.h b/runtime/embedders/openglui/common/input_handler.h
new file mode 100644
index 0000000..2750d39
--- /dev/null
+++ b/runtime/embedders/openglui/common/input_handler.h
@@ -0,0 +1,27 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_INPUT_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_COMMON_INPUT_HANDLER_H_
+
+#include "embedders/openglui/common/events.h"
+#include "embedders/openglui/common/vm_glue.h"
+
+class InputHandler {
+  public:
+    explicit InputHandler(VMGlue* vm_glue);
+    virtual int32_t Start() { return 0; }
+    virtual void Stop() { }
+    virtual int OnMotionEvent(MotionEvent event, int64_t when,
+                    float move_x, float move_y);
+    virtual int OnKeyEvent(KeyEvent event, int64_t when, int32_t flags,
+             int32_t key_code, int32_t meta_state, int32_t repeat);
+    virtual ~InputHandler() {}
+
+  protected:
+    VMGlue* vm_glue_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_INPUT_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/common/isized.h b/runtime/embedders/openglui/common/isized.h
new file mode 100644
index 0000000..c29ba93
--- /dev/null
+++ b/runtime/embedders/openglui/common/isized.h
@@ -0,0 +1,19 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_ISIZED_H_
+#define EMBEDDERS_OPENGLUI_COMMON_ISIZED_H_
+
+// An interface for objects that have a size. VMGlue needs the window
+// size when calling setup() (and eventually resize()) but it does not
+// need to know anything else about the window, so we use this interface.
+class ISized {
+  public:
+    virtual const int32_t& height() = 0;
+    virtual const int32_t& width() = 0;
+    virtual ~ISized() {}
+};
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_ISIZED_H_
+
diff --git a/runtime/embedders/android/activity_handler.h b/runtime/embedders/openglui/common/lifecycle_handler.h
similarity index 76%
rename from runtime/embedders/android/activity_handler.h
rename to runtime/embedders/openglui/common/lifecycle_handler.h
index d19aaaa..801e6d8 100644
--- a/runtime/embedders/android/activity_handler.h
+++ b/runtime/embedders/openglui/common/lifecycle_handler.h
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#ifndef EMBEDDERS_ANDROID_ACTIVITY_HANDLER_H_
-#define EMBEDDERS_ANDROID_ACTIVITY_HANDLER_H_
+#ifndef EMBEDDERS_OPENGLUI_COMMON_LIFECYCLE_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_COMMON_LIFECYCLE_HANDLER_H_
 
-class ActivityHandler {
+class LifeCycleHandler {
   public:
     virtual int32_t OnActivate() = 0;
     virtual void OnDeactivate() = 0;
@@ -22,7 +22,8 @@
     virtual void OnDestroyWindow() {}
     virtual void OnGainedFocus() {}
     virtual void OnLostFocus() {}
-    virtual ~ActivityHandler() {}
+    virtual ~LifeCycleHandler() {}
 };
 
-#endif  // EMBEDDERS_ANDROID_ACTIVITY_HANDLER_H_
+#endif  // EMBEDDERS_OPENGLUI_COMMON_LIFECYCLE_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/common/log.h b/runtime/embedders/openglui/common/log.h
new file mode 100644
index 0000000..5bfa782
--- /dev/null
+++ b/runtime/embedders/openglui/common/log.h
@@ -0,0 +1,17 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_LOG_H_
+#define EMBEDDERS_OPENGLUI_COMMON_LOG_H_
+
+#ifndef ANDROID
+#include <stdio.h>
+#define LOGI(...)       fprintf(stdout, __VA_ARGS__)
+#define LOGE(...)       fprintf(stderr, __VA_ARGS__)
+#else
+#include "embedders/openglui/android/android_log.h"
+#endif
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_LOG_H_
+
diff --git a/runtime/embedders/openglui/common/opengl.h b/runtime/embedders/openglui/common/opengl.h
new file mode 100644
index 0000000..ac7b485
--- /dev/null
+++ b/runtime/embedders/openglui/common/opengl.h
@@ -0,0 +1,43 @@
+// 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 semi-generic header file that can be used to isolate platform differences
+// for OpenGL headers.
+#ifndef EMBEDDERS_OPENGLUI_COMMON_OPENGL_H_
+#define EMBEDDERS_OPENGLUI_COMMON_OPENGL_H_
+
+#if defined(__APPLE__)
+#  ifdef GL_ES_VERSION_2_0
+#    include <OpenGLES/ES2/gl.h>
+#  else
+#    include <Glut/glut.h>
+#    include <OpenGL/gl.h>
+#  endif
+#  define GLSwapBuffers()    glutSwapBuffers()
+#elif defined(_WIN32) || defined(_WIN64)
+#  include <GL/glew.h>
+#  include <GL/wglew.h>
+#  include <GLUT/glut.h>
+#  include <Windows.h>
+#  define GLSwapBuffers()    glutSwapBuffers()
+#elif defined(__ANDROID__)
+#  include <EGL/egl.h>
+#  include <GLES2/gl2.h>
+#  include <GLES2/gl2ext.h>
+#  define GLSwapBuffers() \
+    do {\
+      EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); \
+      EGLSurface surface = eglGetCurrentSurface(EGL_DRAW); \
+      eglSwapBuffers(display, surface); \
+    } while (0);
+#else  // Linux.
+#  define GL_GLEXT_PROTOTYPES 1
+#  include <GL/gl.h>
+#  include <GL/glext.h>
+#  include <GL/glut.h>
+#  define GLSwapBuffers()    glutSwapBuffers()
+#endif
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_OPENGL_H_
+
diff --git a/runtime/embedders/openglui/common/resource.h b/runtime/embedders/openglui/common/resource.h
new file mode 100644
index 0000000..445d2d1
--- /dev/null
+++ b/runtime/embedders/openglui/common/resource.h
@@ -0,0 +1,57 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_RESOURCE_H_
+#define EMBEDDERS_OPENGLUI_COMMON_RESOURCE_H_
+
+#include <stdlib.h>
+
+class Resource {
+  public:
+    explicit Resource(const char* path)
+        :  path_(path),
+           descriptor_(-1),
+           start_(0),
+           length_(-1) {
+    }
+
+    const char* path() {
+      return path_;
+    }
+
+    virtual int32_t descriptor() {
+      return descriptor_;
+    }
+
+    virtual off_t start() {
+      return start_;
+    }
+
+    virtual off_t length() {
+      return length_;
+    }
+
+    virtual int32_t Open() {
+      return -1;
+    }
+
+    virtual void Close() {
+    }
+
+    virtual int32_t Read(void* buffer, size_t count) {
+      return -1;
+    }
+
+    virtual ~Resource() {
+    }
+
+  protected:
+    const char* path_;
+    int32_t descriptor_;
+    off_t start_;
+    off_t length_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_RESOURCE_H_
+
diff --git a/runtime/embedders/openglui/common/sample.h b/runtime/embedders/openglui/common/sample.h
new file mode 100644
index 0000000..d88f52f
--- /dev/null
+++ b/runtime/embedders/openglui/common/sample.h
@@ -0,0 +1,60 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_SAMPLE_H_
+#define EMBEDDERS_OPENGLUI_COMMON_SAMPLE_H_
+
+#include "embedders/openglui/common/resource.h"
+
+class Sample {
+  public:
+    explicit Sample(const char* path)
+        : resource_(path),
+          buffer_(NULL),
+          length_(0) {
+    }
+
+    ~Sample() {
+      Unload();
+    }
+
+    const char* path() {
+      return resource_.path();
+    }
+
+    uint8_t* buffer() {
+      return buffer_;
+    }
+
+    off_t length() {
+      return length_;
+    }
+
+    int32_t Load() {
+      int32_t rtn = -1;
+      if (resource_.Open() == 0) {
+        buffer_ = new uint8_t[length_ = resource_.length()];
+        rtn = resource_.Read(buffer_, length_);
+        resource_.Close();
+      }
+      return rtn;
+    }
+
+    void Unload() {
+      if (buffer_ != NULL) {
+        delete[] buffer_;
+        buffer_ = NULL;
+      }
+      length_ = 0;
+    }
+
+  private:
+    friend class SoundService;
+    Resource resource_;
+    uint8_t* buffer_;
+    off_t length_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_SAMPLE_H_
+
diff --git a/runtime/embedders/openglui/common/sound_handler.cc b/runtime/embedders/openglui/common/sound_handler.cc
new file mode 100644
index 0000000..1412b7f
--- /dev/null
+++ b/runtime/embedders/openglui/common/sound_handler.cc
@@ -0,0 +1,52 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "embedders/openglui/common/sound_handler.h"
+
+#include <string.h>
+
+#include "embedders/openglui/common/log.h"
+
+SoundHandler* SoundHandler::instance_ = NULL;
+
+SoundHandler::SoundHandler()
+    : samples_() {
+}
+
+Sample* SoundHandler::GetSample(const char* path) {
+  for (samples_t::iterator sp = samples_.begin();
+       sp != samples_.end();
+       ++sp) {
+    Sample* sample = (*sp);
+    if (strcmp(sample->path(), path) == 0) {
+      return sample;
+    }
+  }
+  Sample* sample = new Sample(path);
+  if (sample->Load() != 0) {
+    LOGI("Failed to load sample %s", path);
+    delete sample;
+    return NULL;
+  }
+  samples_.push_back(sample);
+  return sample;
+}
+
+
+int32_t PlayBackgroundSound(const char* path) {
+  return SoundHandler::instance()->PlayBackground(path);
+}
+
+void StopBackgroundSound() {
+  SoundHandler::instance()->StopBackground();
+}
+
+int32_t LoadSoundSample(const char* path) {
+  return SoundHandler::instance()->LoadSample(path);
+}
+
+int32_t PlaySoundSample(const char* path) {
+  return SoundHandler::instance()->PlaySample(path);
+}
+
diff --git a/runtime/embedders/openglui/common/sound_handler.h b/runtime/embedders/openglui/common/sound_handler.h
new file mode 100644
index 0000000..100d0a5
--- /dev/null
+++ b/runtime/embedders/openglui/common/sound_handler.h
@@ -0,0 +1,63 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef EMBEDDERS_OPENGLUI_COMMON_SOUND_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_COMMON_SOUND_HANDLER_H_
+
+#include <stdint.h>
+#include <vector>
+
+#include "embedders/openglui/common/sample.h"
+
+class SoundHandler {
+  public:
+    SoundHandler();
+
+    virtual ~SoundHandler() {
+    }
+
+    virtual int32_t Start() {
+      return 0;
+    }
+
+    virtual void Stop() {
+    }
+
+    virtual int32_t PlayBackground(const char* path) {
+      return 0;
+    }
+
+    virtual void StopBackground() {
+    }
+
+    // Optional, for preloading.
+    int32_t LoadSample(const char* path) {
+       return (GetSample(path) == NULL) ? -1 : 0;
+    }
+
+    virtual int32_t PlaySample(const char* path) {
+      return 0;
+    }
+
+    static SoundHandler* instance() {
+      return instance_;
+    }
+
+  protected:
+    typedef std::vector<Sample*> samples_t;
+
+    Sample* GetSample(const char* path);
+
+    samples_t samples_;
+
+    static SoundHandler* instance_;
+};
+
+int32_t PlayBackgroundSound(const char* path);
+void StopBackgroundSound();
+int32_t LoadSoundSample(const char* path);
+int32_t PlaySoundSample(const char* path);
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_SOUND_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/common/timer.cc b/runtime/embedders/openglui/common/timer.cc
new file mode 100644
index 0000000..f5c1e0f
--- /dev/null
+++ b/runtime/embedders/openglui/common/timer.cc
@@ -0,0 +1,66 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "embedders/openglui/common/timer.h"
+
+#define NANO (+1.0E-9)
+
+#ifdef __MACH__
+#include <mach/mach.h>
+#include <mach/mach_time.h>
+#include <sys/time.h>
+
+#define GIGA UINT64_C(1000000000)
+
+#define CLOCK_REALTIME    0
+#define CLOCK_MONOTONIC   1
+
+double timebase = 0.0;
+uint64_t timestart = 0;
+
+void clock_gettime(int type, timespec* t) {
+  if (!timestart) {
+    mach_timebase_info_data_t tb = { 0, 1 };
+    mach_timebase_info(&tb);
+    timebase = tb.numer;
+    timebase /= tb.denom;
+    timestart = mach_absolute_time();
+  }
+  if (type == CLOCK_MONOTONIC) {
+    double diff = (mach_absolute_time() - timestart) * timebase;
+    t->tv_sec = diff * NANO;
+    t->tv_nsec = diff - (t->tv_sec * GIGA);
+  } else {  // type == CLOCK_REALTIME
+    struct timeval now;
+    gettimeofday(&now, NULL);
+    t->tv_sec  = now.tv_sec;
+    t->tv_nsec = now.tv_usec * 1000;
+  }
+}
+#endif
+
+Timer::Timer() : elapsed_(0.0f), last_time_(0.0) {
+}
+
+void Timer::reset() {
+  elapsed_ = 0.0f;
+  last_time_ = now();
+}
+
+void Timer::update() {
+  double current = now();
+  elapsed_ = (current - last_time_);
+  last_time_ = current;
+}
+
+double Timer::now() {
+  timespec timeval;
+  clock_gettime(CLOCK_MONOTONIC, &timeval);
+  return timeval.tv_sec + (timeval.tv_nsec * NANO);
+}
+
+float Timer::elapsed() {
+  return elapsed_;
+}
+
diff --git a/runtime/embedders/android/timer.h b/runtime/embedders/openglui/common/timer.h
similarity index 74%
rename from runtime/embedders/android/timer.h
rename to runtime/embedders/openglui/common/timer.h
index d38027a..db7f50a 100644
--- a/runtime/embedders/android/timer.h
+++ b/runtime/embedders/openglui/common/timer.h
@@ -2,8 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#ifndef EMBEDDERS_ANDROID_TIMER_H_
-#define EMBEDDERS_ANDROID_TIMER_H_
+#ifndef EMBEDDERS_OPENGLUI_COMMON_TIMER_H_
+#define EMBEDDERS_OPENGLUI_COMMON_TIMER_H_
 
 #include <time.h>
 
@@ -20,4 +20,5 @@
   double last_time_;
 };
 
-#endif  // EMBEDDERS_ANDROID_TIMER_H_
+#endif  // EMBEDDERS_OPENGLUI_COMMON_TIMER_H_
+
diff --git a/runtime/embedders/android/types.h b/runtime/embedders/openglui/common/types.h
similarity index 78%
rename from runtime/embedders/android/types.h
rename to runtime/embedders/openglui/common/types.h
index 413b91d..8acbe8c 100644
--- a/runtime/embedders/android/types.h
+++ b/runtime/embedders/openglui/common/types.h
@@ -2,8 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#ifndef EMBEDDERS_ANDROID_TYPES_H_
-#define EMBEDDERS_ANDROID_TYPES_H_
+#ifndef EMBEDDERS_OPENGLUI_COMMON_TYPES_H_
+#define EMBEDDERS_OPENGLUI_COMMON_TYPES_H_
 
 struct Location {
   Location() : pos_x_(0), pos_y_(0) {
@@ -19,4 +19,6 @@
 
   float pos_x_, pos_y_;
 };
-#endif  // EMBEDDERS_ANDROID_TYPES_H_
+
+#endif  // EMBEDDERS_OPENGLUI_COMMON_TYPES_H_
+
diff --git a/runtime/embedders/android/vm_glue.cc b/runtime/embedders/openglui/common/vm_glue.cc
similarity index 79%
rename from runtime/embedders/android/vm_glue.cc
rename to runtime/embedders/openglui/common/vm_glue.cc
index 56ed3c3..b0a82bd 100644
--- a/runtime/embedders/android/vm_glue.cc
+++ b/runtime/embedders/openglui/common/vm_glue.cc
@@ -3,24 +3,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include <math.h>
+#include <stdarg.h>
 #include <stdio.h>
-#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
 #include <sys/stat.h>
+#include <unistd.h>
 
+#include "embedders/openglui/common/extension.h"
+#include "embedders/openglui/common/log.h"
+#include "embedders/openglui/common/vm_glue.h"
 #include "include/dart_api.h"
-#include "embedders/android/android_extension.h"
-#include "embedders/android/log.h"
-#include "embedders/android/vm_glue.h"
+
+char* VMGlue::extension_script_ = NULL;
 
 // snapshot_buffer points to a snapshot if we link in a snapshot otherwise
 // it is initialized to NULL.
 
-VMGlue::VMGlue(Graphics* graphics)
-    : graphics_(graphics),
+VMGlue::VMGlue(ISized* surface,
+               const char* script_path,
+               const char* extension_script,
+               const char* main_script)
+    : surface_(surface),
       isolate_(NULL),
       initialized_vm_(false),
       initialized_script_(false) {
   LOGI("Creating VMGlue");
+  if (main_script == NULL) {
+    main_script = "main.dart";
+  }
+  if (extension_script == NULL) {
+    extension_script = "gl.dart";
+  }
+  size_t len = strlen(script_path) + strlen(main_script) + 2;
+  main_script_ = new char[len];
+  snprintf(main_script_, len, "%s/%s", script_path, main_script);
+  len = strlen(script_path) + strlen(extension_script) + 2;
+  extension_script_ = new char[len];
+  snprintf(extension_script_, len, "%s/%s", script_path, extension_script);
 }
 
 int VMGlue::ErrorExit(const char* format, ...) {
@@ -45,7 +65,7 @@
 #define CHECK_RESULT(result)                   \
   if (Dart_IsError(result)) {                  \
     *error = strdup(Dart_GetError(result));    \
-    LOGE(*error);                              \
+    LOGE("%s", *error);                        \
     Dart_ExitScope();                          \
     Dart_ShutdownIsolate();                    \
     return false;                              \
@@ -62,9 +82,9 @@
   // TODO(vsm): Split this up into separate libraries for 3D, 2D,
   // Touch, Audio, etc.  All builtin libraries should be handled here
   // (or moved into a snapshot).
-  if (strcmp(url, "android_extension.dart") == 0) {
-    Dart_Handle source = VMGlue::LoadSourceFromFile(
-        "/data/data/com.google.dartndk/app_dart/android_extension.dart");
+  if (strcmp(url, "gl.dart") == 0) {
+    Dart_Handle source =
+        VMGlue::LoadSourceFromFile(extension_script_);
     Dart_Handle library = CheckError(Dart_LoadLibrary(urlHandle, source));
     CheckError(Dart_SetNativeResolver(library, ResolveName));
     return library;
@@ -107,9 +127,6 @@
                                      error);
 }
 
-#define VMHOSTNAME  "android_dart_host"
-#define MAINSCRIPT  "/data/data/com.google.dartndk/app_dart/main.dart"
-
 const char* VM_FLAGS[] = {
   "--enable_type_checks",  // TODO(gram): This should be an option!
   "--trace_isolates",
@@ -173,7 +190,7 @@
 
   // Create an isolate and loads up the application script.
   char* error = NULL;
-  if (!CreateIsolateAndSetup(MAINSCRIPT, "main", NULL, &error)) {
+  if (!CreateIsolateAndSetup(main_script_, "main", NULL, &error)) {
     LOGE("CreateIsolateAndSetup: %s\n", error);
     free(error);
     return -1;
@@ -182,8 +199,8 @@
   isolate_ = Dart_CurrentIsolate();
   Dart_EnterScope();
 
-  Dart_Handle url = CheckError(Dart_NewStringFromCString(MAINSCRIPT));
-  Dart_Handle source = LoadSourceFromFile(MAINSCRIPT);
+  Dart_Handle url = CheckError(Dart_NewStringFromCString(main_script_));
+  Dart_Handle source = LoadSourceFromFile(main_script_);
   CheckError(Dart_LoadScript(url, source));
 
   Dart_ExitScope();
@@ -194,13 +211,28 @@
 int VMGlue::CallSetup() {
   if (!initialized_script_) {
     initialized_script_ = true;
-    LOGI("Invoking setup(0,0,%d,%d)", graphics_->width(), graphics_->height());
+    LOGI("Invoking setup(0,0,%d,%d)", surface_->width(), surface_->height());
     Dart_EnterIsolate(isolate_);
     Dart_EnterScope();
     Dart_Handle args[2];
-    args[0] = CheckError(Dart_NewInteger(graphics_->width()));
-    args[1] = CheckError(Dart_NewInteger(graphics_->height()));
+    args[0] = CheckError(Dart_NewInteger(surface_->width()));
+    args[1] = CheckError(Dart_NewInteger(surface_->height()));
     int rtn = Invoke("setup", 2, args);
+
+    if (rtn == 0) {
+      // Plug in the print handler. It would be nice if we could do this
+      // before calling setup, but the call to GetField blows up if we
+      // haven't run anything yet.
+      Dart_Handle library = CheckError(Dart_LookupLibrary(
+          Dart_NewStringFromCString("gl.dart")));
+      Dart_Handle print = CheckError(
+          Dart_GetField(library, Dart_NewStringFromCString("_printClosure")));
+      Dart_Handle corelib = CheckError(Dart_LookupLibrary(
+          Dart_NewStringFromCString("dart:core")));
+      CheckError(Dart_SetField(corelib,
+        Dart_NewStringFromCString("_printClosure"), print));
+    }
+
     Dart_ExitScope();
     Dart_ExitIsolate();
     LOGI("Done setup");
@@ -309,3 +341,4 @@
   isolate_ = NULL;
   initialized_script_ = false;
 }
+
diff --git a/runtime/embedders/android/vm_glue.h b/runtime/embedders/openglui/common/vm_glue.h
similarity index 67%
rename from runtime/embedders/android/vm_glue.h
rename to runtime/embedders/openglui/common/vm_glue.h
index bcabd8c..7efa02e 100644
--- a/runtime/embedders/android/vm_glue.h
+++ b/runtime/embedders/openglui/common/vm_glue.h
@@ -2,25 +2,33 @@
 // for 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 EMBEDDERS_ANDROID_VM_GLUE_H_
-#define EMBEDDERS_ANDROID_VM_GLUE_H_
+#ifndef EMBEDDERS_OPENGLUI_COMMON_VM_GLUE_H_
+#define EMBEDDERS_OPENGLUI_COMMON_VM_GLUE_H_
 
-#include <android_native_app_glue.h>
+#include <stdlib.h>
 
+#include "embedders/openglui/common/events.h"
+#include "embedders/openglui/common/isized.h"
 #include "include/dart_api.h"
-#include "embedders/android/graphics.h"
 
 class VMGlue {
  public:
-  explicit VMGlue(Graphics* graphics);
+  explicit VMGlue(ISized* surface,
+                  const char* script_path,
+                  const char* extension_script = NULL,
+                  const char* main_script = NULL);
+  ~VMGlue() {
+    delete[] main_script_;
+    delete[] extension_script_;
+  }
 
   int InitializeVM();
   int StartMainIsolate();
   int CallSetup();
   int CallUpdate();
-  int OnMotionEvent(const char* function, int64_t when,
+  int OnMotionEvent(const char* funtion, int64_t when,
                     float move_x, float move_y);
-  int OnKeyEvent(const char* function, int64_t when, int32_t flags,
+  int OnKeyEvent(const char* funtion, int64_t when, int32_t flags,
              int32_t key_code, int32_t meta_state, int32_t repeat);
   void FinishMainIsolate();
 
@@ -44,10 +52,13 @@
   static Dart_Handle LoadSourceFromFile(const char* url);
   static void ShutdownIsolate(void* callback_data);
 
-  Graphics* graphics_;
+  ISized* surface_;
   Dart_Isolate isolate_;
   bool initialized_vm_;
   bool initialized_script_;
+  char* main_script_;
+  static char* extension_script_;
 };
 
-#endif  // EMBEDDERS_ANDROID_VM_GLUE_H_
+#endif  // EMBEDDERS_OPENGLUI_COMMON_VM_GLUE_H_
+
diff --git a/runtime/embedders/openglui/emulator/emulator_embedder.cc b/runtime/embedders/openglui/emulator/emulator_embedder.cc
new file mode 100644
index 0000000..371de7b
--- /dev/null
+++ b/runtime/embedders/openglui/emulator/emulator_embedder.cc
@@ -0,0 +1,73 @@
+// 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.
+
+#include "embedders/openglui/emulator/emulator_embedder.h"
+
+#include <string.h>
+
+#include "embedders/openglui/common/context.h"
+#include "embedders/openglui/common/dart_host.h"
+#include "embedders/openglui/common/events.h"
+#include "embedders/openglui/common/input_handler.h"
+#include "embedders/openglui/common/sound_handler.h"
+#include "embedders/openglui/common/vm_glue.h"
+#include "embedders/openglui/emulator/emulator_graphics_handler.h"
+
+InputHandler* input_handler_ptr;
+LifeCycleHandler* lifecycle_handler_ptr;
+
+void display() {
+    glClearColor(1.0, 1.0, 1.0, 1.0);
+    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+    lifecycle_handler_ptr->OnStep();
+    glutSwapBuffers();
+}
+
+void reshape(int width, int height) {
+    glViewport(0, 0, width, height);
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glOrtho(0, width, 0, height, -1, 1);
+    glMatrixMode(GL_MODELVIEW);
+    glutPostRedisplay();
+}
+
+void keyboard(unsigned char key, int x, int y) {
+  input_handler_ptr->OnKeyEvent(kKeyDown, time(0), 0, key, 0, 0);
+  input_handler_ptr->OnKeyEvent(kKeyUp, time(0), 0, key, 0, 0);
+  if (key == 27) {
+      exit(0);
+  }
+}
+
+DART_EXPORT void emulator_main(int argc, char** argv, const char* script) {
+  EmulatorGraphicsHandler graphics_handler(argc, argv);
+  if (argc > 0) {
+    int i = argc - 1;
+    size_t len = strlen(argv[i]);
+    if (len > 5 && strcmp(".dart", argv[i] + len - 5) == 0) {
+      script = argv[i];
+    }
+  }
+  VMGlue vm_glue(&graphics_handler, ".", "gl.dart", script);
+  InputHandler input_handler(&vm_glue);
+  input_handler_ptr = &input_handler;
+  SoundHandler sound_handler;
+  Timer timer;
+  Context app_context;
+  app_context.graphics_handler = &graphics_handler;
+  app_context.input_handler = &input_handler;
+  app_context.sound_handler = &sound_handler;
+  app_context.timer = &timer;
+  app_context.vm_glue = &vm_glue;
+  DartHost host(&app_context);
+  lifecycle_handler_ptr = &host;
+  lifecycle_handler_ptr->OnActivate();
+  glutReshapeFunc(reshape);
+  glutDisplayFunc(display);
+  glutKeyboardFunc(keyboard);
+  glutIdleFunc(display);
+  glutMainLoop();
+}
+
diff --git a/runtime/embedders/openglui/emulator/emulator_embedder.h b/runtime/embedders/openglui/emulator/emulator_embedder.h
new file mode 100644
index 0000000..f0f0638
--- /dev/null
+++ b/runtime/embedders/openglui/emulator/emulator_embedder.h
@@ -0,0 +1,14 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_EMBEDDER_H_
+#define EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_EMBEDDER_H_
+
+#include "include/dart_api.h"
+
+DART_EXPORT void emulator_main(int argc, char** argv,
+                               const char* script);
+
+#endif  // EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_EMBEDDER_H_
+
diff --git a/runtime/embedders/openglui/emulator/emulator_graphics_handler.cc b/runtime/embedders/openglui/emulator/emulator_graphics_handler.cc
new file mode 100644
index 0000000..e1a5ae0
--- /dev/null
+++ b/runtime/embedders/openglui/emulator/emulator_graphics_handler.cc
@@ -0,0 +1,38 @@
+// 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.
+
+#include "embedders/openglui/emulator/emulator_graphics_handler.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+EmulatorGraphicsHandler::EmulatorGraphicsHandler(int argc,
+                                                 char** argv)
+  : GLGraphicsHandler() {
+  glutInit(&argc, argv);
+  width_ = 480;
+  height_ = 800;
+  for (int i = 1; i < argc; i++) {
+    if (argv[i][0] == '-') {
+      int next_arg = i + 1;
+      if (next_arg < argc && strcmp(argv[i], "-w") == 0) {
+        width_ = static_cast<size_t>(atoi(argv[i = next_arg]));
+      } else if (next_arg < argc && strcmp(argv[i], "-h") == 0) {
+        height_ = static_cast<size_t>(atoi(argv[i = next_arg]));
+      }
+    }
+  }
+}
+
+int32_t EmulatorGraphicsHandler::Start() {
+  glutInitWindowSize(width_, height_);
+  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
+  glutCreateWindow("Dart");
+  return 0;
+}
+
+void EmulatorGraphicsHandler::Stop() {
+  exit(0);
+}
+
diff --git a/runtime/embedders/openglui/emulator/emulator_graphics_handler.h b/runtime/embedders/openglui/emulator/emulator_graphics_handler.h
new file mode 100644
index 0000000..c7dcdaa
--- /dev/null
+++ b/runtime/embedders/openglui/emulator/emulator_graphics_handler.h
@@ -0,0 +1,19 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_GRAPHICS_HANDLER_H_
+#define EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_GRAPHICS_HANDLER_H_
+
+#include "embedders/openglui/common/gl_graphics_handler.h"
+
+class EmulatorGraphicsHandler : public GLGraphicsHandler {
+  public:
+    EmulatorGraphicsHandler(int argc, char** argv);
+
+    int32_t Start();
+    void Stop();
+};
+
+#endif  // EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_GRAPHICS_HANDLER_H_
+
diff --git a/runtime/embedders/openglui/emulator/emulator_resource.h b/runtime/embedders/openglui/emulator/emulator_resource.h
new file mode 100644
index 0000000..bceebd6
--- /dev/null
+++ b/runtime/embedders/openglui/emulator/emulator_resource.h
@@ -0,0 +1,63 @@
+// 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.
+
+#ifndef EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_RESOURCE_H_
+#define EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_RESOURCE_H_
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "embedders/openglui/common/log.h"
+#include "embedders/openglui/common/resource.h"
+
+class EmulatorResource : public Resource {
+  public:
+    explicit EmulatorResource(const char* path)
+      : base(path),
+        fd_(-1) {
+    }
+
+    int32_t descriptor() {
+      if (fd_ < 0) {
+        Open();
+      }
+      return fd_;
+    }
+
+    off_t length() {
+      if (length_ < 0) {
+        length_ = lseek(fd), 0, SEEK_END);
+        lseek(fd), 0, SEEK_START);
+      }
+      return length_;
+    }
+
+    int32_t Open() {
+      fd_ = open(path_, 0);
+      if (fd_ >= 0) {
+        return 0;
+      }
+      LOGE("Could not open asset %s", path_);
+      return -1;
+    }
+
+    void Close() {
+      if (fd_ >= 0) {
+        close(fd_);
+        fd_ = -1;
+      }
+    }
+
+    int32_t Read(void* buffer, size_t count) {
+      size_t actual = read(asset_, buffer, count);
+      return (actual == count) ? 0 : -1;
+    }
+
+  private:
+    int fd_;
+};
+
+#endif  // EMBEDDERS_OPENGLUI_EMULATOR_EMULATOR_RESOURCE_H_
+
diff --git a/runtime/embedders/openglui/openglui_embedder.gypi b/runtime/embedders/openglui/openglui_embedder.gypi
new file mode 100644
index 0000000..6057f6e
--- /dev/null
+++ b/runtime/embedders/openglui/openglui_embedder.gypi
@@ -0,0 +1,156 @@
+# 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.
+
+{
+  'conditions': [
+    ['OS=="android"',
+      {
+        'targets': [
+          {
+            # Dart shared library for Android.
+            'target_name': 'android_embedder',
+            'type': 'shared_library',
+            'dependencies': [
+              'libdart_lib_withcore',
+              'libdart_vm',
+              'libjscre',
+              'libdouble_conversion',
+              'generate_version_cc_file',
+            ],
+            'include_dirs': [
+              '../..',
+              '../../../third_party/android_tools/ndk/sources/android/native_app_glue',
+            ],
+            'defines': [
+              'DART_SHARED_LIB',
+              '__ANDROID__'
+            ],
+            'sources': [
+              '../../include/dart_api.h',
+              '../../include/dart_debugger_api.h',
+              '../../vm/dart_api_impl.cc',
+              '../../vm/debugger_api_impl.cc',
+              '../../vm/version.h',
+              '../../../third_party/android_tools/ndk/sources/android/native_app_glue/android_native_app_glue.h',
+              '../../../third_party/android_tools/ndk/sources/android/native_app_glue/android_native_app_glue.c',
+              'android/android_graphics_handler.cc',
+              'android/android_graphics_handler.h',
+              'android/android_input_handler.h',
+              'android/android_resource.h',
+              'android/android_sound_handler.cc',
+              'android/android_sound_handler.h',
+              'android/eventloop.cc',
+              'android/eventloop.h',
+              'android/log.h',
+              'android/main.cc',
+              'android/support_android.cc',
+              'common/context.h',
+              'common/dart_host.cc',
+              'common/dart_host.h',
+              'common/events.h',
+              'common/extension.cc',
+              'common/extension.h',
+              'common/gl_graphics_handler.cc',
+              'common/gl_graphics_handler.h',
+              'common/graphics_handler.h',
+              'common/input_handler.cc',
+              'common/input_handler.h',
+              'common/isized.h',
+              'common/life_cycle_handler.h',
+              'common/log.h',
+              'common/opengl.h',
+              'common/resource.h',
+              'common/sample.h',
+              'common/sound_handler.cc',
+              'common/sound_handler.h',
+              'common/timer.cc',
+              'common/timer.h',
+              'common/types.h',
+              'common/vm_glue.cc',
+              'common/vm_glue.h',
+              '<(version_cc_file)',
+            ],
+            'link_settings': {
+              'libraries': [ '-llog', '-lc', '-landroid', '-lEGL', '-lGLESv2', '-lOpenSLES', '-landroid' ],
+              'ldflags': [
+                '-z', 'muldefs'
+              ],
+              'ldflags!': [
+                '-Wl,--exclude-libs=ALL',
+              ],
+            },
+          },
+        ],
+      },
+    ],
+    ['OS=="mac" or OS=="linux"',
+      {
+        'targets': [
+          {
+            'target_name': 'emulator_embedder',
+            'type': 'shared_library',
+            'dependencies': [
+              'libdart_lib_withcore',
+              'libdart_vm',
+              'libjscre',
+              'libdouble_conversion',
+              'generate_version_cc_file',
+            ],
+            'include_dirs': [
+              '../..',
+            ],
+            'defines': [
+              'DART_SHARED_LIB'
+            ],
+            'sources': [
+              '../../include/dart_api.h',
+              '../../include/dart_debugger_api.h',
+              '../../vm/dart_api_impl.cc',
+              '../../vm/debugger_api_impl.cc',
+              '../../vm/version.h',
+              'common/context.h',
+              'common/dart_host.cc',
+              'common/dart_host.h',
+              'common/events.h',
+              'common/extension.cc',
+              'common/extension.h',
+              'common/gl_graphics_handler.cc',
+              'common/gl_graphics_handler.h',
+              'common/graphics_handler.h',
+              'common/input_handler.cc',
+              'common/input_handler.h',
+              'common/isized.h',
+              'common/life_cycle_handler.h',
+              'common/log.h',
+              'common/opengl.h',
+              'common/resource.h',
+              'common/sample.h',
+              'common/sound_handler.cc',
+              'common/sound_handler.h',
+              'common/timer.cc',
+              'common/timer.h',
+              'common/types.h',
+              'common/vm_glue.cc',
+              'common/vm_glue.h',
+              'emulator/emulator_embedder.cc',
+              'emulator/emulator_embedder.h',
+              'emulator/emulator_graphics_handler.cc',
+              'emulator/emulator_graphics_handler.h',
+              'emulator/emulator_resource.h',
+              '<(version_cc_file)',
+            ],
+            'conditions': [
+              ['OS=="mac"', {
+                'xcode_settings' : {
+                  'OTHER_LDFLAGS': [ '-framework OpenGL', '-framework GLUT', '-L /usr/X11/lib' ]
+                },
+              }],
+            ]
+          },
+        ],
+      },
+    ],
+  ],
+}
+
diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart
index f5e8ec3..d7fac3a 100644
--- a/runtime/lib/array.dart
+++ b/runtime/lib/array.dart
@@ -29,6 +29,31 @@
         "Cannot remove element of a non-extendable array");
   }
 
+  void remove(Object element) {
+    throw new UnsupportedError(
+        "Cannot remove element of a non-extendable array");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove element of a non-extendable array");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove element of a non-extendable array");
+  }
+
+  void removeMatching(bool test(E element)) {
+    throw new UnsupportedError(
+        "Cannot remove element of a non-extendable array");
+  }
+
+  void retainMatching(bool test(E element)) {
+    throw new UnsupportedError(
+        "Cannot remove element of a non-extendable array");
+  }
+
   void setRange(int start, int length, List<E> from, [int startFrom = 0]) {
     if (length < 0) {
       throw new ArgumentError("negative length $length");
@@ -62,63 +87,63 @@
   // Collection interface.
 
   bool contains(E element) {
-    return Collections.contains(this, element);
+    return IterableMixinWorkaround.contains(this, element);
   }
 
   void forEach(f(E element)) {
-    Collections.forEach(this, f);
+    IterableMixinWorkaround.forEach(this, f);
   }
 
   String join([String separator]) {
-    return Collections.join(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   List mappedBy(f(E element)) {
-    return new MappedList<E, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
   reduce(initialValue, combine(previousValue, E element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   Iterable<E> where(bool f(E element)) {
-    return new WhereIterable<E>(this, f);
+    return IterableMixinWorkaround.where(this, f);
   }
 
   List<E> take(int n) {
-    return new ListView<E>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<E> takeWhile(bool test(E value)) {
-    return new TakeWhileIterable<E>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<E> skip(int n) {
-    return new ListView<E>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<E> skipWhile(bool test(E value)) {
-    return new SkipWhileIterable<E>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   bool every(bool f(E element)) {
-    return Collections.every(this, f);
+    return IterableMixinWorkaround.every(this, f);
   }
 
   bool any(bool f(E element)) {
-    return Collections.any(this, f);
+    return IterableMixinWorkaround.any(this, f);
   }
 
   E firstMatching(bool test(E value), {E orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   E lastMatching(bool test(E value), {E orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   E singleMatching(bool test(E value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   E elementAt(int index) {
@@ -130,8 +155,7 @@
   }
 
   void sort([int compare(E a, E b)]) {
-    if (compare == null) compare = Comparable.compare;
-    _Sort.sort(this, compare);
+    IterableMixinWorkaround.sortList(this, compare);
   }
 
   int indexOf(E element, [int start = 0]) {
@@ -192,9 +216,9 @@
     throw new StateError("More than one element");
   }
 
-  E min([int compare(E a, E b)]) => Collections.min(this, compare);
+  E min([int compare(E a, E b)]) => IterableMixinWorkaround.min(this, compare);
 
-  E max([int compare(E a, E b)]) => Collections.max(this, compare);
+  E max([int compare(E a, E b)]) => IterableMixinWorkaround.max(this, compare);
 
   List<E> toList() {
     return new List<E>.from(this);
@@ -234,6 +258,31 @@
         "Cannot modify an immutable array");
   }
 
+  void remove(Object element) {
+    throw new UnsupportedError(
+        "Cannot modify an immutable array");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot modify an immutable array");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot modify an immutable array");
+  }
+
+  void removeMatching(bool test(E element)) {
+    throw new UnsupportedError(
+        "Cannot modify an immutable array");
+  }
+
+  void retainMatching(bool test(E element)) {
+    throw new UnsupportedError(
+        "Cannot modify an immutable array");
+  }
+
   void copyFrom(List src, int srcStart, int dstStart, int count) {
     throw new UnsupportedError(
         "Cannot modify an immutable array");
@@ -266,63 +315,63 @@
   // Collection interface.
 
   bool contains(E element) {
-    return Collections.contains(this, element);
+    return IterableMixinWorkaround.contains(this, element);
   }
 
   void forEach(f(E element)) {
-    Collections.forEach(this, f);
+    IterableMixinWorkaround.forEach(this, f);
   }
 
   List mappedBy(f(E element)) {
-    return new MappedList<E, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
   String join([String separator]) {
-    return Collections.join(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   reduce(initialValue, combine(previousValue, E element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   Iterable<E> where(bool f(E element)) {
-    return new WhereIterable<E>(this, f);
+    return IterableMixinWorkaround.where(this, f);
   }
 
   List<E> take(int n) {
-    return new ListView<E>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<E> takeWhile(bool test(E value)) {
-    return new TakeWhileIterable<E>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<E> skip(int n) {
-    return new ListView<E>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<E> skipWhile(bool test(E value)) {
-    return new SkipWhileIterable<E>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   bool every(bool f(E element)) {
-    return Collections.every(this, f);
+    return IterableMixinWorkaround.every(this, f);
   }
 
   bool any(bool f(E element)) {
-    return Collections.any(this, f);
+    return IterableMixinWorkaround.any(this, f);
   }
 
   E firstMatching(bool test(E value), {E orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   E lastMatching(bool test(E value), {E orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   E singleMatching(bool test(E value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   E elementAt(int index) {
@@ -400,9 +449,9 @@
     throw new StateError("More than one element");
   }
 
-  E min([int compare(E a, E b)]) => Collections.min(this, compare);
+  E min([int compare(E a, E b)]) => IterableMixinWorkaround.min(this, compare);
 
-  E max([int compare(E a, E b)]) => Collections.max(this, compare);
+  E max([int compare(E a, E b)]) => IterableMixinWorkaround.max(this, compare);
 
   List<E> toList() {
     return new List<E>.from(this);
diff --git a/runtime/lib/byte_array.cc b/runtime/lib/byte_array.cc
index 553d63c..f34c56b 100644
--- a/runtime/lib/byte_array.cc
+++ b/runtime/lib/byte_array.cc
@@ -119,7 +119,7 @@
 #define INTEGER_TO_UINT64(integer, uint64)                                     \
   if (integer.IsBigint()) {                                                    \
     Bigint& bigint = Bigint::Handle();                                         \
-    bigint ^= integer.raw();                                                   \
+    bigint |= integer.raw();                                                   \
     ASSERT(BigintOperations::FitsIntoUint64(bigint));                          \
     value = BigintOperations::AbsToUint64(bigint);                             \
   } else {                                                                     \
diff --git a/runtime/lib/byte_array.dart b/runtime/lib/byte_array.dart
index 6af5f2f..941d818 100644
--- a/runtime/lib/byte_array.dart
+++ b/runtime/lib/byte_array.dart
@@ -187,7 +187,7 @@
 
   // Methods implementing the Collection interface.
 
-  bool contains(element) => Collections.contains(this, element);
+  bool contains(element) => IterableMixinWorkaround.contains(this, element);
 
   void forEach(void f(element)) {
     var len = this.length;
@@ -197,56 +197,56 @@
   }
 
   List mappedBy(f(int element)) {
-    return new MappedList<int, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
   String join([String separator]) {
-    return Collections.join(this, separator);
+    return IterableMixinWorkaround.join(this, separator);
   }
 
   dynamic reduce(dynamic initialValue,
                  dynamic combine(dynamic initialValue, element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   Collection where(bool f(element)) {
-    return new WhereIterable<int>(this, f);
+    return IterableMixinWorkaround.where(this, f);
   }
 
   List<int> take(int n) {
-    return new ListView<int>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<int> skip(int n) {
-    return new ListView<int>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   bool every(bool f(element)) {
-    return Collections.every(this, f);
+    return IterableMixinWorkaround.every(this, f);
   }
 
   bool any(bool f(element)) {
-    return Collections.any(this, f);
+    return IterableMixinWorkaround.any(this, f);
   }
 
   int firstMatching(bool test(int value), {int orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -284,8 +284,7 @@
   }
 
   void sort([int compare(var a, var b)]) {
-    if (compare == null) compare = Comparable.compare;
-    coreSort(this, compare);
+    return IterableMixinWorkaround.sortList(this, compare);
   }
 
   int indexOf(element, [int start = 0]) {
@@ -307,6 +306,31 @@
         "Cannot remove from a non-extendable array");
   }
 
+  void remove(Object element) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
   int get first {
     if (length > 0) return this[0];
     throw new StateError("No elements");
@@ -323,9 +347,9 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   void removeRange(int start, int length) {
     throw new UnsupportedError(
@@ -1963,8 +1987,7 @@
   }
 
   void sort([int compare(var a, var b)]) {
-    if (compare == null) compare = Comparable.compare;
-    coreSort(this, compare);
+    return IterableMixinWorkaround.sortList(this, compare);
   }
 
   int indexOf(element, [int start = 0]) {
@@ -1986,6 +2009,36 @@
         "Cannot remove from a non-extendable array");
   }
 
+  int removeAt(int index) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void remove(Object element) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError(
+        "Cannot remove from a non-extendable array");
+  }
+
   int get first {
     if (length > 0) return this[0];
     throw new StateError("No elements");
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index 0b384a8..ce650cc 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -21,6 +21,21 @@
     return result;
   }
 
+  void remove(Object element) {
+    for (int i = 0; i < this.length; i++) {
+      if (this[i] == element) {
+        int newLength = this.length - 1;
+        Arrays.copy(this,
+                    index + 1,
+                    this,
+                    index,
+                    newLength - index);
+        this.length = newLength;
+        return;
+      }
+    }
+  }
+
   void setRange(int start, int length, List<T> from, [int startFrom = 0]) {
     if (length < 0) {
       throw new ArgumentError("negative length $length");
@@ -163,9 +178,9 @@
     throw new StateError("More than one element");
   }
 
-  T min([int compare(T a, T b)]) => Collections.min(this, compare);
+  T min([int compare(T a, T b)]) => IterableMixinWorkaround.min(this, compare);
 
-  T max([int compare(T a, T b)]) => Collections.max(this, compare);
+  T max([int compare(T a, T b)]) => IterableMixinWorkaround.max(this, compare);
 
   int indexOf(T element, [int start = 0]) {
     return Arrays.indexOf(this, element, start, length);
@@ -187,11 +202,11 @@
   // Collection interface.
 
   bool contains(T element) {
-    return Collections.contains(this, element);
+    return IterableMixinWorkaround.contains(this, element);
   }
 
   void forEach(f(T element)) {
-    // TODO(srdjan): Use Collections.forEach(this, f);
+    // TODO(srdjan): Use IterableMixinWorkaround.forEach(this, f);
     // Accessing the list directly improves DeltaBlue performance by 25%.
     for (int i = 0; i < length; i++) {
       f(this[i]);
@@ -217,51 +232,51 @@
   }
 
   List mappedBy(f(T element)) {
-    return new MappedList<T, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
   reduce(initialValue, combine(previousValue, T element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   Iterable<T> where(bool f(T element)) {
-    return new WhereIterable<T>(this, f);
+    return IterableMixinWorkaround.where(this, f);
   }
 
   List<T> take(int n) {
-    return new ListView<T>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<T> takeWhile(bool test(T value)) {
-    return new TakeWhileIterable<T>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<T> skip(int n) {
-    return new ListView<T>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<T> skipWhile(bool test(T value)) {
-    return new SkipWhileIterable<T>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   bool every(bool f(T element)) {
-    return Collections.every(this, f);
+    return IterableMixinWorkaround.every(this, f);
   }
 
   bool any(bool f(T element)) {
-    return Collections.any(this, f);
+    return IterableMixinWorkaround.any(this, f);
   }
 
   T firstMatching(bool test(T value), {T orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   T lastMatching(bool test(T value), {T orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   T singleMatching(bool test(T value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   T elementAt(int index) {
@@ -277,8 +292,7 @@
   }
 
   void sort([int compare(T a, T b)]) {
-    if (compare == null) compare = Comparable.compare;
-    _Sort.sort(this, compare);
+    IterableMixinWorkaround.sortList(this, compare);
   }
 
   String toString() {
diff --git a/runtime/lib/integers.cc b/runtime/lib/integers.cc
index 5a8fd2e..87fdff4 100644
--- a/runtime/lib/integers.cc
+++ b/runtime/lib/integers.cc
@@ -23,13 +23,13 @@
 static bool CheckInteger(const Integer& i) {
   if (i.IsBigint()) {
     Bigint& bigint = Bigint::Handle();
-    bigint ^= i.raw();
+    bigint |= i.raw();
     return !BigintOperations::FitsIntoSmi(bigint) &&
         !BigintOperations::FitsIntoMint(bigint);
   }
   if (i.IsMint()) {
     Mint& mint = Mint::Handle();
-    mint ^= i.raw();
+    mint |= i.raw();
     return !Smi::IsValid64(mint.value());
   }
   return true;
@@ -218,7 +218,7 @@
   }
   if (value.IsSmi()) {
     Smi& smi_value = Smi::Handle();
-    smi_value ^= value.raw();
+    smi_value |= value.raw();
     return smi_value.ShiftOp(kind, amount);
   }
   Bigint& big_value = Bigint::Handle();
@@ -240,7 +240,7 @@
     }
   } else {
     ASSERT(value.IsBigint());
-    big_value ^= value.raw();
+    big_value |= value.raw();
   }
   switch (kind) {
     case Token::kSHL:
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index d65246b..ede0fc3 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -45,7 +45,7 @@
 static void StoreError(Isolate* isolate, const Object& obj) {
   ASSERT(obj.IsError());
   Error& error = Error::Handle();
-  error ^= obj.raw();
+  error |= obj.raw();
   isolate->object_store()->set_sticky_error(error);
 }
 
@@ -62,12 +62,15 @@
     ASSERT(!isolate_lib.IsNull());
     const String& class_name =
         String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl()));
+    const String& function_name =
+        String::Handle(isolate_lib.PrivateName(Symbols::_get_or_create()));
     func = Resolver::ResolveStatic(isolate_lib,
                                    class_name,
-                                   Symbols::_get_or_create(),
+                                   function_name,
                                    kNumArguments,
                                    Object::empty_array(),
                                    Resolver::kIsQualified);
+    ASSERT(!func.IsNull());
     isolate->object_store()->set_receive_port_create_function(func);
   }
   const Array& args = Array::Handle(isolate, Array::New(kNumArguments));
@@ -189,7 +192,7 @@
     return false;
   } else if (obj.IsString()) {
     String& string_obj = String::Handle();
-    string_obj ^= obj.raw();
+    string_obj |= obj.raw();
     *canonical_uri = zone->MakeCopyOfString(string_obj.ToCString());
     return true;
   } else {
@@ -374,7 +377,7 @@
     }
     ASSERT(result.IsFunction());
     Function& func = Function::Handle(isolate);
-    func ^= result.raw();
+    func |= result.raw();
     result = DartEntry::InvokeStatic(func, Object::empty_array());
     if (result.IsError()) {
       StoreError(isolate, result);
@@ -419,7 +422,7 @@
   bool throw_exception = false;
   Function& func = Function::Handle();
   if (closure.IsClosure()) {
-    func ^= Closure::function(closure);
+    func |= Closure::function(closure);
     const Class& cls = Class::Handle(func.Owner());
     if (!func.IsClosureFunction() || !func.is_static() || !cls.IsTopLevel()) {
       throw_exception = true;
@@ -437,7 +440,7 @@
   GET_NATIVE_ARGUMENT(Instance, callback, arguments->NativeArgAt(1));
   Function& callback_func = Function::Handle();
   if (callback.IsClosure()) {
-    callback_func ^= Closure::function(callback);
+    callback_func |= Closure::function(callback);
     const Class& cls = Class::Handle(callback_func.Owner());
     if (!callback_func.IsClosureFunction() || !callback_func.is_static() ||
         !cls.IsTopLevel()) {
diff --git a/runtime/lib/string.cc b/runtime/lib/string.cc
index c636a8b..54d1017 100644
--- a/runtime/lib/string.cc
+++ b/runtime/lib/string.cc
@@ -124,7 +124,7 @@
 static int32_t StringValueAt(const String& str, const Integer& index) {
   if (index.IsSmi()) {
     Smi& smi = Smi::Handle();
-    smi ^= index.raw();
+    smi |= index.raw();
     int32_t index = smi.Value();
     if ((index < 0) || (index >= str.Length())) {
       const Array& args = Array::Handle(Array::New(1));
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 99e07c3..0e352c6 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -85,15 +85,21 @@
 #elif defined(__ARMEL__)
 #define HOST_ARCH_ARM 1
 #define ARCH_IS_32_BIT 1
+#elif defined(__MIPSEL__)
+#define HOST_ARCH_MIPS 1
+#define ARCH_IS_32_BIT 1
 #else
 #error Architecture was not detected as supported by Dart.
 #endif
 
+#if !defined(TARGET_ARCH_MIPS)
 #if !defined(TARGET_ARCH_ARM)
 #if !defined(TARGET_ARCH_X64)
 #if !defined(TARGET_ARCH_IA32)
 // No target architecture specified pick the one matching the host architecture.
-#if defined(HOST_ARCH_ARM)
+#if defined(HOST_ARCH_MIPS)
+#define TARGET_ARCH_MIPS 1
+#elif defined(HOST_ARCH_ARM)
 #define TARGET_ARCH_ARM 1
 #elif defined(HOST_ARCH_X64)
 #define TARGET_ARCH_X64 1
@@ -105,6 +111,7 @@
 #endif
 #endif
 #endif
+#endif
 
 // Verify that host and target architectures match, we cannot
 // have a 64 bit Dart VM generating 32 bit code or vice-versa.
@@ -112,7 +119,9 @@
 #if !defined(ARCH_IS_64_BIT)
 #error Mismatched Host/Target architectures.
 #endif
-#elif defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_ARM)
+#elif defined(TARGET_ARCH_IA32) ||                                             \
+      defined(TARGET_ARCH_ARM) ||                                              \
+      defined(TARGET_ARCH_MIPS)
 #if !defined(ARCH_IS_32_BIT)
 #error Mismatched Host/Target architectures.
 #endif
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index aac342b..2444f50 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -33,6 +33,10 @@
 dart/byte_array_test: Skip # compilers not aware of byte arrays
 dart/isolate_unhandled*: Skip
 
+[ $compiler == dart2js && $minified ]
+# Methods in stack traces are renamed.
+dart/inline_stack_frame_test: Fail # Issue 7953.
+
 [ $runtime == ff || $runtime == ie9 ]
 dart/inline_stack_frame_test: Skip
 
diff --git a/runtime/vm/allocation.h b/runtime/vm/allocation.h
index 86d825c..99a00b5 100644
--- a/runtime/vm/allocation.h
+++ b/runtime/vm/allocation.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -25,8 +25,7 @@
 
  private:
   DISALLOW_ALLOCATION();
-  // TODO(5411081): Add DISALLOW_COPY_AND_ASSIGN(ValueObject) once the mac
-  // build issue is resolved.
+  DISALLOW_COPY_AND_ASSIGN(ValueObject);
 };
 
 
diff --git a/runtime/vm/assembler.h b/runtime/vm/assembler.h
index 581133a..1d24788 100644
--- a/runtime/vm/assembler.h
+++ b/runtime/vm/assembler.h
@@ -200,6 +200,8 @@
 #include "vm/assembler_x64.h"
 #elif defined(TARGET_ARCH_ARM)
 #include "vm/assembler_arm.h"
+#elif defined(TARGET_ARCH_MIPS)
+#include "vm/assembler_mips.h"
 #else
 #error Unknown architecture.
 #endif
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc
new file mode 100644
index 0000000..4a64fc3
--- /dev/null
+++ b/runtime/vm/assembler_arm.cc
@@ -0,0 +1,19 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_ARM)
+
+#include "vm/assembler.h"
+
+namespace dart {
+
+DEFINE_FLAG(bool, print_stop_message, true, "Print stop message.");
+DEFINE_FLAG(bool, code_comments, false,
+            "Include comments into code and disassembly");
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_ARM
+
diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h
index 6e2e4c7..0661a8a 100644
--- a/runtime/vm/assembler_arm.h
+++ b/runtime/vm/assembler_arm.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -14,6 +14,51 @@
 
 namespace dart {
 
+class Operand : public ValueObject {
+ public:
+  Operand(const Operand& other) : ValueObject() {
+    UNIMPLEMENTED();
+  }
+
+  Operand& operator=(const Operand& other) {
+    UNIMPLEMENTED();
+    return *this;
+  }
+
+ protected:
+  Operand() { }  // Needed by subclass Address.
+};
+
+
+class Address : public Operand {
+ public:
+  Address(Register base, int32_t disp) {
+    UNIMPLEMENTED();
+  }
+
+  Address(const Address& other) : Operand(other) { }
+
+  Address& operator=(const Address& other) {
+    Operand::operator=(other);
+    return *this;
+  }
+};
+
+
+class FieldAddress : public Address {
+ public:
+  FieldAddress(Register base, int32_t disp)
+      : Address(base, disp - kHeapObjectTag) { }
+
+  FieldAddress(const FieldAddress& other) : Address(other) { }
+
+  FieldAddress& operator=(const FieldAddress& other) {
+    Address::operator=(other);
+    return *this;
+  }
+};
+
+
 class Label : public ValueObject {
  public:
   Label() : position_(0) { }
@@ -58,13 +103,26 @@
 };
 
 
-class Assembler {
+class CPUFeatures : public AllStatic {
  public:
-  Assembler() { }
+  static void InitOnce() { }
+  static bool double_truncate_round_supported() {
+    UNIMPLEMENTED();
+    return false;
+  }
+};
+
+
+class Assembler : public ValueObject {
+ public:
+  Assembler() { UNIMPLEMENTED(); }
   ~Assembler() { }
 
-  // Macros for High-level operations.
-  void AddConstant(Register reg, int value, Condition cond = AL) {
+  void PopRegister(Register r) {
+    UNIMPLEMENTED();
+  }
+
+  void Bind(Label* label) {
     UNIMPLEMENTED();
   }
 
@@ -95,6 +153,25 @@
     UNIMPLEMENTED();
   }
 
+  void Comment(const char* format, ...) PRINTF_ATTRIBUTE(2, 3) {
+    UNIMPLEMENTED();
+  }
+
+  const Code::Comments& GetCodeComments() const {
+    UNIMPLEMENTED();
+    return Code::Comments::New(0);
+  }
+
+  static const char* RegisterName(Register reg) {
+    UNIMPLEMENTED();
+    return NULL;
+  }
+
+  static const char* FpuRegisterName(FpuRegister reg) {
+    UNIMPLEMENTED();
+    return NULL;
+  }
+
  private:
   ZoneGrowableArray<int>* pointer_offsets_;
   DISALLOW_ALLOCATION();
diff --git a/runtime/vm/assembler_ia32.cc b/runtime/vm/assembler_ia32.cc
index a75941a..271d43c 100644
--- a/runtime/vm/assembler_ia32.cc
+++ b/runtime/vm/assembler_ia32.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -2095,7 +2095,7 @@
 };
 
 
-const char* Assembler::XmmRegisterName(XmmRegister reg) {
+const char* Assembler::FpuRegisterName(FpuRegister reg) {
   ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
   return xmm_reg_names[reg];
 }
diff --git a/runtime/vm/assembler_ia32.h b/runtime/vm/assembler_ia32.h
index e377e70..5c0c1cb 100644
--- a/runtime/vm/assembler_ia32.h
+++ b/runtime/vm/assembler_ia32.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -22,6 +22,8 @@
  public:
   explicit Immediate(int32_t value) : value_(value) { }
 
+  Immediate(const Immediate& other) : ValueObject(), value_(other.value_) { }
+
   int32_t value() const { return value_; }
 
   bool is_int8() const { return Utils::IsInt(8, value_); }
@@ -33,6 +35,7 @@
 
   // TODO(5411081): Add DISALLOW_COPY_AND_ASSIGN(Immediate) once the mac
   // build issue is resolved.
+  // And remove the unnecessary copy constructor.
 };
 
 
@@ -68,14 +71,18 @@
     return bit_copy<int32_t>(encoding_[length_ - 4]);
   }
 
-  bool IsRegister(Register reg) const {
-    return ((encoding_[0] & 0xF8) == 0xC0)  // Addressing mode is register only.
-        && ((encoding_[0] & 0x07) == reg);  // Register codes match.
+  Operand(const Operand& other) : ValueObject(), length_(other.length_) {
+    memmove(&encoding_[0], &other.encoding_[0], other.length_);
+  }
+
+  Operand& operator=(const Operand& other) {
+    length_ = other.length_;
+    memmove(&encoding_[0], &other.encoding_[0], other.length_);
+    return *this;
   }
 
  protected:
-  // Operand can be sub classed (e.g: Address).
-  Operand() : length_(0) { }
+  Operand() : length_(0) { }  // Needed by subclass Address.
 
   void SetModRM(int mod, Register rm) {
     ASSERT((mod & ~3) == 0);
@@ -115,10 +122,14 @@
     return encoding_[index];
   }
 
-  friend class Assembler;
+  // Returns whether or not this operand is really the given register in
+  // disguise. Used from the assembler to generate better encodings.
+  bool IsRegister(Register reg) const {
+    return ((encoding_[0] & 0xF8) == 0xC0)  // Addressing mode is register only.
+        && ((encoding_[0] & 0x07) == reg);  // Register codes match.
+  }
 
-  // TODO(5411081): Add DISALLOW_COPY_AND_ASSIGN(Operand) once the mac
-  // build issue is resolved.
+  friend class Assembler;
 };
 
 
@@ -162,6 +173,13 @@
     }
   }
 
+  Address(const Address& other) : Operand(other) { }
+
+  Address& operator=(const Address& other) {
+    Operand::operator=(other);
+    return *this;
+  }
+
   static Address Absolute(const uword addr) {
     Address result;
     result.SetModRM(0, EBP);
@@ -170,19 +188,24 @@
   }
 
  private:
-  Address() {}
-
-  // TODO(5411081): Add DISALLOW_COPY_AND_ASSIGN(Address) once the mac
-  // build issue is resolved.
+  Address() { }  // Needed by Address::Absolute.
 };
 
 
 class FieldAddress : public Address {
  public:
   FieldAddress(Register base, int32_t disp)
-      : Address(base, disp - kHeapObjectTag) {}
+      : Address(base, disp - kHeapObjectTag) { }
+
   FieldAddress(Register base, Register index, ScaleFactor scale, int32_t disp)
-      : Address(base, index, scale, disp - kHeapObjectTag) {}
+      : Address(base, index, scale, disp - kHeapObjectTag) { }
+
+  FieldAddress(const FieldAddress& other) : Address(other) { }
+
+  FieldAddress& operator=(const FieldAddress& other) {
+    Address::operator=(other);
+    return *this;
+  }
 };
 
 
@@ -260,6 +283,7 @@
   static void InitOnce();
   static bool sse2_supported();
   static bool sse4_1_supported();
+  static bool double_truncate_round_supported() { return sse4_1_supported(); }
 
  private:
   static const uint64_t kSSE2BitMask = static_cast<uint64_t>(1) << 26;
@@ -636,7 +660,7 @@
   const Code::Comments& GetCodeComments() const;
 
   static const char* RegisterName(Register reg);
-  static const char* XmmRegisterName(XmmRegister reg);
+  static const char* FpuRegisterName(FpuRegister reg);
 
  private:
   AssemblerBuffer buffer_;
diff --git a/runtime/vm/assembler_macros.h b/runtime/vm/assembler_macros.h
index 5f6a3c5..a4a4e31 100644
--- a/runtime/vm/assembler_macros.h
+++ b/runtime/vm/assembler_macros.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -10,7 +10,9 @@
 #elif defined(TARGET_ARCH_X64)
 #include "vm/assembler_macros_x64.h"
 #elif defined(TARGET_ARCH_ARM)
-// Not yet implemented.
+#include "vm/assembler_macros_arm.h"
+#elif defined(TARGET_ARCH_MIPS)
+#include "vm/assembler_macros_mips.h"
 #else
 #error Unknown architecture.
 #endif
diff --git a/runtime/vm/assembler_macros_arm.cc b/runtime/vm/assembler_macros_arm.cc
new file mode 100644
index 0000000..f2266c2
--- /dev/null
+++ b/runtime/vm/assembler_macros_arm.cc
@@ -0,0 +1,34 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_ARM)
+
+#include "vm/assembler_macros.h"
+
+namespace dart {
+
+void AssemblerMacros::TryAllocate(Assembler* assembler,
+                                  const Class& cls,
+                                  Label* failure,
+                                  bool near_jump,
+                                  Register instance_reg) {
+  UNIMPLEMENTED();
+}
+
+
+void AssemblerMacros::EnterDartFrame(Assembler* assembler,
+                                     intptr_t frame_size) {
+  UNIMPLEMENTED();
+}
+
+
+void AssemblerMacros::EnterStubFrame(Assembler* assembler) {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_ARM
+
diff --git a/runtime/vm/assembler_macros_arm.h b/runtime/vm/assembler_macros_arm.h
new file mode 100644
index 0000000..5bf1427
--- /dev/null
+++ b/runtime/vm/assembler_macros_arm.h
@@ -0,0 +1,54 @@
+// 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.
+// The class 'AssemblerMacros' contains assembler instruction groups that
+// are used in Dart.
+
+#ifndef VM_ASSEMBLER_MACROS_ARM_H_
+#define VM_ASSEMBLER_MACROS_ARM_H_
+
+#ifndef VM_ASSEMBLER_MACROS_H_
+#error Do not include assembler_macros_arm.h directly; use assembler_macros.h.
+#endif
+
+#include "vm/allocation.h"
+#include "vm/constants_arm.h"
+
+namespace dart {
+
+// Forward declarations.
+class Assembler;
+class Class;
+class Label;
+
+class AssemblerMacros : public AllStatic {
+ public:
+  // Inlined allocation of an instance of class 'cls', code has no runtime
+  // calls. Jump to 'failure' if the instance cannot be allocated here.
+  // Allocated instance is returned in 'instance_reg'.
+  // Only the tags field of the object is initialized.
+  static void TryAllocate(Assembler* assembler,
+                          const Class& cls,
+                          Label* failure,
+                          bool near_jump,
+                          Register instance_reg);
+
+  // Set up a dart frame on entry with a frame pointer and PC information to
+  // enable easy access to the RawInstruction object of code corresponding
+  // to this frame.
+  static void EnterDartFrame(Assembler* assembler, intptr_t frame_size);
+
+  // Set up a stub frame so that the stack traversal code can easily identify
+  // a stub frame.
+  static void EnterStubFrame(Assembler* assembler);
+
+  // Instruction pattern from entrypoint is used in dart frame prologs
+  // to set up the frame and save a PC which can be used to figure out the
+  // RawInstruction object corresponding to the code running in the frame.
+  static const intptr_t kOffsetOfSavedPCfromEntrypoint = -1;  // UNIMPLEMENTED.
+};
+
+}  // namespace dart.
+
+#endif  // VM_ASSEMBLER_MACROS_ARM_H_
+
diff --git a/runtime/vm/assembler_macros_mips.cc b/runtime/vm/assembler_macros_mips.cc
new file mode 100644
index 0000000..3910345
--- /dev/null
+++ b/runtime/vm/assembler_macros_mips.cc
@@ -0,0 +1,34 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/assembler_macros.h"
+
+namespace dart {
+
+void AssemblerMacros::TryAllocate(Assembler* assembler,
+                                  const Class& cls,
+                                  Label* failure,
+                                  bool near_jump,
+                                  Register instance_reg) {
+  UNIMPLEMENTED();
+}
+
+
+void AssemblerMacros::EnterDartFrame(Assembler* assembler,
+                                     intptr_t frame_size) {
+  UNIMPLEMENTED();
+}
+
+
+void AssemblerMacros::EnterStubFrame(Assembler* assembler) {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
+
diff --git a/runtime/vm/assembler_macros_mips.h b/runtime/vm/assembler_macros_mips.h
new file mode 100644
index 0000000..cf4ff44
--- /dev/null
+++ b/runtime/vm/assembler_macros_mips.h
@@ -0,0 +1,54 @@
+// 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.
+// The class 'AssemblerMacros' contains assembler instruction groups that
+// are used in Dart.
+
+#ifndef VM_ASSEMBLER_MACROS_MIPS_H_
+#define VM_ASSEMBLER_MACROS_MIPS_H_
+
+#ifndef VM_ASSEMBLER_MACROS_H_
+#error Do not include assembler_macros_mips.h directly; use assembler_macros.h.
+#endif
+
+#include "vm/allocation.h"
+#include "vm/constants_mips.h"
+
+namespace dart {
+
+// Forward declarations.
+class Assembler;
+class Class;
+class Label;
+
+class AssemblerMacros : public AllStatic {
+ public:
+  // Inlined allocation of an instance of class 'cls', code has no runtime
+  // calls. Jump to 'failure' if the instance cannot be allocated here.
+  // Allocated instance is returned in 'instance_reg'.
+  // Only the tags field of the object is initialized.
+  static void TryAllocate(Assembler* assembler,
+                          const Class& cls,
+                          Label* failure,
+                          bool near_jump,
+                          Register instance_reg);
+
+  // Set up a dart frame on entry with a frame pointer and PC information to
+  // enable easy access to the RawInstruction object of code corresponding
+  // to this frame.
+  static void EnterDartFrame(Assembler* assembler, intptr_t frame_size);
+
+  // Set up a stub frame so that the stack traversal code can easily identify
+  // a stub frame.
+  static void EnterStubFrame(Assembler* assembler);
+
+  // Instruction pattern from entrypoint is used in dart frame prologs
+  // to set up the frame and save a PC which can be used to figure out the
+  // RawInstruction object corresponding to the code running in the frame.
+  static const intptr_t kOffsetOfSavedPCfromEntrypoint = -1;  // UNIMPLEMENTED.
+};
+
+}  // namespace dart.
+
+#endif  // VM_ASSEMBLER_MACROS_MIPS_H_
+
diff --git a/runtime/vm/assembler_mips.cc b/runtime/vm/assembler_mips.cc
new file mode 100644
index 0000000..6885019
--- /dev/null
+++ b/runtime/vm/assembler_mips.cc
@@ -0,0 +1,19 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/assembler.h"
+
+namespace dart {
+
+DEFINE_FLAG(bool, print_stop_message, true, "Print stop message.");
+DEFINE_FLAG(bool, code_comments, false,
+            "Include comments into code and disassembly");
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
+
diff --git a/runtime/vm/assembler_mips.h b/runtime/vm/assembler_mips.h
new file mode 100644
index 0000000..f2a0f34
--- /dev/null
+++ b/runtime/vm/assembler_mips.h
@@ -0,0 +1,183 @@
+// 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.
+
+#ifndef VM_ASSEMBLER_MIPS_H_
+#define VM_ASSEMBLER_MIPS_H_
+
+#ifndef VM_ASSEMBLER_H_
+#error Do not include assembler_mips.h directly; use assembler.h instead.
+#endif
+
+#include "platform/assert.h"
+#include "vm/constants_mips.h"
+
+namespace dart {
+
+class Operand : public ValueObject {
+ public:
+  Operand(const Operand& other) : ValueObject() {
+    UNIMPLEMENTED();
+  }
+
+  Operand& operator=(const Operand& other) {
+    UNIMPLEMENTED();
+    return *this;
+  }
+
+ protected:
+  Operand() { }  // Needed by subclass Address.
+};
+
+
+class Address : public Operand {
+ public:
+  Address(Register base, int32_t disp) {
+    UNIMPLEMENTED();
+  }
+
+  Address(const Address& other) : Operand(other) { }
+
+  Address& operator=(const Address& other) {
+    Operand::operator=(other);
+    return *this;
+  }
+};
+
+
+class FieldAddress : public Address {
+ public:
+  FieldAddress(Register base, int32_t disp)
+      : Address(base, disp - kHeapObjectTag) { }
+
+  FieldAddress(const FieldAddress& other) : Address(other) { }
+
+  FieldAddress& operator=(const FieldAddress& other) {
+    Address::operator=(other);
+    return *this;
+  }
+};
+
+
+class Label : public ValueObject {
+ public:
+  Label() : position_(0) { }
+
+  ~Label() {
+    // Assert if label is being destroyed with unresolved branches pending.
+    ASSERT(!IsLinked());
+  }
+
+  // Returns the position for bound and linked labels. Cannot be used
+  // for unused labels.
+  int Position() const {
+    ASSERT(!IsUnused());
+    return IsBound() ? -position_ - kWordSize : position_ - kWordSize;
+  }
+
+  bool IsBound() const { return position_ < 0; }
+  bool IsUnused() const { return position_ == 0; }
+  bool IsLinked() const { return position_ > 0; }
+
+ private:
+  int position_;
+
+  void Reinitialize() {
+    position_ = 0;
+  }
+
+  void BindTo(int position) {
+    ASSERT(!IsBound());
+    position_ = -position - kWordSize;
+    ASSERT(IsBound());
+  }
+
+  void LinkTo(int position) {
+    ASSERT(!IsBound());
+    position_ = position + kWordSize;
+    ASSERT(IsLinked());
+  }
+
+  friend class Assembler;
+  DISALLOW_COPY_AND_ASSIGN(Label);
+};
+
+
+class CPUFeatures : public AllStatic {
+ public:
+  static void InitOnce() { }
+  static bool double_truncate_round_supported() {
+    UNIMPLEMENTED();
+    return false;
+  }
+};
+
+
+class Assembler : public ValueObject {
+ public:
+  Assembler() { UNIMPLEMENTED(); }
+  ~Assembler() { }
+
+  void PopRegister(Register r) {
+    UNIMPLEMENTED();
+  }
+
+  void Bind(Label* label) {
+    UNIMPLEMENTED();
+  }
+
+  // Misc. functionality
+  int CodeSize() const {
+    UNIMPLEMENTED();
+    return 0;
+  }
+  int prologue_offset() const {
+    UNIMPLEMENTED();
+    return 0;
+  }
+  const ZoneGrowableArray<int>& GetPointerOffsets() const {
+    UNIMPLEMENTED();
+    return *pointer_offsets_;
+  }
+  void FinalizeInstructions(const MemoryRegion& region) {
+    UNIMPLEMENTED();
+  }
+
+  // Debugging and bringup support.
+  void Stop(const char* message) { UNIMPLEMENTED(); }
+  void Unimplemented(const char* message);
+  void Untested(const char* message);
+  void Unreachable(const char* message);
+
+  static void InitializeMemoryWithBreakpoints(uword data, int length) {
+    UNIMPLEMENTED();
+  }
+
+  void Comment(const char* format, ...) PRINTF_ATTRIBUTE(2, 3) {
+    UNIMPLEMENTED();
+  }
+
+  const Code::Comments& GetCodeComments() const {
+    UNIMPLEMENTED();
+    return Code::Comments::New(0);
+  }
+
+  static const char* RegisterName(Register reg) {
+    UNIMPLEMENTED();
+    return NULL;
+  }
+
+  static const char* FpuRegisterName(FpuRegister reg) {
+    UNIMPLEMENTED();
+    return NULL;
+  }
+
+ private:
+  ZoneGrowableArray<int>* pointer_offsets_;
+  DISALLOW_ALLOCATION();
+  DISALLOW_COPY_AND_ASSIGN(Assembler);
+};
+
+}  // namespace dart
+
+#endif  // VM_ASSEMBLER_MIPS_H_
diff --git a/runtime/vm/assembler_test.cc b/runtime/vm/assembler_test.cc
index ce13f25..69228a1 100644
--- a/runtime/vm/assembler_test.cc
+++ b/runtime/vm/assembler_test.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -10,6 +10,8 @@
 
 namespace dart {
 
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
+
 ASSEMBLER_TEST_EXTERN(StoreIntoObject);
 
 ASSEMBLER_TEST_RUN(StoreIntoObject, entry) {
@@ -75,4 +77,6 @@
       GrowableObjectArray::data_offset() - kHeapObjectTag));
 }
 
+#endif
+
 }  // namespace dart
diff --git a/runtime/vm/assembler_x64.cc b/runtime/vm/assembler_x64.cc
index 7e4cd29..b244172 100644
--- a/runtime/vm/assembler_x64.cc
+++ b/runtime/vm/assembler_x64.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -295,18 +295,14 @@
 
 
 void Assembler::movw(Register dst, const Address& src) {
-  AssemblerBuffer::EnsureCapacity ensured(&buffer_);
-  EmitOperandREX(dst, src, REX_NONE);
-  EmitOperandSizeOverride();
-  EmitUint8(0x8B);
-  EmitOperand(dst & 7, src);
+  FATAL("Use movzxw or movsxw instead.");
 }
 
 
 void Assembler::movw(const Address& dst, Register src) {
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
-  EmitOperandREX(src, dst, REX_NONE);
   EmitOperandSizeOverride();
+  EmitOperandREX(src, dst, REX_NONE);
   EmitUint8(0x89);
   EmitOperand(src & 7, dst);
 }
@@ -2188,7 +2184,7 @@
 };
 
 
-const char* Assembler::XmmRegisterName(XmmRegister reg) {
+const char* Assembler::FpuRegisterName(FpuRegister reg) {
   ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
   return xmm_reg_names[reg];
 }
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h
index ff7cae2..8c18c6c 100644
--- a/runtime/vm/assembler_x64.h
+++ b/runtime/vm/assembler_x64.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -22,6 +22,8 @@
  public:
   explicit Immediate(int64_t value) : value_(value) { }
 
+  Immediate(const Immediate& other) : ValueObject(), value_(other.value_) { }
+
   int64_t value() const { return value_; }
 
   bool is_int8() const { return Utils::IsInt(8, value_); }
@@ -34,6 +36,7 @@
 
   // TODO(5411081): Add DISALLOW_COPY_AND_ASSIGN(Immediate) once the mac
   // build issue is resolved.
+  // And remove the unnecessary copy constructor.
 };
 
 
@@ -76,8 +79,20 @@
     return bit_copy<int32_t>(encoding_[length_ - 4]);
   }
 
+  Operand(const Operand& other)
+      : ValueObject(), length_(other.length_), rex_(other.rex_) {
+    memmove(&encoding_[0], &other.encoding_[0], other.length_);
+  }
+
+  Operand& operator=(const Operand& other) {
+    length_ = other.length_;
+    rex_ = other.rex_;
+    memmove(&encoding_[0], &other.encoding_[0], other.length_);
+    return *this;
+  }
+
  protected:
-  Operand() : length_(0), rex_(REX_NONE) { }
+  Operand() : length_(0), rex_(REX_NONE) { }  // Needed by subclass Address.
 
   void SetModRM(int mod, Register rm) {
     ASSERT((mod & ~3) == 0);
@@ -132,11 +147,7 @@
         && ((encoding_at(0) & 0x07) == reg);  // Register codes match.
   }
 
-
   friend class Assembler;
-
-  // TODO(5411081): Add DISALLOW_COPY_AND_ASSIGN(Operand) once the mac
-  // build issue is resolved.
 };
 
 
@@ -186,20 +197,29 @@
     }
   }
 
- private:
-  Address() {}
+  Address(const Address& other) : Operand(other) { }
 
-  // TODO(5411081): Add DISALLOW_COPY_AND_ASSIGN(Address) once the mac
-  // build issue is resolved.
+  Address& operator=(const Address& other) {
+    Operand::operator=(other);
+    return *this;
+  }
 };
 
 
 class FieldAddress : public Address {
  public:
   FieldAddress(Register base, int32_t disp)
-      : Address(base, disp - kHeapObjectTag) {}
+      : Address(base, disp - kHeapObjectTag) { }
+
   FieldAddress(Register base, Register index, ScaleFactor scale, int32_t disp)
-      : Address(base, index, scale, disp - kHeapObjectTag) {}
+      : Address(base, index, scale, disp - kHeapObjectTag) { }
+
+  FieldAddress(const FieldAddress& other) : Address(other) { }
+
+  FieldAddress& operator=(const FieldAddress& other) {
+    Address::operator=(other);
+    return *this;
+  }
 };
 
 
@@ -278,6 +298,7 @@
   // x64 always has at least SSE2.
   static bool sse2_supported() { return true; }
   static bool sse4_1_supported();
+  static bool double_truncate_round_supported() { return sse4_1_supported(); }
 
  private:
   static const uint64_t kSSE4_1BitMask = static_cast<uint64_t>(1) << 51;
@@ -656,7 +677,7 @@
 
   static const char* RegisterName(Register reg);
 
-  static const char* XmmRegisterName(XmmRegister reg);
+  static const char* FpuRegisterName(FpuRegister reg);
 
  private:
   AssemblerBuffer buffer_;
diff --git a/runtime/vm/assembler_x64_test.cc b/runtime/vm/assembler_x64_test.cc
index 8ce63fc..e6e3940 100644
--- a/runtime/vm/assembler_x64_test.cc
+++ b/runtime/vm/assembler_x64_test.cc
@@ -535,6 +535,43 @@
 }
 
 
+ASSEMBLER_TEST_GENERATE(MoveWord, assembler) {
+  __ xorq(RAX, RAX);
+  __ pushq(Immediate(0));
+  __ movq(RAX, RSP);
+  __ movq(RCX, Immediate(-1));
+  __ movw(Address(RAX, 0), RCX);
+  __ movzxw(RAX, Address(RAX, 0));  // RAX = 0xffff
+  __ addq(RSP, Immediate(kWordSize));
+  __ ret();
+}
+
+
+ASSEMBLER_TEST_RUN(MoveWord, entry) {
+  typedef int (*MoveWord)();
+  EXPECT_EQ(0xffff, reinterpret_cast<MoveWord>(entry)());
+}
+
+
+ASSEMBLER_TEST_GENERATE(MoveWordRex, assembler) {
+  __ pushq(Immediate(0));
+  __ movq(R8, RSP);
+  __ movq(R9, Immediate(-1));
+  __ movw(Address(R8, 0), R9);
+  __ movzxw(R8, Address(R8, 0));  // 0xffff
+  __ xorq(RAX, RAX);
+  __ addq(RAX, R8);  // RAX = 0xffff
+  __ addq(RSP, Immediate(kWordSize));
+  __ ret();
+}
+
+
+ASSEMBLER_TEST_RUN(MoveWordRex, entry) {
+  typedef int (*MoveWordRex)();
+  EXPECT_EQ(0xffff, reinterpret_cast<MoveWordRex>(entry)());
+}
+
+
 ASSEMBLER_TEST_GENERATE(Bitwise, assembler) {
   __ movl(RCX, Immediate(42));
   __ xorl(RCX, RCX);
diff --git a/runtime/vm/ast.cc b/runtime/vm/ast.cc
index c88bdba..7c98741 100644
--- a/runtime/vm/ast.cc
+++ b/runtime/vm/ast.cc
@@ -95,7 +95,7 @@
       double new_value = (dbl.value() == 0.0) ? -0.0 : (0.0 - dbl.value());
       Double& double_instance =
           Double::ZoneHandle(Double::New(new_value, Heap::kOld));
-      double_instance ^= double_instance.Canonicalize();
+      double_instance |= double_instance.Canonicalize();
       return new LiteralNode(this->token_pos(), double_instance);
     }
   }
diff --git a/runtime/vm/ast.h b/runtime/vm/ast.h
index 497ae3d..4541daa 100644
--- a/runtime/vm/ast.h
+++ b/runtime/vm/ast.h
@@ -1559,16 +1559,19 @@
 
   CatchClauseNode(intptr_t token_pos,
                   SequenceNode* catch_block,
+                  const Array& handler_types,
                   const LocalVariable* context_var,
                   const LocalVariable* exception_var,
                   const LocalVariable* stacktrace_var)
       : AstNode(token_pos),
         try_index_(kInvalidTryIndex),
         catch_block_(catch_block),
+        handler_types_(handler_types),
         context_var_(*context_var),
         exception_var_(*exception_var),
         stacktrace_var_(*stacktrace_var) {
     ASSERT(catch_block_ != NULL);
+    ASSERT(handler_types.IsZoneHandle());
     ASSERT(context_var != NULL);
     ASSERT(exception_var != NULL);
     ASSERT(stacktrace_var != NULL);
@@ -1580,6 +1583,7 @@
   }
   void set_try_index(int value) { try_index_ = value; }
 
+  const Array& handler_types() const { return handler_types_; }
   const LocalVariable& context_var() const { return context_var_; }
   const LocalVariable& exception_var() const { return exception_var_; }
   const LocalVariable& stacktrace_var() const { return stacktrace_var_; }
@@ -1593,6 +1597,7 @@
  private:
   int try_index_;  // Running index of the try blocks seen in a function.
   SequenceNode* catch_block_;
+  const Array& handler_types_;
   const LocalVariable& context_var_;
   const LocalVariable& exception_var_;
   const LocalVariable& stacktrace_var_;
diff --git a/runtime/vm/bigint_operations.cc b/runtime/vm/bigint_operations.cc
index 8120e58..2b34ef4 100644
--- a/runtime/vm/bigint_operations.cc
+++ b/runtime/vm/bigint_operations.cc
@@ -184,15 +184,15 @@
       ASSERT(('0' <= c) && (c <= '9'));
       digit = digit * 10 + c - '0';
     }
-    result ^= MultiplyWithDigit(result, kTenMultiplier);
+    result |= MultiplyWithDigit(result, kTenMultiplier);
     if (digit != 0) {
       increment.SetChunkAt(0, digit);
-      result ^= Add(result, increment);
+      result |= Add(result, increment);
     }
   }
   Clamp(result);
   if ((space == Heap::kOld) && !result.IsOld()) {
-    result ^= Object::Clone(result, Heap::kOld);
+    result |= Object::Clone(result, Heap::kOld);
   }
   return result.raw();
 }
@@ -1480,13 +1480,13 @@
 
   int comp = UnsignedCompare(a, b);
   if (comp < 0) {
-    (*quotient) ^= Zero();
-    (*remainder) ^= Copy(a);  // TODO(floitsch): can we reuse the input?
+    (*quotient) |= Zero();
+    (*remainder) |= Copy(a);  // TODO(floitsch): can we reuse the input?
     return;
   } else if (comp == 0) {
-    (*quotient) ^= One();
+    (*quotient) |= One();
     quotient->SetSign(a.IsNegative() != b.IsNegative());
-    (*remainder) ^= Zero();
+    (*remainder) |= Zero();
     return;
   }
 
@@ -1521,7 +1521,7 @@
   ASSERT(divisor_length == divisor.Length());
 
   intptr_t quotient_length = dividend_length - divisor_length + 1;
-  *quotient ^= Bigint::Allocate(quotient_length);
+  *quotient |= Bigint::Allocate(quotient_length);
   quotient->SetSign(a.IsNegative() != b.IsNegative());
 
   intptr_t quotient_pos = dividend_length - divisor_length;
@@ -1536,7 +1536,7 @@
   Chunk first_quotient_digit = 0;
   while (UnsignedCompare(dividend, shifted_divisor) >= 0) {
     first_quotient_digit++;
-    dividend ^= Subtract(dividend, shifted_divisor);
+    dividend |= Subtract(dividend, shifted_divisor);
   }
   quotient->SetChunkAt(quotient_pos--, first_quotient_digit);
 
@@ -1609,7 +1609,7 @@
     target.SetChunkAt(2, dividend_digit);
     do {
       quotient_digit = (quotient_digit - 1) & kDigitMask;
-      estimation_product ^= MultiplyWithDigit(short_divisor, quotient_digit);
+      estimation_product |= MultiplyWithDigit(short_divisor, quotient_digit);
     } while (UnsignedCompareNonClamped(estimation_product, target) > 0);
     // At this point the quotient_digit is fairly accurate.
     // At the worst it is off by one.
@@ -1617,15 +1617,15 @@
     // subtract the divisor another time.
     // Let t = i - divisor_length.
     // dividend -= (quotient_digit * divisor) << (t * kDigitBitSize);
-    shifted_divisor ^= MultiplyWithDigit(divisor, quotient_digit);
-    shifted_divisor ^= DigitsShiftLeft(shifted_divisor, i - divisor_length);
+    shifted_divisor |= MultiplyWithDigit(divisor, quotient_digit);
+    shifted_divisor |= DigitsShiftLeft(shifted_divisor, i - divisor_length);
     dividend = Subtract(dividend, shifted_divisor);
     if (dividend.IsNegative()) {
       // The estimation was still too big.
       quotient_digit--;
       // TODO(floitsch): allocate space for the shifted_divisor once and reuse
       // it at every iteration.
-      shifted_divisor ^= DigitsShiftLeft(divisor, i - divisor_length);
+      shifted_divisor |= DigitsShiftLeft(divisor, i - divisor_length);
       // TODO(floitsch): reuse the space of the previous dividend.
       dividend = Add(dividend, shifted_divisor);
     }
@@ -1633,7 +1633,7 @@
   }
   ASSERT(quotient_pos == -1);
   Clamp(*quotient);
-  *remainder ^= ShiftRight(dividend, normalization_shift);
+  *remainder |= ShiftRight(dividend, normalization_shift);
   remainder->SetSign(a.IsNegative());
 }
 
diff --git a/runtime/vm/bootstrap.cc b/runtime/vm/bootstrap.cc
index d0e864c..5720b0a 100644
--- a/runtime/vm/bootstrap.cc
+++ b/runtime/vm/bootstrap.cc
@@ -48,6 +48,13 @@
 }
 
 
+RawScript* Bootstrap::LoadCollectionDevScript(bool patch) {
+  const char* url = patch ? "dart:collection-dev-patch" : "dart:collection-dev";
+  const char* source = patch ? collection_dev_source_ : collection_dev_source_;
+  return LoadScript(url, source, patch);
+}
+
+
 RawScript* Bootstrap::LoadMathScript(bool patch) {
   const char* url = patch ? "dart:math-patch" : "dart:math";
   const char* source = patch ? math_patch_ : math_source_;
diff --git a/runtime/vm/bootstrap.h b/runtime/vm/bootstrap.h
index 5509732..4c01cca 100644
--- a/runtime/vm/bootstrap.h
+++ b/runtime/vm/bootstrap.h
@@ -20,6 +20,7 @@
   static RawScript* LoadASyncScript(bool patch);
   static RawScript* LoadCoreScript(bool patch);
   static RawScript* LoadCollectionScript(bool patch);
+  static RawScript* LoadCollectionDevScript(bool patch);
   static RawScript* LoadMathScript(bool patch);
   static RawScript* LoadIsolateScript(bool patch);
   static RawScript* LoadMirrorsScript(bool patch);
@@ -35,6 +36,7 @@
   static const char corelib_source_[];
   static const char corelib_patch_[];
   static const char collection_source_[];
+  static const char collection_dev_source_[];
   static const char math_source_[];
   static const char math_patch_[];
   static const char isolate_source_[];
diff --git a/runtime/vm/bootstrap_nocorelib.cc b/runtime/vm/bootstrap_nocorelib.cc
index 6d543db..7093777 100644
--- a/runtime/vm/bootstrap_nocorelib.cc
+++ b/runtime/vm/bootstrap_nocorelib.cc
@@ -33,6 +33,12 @@
 }
 
 
+RawScript* Bootstrap::LoadCollectionDevScript(bool is_patch) {
+  UNREACHABLE();
+  return Script::null();
+}
+
+
 RawScript* Bootstrap::LoadMathScript(bool is_patch) {
   UNREACHABLE();
   return Script::null();
diff --git a/runtime/vm/cha.cc b/runtime/vm/cha.cc
index 01aabcc..794dc7a 100644
--- a/runtime/vm/cha.cc
+++ b/runtime/vm/cha.cc
@@ -49,7 +49,7 @@
   }
   Class& direct_subclass = Class::Handle();
   for (intptr_t i = 0; i < cls_direct_subclasses.Length(); i++) {
-    direct_subclass ^= cls_direct_subclasses.At(i);
+    direct_subclass |= cls_direct_subclasses.At(i);
     intptr_t direct_subclass_id = direct_subclass.id();
     if (!ContainsCid(cids, direct_subclass_id)) {
       cids->Add(direct_subclass_id);
@@ -78,7 +78,7 @@
   }
   Class& direct_subclass = Class::Handle();
   for (intptr_t i = 0; i < cls_direct_subclasses.Length(); i++) {
-    direct_subclass ^= cls_direct_subclasses.At(i);
+    direct_subclass |= cls_direct_subclasses.At(i);
     if (direct_subclass.LookupDynamicFunction(function_name) !=
         Function::null()) {
       return true;
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 0d1e496..09e5cf5 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -38,6 +38,8 @@
     const GrowableArray<intptr_t>& added_subclasses_to_cids) {
   ASSERT(FLAG_use_cha);
   if (added_subclasses_to_cids.is_empty()) return;
+  // TODO(regis): Reenable this code for arm and mips when possible.
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
   // Deoptimize all live frames.
   DeoptimizeIfOwner(added_subclasses_to_cids);
   // Switch all functions' code to unoptimized.
@@ -52,13 +54,14 @@
     array = cls.functions();
     intptr_t num_functions = array.IsNull() ? 0 : array.Length();
     for (intptr_t f = 0; f < num_functions; f++) {
-      function ^= array.At(f);
+      function |= array.At(f);
       ASSERT(!function.IsNull());
       if (function.HasOptimizedCode()) {
         function.SwitchToUnoptimizedCode();
       }
     }
   }
+#endif
 }
 
 
@@ -91,7 +94,7 @@
   Class& cls = Class::Handle();
   Type& super_type = Type::Handle();
   for (intptr_t i = 0; i < pending_classes.Length(); i++) {
-    cls ^= pending_classes.At(i);
+    cls |= pending_classes.At(i);
     ASSERT(!cls.is_finalized());
     super_type ^= cls.super_type();
     if (!super_type.IsNull()) {
@@ -135,7 +138,7 @@
     Class& cls = Class::Handle();
     // First resolve all superclasses.
     for (intptr_t i = 0; i < class_array.Length(); i++) {
-      cls ^= class_array.At(i);
+      cls |= class_array.At(i);
       if (FLAG_trace_class_finalization) {
         OS::Print("Resolving super and interfaces: %s\n", cls.ToCString());
       }
@@ -144,12 +147,12 @@
     }
     // Finalize all classes.
     for (intptr_t i = 0; i < class_array.Length(); i++) {
-      cls ^= class_array.At(i);
+      cls |= class_array.At(i);
       FinalizeClass(cls);
     }
     if (FLAG_print_classes) {
       for (intptr_t i = 0; i < class_array.Length(); i++) {
-        cls ^= class_array.At(i);
+        cls |= class_array.At(i);
         PrintClassInformation(cls);
       }
     }
@@ -267,7 +270,7 @@
       GrowableObjectArray::Handle(object_store->pending_classes());
   for (intptr_t i = 0; i < class_array.Length(); i++) {
     // TODO(iposva): Add real checks.
-    cls ^= class_array.At(i);
+    cls |= class_array.At(i);
     if (cls.is_finalized() || cls.is_prefinalized()) {
       // Pre-finalized bootstrap classes must not define any fields.
       ASSERT(!cls.HasInstanceFields());
@@ -915,7 +918,9 @@
   super_class = cls.SuperClass();
   while (!super_class.IsNull()) {
     function = super_class.LookupFunction(name);
-    if (!function.IsNull() && !function.is_static()) {
+    if (!function.IsNull() &&
+        !function.is_static() &&
+        !function.IsMethodExtractor()) {
       return super_class.raw();
     }
     super_class = super_class.SuperClass();
@@ -964,7 +969,7 @@
   Class& super_class = Class::Handle();
   intptr_t num_fields = array.Length();
   for (intptr_t i = 0; i < num_fields; i++) {
-    field ^= array.At(i);
+    field |= array.At(i);
     type = field.type();
     ResolveType(cls, type, kCanonicalize);
     type = FinalizeType(cls, type, kCanonicalize);
@@ -1020,7 +1025,7 @@
   intptr_t num_functions = array.Length();
   String& function_name = String::Handle();
   for (intptr_t i = 0; i < num_functions; i++) {
-    function ^= array.At(i);
+    function |= array.At(i);
     ResolveAndFinalizeSignature(cls, function);
     function_name = function.name();
     if (function.is_static()) {
@@ -1044,7 +1049,7 @@
       }
     } else {
       for (int i = 0; i < interfaces.Length(); i++) {
-        super_class ^= interfaces.At(i);
+        super_class |= interfaces.At(i);
         overridden_function = super_class.LookupDynamicFunction(function_name);
         if (!overridden_function.IsNull() &&
             !function.HasCompatibleParametersWith(overridden_function)) {
@@ -1417,7 +1422,7 @@
   intptr_t len = fields_array.Length();
   Field& field = Field::Handle();
   for (intptr_t i = 0; i < len; i++) {
-    field ^= fields_array.At(i);
+    field |= fields_array.At(i);
     if (!field.is_static() && !field.is_final()) {
       const String& class_name = String::Handle(cls.Name());
       const String& field_name = String::Handle(field.name());
@@ -1464,14 +1469,14 @@
   Function& function = Function::Handle();
   intptr_t len = functions_array.Length();
   for (intptr_t i = 0; i < len; i++) {
-    function ^= functions_array.At(i);
+    function |= functions_array.At(i);
     OS::Print("  %s\n", function.ToCString());
   }
   const Array& fields_array = Array::Handle(cls.fields());
   Field& field = Field::Handle();
   len = fields_array.Length();
   for (intptr_t i = 0; i < len; i++) {
-    field ^= fields_array.At(i);
+    field |= fields_array.At(i);
     OS::Print("  %s\n", field.ToCString());
   }
 }
diff --git a/runtime/vm/code_descriptors.cc b/runtime/vm/code_descriptors.cc
index 7ad06c1..b934b28 100644
--- a/runtime/vm/code_descriptors.cc
+++ b/runtime/vm/code_descriptors.cc
@@ -79,7 +79,7 @@
 
 RawStackmap* StackmapTableBuilder::MapAt(int index) const {
   Stackmap& map = Stackmap::Handle();
-  map ^= list_.At(index);
+  map |= list_.At(index);
   return map.raw();
 }
 
diff --git a/runtime/vm/code_descriptors.h b/runtime/vm/code_descriptors.h
index 5b684d5..cab61ef 100644
--- a/runtime/vm/code_descriptors.h
+++ b/runtime/vm/code_descriptors.h
@@ -98,8 +98,9 @@
 class ExceptionHandlerList : public ZoneAllocated {
  public:
   struct HandlerDesc {
-    intptr_t try_index;  // Try block index handled by the handler.
-    intptr_t pc_offset;  // Handler PC offset value.
+    intptr_t outer_try_index;  // Try block in which this try block is nested.
+    intptr_t pc_offset;        // Handler PC offset value.
+    const Array* handler_types;   // Catch clause guards.
   };
 
   ExceptionHandlerList() : list_() {}
@@ -108,21 +109,26 @@
     return list_.length();
   }
 
-  intptr_t TryIndex(int index) const {
-    return list_[index].try_index;
-  }
-  intptr_t PcOffset(int index) const {
-    return list_[index].pc_offset;
-  }
-  void SetPcOffset(int index, intptr_t handler_pc) {
-    list_[index].pc_offset = handler_pc;
+  void AddPlaceHolder() {
+    struct HandlerDesc data;
+    data.outer_try_index = -1;
+    data.pc_offset = -1;
+    data.handler_types = NULL;
+    list_.Add(data);
   }
 
-  void AddHandler(intptr_t try_index, intptr_t pc_offset) {
-    struct HandlerDesc data;
-    data.try_index = try_index;
-    data.pc_offset = pc_offset;
-    list_.Add(data);
+  void AddHandler(intptr_t try_index,
+                  intptr_t outer_try_index,
+                  intptr_t pc_offset,
+                  const Array& handler_types) {
+    ASSERT(try_index >= 0);
+    while (Length() <= try_index) {
+      AddPlaceHolder();
+    }
+    list_[try_index].outer_try_index = outer_try_index;
+    list_[try_index].pc_offset = pc_offset;
+    ASSERT(handler_types.IsZoneHandle());
+    list_[try_index].handler_types = &handler_types;
   }
 
   RawExceptionHandlers* FinalizeExceptionHandlers(uword entry_point) {
@@ -130,7 +136,12 @@
     const ExceptionHandlers& handlers =
         ExceptionHandlers::Handle(ExceptionHandlers::New(num_handlers));
     for (intptr_t i = 0; i < num_handlers; i++) {
-      handlers.SetHandlerEntry(i, TryIndex(i), (entry_point + PcOffset(i)));
+      // Assert that every element in the array has been initialized.
+      ASSERT(list_[i].handler_types != NULL);
+      handlers.SetHandlerInfo(i,
+                              list_[i].outer_try_index,
+                              (entry_point + list_[i].pc_offset));
+      handlers.SetHandledTypes(i, *list_[i].handler_types);
     }
     return handlers.raw();
   }
diff --git a/runtime/vm/code_descriptors_test.cc b/runtime/vm/code_descriptors_test.cc
index 261b0dd..d14efaf 100644
--- a/runtime/vm/code_descriptors_test.cc
+++ b/runtime/vm/code_descriptors_test.cc
@@ -146,28 +146,28 @@
     EXPECT_EQ(4, stack_map_list.Length());
 
     // Validate the first stack map entry.
-    stack_map ^= stack_map_list.At(0);
+    stack_map |= stack_map_list.At(0);
     EXPECT_EQ(kStackSlotCount, stack_map.Length());
     for (intptr_t i = 0; i < kStackSlotCount; ++i) {
       EXPECT_EQ(expectation0[i], stack_map.IsObject(i));
     }
 
     // Validate the second stack map entry.
-    stack_map ^= stack_map_list.At(1);
+    stack_map |= stack_map_list.At(1);
     EXPECT_EQ(kStackSlotCount, stack_map.Length());
     for (intptr_t i = 0; i < kStackSlotCount; ++i) {
       EXPECT_EQ(expectation1[i], stack_map.IsObject(i));
     }
 
     // Validate the third stack map entry.
-    stack_map ^= stack_map_list.At(2);
+    stack_map |= stack_map_list.At(2);
     EXPECT_EQ(kStackSlotCount, stack_map.Length());
     for (intptr_t i = 0; i < kStackSlotCount; ++i) {
       EXPECT_EQ(expectation2[i], stack_map.IsObject(i));
     }
 
     // Validate the fourth stack map entry.
-    stack_map ^= stack_map_list.At(3);
+    stack_map |= stack_map_list.At(3);
     EXPECT_EQ(kStackSlotCount, stack_map.Length());
     for (intptr_t i = 0; i < kStackSlotCount; ++i) {
       EXPECT_EQ(expectation3[i], stack_map.IsObject(i));
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 0dd7581..c18860d 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -1127,39 +1127,6 @@
 }
 
 
-// An instance call could not be resolved by an IC miss handler.  Check if
-// it was a getter call and if there is an instance function with the same
-// name.  If so, create and return an implicit closure from the function.
-// Otherwise return null.
-static RawInstance* ResolveImplicitClosure(const Instance& receiver,
-                                           const Class& receiver_class,
-                                           const String& target_name) {
-  // 1. Check if was a getter call.
-  if (!Field::IsGetterName(target_name)) return Instance::null();
-
-  // 2. Check if there is an instance function with the same name.
-  String& function_name = String::Handle(Field::NameFromGetter(target_name));
-  function_name = Symbols::New(function_name);
-  const Function& function = Function::Handle(
-      Resolver::ResolveDynamicAnyArgs(receiver_class, function_name));
-  if (function.IsNull()) return Instance::null();
-
-  // Create a closure object for the implicit closure function.
-  const Function& closure_function =
-      Function::Handle(function.ImplicitClosureFunction());
-  const Context& context = Context::Handle(Context::New(1));
-  context.SetAt(0, receiver);
-  const Instance& closure =
-      Instance::Handle(Closure::New(closure_function, context));
-  if (receiver_class.HasTypeArguments()) {
-    const AbstractTypeArguments& type_arguments =
-        AbstractTypeArguments::Handle(receiver.GetTypeArguments());
-    closure.SetTypeArguments(type_arguments);
-  }
-  return closure.raw();
-}
-
-
 // An instance call of the form o.f(...) could not be resolved.  Check if
 // there is a getter with the same name.  If so, invoke it.  If the value is
 // a closure, invoke it with the given arguments.  If the value is a
@@ -1179,7 +1146,9 @@
                                                getter_name,
                                                kNumArguments,
                                                kNumNamedArguments));
-  if (getter.IsNull()) return false;
+  if (getter.IsNull() || getter.IsMethodExtractor()) {
+    return false;
+  }
 
   // 2. Invoke the getter.
   const Array& args = Array::Handle(Array::New(kNumArguments));
@@ -1231,14 +1200,6 @@
   }
   const String& target_name = String::Handle(ic_data.target_name());
 
-  Instance& closure = Instance::Handle(ResolveImplicitClosure(receiver,
-                                                              receiver_class,
-                                                              target_name));
-  if (!closure.IsNull()) {
-    arguments.SetReturn(closure);
-    return;
-  }
-
   Object& result = Object::Handle();
   if (!ResolveCallThroughGetter(receiver,
                                 receiver_class,
@@ -1488,13 +1449,13 @@
 
 // Copy saved registers into the isolate buffer.
 static void CopySavedRegisters(uword saved_registers_address) {
-  double* xmm_registers_copy = new double[kNumberOfXmmRegisters];
-  ASSERT(xmm_registers_copy != NULL);
-  for (intptr_t i = 0; i < kNumberOfXmmRegisters; i++) {
-    xmm_registers_copy[i] = *reinterpret_cast<double*>(saved_registers_address);
+  double* fpu_registers_copy = new double[kNumberOfFpuRegisters];
+  ASSERT(fpu_registers_copy != NULL);
+  for (intptr_t i = 0; i < kNumberOfFpuRegisters; i++) {
+    fpu_registers_copy[i] = *reinterpret_cast<double*>(saved_registers_address);
     saved_registers_address += kDoubleSize;
   }
-  Isolate::Current()->set_deopt_xmm_registers_copy(xmm_registers_copy);
+  Isolate::Current()->set_deopt_fpu_registers_copy(fpu_registers_copy);
 
   intptr_t* cpu_registers_copy = new intptr_t[kNumberOfCpuRegisters];
   ASSERT(cpu_registers_copy != NULL);
@@ -1544,7 +1505,7 @@
 
   // All registers have been saved below last-fp.
   const uword last_fp = saved_registers_address +
-      kNumberOfCpuRegisters * kWordSize + kNumberOfXmmRegisters * kDoubleSize;
+      kNumberOfCpuRegisters * kWordSize + kNumberOfFpuRegisters * kDoubleSize;
   CopySavedRegisters(saved_registers_address);
 
   // Get optimized code and frame that need to be deoptimized.
@@ -1646,7 +1607,7 @@
 
   intptr_t* frame_copy = isolate->deopt_frame_copy();
   intptr_t* cpu_registers_copy = isolate->deopt_cpu_registers_copy();
-  double* xmm_registers_copy = isolate->deopt_xmm_registers_copy();
+  double* fpu_registers_copy = isolate->deopt_fpu_registers_copy();
 
   intptr_t deopt_reason = kDeoptUnknown;
   const DeoptInfo& deopt_info = DeoptInfo::Handle(
@@ -1660,10 +1621,10 @@
 
   isolate->SetDeoptFrameCopy(NULL, 0);
   isolate->set_deopt_cpu_registers_copy(NULL);
-  isolate->set_deopt_xmm_registers_copy(NULL);
+  isolate->set_deopt_fpu_registers_copy(NULL);
   delete[] frame_copy;
   delete[] cpu_registers_copy;
-  delete[] xmm_registers_copy;
+  delete[] fpu_registers_copy;
 
   return caller_fp;
 }
diff --git a/runtime/vm/code_generator_test.cc b/runtime/vm/code_generator_test.cc
index f2b4c62..31cf02d 100644
--- a/runtime/vm/code_generator_test.cc
+++ b/runtime/vm/code_generator_test.cc
@@ -553,7 +553,7 @@
   // App lib is the last one that was loaded.
   intptr_t num_libs = libs.Length();
   Library& app_lib = Library::Handle();
-  app_lib ^= libs.At(num_libs - 1);
+  app_lib |= libs.At(num_libs - 1);
   ASSERT(!app_lib.IsNull());
   const Class& cls = Class::Handle(
       app_lib.LookupClass(String::Handle(Symbols::New("A"))));
diff --git a/runtime/vm/code_patcher_arm.cc b/runtime/vm/code_patcher_arm.cc
index 0211183..1297273 100644
--- a/runtime/vm/code_patcher_arm.cc
+++ b/runtime/vm/code_patcher_arm.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -9,9 +9,9 @@
 
 namespace dart {
 
-void CodePatcher::GetStaticCallAt(uword return_address,
-                                  uword* target) {
+uword CodePatcher::GetStaticCallTargetAt(uword return_address) {
   UNIMPLEMENTED();
+  return 0;
 }
 
 
@@ -25,50 +25,30 @@
 }
 
 
+void CodePatcher::InsertCallAt(uword start, uword target) {
+  UNIMPLEMENTED();
+}
+
+
 bool CodePatcher::IsDartCall(uword return_address) {
   UNIMPLEMENTED();
   return false;
 }
 
 
-void CodePatcher::GetInstanceCallAt(uword return_address,
-                                    String* function_name,
-                                    int* num_arguments,
-                                    int* num_named_arguments,
-                                    uword* target) {
+uword CodePatcher::GetInstanceCallAt(uword return_address,
+                                     ICData* ic_data,
+                                     Array* arguments_descriptor) {
   UNIMPLEMENTED();
+  return 0;
 }
 
 
-void CodePatcher::PatchEntry(const Code& code) {
+intptr_t CodePatcher::InstanceCallSizeInBytes() {
   UNIMPLEMENTED();
+  return 0;
 }
 
-
-void CodePatcher::RestoreEntry(const Code& code) {
-  UNIMPLEMENTED();
-}
-
-
-bool CodePatcher::CodeIsPatchable(const Code& code) {
-  UNIMPLEMENTED();
-  return false;
-}
-
-
-RawICData* CodePatcher::GetInstanceCallIcDataAt(uword return_address) {
-  UNIMPLEMENTED();
-  return NULL;
-}
-
-
-
-void CodePatcher::InsertCallAt(uword start, uword target) {
-  UNIMPLEMENTED();
-}
-
-
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/code_patcher_ia32.cc b/runtime/vm/code_patcher_ia32.cc
index 1209cbe..c6ae59d 100644
--- a/runtime/vm/code_patcher_ia32.cc
+++ b/runtime/vm/code_patcher_ia32.cc
@@ -179,7 +179,7 @@
                                      Array* arguments_descriptor) {
   InstanceCall call(return_address);
   if (ic_data != NULL) {
-    *ic_data ^= call.ic_data();
+    *ic_data |= call.ic_data();
   }
   if (arguments_descriptor != NULL) {
     *arguments_descriptor ^= call.arguments_descriptor();
diff --git a/runtime/vm/code_patcher_mips.cc b/runtime/vm/code_patcher_mips.cc
new file mode 100644
index 0000000..987589d
--- /dev/null
+++ b/runtime/vm/code_patcher_mips.cc
@@ -0,0 +1,54 @@
+// 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.
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_MIPS.
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/code_patcher.h"
+
+namespace dart {
+
+uword CodePatcher::GetStaticCallTargetAt(uword return_address) {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+void CodePatcher::PatchStaticCallAt(uword return_address, uword new_target) {
+  UNIMPLEMENTED();
+}
+
+
+void CodePatcher::PatchInstanceCallAt(uword return_address, uword new_target) {
+  UNIMPLEMENTED();
+}
+
+
+void CodePatcher::InsertCallAt(uword start, uword target) {
+  UNIMPLEMENTED();
+}
+
+
+bool CodePatcher::IsDartCall(uword return_address) {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
+uword CodePatcher::GetInstanceCallAt(uword return_address,
+                                     ICData* ic_data,
+                                     Array* arguments_descriptor) {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+intptr_t CodePatcher::InstanceCallSizeInBytes() {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/code_patcher_x64.cc b/runtime/vm/code_patcher_x64.cc
index ab3312e..aa34870 100644
--- a/runtime/vm/code_patcher_x64.cc
+++ b/runtime/vm/code_patcher_x64.cc
@@ -154,7 +154,7 @@
                                      Array* arguments_descriptor) {
   InstanceCall call(return_address);
   if (ic_data != NULL) {
-    *ic_data ^= call.ic_data();
+    *ic_data |= call.ic_data();
   }
   if (arguments_descriptor != NULL) {
     *arguments_descriptor ^= call.arguments_descriptor();
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 0931e8f..c5b865b 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -383,7 +383,7 @@
     const Array& stackmap_table = Array::Handle(code.stackmaps());
     Stackmap& map = Stackmap::Handle();
     for (intptr_t i = 0; i < stackmap_table.Length(); ++i) {
-      map ^= stackmap_table.At(i);
+      map |= stackmap_table.At(i);
       OS::Print("%s\n", map.ToCString());
     }
   }
@@ -433,9 +433,9 @@
     Code& code = Code::Handle();
     for (intptr_t i = 0; i < table.Length();
         i += Code::kSCallTableEntryLength) {
-      offset ^= table.At(i + Code::kSCallTableOffsetEntry);
-      function ^= table.At(i + Code::kSCallTableFunctionEntry);
-      code ^= table.At(i + Code::kSCallTableCodeEntry);
+      offset |= table.At(i + Code::kSCallTableOffsetEntry);
+      function |= table.At(i + Code::kSCallTableFunctionEntry);
+      code |= table.At(i + Code::kSCallTableCodeEntry);
       OS::Print("  0x%"Px": %s, %p\n",
           start + offset.Value(),
           function.ToFullyQualifiedCString(),
@@ -571,7 +571,7 @@
     return error.raw();
   }
   for (int i = 0; i < functions.Length(); i++) {
-    func ^= functions.At(i);
+    func |= functions.At(i);
     ASSERT(!func.IsNull());
     if (!func.HasCode() &&
         !func.is_abstract() &&
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 9a72890..f3a7cc1 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -7,6 +7,14 @@
 
 namespace dart {
 
+// We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at
+// a time.
+#define VFPv3_D16
+#if defined(VFPv3_D16) == defined(VFPv3_D32)
+#error "Exactly one of VFPv3_D16 or VFPv3_D32 can be defined at a time."
+#endif
+
+
 enum Register {
   R0  =  0,
   R1  =  1,
@@ -29,11 +37,107 @@
   SP  = 13,
   LR  = 14,
   PC  = 15,
-  kNumberOfCoreRegisters = 16,
+  kNumberOfCpuRegisters = 16,
   kNoRegister = -1,
 };
 
 
+// Values for single-precision floating point registers.
+enum SRegister {
+  S0  =  0,
+  S1  =  1,
+  S2  =  2,
+  S3  =  3,
+  S4  =  4,
+  S5  =  5,
+  S6  =  6,
+  S7  =  7,
+  S8  =  8,
+  S9  =  9,
+  S10 = 10,
+  S11 = 11,
+  S12 = 12,
+  S13 = 13,
+  S14 = 14,
+  S15 = 15,
+  S16 = 16,
+  S17 = 17,
+  S18 = 18,
+  S19 = 19,
+  S20 = 20,
+  S21 = 21,
+  S22 = 22,
+  S23 = 23,
+  S24 = 24,
+  S25 = 25,
+  S26 = 26,
+  S27 = 27,
+  S28 = 28,
+  S29 = 29,
+  S30 = 30,
+  S31 = 31,
+  kNumberOfSRegisters = 32,
+  kNoSRegister = -1,
+};
+
+
+// Values for double-precision floating point registers.
+enum DRegister {
+  D0  =  0,
+  D1  =  1,
+  D2  =  2,
+  D3  =  3,
+  D4  =  4,
+  D5  =  5,
+  D6  =  6,
+  D7  =  7,
+  D8  =  8,
+  D9  =  9,
+  D10 = 10,
+  D11 = 11,
+  D12 = 12,
+  D13 = 13,
+  D14 = 14,
+  D15 = 15,
+#ifdef VFPv3_D16
+  kNumberOfDRegisters = 16,
+#else
+  D16 = 16,
+  D17 = 17,
+  D18 = 18,
+  D19 = 19,
+  D20 = 20,
+  D21 = 21,
+  D22 = 22,
+  D23 = 23,
+  D24 = 24,
+  D25 = 25,
+  D26 = 26,
+  D27 = 27,
+  D28 = 28,
+  D29 = 29,
+  D30 = 30,
+  D31 = 31,
+  kNumberOfDRegisters = 32,
+#endif
+  kNumberOfOverlappingDRegisters = 16,
+  kNoDRegister = -1,
+};
+
+
+// Architecture independent aliases.
+typedef DRegister FpuRegister;
+const FpuRegister FpuTMP = D0;
+const int kNumberOfFpuRegisters = kNumberOfDRegisters;
+
+
+// Register aliases.
+const Register TMP = kNoRegister;  // No scratch register used by assembler.
+const Register CTX = R9;           // Caches current context in generated code.
+const Register SPREG = SP;
+const Register FPREG = FP;
+
+
 // Values for the condition field as defined in section A3.2.
 enum Condition {
   kNoCondition = -1,
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index 02a84b7..467cdac 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -51,6 +51,12 @@
 };
 
 
+// Architecture independent aliases.
+typedef XmmRegister FpuRegister;
+const FpuRegister FpuTMP = XMM0;
+const int kNumberOfFpuRegisters = kNumberOfXmmRegisters;
+
+
 // Register aliases.
 const Register TMP = kNoRegister;  // No scratch register used by assembler.
 const Register CTX = ESI;          // Caches current context in generated code.
diff --git a/runtime/vm/constants_mips.h b/runtime/vm/constants_mips.h
new file mode 100644
index 0000000..6ff56ba
--- /dev/null
+++ b/runtime/vm/constants_mips.h
@@ -0,0 +1,108 @@
+// 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.
+
+#ifndef VM_CONSTANTS_MIPS_H_
+#define VM_CONSTANTS_MIPS_H_
+
+namespace dart {
+
+enum Register {
+  ZR =  0,
+  AT =  1,
+  V0 =  2,
+  V1 =  3,
+  A0 =  4,
+  A1 =  5,
+  A2 =  6,
+  A3 =  7,
+  T0 =  8,
+  T1 =  9,
+  T2 = 10,
+  T3 = 11,
+  T4 = 12,
+  T5 = 13,
+  T6 = 14,
+  T7 = 15,
+  S0 = 16,
+  S1 = 17,
+  S2 = 18,
+  S3 = 19,
+  S4 = 20,
+  S5 = 21,
+  S6 = 22,
+  S7 = 23,
+  T8 = 24,
+  T9 = 25,
+  K0 = 26,
+  K1 = 27,
+  GP = 28,
+  SP = 29,
+  FP = 30,
+  RA = 31,
+  kNumberOfCpuRegisters = 32,
+  kNoRegister = -1,
+};
+
+
+// Values for double-precision floating point registers.
+enum FRegister {
+  F0  =  0,
+  F1  =  1,
+  F2  =  2,
+  F3  =  3,
+  F4  =  4,
+  F5  =  5,
+  F6  =  6,
+  F7  =  7,
+  F8  =  8,
+  F9  =  9,
+  F10 = 10,
+  F11 = 11,
+  F12 = 12,
+  F13 = 13,
+  F14 = 14,
+  F15 = 15,
+  F16 = 16,
+  F17 = 17,
+  F18 = 18,
+  F19 = 19,
+  F20 = 20,
+  F21 = 21,
+  F22 = 22,
+  F23 = 23,
+  F24 = 24,
+  F25 = 25,
+  F26 = 26,
+  F27 = 27,
+  F28 = 28,
+  F29 = 29,
+  F30 = 30,
+  F31 = 31,
+  kNumberOfFRegisters = 32,
+  kNoFRegister = -1,
+};
+
+
+// Architecture independent aliases.
+typedef FRegister FpuRegister;
+const FpuRegister FpuTMP = F0;
+const int kNumberOfFpuRegisters = kNumberOfFRegisters;
+
+
+// Register aliases.
+const Register TMP = AT;
+const Register CTX = S7;  // Caches current context in generated code.
+const Register SPREG = SP;
+const Register FPREG = FP;
+
+
+// Values for the condition field.  // UNIMPLEMENTED.
+enum Condition {
+  kNoCondition = -1,
+  kMaxCondition = 16,
+};
+
+}  // namespace dart
+
+#endif  // VM_CONSTANTS_MIPS_H_
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 38a2046..31b00b1 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -64,6 +64,12 @@
 };
 
 
+// Architecture independent aliases.
+typedef XmmRegister FpuRegister;
+const FpuRegister FpuTMP = XMM0;
+const int kNumberOfFpuRegisters = kNumberOfXmmRegisters;
+
+
 enum RexBits {
   REX_NONE   = 0,
   REX_B      = 1 << 0,
diff --git a/runtime/vm/cpu_mips.cc b/runtime/vm/cpu_mips.cc
new file mode 100644
index 0000000..06aa026
--- /dev/null
+++ b/runtime/vm/cpu_mips.cc
@@ -0,0 +1,29 @@
+// 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.
+
+#include "vm/globals.h"
+
+#if defined(TARGET_ARCH_MIPS)
+
+#if defined(HOST_ARCH_MIPS)
+#include <sys/syscall.h>  /* NOLINT */
+#include <unistd.h>  /* NOLINT */
+#endif
+
+#include "vm/cpu.h"
+
+namespace dart {
+
+void CPU::FlushICache(uword start, uword size) {
+  UNIMPLEMENTED();
+}
+
+
+const char* CPU::Id() {
+  return "mips";
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/cpu_test.cc b/runtime/vm/cpu_test.cc
index 3b2b07b..6f129fe 100644
--- a/runtime/vm/cpu_test.cc
+++ b/runtime/vm/cpu_test.cc
@@ -16,6 +16,8 @@
   EXPECT_STREQ("x64", CPU::Id());
 #elif defined(TARGET_ARCH_ARM)
   EXPECT_STREQ("arm", CPU::Id());
+#elif defined(TARGET_ARCH_MIPS)
+  EXPECT_STREQ("mips", CPU::Id());
 #else
 #error Architecture was not detected as supported by Dart.
 #endif
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index f70a9699..405e416 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -155,13 +155,13 @@
   String& url = String::Handle();
   String& source = String::Handle();
   for (int i = 0; i < lib_count; i++) {
-    lib ^= libs.At(i);
+    lib |= libs.At(i);
     url = lib.url();
     OS::Print("Library %s:\n", url.ToCString());
     scripts = lib.LoadedScripts();
     intptr_t script_count = scripts.Length();
     for (intptr_t i = 0; i < script_count; i++) {
-      script ^= scripts.At(i);
+      script |= scripts.At(i);
       url = script.url();
       source = script.Source();
       OS::Print("Source for %s:\n", url.ToCString());
@@ -214,7 +214,10 @@
   }
 
   StubCode::Init(isolate);
+  // TODO(regis): Reenable this code for arm and mips when possible.
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
   isolate->megamorphic_cache_table()->InitMissHandler();
+#endif
   if (FLAG_heap_trace) {
     isolate->heap()->trace()->Init(isolate);
   }
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 03816fc..9c673b3 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1104,15 +1104,19 @@
   ASSERT(!isolate_lib.IsNull());
   const String& class_name = String::Handle(
       isolate, isolate_lib.PrivateName(Symbols::_ReceivePortImpl()));
+  // TODO(asiva): Symbols should contain private keys.
+  const String& function_name =
+      String::Handle(isolate_lib.PrivateName(Symbols::_get_or_create()));
   const int kNumArguments = 1;
   const Function& function = Function::Handle(
       isolate,
       Resolver::ResolveStatic(isolate_lib,
                               class_name,
-                              Symbols::_get_or_create(),
+                              function_name,
                               kNumArguments,
                               Object::empty_array(),
                               Resolver::kIsQualified));
+  ASSERT(!function.IsNull());
   const Array& args = Array::Handle(isolate, Array::New(kNumArguments));
   args.SetAt(0, Integer::Handle(isolate, Integer::New(port_id)));
   return Api::NewHandle(isolate, DartEntry::InvokeStatic(function, args));
@@ -2730,12 +2734,13 @@
     // Some special types like 'dynamic' have a null functions list.
     if (!func_array.IsNull()) {
       for (intptr_t i = 0; i < func_array.Length(); ++i) {
-        func ^= func_array.At(i);
+        func |= func_array.At(i);
 
         // Skip implicit getters and setters.
         if (func.kind() == RawFunction::kImplicitGetter ||
             func.kind() == RawFunction::kImplicitSetter ||
-            func.kind() == RawFunction::kConstImplicitGetter) {
+            func.kind() == RawFunction::kConstImplicitGetter ||
+            func.kind() == RawFunction::kMethodExtractor) {
           continue;
         }
 
@@ -2750,7 +2755,7 @@
     while (it.HasNext()) {
       obj = it.GetNext();
       if (obj.IsFunction()) {
-        func ^= obj.raw();
+        func |= obj.raw();
         name = func.UserVisibleName();
         names.Add(name);
       }
@@ -2783,7 +2788,7 @@
     const Class& cls = Class::Cast(obj);
 
     // Case 1.  Lookup the unmodified function name.
-    func = cls.LookupFunction(func_name);
+    func = cls.LookupFunctionAllowPrivate(func_name);
 
     // Case 2.  Lookup the function without the external setter suffix
     // '='.  Make sure to do this check after the regular lookup, so
@@ -2791,20 +2796,20 @@
     if (func.IsNull() && HasExternalSetterSuffix(func_name)) {
       tmp_name = RemoveExternalSetterSuffix(func_name);
       tmp_name = Field::SetterName(tmp_name);
-      func = cls.LookupFunction(tmp_name);
+      func = cls.LookupFunctionAllowPrivate(tmp_name);
     }
 
     // Case 3.  Lookup the funciton with the getter prefix prepended.
     if (func.IsNull()) {
       tmp_name = Field::GetterName(func_name);
-      func = cls.LookupFunction(tmp_name);
+      func = cls.LookupFunctionAllowPrivate(tmp_name);
     }
 
     // Case 4.  Lookup the function with a . appended to find the
     // unnamed constructor.
     if (func.IsNull()) {
       tmp_name = String::Concat(func_name, Symbols::Dot());
-      func = cls.LookupFunction(tmp_name);
+      func = cls.LookupFunctionAllowPrivate(tmp_name);
     }
   } else if (obj.IsLibrary()) {
     const Library& lib = Library::Cast(obj);
@@ -3073,7 +3078,7 @@
     // allocated in the vm isolate.
     if (!field_array.IsNull()) {
       for (intptr_t i = 0; i < field_array.Length(); ++i) {
-        field ^= field_array.At(i);
+        field |= field_array.At(i);
         name = field.UserVisibleName();
         names.Add(name);
       }
@@ -3085,7 +3090,7 @@
     while (it.HasNext()) {
       obj = it.GetNext();
       if (obj.IsField()) {
-        field ^= obj.raw();
+        field |= obj.raw();
         name = field.UserVisibleName();
         names.Add(name);
       }
@@ -3299,7 +3304,7 @@
   // The constructor must be present in the interface.
   String& constr_name = String::Handle(String::Concat(class_name, dotted_name));
   const Function& constructor =
-      Function::Handle(cls.LookupFunction(constr_name));
+      Function::Handle(cls.LookupFunctionAllowPrivate(constr_name));
   if (constructor.IsNull() ||
       (!constructor.IsConstructor() && !constructor.IsFactory())) {
     const String& lookup_class_name = String::Handle(cls.Name());
@@ -3388,7 +3393,7 @@
   // TODO(turnidge): Support redirecting factories.
   ASSERT(result.IsFunction());
   Function& constructor = Function::Handle(isolate);
-  constructor ^= result.raw();
+  constructor |= result.raw();
 
   Instance& new_object = Instance::Handle(isolate);
   if (constructor.IsConstructor()) {
@@ -3611,7 +3616,7 @@
     while (!cls.IsNull()) {
       String& getter_name =
           String::Handle(isolate, Field::GetterName(field_name));
-      getter = cls.LookupDynamicFunction(getter_name);
+      getter = cls.LookupDynamicFunctionAllowPrivate(getter_name);
       if (!getter.IsNull()) {
         break;
       }
@@ -3642,7 +3647,7 @@
     if (field.IsNull() || FieldIsUninitialized(isolate, field)) {
       const String& getter_name =
           String::Handle(isolate, Field::GetterName(field_name));
-      getter = cls.LookupStaticFunction(getter_name);
+      getter = cls.LookupStaticFunctionAllowPrivate(getter_name);
     }
 
     if (!getter.IsNull()) {
@@ -3674,7 +3679,7 @@
       const Class& cls = Class::Handle(isolate, field.owner());
       const String& getter_name =
           String::Handle(isolate, Field::GetterName(field_name));
-      getter = cls.LookupStaticFunction(getter_name);
+      getter = cls.LookupStaticFunctionAllowPrivate(getter_name);
     }
 
     if (!getter.IsNull()) {
@@ -3737,7 +3742,7 @@
       }
       String& setter_name =
           String::Handle(isolate, Field::SetterName(field_name));
-      setter = cls.LookupDynamicFunction(setter_name);
+      setter = cls.LookupDynamicFunctionAllowPrivate(setter_name);
       if (!setter.IsNull()) {
         break;
       }
@@ -3764,7 +3769,7 @@
     if (field.IsNull()) {
       String& setter_name =
           String::Handle(isolate, Field::SetterName(field_name));
-      setter = cls.LookupStaticFunction(setter_name);
+      setter = cls.LookupStaticFunctionAllowPrivate(setter_name);
     }
 
     if (!setter.IsNull()) {
@@ -3801,7 +3806,7 @@
     if (field.IsNull()) {
       const String& setter_name =
           String::Handle(isolate, Field::SetterName(field_name));
-      setter ^= lib.LookupFunctionAllowPrivate(setter_name);
+      setter |= lib.LookupFunctionAllowPrivate(setter_name);
     }
 
     if (!setter.IsNull()) {
@@ -4175,7 +4180,7 @@
     return Api::NewError("%s: Unable to deserialize snapshot correctly.",
                          CURRENT_FUNC);
   }
-  library ^= tmp.raw();
+  library |= tmp.raw();
   library.set_debuggable(true);
   isolate->object_store()->set_root_library(library);
   return Api::NewHandle(isolate, library.raw());
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index c015db9..ec3e94c 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -1248,7 +1248,7 @@
     const String& str1 = String::Handle(String::New("Test String"));
     Dart_Handle ref = Api::NewHandle(isolate, str1.raw());
     String& str2 = String::Handle();
-    str2 ^= Api::UnwrapHandle(ref);
+    str2 |= Api::UnwrapHandle(ref);
     EXPECT(str1.Equals(str2));
   }
   Dart_ExitScope();
@@ -1297,22 +1297,22 @@
     DARTSCOPE_NOCHECKS(isolate);
     for (int i = 0; i < 500; i++) {
       String& str = String::Handle();
-      str ^= Api::UnwrapHandle(handles[i]);
+      str |= Api::UnwrapHandle(handles[i]);
       EXPECT(str.Equals(kTestString1));
     }
     for (int i = 500; i < 1000; i++) {
       String& str = String::Handle();
-      str ^= Api::UnwrapHandle(handles[i]);
+      str |= Api::UnwrapHandle(handles[i]);
       EXPECT(str.Equals(kTestString2));
     }
     for (int i = 1000; i < 1500; i++) {
       String& str = String::Handle();
-      str ^= Api::UnwrapHandle(handles[i]);
+      str |= Api::UnwrapHandle(handles[i]);
       EXPECT(str.Equals(kTestString1));
     }
     for (int i = 1500; i < 2000; i++) {
       String& str = String::Handle();
-      str ^= Api::UnwrapHandle(handles[i]);
+      str |= Api::UnwrapHandle(handles[i]);
       EXPECT(str.Equals(kTestString2));
     }
   }
@@ -2255,7 +2255,7 @@
     }
     EXPECT_EQ(100, state->CountLocalHandles());
     for (int i = 0; i < 100; i++) {
-      val ^= Api::UnwrapHandle(handles[i]);
+      val |= Api::UnwrapHandle(handles[i]);
       EXPECT_EQ(i, val.Value());
     }
     // Start another scope and allocate some more local handles.
@@ -2266,7 +2266,7 @@
       }
       EXPECT_EQ(200, state->CountLocalHandles());
       for (int i = 100; i < 200; i++) {
-        val ^= Api::UnwrapHandle(handles[i]);
+        val |= Api::UnwrapHandle(handles[i]);
         EXPECT_EQ(i, val.Value());
       }
 
@@ -2278,7 +2278,7 @@
         }
         EXPECT_EQ(300, state->CountLocalHandles());
         for (int i = 200; i < 300; i++) {
-          val ^= Api::UnwrapHandle(handles[i]);
+          val |= Api::UnwrapHandle(handles[i]);
           EXPECT_EQ(i, val.Value());
         }
         EXPECT_EQ(300, state->CountLocalHandles());
@@ -3617,6 +3617,15 @@
 }
 
 
+static Dart_Handle PrivateLibName(Dart_Handle lib, const char* str) {
+  EXPECT(Dart_IsLibrary(lib));
+  Isolate* isolate = Isolate::Current();
+  const Library& library_obj = Api::UnwrapLibraryHandle(isolate, lib);
+  const String& name = String::Handle(String::New(str));
+  return Api::NewHandle(isolate, library_obj.PrivateName(name));
+}
+
+
 TEST_CASE(Invoke) {
   const char* kScriptChars =
       "class BaseMethods {\n"
@@ -3666,8 +3675,7 @@
   EXPECT_ERROR(Dart_Invoke(instance, name, 2, bad_args),
                "did not find instance method 'Methods.instanceMethod'");
 
-  // Hidden instance method.
-  name = NewString("_instanceMethod");
+  name = PrivateLibName(lib, "_instanceMethod");
   EXPECT(Dart_IsError(Dart_Invoke(lib, name, 1, args)));
   EXPECT(Dart_IsError(Dart_Invoke(cls, name, 1, args)));
   result = Dart_Invoke(instance, name, 1, args);
@@ -3698,7 +3706,7 @@
                "did not find static method 'Methods.staticMethod'");
 
   // Hidden static method.
-  name = NewString("_staticMethod");
+  name = PrivateLibName(lib, "_staticMethod");
   EXPECT(Dart_IsError(Dart_Invoke(lib, name, 1, args)));
   EXPECT(Dart_IsError(Dart_Invoke(instance, name, 1, args)));
   result = Dart_Invoke(cls, name, 1, args);
@@ -3727,7 +3735,7 @@
                "2 passed, 1 expected.");
 
   // Hidden top-level method.
-  name = NewString("_topMethod");
+  name = PrivateLibName(lib, "_topMethod");
   EXPECT(Dart_IsError(Dart_Invoke(cls, name, 1, args)));
   EXPECT(Dart_IsError(Dart_Invoke(instance, name, 1, args)));
   result = Dart_Invoke(lib, name, 1, args);
@@ -4289,12 +4297,12 @@
       "  static set j(x) {}\n"
       "  static get _k => 'k';\n"
       "  static set _l(x) {}\n"
-      "  abstract m();\n"
-      "  abstract _n();\n"
-      "  abstract get o;\n"
-      "  abstract set p(x);\n"
-      "  abstract get _q;\n"
-      "  abstract set _r(x);\n"
+      "  m();\n"
+      "  _n();\n"
+      "  get o;\n"
+      "  set p(x);\n"
+      "  get _q;\n"
+      "  set _r(x);\n"
       "  s(x, [y, z]) {}\n"
       "  t([x, y, z]) {}\n"
       "  operator ==(x) {}\n"
@@ -7070,7 +7078,7 @@
   {
     DARTSCOPE_NOCHECKS(isolate);
     String& handle = String::Handle();
-    handle ^= Api::UnwrapHandle(str);
+    handle |= Api::UnwrapHandle(str);
     EXPECT(handle.IsOld());
   }
   EXPECT_VALID(Dart_GetPeer(str, &out));
@@ -7443,6 +7451,71 @@
   EXPECT_VALID(result);
 }
 
+
+// Test external strings and optimized code.
+static void ExternalStringDeoptimize_Finalize(void* peer) {
+  delete[] reinterpret_cast<char*>(peer);
+}
+
+
+static void A_change_str_native(Dart_NativeArguments args) {
+  Dart_EnterScope();
+  Dart_Handle str = Dart_GetNativeArgument(args, 0);
+  EXPECT(Dart_IsString(str));
+  intptr_t size = 0;
+  EXPECT_VALID(Dart_StringStorageSize(str, &size));
+  char* str_data = new char[size];
+  Dart_Handle result =
+      Dart_MakeExternalString(str,
+                              str_data,
+                              size,
+                              str_data,
+                              &ExternalStringDeoptimize_Finalize);
+  EXPECT_VALID(result);
+  Dart_ExitScope();
+}
+
+
+static Dart_NativeFunction ExternalStringDeoptimize_native_lookup(
+    Dart_Handle name, int argument_count) {
+  return reinterpret_cast<Dart_NativeFunction>(&A_change_str_native);
+}
+
+
+TEST_CASE(ExternalStringDeoptimize) {
+  const char* kScriptChars =
+      "String str = 'A';\n"
+      "class A {\n"
+      "  static change_str(String s) native 'A_change_str';\n"
+      "}\n"
+      "sum_chars(String s, bool b) {\n"
+      "  var result = 0;\n"
+      "  for (var i = 0; i < s.length; i++) {\n"
+      "    if (b && i == 0) A.change_str(str);\n"
+      "    result += s.charCodeAt(i);"
+      "  }\n"
+      "  return result;\n"
+      "}\n"
+      "main() {\n"
+      "  str = '$str$str';\n"
+      "  for (var i = 0; i < 2000; i++) sum_chars(str, false);\n"
+      "  var x = sum_chars(str, false);\n"
+      "  var y = sum_chars(str, true);\n"
+      "  return x + y;\n"
+      "}\n";
+  Dart_Handle lib =
+      TestCase::LoadTestScript(kScriptChars,
+                               &ExternalStringDeoptimize_native_lookup);
+  Dart_Handle result = Dart_Invoke(lib,
+                                   NewString("main"),
+                                   0,
+                                   NULL);
+  int64_t value = 0;
+  result = Dart_IntegerToInt64(result, &value);
+  EXPECT_VALID(result);
+  EXPECT_EQ(260, value);
+}
+
 #endif  // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
 
 }  // namespace dart
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 5a0c42f..3461a53 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -148,12 +148,16 @@
   ASSERT(receiver.raw() == arguments.At(0));
   // Allocate an InvocationMirror object.
   const Library& core_lib = Library::Handle(Library::CoreLibrary());
+
   Class& invocation_mirror_class = Class::Handle(
-      core_lib.LookupClassAllowPrivate(Symbols::InvocationMirror()));
+      core_lib.LookupClass(
+          String::Handle(core_lib.PrivateName(Symbols::InvocationMirror()))));
   ASSERT(!invocation_mirror_class.IsNull());
+  const String& function_name =
+      String::Handle(core_lib.PrivateName(Symbols::AllocateInvocationMirror()));
   const Function& allocation_function = Function::Handle(
       Resolver::ResolveStaticByName(invocation_mirror_class,
-                                    Symbols::AllocateInvocationMirror(),
+                                    function_name,
                                     Resolver::kIsQualified));
   ASSERT(!allocation_function.IsNull());
   const int kNumAllocationArgs = 3;
@@ -243,7 +247,7 @@
   String& name = String::Handle();
   Smi& pos = Smi::Handle();
   for (intptr_t i = 0; i < num_named_args; i++) {
-    name ^= optional_arguments_names.At(i);
+    name |= optional_arguments_names.At(i);
     pos = Smi::New(num_pos_args + i);
     intptr_t insert_index = kFirstNamedEntryIndex + (kNamedEntrySize * i);
     // Shift already inserted pairs with "larger" names.
@@ -251,11 +255,11 @@
     Smi& previous_pos = Smi::Handle();
     while (insert_index > kFirstNamedEntryIndex) {
       intptr_t previous_index = insert_index - kNamedEntrySize;
-      previous_name ^= descriptor.At(previous_index + kNameOffset);
+      previous_name |= descriptor.At(previous_index + kNameOffset);
       intptr_t result = name.CompareTo(previous_name);
       ASSERT(result != 0);  // Duplicate argument names checked in parser.
       if (result > 0) break;
-      previous_pos ^= descriptor.At(previous_index + kPositionOffset);
+      previous_pos |= descriptor.At(previous_index + kPositionOffset);
       descriptor.SetAt(insert_index + kNameOffset, previous_name);
       descriptor.SetAt(insert_index + kPositionOffset, previous_pos);
       insert_index = previous_index;
@@ -401,9 +405,11 @@
     ASSERT(!isolate_lib.IsNull());
     const String& class_name =
         String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl()));
+    const String& function_name =
+        String::Handle(isolate_lib.PrivateName(Symbols::_lookupReceivePort()));
     function = Resolver::ResolveStatic(isolate_lib,
                                        class_name,
-                                       Symbols::_lookupReceivePort(),
+                                       function_name,
                                        kNumArguments,
                                        Object::empty_array(),
                                        Resolver::kIsQualified);
@@ -430,9 +436,11 @@
     ASSERT(!isolate_lib.IsNull());
     const String& class_name =
         String::Handle(isolate_lib.PrivateName(Symbols::_ReceivePortImpl()));
+    const String& function_name =
+        String::Handle(isolate_lib.PrivateName(Symbols::_handleMessage()));
     function = Resolver::ResolveStatic(isolate_lib,
                                        class_name,
-                                       Symbols::_handleMessage(),
+                                       function_name,
                                        kNumArguments,
                                        Object::empty_array(),
                                        Resolver::kIsQualified);
@@ -455,10 +463,12 @@
   const String& class_name =
       String::Handle(isolate_lib.PrivateName(Symbols::_SendPortImpl()));
   const int kNumArguments = 1;
+  const String& function_name =
+      String::Handle(isolate_lib.PrivateName(Symbols::_create()));
   const Function& function = Function::Handle(
       Resolver::ResolveStatic(isolate_lib,
                               class_name,
-                              Symbols::_create(),
+                              function_name,
                               kNumArguments,
                               Object::empty_array(),
                               Resolver::kIsQualified));
@@ -490,7 +500,10 @@
 
 RawObject* DartLibraryCalls::PortGetId(const Instance& port) {
   const Class& cls = Class::Handle(port.clazz());
-  const String& func_name = String::Handle(Field::GetterName(Symbols::_id()));
+  const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
+  const String& func_name =
+      String::Handle(isolate_lib.PrivateName(
+          String::Handle(Field::GetterName(Symbols::_id()))));
   const Function& func = Function::Handle(cls.LookupDynamicFunction(func_name));
   ASSERT(!func.IsNull());
   const Array& args = Array::Handle(Array::New(1));
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 284a2e1..b913f7f 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -301,6 +301,12 @@
 }
 
 
+intptr_t ActivationFrame::TryIndex() {
+  intptr_t desc_index = PcDescIndex();
+  return pc_desc_.TryIndex(desc_index);
+}
+
+
 intptr_t ActivationFrame::LineNumber() {
   // Compute line number lazily since it causes scanning of the script.
   if (line_number_ < 0) {
@@ -372,6 +378,44 @@
 }
 
 
+ActivationFrame* DebuggerStackTrace::GetHandlerFrame(
+    const Instance& exc_obj) const {
+  ExceptionHandlers& handlers = ExceptionHandlers::Handle();
+  Array& handled_types = Array::Handle();
+  AbstractType& type = Type::Handle();
+  const TypeArguments& no_instantiator = TypeArguments::Handle();
+  for (int frame_index = 0; frame_index < Length(); frame_index++) {
+    ActivationFrame* frame = trace_[frame_index];
+    intptr_t try_index = frame->TryIndex();
+    if (try_index < 0) continue;
+    const Code& code = frame->DartCode();
+    handlers = code.exception_handlers();
+    ASSERT(!handlers.IsNull());
+    intptr_t num_handlers_checked = 0;
+    while (try_index >= 0) {
+      // Detect circles in the exception handler data.
+      num_handlers_checked++;
+      ASSERT(num_handlers_checked <= handlers.Length());
+      handled_types = handlers.GetHandledTypes(try_index);
+      const intptr_t num_types = handled_types.Length();
+      for (int k = 0; k < num_types; k++) {
+        type ^= handled_types.At(k);
+        ASSERT(!type.IsNull());
+        // Uninstantiated types are not added to ExceptionHandlers data.
+        ASSERT(type.IsInstantiated());
+        if (type.IsDynamicType()) return frame;
+        if (type.IsMalformed()) continue;
+        if (exc_obj.IsInstanceOf(type, no_instantiator, NULL)) {
+          return frame;
+        }
+      }
+      try_index = handlers.OuterTryIndex(try_index);
+    }
+  }
+  return NULL;
+}
+
+
 void ActivationFrame::GetDescIndices() {
   if (vars_initialized_) {
     return;
@@ -464,7 +508,7 @@
   ASSERT(i < desc_indices_.length());
   intptr_t desc_index = desc_indices_[i];
   ASSERT(name != NULL);
-  *name ^= var_descriptors_.GetName(desc_index);
+  *name |= var_descriptors_.GetName(desc_index);
   RawLocalVarDescriptors::VarInfo var_info;
   var_descriptors_.GetInfo(desc_index, &var_info);
   ASSERT(token_pos != NULL);
@@ -780,7 +824,7 @@
       functions = cls.functions();
       intptr_t num_functions = functions.IsNull() ? 0 : functions.Length();
       for (intptr_t f = 0; f < num_functions; f++) {
-        function ^= functions.At(f);
+        function |= functions.At(f);
         ASSERT(!function.IsNull());
         if (function.HasOptimizedCode()) {
           function.SwitchToUnoptimizedCode();
@@ -866,31 +910,29 @@
 }
 
 
-// TODO(hausner): Determine whether the exception is handled or not.
 bool Debugger::ShouldPauseOnException(DebuggerStackTrace* stack_trace,
-                                      const Object& exc) {
+                                      const Instance& exc) {
   if (exc_pause_info_ == kNoPauseOnExceptions) {
     return false;
   }
-  if ((exc_pause_info_ & kPauseOnAllExceptions) != 0) {
+  if (exc_pause_info_ == kPauseOnAllExceptions) {
     return true;
   }
-  // Assume TypeError and AssertionError exceptions are unhandled.
-  const Class& exc_class = Class::Handle(exc.clazz());
-  const String& class_name = String::Handle(exc_class.Name());
-  // TODO(hausner): Note the poor man's type test. This code will go
-  // away when we have a way to determine whether an exception is unhandled.
-  if (class_name.Equals("TypeErrorImplementation")) {
-    return true;
-  }
-  if (class_name.Equals("AssertionErrorImplementation")) {
+  ASSERT(exc_pause_info_ == kPauseOnUnhandledExceptions);
+  ActivationFrame* handler_frame = stack_trace->GetHandlerFrame(exc);
+  if (handler_frame == NULL) {
+    // Did not find an exception handler that catches this exception.
+    // Note that this check is not precise, since we can't check
+    // uninstantiated types, i.e. types containing type parameters.
+    // Thus, we may report an exception as unhandled when in fact
+    // it will be caught once we unwind the stack.
     return true;
   }
   return false;
 }
 
 
-void Debugger::SignalExceptionThrown(const Object& exc) {
+void Debugger::SignalExceptionThrown(const Instance& exc) {
   // We ignore this exception event when the VM is executing code invoked
   // by the debugger to evaluate variables values, when we see a nested
   // breakpoint or exception event, or if the debugger is not
@@ -1100,7 +1142,7 @@
   const GrowableObjectArray& libs =
       GrowableObjectArray::Handle(isolate_->object_store()->libraries());
   for (int i = 0; i < libs.Length(); i++) {
-    lib ^= libs.At(i);
+    lib |= libs.At(i);
     script = lib.LookupScript(script_url);
     if (!script.IsNull()) {
       break;
@@ -1235,7 +1277,7 @@
   while (!cls.IsNull()) {
     fields = cls.fields();
     for (int i = 0; i < fields.Length(); i++) {
-      field ^= fields.At(i);
+      field |= fields.At(i);
       if (!field.is_static()) {
         field_name = field.name();
         field_list.Add(field_name);
@@ -1257,7 +1299,7 @@
   String& field_name = String::Handle();
   Object& field_value = Object::Handle();
   for (int i = 0; i < fields.Length(); i++) {
-    field ^= fields.At(i);
+    field |= fields.At(i);
     if (field.is_static()) {
       field_name = field.name();
       field_value = GetStaticField(cls, field_name);
@@ -1282,7 +1324,7 @@
   while (it.HasNext()) {
     entry = it.GetNext();
     if (entry.IsField()) {
-      field ^= entry.raw();
+      field |= entry.raw();
       cls = field.owner();
       ASSERT(field.is_static());
       field_name = field.name();
@@ -1368,7 +1410,8 @@
   RawFunction::Kind fkind = func.kind();
   if ((fkind == RawFunction::kImplicitGetter) ||
       (fkind == RawFunction::kImplicitSetter) ||
-      (fkind == RawFunction::kConstImplicitGetter)) {
+      (fkind == RawFunction::kConstImplicitGetter) ||
+      (fkind == RawFunction::kMethodExtractor)) {
     return false;
   }
   const Class& cls = Class::Handle(func.Owner());
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 14627b6..04b5fcb 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -154,6 +154,7 @@
 
  private:
   intptr_t PcDescIndex();
+  intptr_t TryIndex();
   void GetPcDescriptors();
   void GetVarDescriptors();
   void GetDescIndices();
@@ -180,6 +181,7 @@
   PcDescriptors& pc_desc_;
 
   friend class Debugger;
+  friend class DebuggerStackTrace;
   DISALLOW_COPY_AND_ASSIGN(ActivationFrame);
 };
 
@@ -196,6 +198,7 @@
     ASSERT(i < trace_.length());
     return trace_[i];
   }
+  ActivationFrame* GetHandlerFrame(const Instance& exc_obj) const;
  private:
   void AddActivation(ActivationFrame* frame);
   ZoneGrowableArray<ActivationFrame*> trace_;
@@ -293,7 +296,7 @@
                             const String& field_name);
 
   void SignalBpReached();
-  void SignalExceptionThrown(const Object& exc);
+  void SignalExceptionThrown(const Instance& exc);
   static void SignalIsolateEvent(EventType type);
 
  private:
@@ -332,7 +335,7 @@
   intptr_t nextId() { return next_id_++; }
 
   bool ShouldPauseOnException(DebuggerStackTrace* stack_trace,
-                              const Object& exc);
+                              const Instance& exc);
 
   void CollectLibraryFields(const GrowableObjectArray& field_list,
                             const Library& lib,
diff --git a/runtime/vm/debugger_api_impl.cc b/runtime/vm/debugger_api_impl.cc
index d4687d1..d4f9d0a 100644
--- a/runtime/vm/debugger_api_impl.cc
+++ b/runtime/vm/debugger_api_impl.cc
@@ -574,7 +574,7 @@
   Script& script = Script::Handle();
   String& url = String::Handle();
   for (int i = 0; i < num_scripts; i++) {
-    script ^= loaded_scripts.At(i);
+    script |= loaded_scripts.At(i);
     url = script.url();
     script_list.SetAt(i, url);
   }
@@ -595,7 +595,7 @@
   Library &lib = Library::Handle();
   const Array& library_id_list = Array::Handle(Array::New(num_libs));
   for (int i = 0; i < num_libs; i++) {
-    lib ^= libs.At(i);
+    lib |= libs.At(i);
     ASSERT(!lib.IsNull());
     ASSERT(Smi::IsValid(lib.index()));
     library_id_list.SetAt(i, Smi::Handle(Smi::New(lib.index())));
@@ -670,7 +670,7 @@
   String& lib_url = String::Handle();
   const Array& library_url_list = Array::Handle(Array::New(num_libs));
   for (int i = 0; i < num_libs; i++) {
-    lib ^= libs.At(i);
+    lib |= libs.At(i);
     ASSERT(!lib.IsNull());
     lib_url = lib.url();
     library_url_list.SetAt(i, lib_url);
diff --git a/runtime/vm/debugger_mips.cc b/runtime/vm/debugger_mips.cc
new file mode 100644
index 0000000..68acf9c
--- /dev/null
+++ b/runtime/vm/debugger_mips.cc
@@ -0,0 +1,36 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/debugger.h"
+
+namespace dart {
+
+RawInstance* ActivationFrame::GetLocalVarValue(intptr_t slot_index) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+RawInstance* ActivationFrame::GetInstanceCallReceiver(
+                 intptr_t num_actual_args) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CodeBreakpoint::PatchFunctionReturn() {
+  UNIMPLEMENTED();
+}
+
+
+void CodeBreakpoint::RestoreFunctionReturn() {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 1de66d0..d393088 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -27,14 +27,14 @@
       from_frame_(NULL),
       from_frame_size_(0),
       registers_copy_(NULL),
-      xmm_registers_copy_(NULL),
+      fpu_registers_copy_(NULL),
       num_args_(num_args),
       deopt_reason_(deopt_reason),
       isolate_(Isolate::Current()) {
   from_frame_ = isolate_->deopt_frame_copy();
   from_frame_size_ = isolate_->deopt_frame_copy_size();
   registers_copy_ = isolate_->deopt_cpu_registers_copy();
-  xmm_registers_copy_ = isolate_->deopt_xmm_registers_copy();
+  fpu_registers_copy_ = isolate_->deopt_fpu_registers_copy();
   caller_fp_ = GetFromFp();
 }
 
@@ -202,7 +202,7 @@
 
   void Execute(DeoptimizationContext* deopt_context, intptr_t to_index) {
     Function& function = Function::Handle(deopt_context->isolate());
-    function ^= deopt_context->ObjectAt(object_table_index_);
+    function |= deopt_context->ObjectAt(object_table_index_);
     const Code& code =
         Code::Handle(deopt_context->isolate(), function.unoptimized_code());
     uword continue_at_pc = code.GetDeoptAfterPcAtDeoptId(deopt_id_);
@@ -261,14 +261,13 @@
 
   void Execute(DeoptimizationContext* deopt_context, intptr_t to_index) {
     Function& function = Function::Handle(deopt_context->isolate());
-    function ^= deopt_context->ObjectAt(object_table_index_);
+    function |= deopt_context->ObjectAt(object_table_index_);
     const Code& code =
         Code::Handle(deopt_context->isolate(), function.unoptimized_code());
     uword continue_at_pc = code.GetDeoptBeforePcAtDeoptId(deopt_id_);
     intptr_t* to_addr = deopt_context->GetToFrameAddressAt(to_index);
     *to_addr = continue_at_pc;
 
-
     uword pc = code.GetPcForDeoptId(deopt_id_, PcDescriptors::kIcCall);
     if (pc != 0) {
       // If the deoptimization happened at an IC call, update the IC data
@@ -354,20 +353,20 @@
 
 
 // Deoptimization instruction moving an XMM register.
-class DeoptXmmRegisterInstr: public DeoptInstr {
+class DeoptFpuRegisterInstr: public DeoptInstr {
  public:
-  explicit DeoptXmmRegisterInstr(intptr_t reg_as_int)
-      : reg_(static_cast<XmmRegister>(reg_as_int)) {}
+  explicit DeoptFpuRegisterInstr(intptr_t reg_as_int)
+      : reg_(static_cast<FpuRegister>(reg_as_int)) {}
 
   virtual intptr_t from_index() const { return static_cast<intptr_t>(reg_); }
-  virtual DeoptInstr::Kind kind() const { return kXmmRegister; }
+  virtual DeoptInstr::Kind kind() const { return kFpuRegister; }
 
   virtual const char* ToCString() const {
-    return Assembler::XmmRegisterName(reg_);
+    return Assembler::FpuRegisterName(reg_);
   }
 
   void Execute(DeoptimizationContext* deopt_context, intptr_t to_index) {
-    double value = deopt_context->XmmRegisterValue(reg_);
+    double value = deopt_context->FpuRegisterValue(reg_);
     intptr_t* to_addr = deopt_context->GetToFrameAddressAt(to_index);
     *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0);
     Isolate::Current()->DeferDoubleMaterialization(
@@ -375,31 +374,31 @@
   }
 
  private:
-  const XmmRegister reg_;
+  const FpuRegister reg_;
 
-  DISALLOW_COPY_AND_ASSIGN(DeoptXmmRegisterInstr);
+  DISALLOW_COPY_AND_ASSIGN(DeoptFpuRegisterInstr);
 };
 
 
-class DeoptInt64XmmRegisterInstr: public DeoptInstr {
+class DeoptInt64FpuRegisterInstr: public DeoptInstr {
  public:
-  explicit DeoptInt64XmmRegisterInstr(intptr_t reg_as_int)
-      : reg_(static_cast<XmmRegister>(reg_as_int)) {}
+  explicit DeoptInt64FpuRegisterInstr(intptr_t reg_as_int)
+      : reg_(static_cast<FpuRegister>(reg_as_int)) {}
 
   virtual intptr_t from_index() const { return static_cast<intptr_t>(reg_); }
-  virtual DeoptInstr::Kind kind() const { return kInt64XmmRegister; }
+  virtual DeoptInstr::Kind kind() const { return kInt64FpuRegister; }
 
   virtual const char* ToCString() const {
     const char* format = "%s(m)";
     intptr_t len =
-        OS::SNPrint(NULL, 0, format, Assembler::XmmRegisterName(reg_));
+        OS::SNPrint(NULL, 0, format, Assembler::FpuRegisterName(reg_));
     char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1);
-    OS::SNPrint(chars, len + 1, format, Assembler::XmmRegisterName(reg_));
+    OS::SNPrint(chars, len + 1, format, Assembler::FpuRegisterName(reg_));
     return chars;
   }
 
   void Execute(DeoptimizationContext* deopt_context, intptr_t to_index) {
-    int64_t value = deopt_context->XmmRegisterValueAsInt64(reg_);
+    int64_t value = deopt_context->FpuRegisterValueAsInt64(reg_);
     intptr_t* to_addr = deopt_context->GetToFrameAddressAt(to_index);
     *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0);
     if (Smi::IsValid64(value)) {
@@ -412,9 +411,9 @@
   }
 
  private:
-  const XmmRegister reg_;
+  const FpuRegister reg_;
 
-  DISALLOW_COPY_AND_ASSIGN(DeoptInt64XmmRegisterInstr);
+  DISALLOW_COPY_AND_ASSIGN(DeoptInt64FpuRegisterInstr);
 };
 
 
@@ -440,7 +439,7 @@
 
   void Execute(DeoptimizationContext* deopt_context, intptr_t to_index) {
     Function& function = Function::Handle(deopt_context->isolate());
-    function ^= deopt_context->ObjectAt(object_table_index_);
+    function |= deopt_context->ObjectAt(object_table_index_);
     const Code& code =
         Code::Handle(deopt_context->isolate(), function.unoptimized_code());
     ASSERT(!code.IsNull());
@@ -586,7 +585,7 @@
   DeoptRetAfterAddressInstr::GetEncodedValues(from_index,
                                               &object_table_index,
                                               &deopt_id);
-  *func ^= object_table.At(object_table_index);
+  *func |= object_table.At(object_table_index);
   const Code& code = Code::Handle(func->unoptimized_code());
   return code.GetDeoptAfterPcAtDeoptId(deopt_id);
 }
@@ -602,8 +601,8 @@
     case kRetBeforeAddress: return new DeoptRetBeforeAddressInstr(from_index);
     case kConstant: return new DeoptConstantInstr(from_index);
     case kRegister: return new DeoptRegisterInstr(from_index);
-    case kXmmRegister: return new DeoptXmmRegisterInstr(from_index);
-    case kInt64XmmRegister: return new DeoptInt64XmmRegisterInstr(from_index);
+    case kFpuRegister: return new DeoptFpuRegisterInstr(from_index);
+    case kInt64FpuRegister: return new DeoptInt64FpuRegisterInstr(from_index);
     case kPcMarker: return new DeoptPcMarkerInstr(from_index);
     case kCallerFp: return new DeoptCallerFpInstr();
     case kCallerPc: return new DeoptCallerPcInstr();
@@ -706,12 +705,12 @@
     deopt_instr = new DeoptConstantInstr(object_table_index);
   } else if (from_loc.IsRegister()) {
     deopt_instr = new DeoptRegisterInstr(from_loc.reg());
-  } else if (from_loc.IsXmmRegister()) {
+  } else if (from_loc.IsFpuRegister()) {
     if (from_loc.representation() == Location::kDouble) {
-      deopt_instr = new DeoptXmmRegisterInstr(from_loc.xmm_reg());
+      deopt_instr = new DeoptFpuRegisterInstr(from_loc.fpu_reg());
     } else {
       ASSERT(from_loc.representation() == Location::kMint);
-      deopt_instr = new DeoptInt64XmmRegisterInstr(from_loc.xmm_reg());
+      deopt_instr = new DeoptInt64FpuRegisterInstr(from_loc.fpu_reg());
     }
   } else if (from_loc.IsStackSlot()) {
     intptr_t from_index = (from_loc.stack_index() < 0) ?
@@ -824,9 +823,9 @@
                           DeoptInfo* info,
                           Smi* reason) {
   intptr_t i = index * kEntrySize;
-  *offset ^= table.At(i);
-  *info ^= table.At(i + 1);
-  *reason ^= table.At(i + 2);
+  *offset |= table.At(i);
+  *info |= table.At(i + 1);
+  *reason |= table.At(i + 2);
 }
 
 }  // namespace dart
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h
index 0741596..74a919a 100644
--- a/runtime/vm/deopt_instructions.h
+++ b/runtime/vm/deopt_instructions.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -52,12 +52,12 @@
     return registers_copy_[reg];
   }
 
-  double XmmRegisterValue(XmmRegister reg) const {
-    return xmm_registers_copy_[reg];
+  double FpuRegisterValue(FpuRegister reg) const {
+    return fpu_registers_copy_[reg];
   }
 
-  int64_t XmmRegisterValueAsInt64(XmmRegister reg) const {
-    return (reinterpret_cast<int64_t*>(xmm_registers_copy_))[reg];
+  int64_t FpuRegisterValueAsInt64(FpuRegister reg) const {
+    return (reinterpret_cast<int64_t*>(fpu_registers_copy_))[reg];
   }
 
   Isolate* isolate() const { return isolate_; }
@@ -73,7 +73,7 @@
   intptr_t* from_frame_;
   intptr_t from_frame_size_;
   intptr_t* registers_copy_;
-  double* xmm_registers_copy_;
+  double* fpu_registers_copy_;
   const intptr_t num_args_;
   const DeoptReasonId deopt_reason_;
   intptr_t caller_fp_;
@@ -94,8 +94,8 @@
     kRetBeforeAddress,
     kConstant,
     kRegister,
-    kXmmRegister,
-    kInt64XmmRegister,
+    kFpuRegister,
+    kInt64FpuRegister,
     kStackSlot,
     kDoubleStackSlot,
     kInt64StackSlot,
diff --git a/runtime/vm/disassembler_arm.cc b/runtime/vm/disassembler_arm.cc
index e74333d..e88f6ca 100644
--- a/runtime/vm/disassembler_arm.cc
+++ b/runtime/vm/disassembler_arm.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -20,7 +20,8 @@
 
 void Disassembler::Disassemble(uword start,
                                uword end,
-                               DisassemblyFormatter* formatter) {
+                               DisassemblyFormatter* formatter,
+                               const Code::Comments& comments) {
   UNIMPLEMENTED();
 }
 
diff --git a/runtime/vm/disassembler_mips.cc b/runtime/vm/disassembler_mips.cc
new file mode 100644
index 0000000..72512ee
--- /dev/null
+++ b/runtime/vm/disassembler_mips.cc
@@ -0,0 +1,30 @@
+// 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.
+
+#include "vm/disassembler.h"
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_MIPS.
+#if defined(TARGET_ARCH_MIPS)
+#include "platform/assert.h"
+
+namespace dart {
+
+int Disassembler::DecodeInstruction(char* hex_buffer, intptr_t hex_size,
+                                    char* human_buffer, intptr_t human_size,
+                                    uword pc) {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+void Disassembler::Disassemble(uword start,
+                               uword end,
+                               DisassemblyFormatter* formatter,
+                               const Code::Comments& comments) {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/elfgen.h b/runtime/vm/elfgen.h
index cf6abfd..fb8c2f6 100644
--- a/runtime/vm/elfgen.h
+++ b/runtime/vm/elfgen.h
@@ -342,7 +342,9 @@
 #endif
   WriteWord(symtab, pc);  // st_value
   WriteWord(symtab, size);  // st_size
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_ARM)
+#if defined(TARGET_ARCH_IA32) ||                                               \
+    defined(TARGET_ARCH_ARM) ||                                                \
+    defined(TARGET_ARCH_MIPS)
   // st_info + (st_other<<8)
   WriteShort(symtab, (kSTB_EXPORTED << 4) + kSTT_FUNC);
   WriteShort(symtab, kText);  // st_shndx
@@ -383,7 +385,9 @@
 void ElfGen::AddELFHeader(int shoff) {
   ASSERT(text_vma_ != 0);  // Code must have been added.
   Write(&header_, kEI_MAG0_MAG3, 4);  // EI_MAG0..EI_MAG3
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_ARM)
+#if defined(TARGET_ARCH_IA32) ||                                               \
+    defined(TARGET_ARCH_ARM) ||                                                \
+    defined(TARGET_ARCH_MIPS)
   WriteByte(&header_, kELFCLASS32);  // EI_CLASS
 #elif defined(TARGET_ARCH_X64)
   WriteByte(&header_, kELFCLASS64);  // EI_CLASS
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index df11704..7301473 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -194,11 +194,11 @@
     if (existing_stacktrace.IsNull()) {
       stacktrace = Stacktrace::New(func_list, code_list, pc_offset_list);
     } else {
-      stacktrace ^= existing_stacktrace.raw();
+      stacktrace |= existing_stacktrace.raw();
       stacktrace.Append(func_list, code_list, pc_offset_list);
     }
   } else {
-    stacktrace ^= existing_stacktrace.raw();
+    stacktrace |= existing_stacktrace.raw();
   }
   if (FLAG_print_stacktrace_at_throw) {
     OS::Print("Exception '%s' thrown:\n", exception.ToCString());
diff --git a/runtime/vm/flow_graph.cc b/runtime/vm/flow_graph.cc
index 224adb3..8821941 100644
--- a/runtime/vm/flow_graph.cc
+++ b/runtime/vm/flow_graph.cc
@@ -506,7 +506,7 @@
   GrowableArray<Definition*> env(variable_count());
 
   // Add global constants to the initial definitions.
-  ConstantInstr* constant_null =
+  constant_null_ =
       AddConstantToInitialDefinitions(Object::ZoneHandle());
 
   // Add parameters to the initial definitions and renaming environment.
@@ -531,7 +531,7 @@
 
   // Initialize all locals with #null in the renaming environment.
   for (intptr_t i = parameter_count(); i < variable_count(); ++i) {
-    env.Add(constant_null);
+    env.Add(constant_null());
   }
 
   BlockEntryInstr* normal_entry = graph_entry_->SuccessorAt(0);
diff --git a/runtime/vm/flow_graph.h b/runtime/vm/flow_graph.h
index c3cffb9..46b6a6e 100644
--- a/runtime/vm/flow_graph.h
+++ b/runtime/vm/flow_graph.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -24,6 +24,11 @@
   explicit BlockIterator(const GrowableArray<BlockEntryInstr*>& block_order)
       : block_order_(block_order), current_(0) { }
 
+  BlockIterator(const BlockIterator& other)
+      : ValueObject(),
+        block_order_(other.block_order_),
+        current_(other.current_) { }
+
   void Advance() {
     ASSERT(!Done());
     current_++;
@@ -99,6 +104,10 @@
     return graph_entry_;
   }
 
+  ConstantInstr* constant_null() const {
+    return constant_null_;
+  }
+
   intptr_t alloc_ssa_temp_index() { return current_ssa_temp_index_++; }
 
   intptr_t InstructionCount() const;
@@ -178,6 +187,7 @@
   GrowableArray<BlockEntryInstr*> postorder_;
   GrowableArray<BlockEntryInstr*> reverse_postorder_;
   bool invalid_dominator_tree_;
+  ConstantInstr* constant_null_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index 939f393..4adf681 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -72,9 +72,9 @@
     vreg_count_(flow_graph.max_virtual_register_number()),
     live_ranges_(flow_graph.max_virtual_register_number()),
     cpu_regs_(),
-    xmm_regs_(),
+    fpu_regs_(),
     blocked_cpu_registers_(),
-    blocked_xmm_registers_(),
+    blocked_fpu_registers_(),
     cpu_spill_slot_count_(0) {
   for (intptr_t i = 0; i < vreg_count_; i++) live_ranges_.Add(NULL);
 
@@ -85,8 +85,8 @@
   blocked_cpu_registers_[SPREG] = true;
   blocked_cpu_registers_[FPREG] = true;
 
-  // XMM0 is used as scratch by optimized code and parallel move resolver.
-  blocked_xmm_registers_[XMM0] = true;
+  // FpuTMP is used as scratch by optimized code and parallel move resolver.
+  blocked_fpu_registers_[FpuTMP] = true;
 }
 
 
@@ -449,8 +449,8 @@
                                        intptr_t to) {
   if (loc.IsRegister()) {
     BlockRegisterLocation(loc, from, to, blocked_cpu_registers_, cpu_regs_);
-  } else if (loc.IsXmmRegister()) {
-    BlockRegisterLocation(loc, from, to, blocked_xmm_registers_, xmm_regs_);
+  } else if (loc.IsFpuRegister()) {
+    BlockRegisterLocation(loc, from, to, blocked_fpu_registers_, fpu_regs_);
   } else {
     UNREACHABLE();
   }
@@ -629,8 +629,8 @@
 
 
 static Location::Kind RegisterKindFromPolicy(Location loc) {
-  if (loc.policy() == Location::kRequiresXmmRegister) {
-    return Location::kXmmRegister;
+  if (loc.policy() == Location::kRequiresFpuRegister) {
+    return Location::kFpuRegister;
   } else {
     return Location::kRegister;
   }
@@ -640,7 +640,7 @@
 static Location::Kind RegisterKindForResult(Instruction* instr) {
   if ((instr->representation() == kUnboxedDouble) ||
       (instr->representation() == kUnboxedMint)) {
-    return Location::kXmmRegister;
+    return Location::kFpuRegister;
   } else {
     return Location::kRegister;
   }
@@ -978,10 +978,10 @@
                     pos + 1);
     }
 
-    for (intptr_t reg = 0; reg < kNumberOfXmmRegisters; reg++) {
+    for (intptr_t reg = 0; reg < kNumberOfFpuRegisters; reg++) {
       Location::Representation ignored = Location::kDouble;
       BlockLocation(
-          Location::XmmRegisterLocation(static_cast<XmmRegister>(reg), ignored),
+          Location::FpuRegisterLocation(static_cast<FpuRegister>(reg), ignored),
           pos,
           pos + 1);
     }
@@ -1069,7 +1069,7 @@
     //    output       [----
     //
     ASSERT(locs->in(0).Equals(Location::RequiresRegister()) ||
-           locs->in(0).Equals(Location::RequiresXmmRegister()));
+           locs->in(0).Equals(Location::RequiresFpuRegister()));
 
     // Create move that will copy value between input and output.
     locs->set_out(Location::RequiresRegister());
@@ -1104,7 +1104,7 @@
     //    output          [-------
     //
     ASSERT(locs->out().Equals(Location::RequiresRegister()) ||
-           locs->out().Equals(Location::RequiresXmmRegister()));
+           locs->out().Equals(Location::RequiresFpuRegister()));
 
     // Shorten live range to the point of definition and add use to be filled by
     // allocator.
@@ -1315,7 +1315,7 @@
     Location* loc = use->location_slot();
     if (loc->IsUnallocated() &&
         ((loc->policy() == Location::kRequiresRegister) ||
-        (loc->policy() == Location::kRequiresXmmRegister))) {
+        (loc->policy() == Location::kRequiresFpuRegister))) {
       first_register_use_ = use;
       return use;
     }
@@ -1748,7 +1748,7 @@
       (loop_header != NULL) &&
       (free_until >= loop_header->last_block()->end_pos()) &&
       loop_header->backedge_interference()->Contains(unallocated->vreg())) {
-    ASSERT(static_cast<intptr_t>(kNumberOfXmmRegisters) <=
+    ASSERT(static_cast<intptr_t>(kNumberOfFpuRegisters) <=
            kNumberOfCpuRegisters);
     bool used_on_backedge[kNumberOfCpuRegisters] = { false };
 
@@ -2199,7 +2199,7 @@
       AddToSortedListOfRanges(&unallocated_cpu_, range);
       break;
 
-    case Location::kXmmRegister:
+    case Location::kFpuRegister:
       AddToSortedListOfRanges(&unallocated_xmm_, range);
       break;
 
@@ -2483,11 +2483,11 @@
   cpu_spill_slot_count_ = spill_slots_.length();
   spill_slots_.Clear();
 
-  PrepareForAllocation(Location::kXmmRegister,
-                       kNumberOfXmmRegisters,
+  PrepareForAllocation(Location::kFpuRegister,
+                       kNumberOfFpuRegisters,
                        unallocated_xmm_,
-                       xmm_regs_,
-                       blocked_xmm_registers_);
+                       fpu_regs_,
+                       blocked_fpu_registers_);
   AllocateUnallocatedRanges();
 
   ResolveControlFlow();
diff --git a/runtime/vm/flow_graph_allocator.h b/runtime/vm/flow_graph_allocator.h
index d88e6e1..2c2447f 100644
--- a/runtime/vm/flow_graph_allocator.h
+++ b/runtime/vm/flow_graph_allocator.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -275,10 +275,10 @@
   GrowableArray<LiveRange*> unallocated_xmm_;
 
   LiveRange* cpu_regs_[kNumberOfCpuRegisters];
-  LiveRange* xmm_regs_[kNumberOfXmmRegisters];
+  LiveRange* fpu_regs_[kNumberOfFpuRegisters];
 
   bool blocked_cpu_registers_[kNumberOfCpuRegisters];
-  bool blocked_xmm_registers_[kNumberOfXmmRegisters];
+  bool blocked_fpu_registers_[kNumberOfFpuRegisters];
 
 #if defined(DEBUG)
   GrowableArray<LiveRange*> temporaries_;
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 30c2a80..dd1c6104 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -31,6 +31,13 @@
 DECLARE_FLAG(bool, enable_type_checks);
 
 
+static const String& PrivateCoreLibName(const String& str) {
+  const Library& core_lib = Library::Handle(Library::CoreLibrary());
+  const String& private_name = String::ZoneHandle(core_lib.PrivateName(str));
+  return private_name;
+}
+
+
 FlowGraphBuilder::FlowGraphBuilder(const ParsedFunction& parsed_function,
                                    InliningContext* inlining_context)
   : parsed_function_(parsed_function),
@@ -950,7 +957,6 @@
                                 &push_instantiator,
                                 &push_type_args);
   }
-  const String& name = String::ZoneHandle(Symbols::New("_instanceOf"));
   ZoneGrowableArray<PushArgumentInstr*>* arguments =
       new ZoneGrowableArray<PushArgumentInstr*>(5);
   arguments->Add(push_left);
@@ -965,12 +971,13 @@
   Value* negate_arg = Bind(new ConstantInstr(negate));
   arguments->Add(PushArgument(negate_arg));
   const intptr_t kNumArgsChecked = 1;
-  InstanceCallInstr* call = new InstanceCallInstr(node->token_pos(),
-                                                  name,
-                                                  node->kind(),
-                                                  arguments,
-                                                  Array::ZoneHandle(),
-                                                  kNumArgsChecked);
+  InstanceCallInstr* call = new InstanceCallInstr(
+      node->token_pos(),
+      PrivateCoreLibName(Symbols::_instanceOf()),
+      node->kind(),
+      arguments,
+      Array::ZoneHandle(),
+      kNumArgsChecked);
   ReturnDefinition(call);
 }
 
@@ -1626,7 +1633,8 @@
   }
   PushArgumentInstr* push_type_arguments = PushArgument(type_arguments);
   arguments->Add(push_type_arguments);
-  ReturnDefinition(new CreateClosureInstr(node, arguments));
+  ReturnDefinition(
+      new CreateClosureInstr(node->function(), arguments, node->token_pos()));
 }
 
 
@@ -2842,6 +2850,7 @@
                              old_try_index,
                              loop_depth());
     catch_entry->set_catch_try_index(try_index);
+    catch_entry->set_catch_handler_types(catch_block->handler_types());
     owner()->AddCatchEntry(catch_entry);
     ASSERT(!for_catch_block.is_open());
     AppendFragment(catch_entry, for_catch_block);
@@ -2878,9 +2887,10 @@
       corelib.LookupClassAllowPrivate(Symbols::InvocationMirror()));
   ASSERT(!mirror_class.IsNull());
   const Function& allocation_function = Function::ZoneHandle(
-      Resolver::ResolveStaticByName(mirror_class,
-                                    Symbols::AllocateInvocationMirror(),
-                                    Resolver::kIsQualified));
+      Resolver::ResolveStaticByName(
+          mirror_class,
+          PrivateCoreLibName(Symbols::AllocateInvocationMirror()),
+          Resolver::kIsQualified));
   ASSERT(!allocation_function.IsNull());
 
   // Evaluate the receiver before the arguments. This will be used
@@ -2974,7 +2984,7 @@
   ASSERT(!cls.IsNull());
   const Function& func = Function::ZoneHandle(
       Resolver::ResolveStatic(cls,
-                              Symbols::ThrowNew(),
+                              PrivateCoreLibName(Symbols::ThrowNew()),
                               arguments->length(),
                               Array::ZoneHandle(),
                               Resolver::kIsQualified));
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index bd45b11..ec02181 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -157,16 +157,6 @@
 }
 
 
-FlowGraphCompiler::~FlowGraphCompiler() {
-  // BlockInfos are zone-allocated, so their destructors are not called.
-  // Verify the labels explicitly here.
-  for (int i = 0; i < block_info_.length(); ++i) {
-    ASSERT(!block_info_[i]->label.IsLinked());
-    ASSERT(!block_info_[i]->label.HasNear());
-  }
-}
-
-
 bool FlowGraphCompiler::HasFinally() const {
   return parsed_function().function().has_finally();
 }
@@ -296,8 +286,13 @@
 
 
 void FlowGraphCompiler::AddExceptionHandler(intptr_t try_index,
-                                            intptr_t pc_offset) {
-  exception_handlers_list_->AddHandler(try_index, pc_offset);
+                                            intptr_t outer_try_index,
+                                            intptr_t pc_offset,
+                                            const Array& handler_types) {
+  exception_handlers_list_->AddHandler(try_index,
+                                       outer_try_index,
+                                       pc_offset,
+                                       handler_types);
 }
 
 
@@ -350,17 +345,17 @@
     // Slow path code can have registers at the safepoint.
     if (!locs->always_calls()) {
       RegisterSet* regs = locs->live_registers();
-      if (regs->xmm_regs_count() > 0) {
-        // Denote XMM registers with 0 bits in the stackmap.  Based on the
-        // assumption that there are normally few live XMM registers, this
+      if (regs->fpu_regs_count() > 0) {
+        // Denote FPU registers with 0 bits in the stackmap.  Based on the
+        // assumption that there are normally few live FPU registers, this
         // encoding is simpler and roughly as compact as storing a separate
-        // count of XMM registers.
+        // count of FPU registers.
         //
-        // XMM registers have the highest register number at the highest
+        // FPU registers have the highest register number at the highest
         // address (i.e., first in the stackmap).
-        for (intptr_t i = kNumberOfXmmRegisters - 1; i >= 0; --i) {
-          XmmRegister reg = static_cast<XmmRegister>(i);
-          if (regs->ContainsXmmRegister(reg)) {
+        for (intptr_t i = kNumberOfFpuRegisters - 1; i >= 0; --i) {
+          FpuRegister reg = static_cast<FpuRegister>(i);
+          if (regs->ContainsFpuRegister(reg)) {
             for (intptr_t j = 0;
                  j < FlowGraphAllocator::kDoubleSpillSlotFactor;
                  ++j) {
@@ -655,115 +650,6 @@
 }
 
 
-struct CidTarget {
-  intptr_t cid;
-  Function* target;
-  intptr_t count;
-  CidTarget(intptr_t cid_arg,
-            Function* target_arg,
-            intptr_t count_arg)
-      : cid(cid_arg), target(target_arg), count(count_arg) {}
-};
-
-
-// Returns 'sorted' array in decreasing count order.
-// The expected number of elements to sort is less than 10.
-static void SortICDataByCount(const ICData& ic_data,
-                              GrowableArray<CidTarget>* sorted) {
-  ASSERT(ic_data.num_args_tested() == 1);
-  const intptr_t len = ic_data.NumberOfChecks();
-  sorted->Clear();
-
-  for (int i = 0; i < len; i++) {
-    sorted->Add(CidTarget(ic_data.GetReceiverClassIdAt(i),
-                          &Function::ZoneHandle(ic_data.GetTargetAt(i)),
-                          ic_data.GetCountAt(i)));
-  }
-  for (int i = 0; i < len; i++) {
-    intptr_t largest_ix = i;
-    for (int k = i + 1; k < len; k++) {
-      if ((*sorted)[largest_ix].count < (*sorted)[k].count) {
-        largest_ix = k;
-      }
-    }
-    if (i != largest_ix) {
-      // Swap.
-      CidTarget temp = (*sorted)[i];
-      (*sorted)[i] = (*sorted)[largest_ix];
-      (*sorted)[largest_ix] = temp;
-    }
-  }
-}
-
-
-void FlowGraphCompiler::EmitTestAndCall(const ICData& ic_data,
-                                        Register class_id_reg,
-                                        intptr_t arg_count,
-                                        const Array& arg_names,
-                                        Label* deopt,
-                                        intptr_t deopt_id,
-                                        intptr_t token_index,
-                                        LocationSummary* locs) {
-  ASSERT(!ic_data.IsNull() && (ic_data.NumberOfChecks() > 0));
-  Label match_found;
-  const intptr_t len = ic_data.NumberOfChecks();
-  GrowableArray<CidTarget> sorted(len);
-  SortICDataByCount(ic_data, &sorted);
-  for (intptr_t i = 0; i < len; i++) {
-    const bool is_last_check = (i == (len - 1));
-    Label next_test;
-    assembler()->cmpl(class_id_reg, Immediate(sorted[i].cid));
-    if (is_last_check) {
-      assembler()->j(NOT_EQUAL, deopt);
-    } else {
-      assembler()->j(NOT_EQUAL, &next_test);
-    }
-    GenerateStaticCall(deopt_id,
-                       token_index,
-                       *sorted[i].target,
-                       arg_count,
-                       arg_names,
-                       locs);
-    if (!is_last_check) {
-      assembler()->jmp(&match_found);
-    }
-    assembler()->Bind(&next_test);
-  }
-  assembler()->Bind(&match_found);
-}
-
-
-void FlowGraphCompiler::EmitDoubleCompareBranch(Condition true_condition,
-                                                XmmRegister left,
-                                                XmmRegister right,
-                                                BranchInstr* branch) {
-  ASSERT(branch != NULL);
-  assembler()->comisd(left, right);
-  BlockEntryInstr* nan_result = (true_condition == NOT_EQUAL) ?
-      branch->true_successor() : branch->false_successor();
-  assembler()->j(PARITY_EVEN, GetBlockLabel(nan_result));
-  branch->EmitBranchOnCondition(this, true_condition);
-}
-
-
-
-void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition,
-                                              XmmRegister left,
-                                              XmmRegister right,
-                                              Register result) {
-  assembler()->comisd(left, right);
-  Label is_false, is_true, done;
-  assembler()->j(PARITY_EVEN, &is_false, Assembler::kNearJump);  // NaN false;
-  assembler()->j(true_condition, &is_true, Assembler::kNearJump);
-  assembler()->Bind(&is_false);
-  assembler()->LoadObject(result, Bool::False());
-  assembler()->jmp(&done);
-  assembler()->Bind(&is_true);
-  assembler()->LoadObject(result, Bool::True());
-  assembler()->Bind(&done);
-}
-
-
 // Allocate a register that is not explicitly blocked.
 static Register AllocateFreeRegister(bool* blocked_registers) {
   for (intptr_t regno = 0; regno < kNumberOfCpuRegisters; regno++) {
@@ -868,7 +754,7 @@
       case Location::kSameAsFirstInput:
         result_location = locs->in(0);
         break;
-      case Location::kRequiresXmmRegister:
+      case Location::kRequiresFpuRegister:
         UNREACHABLE();
         break;
     }
@@ -985,48 +871,6 @@
 }
 
 
-Condition FlowGraphCompiler::FlipCondition(Condition condition) {
-  switch (condition) {
-    case EQUAL:         return EQUAL;
-    case NOT_EQUAL:     return NOT_EQUAL;
-    case LESS:          return GREATER;
-    case LESS_EQUAL:    return GREATER_EQUAL;
-    case GREATER:       return LESS;
-    case GREATER_EQUAL: return LESS_EQUAL;
-    case BELOW:         return ABOVE;
-    case BELOW_EQUAL:   return ABOVE_EQUAL;
-    case ABOVE:         return BELOW;
-    case ABOVE_EQUAL:   return BELOW_EQUAL;
-    default:
-      UNIMPLEMENTED();
-      return EQUAL;
-  }
-}
-
-
-bool FlowGraphCompiler::EvaluateCondition(Condition condition,
-                                          intptr_t left,
-                                          intptr_t right) {
-  const uintptr_t unsigned_left = static_cast<uintptr_t>(left);
-  const uintptr_t unsigned_right = static_cast<uintptr_t>(right);
-  switch (condition) {
-    case EQUAL:         return left == right;
-    case NOT_EQUAL:     return left != right;
-    case LESS:          return left < right;
-    case LESS_EQUAL:    return left <= right;
-    case GREATER:       return left > right;
-    case GREATER_EQUAL: return left >= right;
-    case BELOW:         return unsigned_left < unsigned_right;
-    case BELOW_EQUAL:   return unsigned_left <= unsigned_right;
-    case ABOVE:         return unsigned_left > unsigned_right;
-    case ABOVE_EQUAL:   return unsigned_left >= unsigned_right;
-    default:
-      UNIMPLEMENTED();
-      return false;
-  }
-}
-
-
 intptr_t FlowGraphCompiler::ElementSizeFor(intptr_t cid) {
   switch (cid) {
     case kArrayCid:
@@ -1036,14 +880,22 @@
       return Float32Array::kBytesPerElement;
     case kFloat64ArrayCid:
       return Float64Array::kBytesPerElement;
+    case kInt8ArrayCid:
+      return Int8Array::kBytesPerElement;
     case kUint8ArrayCid:
       return Uint8Array::kBytesPerElement;
     case kUint8ClampedArrayCid:
       return Uint8ClampedArray::kBytesPerElement;
+    case kInt16ArrayCid:
+      return Int16Array::kBytesPerElement;
+    case kUint16ArrayCid:
+      return Uint16Array::kBytesPerElement;
     case kOneByteStringCid:
       return OneByteString::kBytesPerElement;
     case kTwoByteStringCid:
       return TwoByteString::kBytesPerElement;
+    case kExternalUint8ArrayCid:
+      return ExternalUint8Array::kBytesPerElement;
     default:
       UNIMPLEMENTED();
       return 0;
@@ -1060,10 +912,16 @@
       return Float32Array::data_offset();
     case kFloat64ArrayCid:
       return Float64Array::data_offset();
+    case kInt8ArrayCid:
+      return Int8Array::data_offset();
     case kUint8ArrayCid:
       return Uint8Array::data_offset();
     case kUint8ClampedArrayCid:
       return Uint8ClampedArray::data_offset();
+    case kInt16ArrayCid:
+      return Int16Array::data_offset();
+    case kUint16ArrayCid:
+      return Uint16Array::data_offset();
     case kOneByteStringCid:
       return OneByteString::data_offset();
     case kTwoByteStringCid:
@@ -1075,48 +933,6 @@
 }
 
 
-FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
-                                                          Register array,
-                                                          intptr_t index) {
-  const int64_t disp =
-      static_cast<int64_t>(index) * ElementSizeFor(cid) + DataOffsetFor(cid);
-  ASSERT(Utils::IsInt(32, disp));
-  return FieldAddress(array, static_cast<int32_t>(disp));
-}
-
-
-FieldAddress FlowGraphCompiler::ElementAddressForRegIndex(intptr_t cid,
-                                                          Register array,
-                                                          Register index) {
-  // Note that index is smi-tagged, (i.e, times 2) for all arrays with element
-  // size > 1. For Uint8Array and OneByteString the index is expected to be
-  // untagged before accessing.
-  ASSERT(kSmiTagShift == 1);
-  switch (cid) {
-    case kArrayCid:
-    case kImmutableArrayCid:
-      return FieldAddress(
-          array, index, TIMES_HALF_WORD_SIZE, Array::data_offset());
-    case kFloat32ArrayCid:
-      return FieldAddress(array, index, TIMES_2, Float32Array::data_offset());
-    case kFloat64ArrayCid:
-      return FieldAddress(array, index, TIMES_4, Float64Array::data_offset());
-    case kUint8ArrayCid:
-      return FieldAddress(array, index, TIMES_1, Uint8Array::data_offset());
-    case kUint8ClampedArrayCid:
-      return
-          FieldAddress(array, index, TIMES_1, Uint8ClampedArray::data_offset());
-    case kOneByteStringCid:
-      return FieldAddress(array, index, TIMES_1, OneByteString::data_offset());
-    case kTwoByteStringCid:
-      return FieldAddress(array, index, TIMES_1, TwoByteString::data_offset());
-    default:
-      UNIMPLEMENTED();
-      return FieldAddress(SPREG, 0);
-  }
-}
-
-
 // Returns true if checking against this type is a direct class id comparison.
 bool FlowGraphCompiler::TypeCheckAsClassEquality(const AbstractType& type) {
   ASSERT(type.IsFinalized() && !type.IsMalformed());
@@ -1142,4 +958,34 @@
   return true;
 }
 
+
+// Returns 'sorted' array in decreasing count order.
+// The expected number of elements to sort is less than 10.
+void FlowGraphCompiler::SortICDataByCount(const ICData& ic_data,
+                                          GrowableArray<CidTarget>* sorted) {
+  ASSERT(ic_data.num_args_tested() == 1);
+  const intptr_t len = ic_data.NumberOfChecks();
+  sorted->Clear();
+
+  for (int i = 0; i < len; i++) {
+    sorted->Add(CidTarget(ic_data.GetReceiverClassIdAt(i),
+                          &Function::ZoneHandle(ic_data.GetTargetAt(i)),
+                          ic_data.GetCountAt(i)));
+  }
+  for (int i = 0; i < len; i++) {
+    intptr_t largest_ix = i;
+    for (int k = i + 1; k < len; k++) {
+      if ((*sorted)[largest_ix].count < (*sorted)[k].count) {
+        largest_ix = k;
+      }
+    }
+    if (i != largest_ix) {
+      // Swap.
+      CidTarget temp = (*sorted)[i];
+      (*sorted)[i] = (*sorted)[largest_ix];
+      (*sorted)[largest_ix] = temp;
+    }
+  }
+}
+
 }  // namespace dart
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 1a12f6f..3bed948 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -15,8 +15,14 @@
 namespace dart {
 
 // Forward declarations.
-class FlowGraphCompiler;
+class Code;
 class DeoptInfoBuilder;
+class FlowGraph;
+class FlowGraphCompiler;
+class Function;
+template <typename T> class GrowableArray;
+class ParsedFunction;
+
 
 class ParallelMoveResolver : public ValueObject {
  public:
@@ -143,16 +149,375 @@
 };
 
 
-}  // namespace dart
+struct CidTarget {
+  intptr_t cid;
+  Function* target;
+  intptr_t count;
+  CidTarget(intptr_t cid_arg,
+            Function* target_arg,
+            intptr_t count_arg)
+      : cid(cid_arg), target(target_arg), count(count_arg) {}
+};
 
-#if defined(TARGET_ARCH_IA32)
-#include "vm/flow_graph_compiler_ia32.h"
-#elif defined(TARGET_ARCH_X64)
-#include "vm/flow_graph_compiler_x64.h"
-#elif defined(TARGET_ARCH_ARM)
-#include "vm/flow_graph_compiler_arm.h"
-#else
-#error Unknown architecture.
-#endif
+
+class FlowGraphCompiler : public ValueObject {
+ private:
+  struct BlockInfo : public ZoneAllocated {
+   public:
+    BlockInfo() : label() { }
+    Label label;
+  };
+
+ public:
+  FlowGraphCompiler(Assembler* assembler,
+                    const FlowGraph& flow_graph,
+                    bool is_optimizing);
+
+  ~FlowGraphCompiler();
+
+  static bool SupportsUnboxedMints();
+
+  // Accessors.
+  Assembler* assembler() const { return assembler_; }
+  const ParsedFunction& parsed_function() const { return parsed_function_; }
+  const GrowableArray<BlockEntryInstr*>& block_order() const {
+    return block_order_;
+  }
+  DescriptorList* pc_descriptors_list() const {
+    return pc_descriptors_list_;
+  }
+  BlockEntryInstr* current_block() const { return current_block_; }
+  void set_current_block(BlockEntryInstr* value) {
+    current_block_ = value;
+  }
+  static bool CanOptimize();
+  bool CanOptimizeFunction() const;
+  bool is_optimizing() const { return is_optimizing_; }
+
+  const GrowableArray<BlockInfo*>& block_info() const { return block_info_; }
+  ParallelMoveResolver* parallel_move_resolver() {
+    return &parallel_move_resolver_;
+  }
+
+  // Constructor is lighweight, major initialization work should occur here.
+  // This makes it easier to measure time spent in the compiler.
+  void InitCompiler();
+
+  void CompileGraph();
+
+  void VisitBlocks();
+
+  // Bail out of the flow graph compiler. Does not return to the caller.
+  void Bailout(const char* reason);
+
+  void LoadDoubleOrSmiToFpu(FpuRegister result,
+                            Register reg,
+                            Register temp,
+                            Label* not_double_or_smi);
+
+  // Returns 'true' if code generation for this function is complete, i.e.,
+  // no fall-through to regular code is needed.
+  bool TryIntrinsify();
+
+  void GenerateCallRuntime(intptr_t token_pos,
+                           const RuntimeEntry& entry,
+                           LocationSummary* locs);
+
+  void GenerateCall(intptr_t token_pos,
+                    const ExternalLabel* label,
+                    PcDescriptors::Kind kind,
+                    LocationSummary* locs);
+
+  void GenerateDartCall(intptr_t deopt_id,
+                        intptr_t token_pos,
+                        const ExternalLabel* label,
+                        PcDescriptors::Kind kind,
+                        LocationSummary* locs);
+
+  void GenerateAssertAssignable(intptr_t token_pos,
+                                const AbstractType& dst_type,
+                                const String& dst_name,
+                                LocationSummary* locs);
+
+  void GenerateInstanceOf(intptr_t token_pos,
+                          const AbstractType& type,
+                          bool negate_result,
+                          LocationSummary* locs);
+
+  void GenerateInstanceCall(intptr_t deopt_id,
+                            intptr_t token_pos,
+                            intptr_t argument_count,
+                            const Array& argument_names,
+                            LocationSummary* locs,
+                            const ICData& ic_data);
+
+  void GenerateStaticCall(intptr_t deopt_id,
+                          intptr_t token_pos,
+                          const Function& function,
+                          intptr_t argument_count,
+                          const Array& argument_names,
+                          LocationSummary* locs);
+
+  void GenerateNumberTypeCheck(Register kClassIdReg,
+                               const AbstractType& type,
+                               Label* is_instance_lbl,
+                               Label* is_not_instance_lbl);
+  void GenerateStringTypeCheck(Register kClassIdReg,
+                               Label* is_instance_lbl,
+                               Label* is_not_instance_lbl);
+  void GenerateListTypeCheck(Register kClassIdReg,
+                             Label* is_instance_lbl);
+
+  void EmitComment(Instruction* instr);
+
+  void EmitOptimizedInstanceCall(ExternalLabel* target_label,
+                                 const ICData& ic_data,
+                                 const Array& arguments_descriptor,
+                                 intptr_t argument_count,
+                                 intptr_t deopt_id,
+                                 intptr_t token_pos,
+                                 LocationSummary* locs);
+
+  void EmitInstanceCall(ExternalLabel* target_label,
+                        const ICData& ic_data,
+                        const Array& arguments_descriptor,
+                        intptr_t argument_count,
+                        intptr_t deopt_id,
+                        intptr_t token_pos,
+                        LocationSummary* locs);
+
+  void EmitMegamorphicInstanceCall(const ICData& ic_data,
+                                   const Array& arguments_descriptor,
+                                   intptr_t argument_count,
+                                   intptr_t deopt_id,
+                                   intptr_t token_pos,
+                                   LocationSummary* locs);
+
+  void EmitTestAndCall(const ICData& ic_data,
+                       Register class_id_reg,
+                       intptr_t arg_count,
+                       const Array& arg_names,
+                       Label* deopt,
+                       intptr_t deopt_id,
+                       intptr_t token_index,
+                       LocationSummary* locs);
+
+  void EmitDoubleCompareBranch(Condition true_condition,
+                               FpuRegister left,
+                               FpuRegister right,
+                               BranchInstr* branch);
+  void EmitDoubleCompareBool(Condition true_condition,
+                             FpuRegister left,
+                             FpuRegister right,
+                             Register result);
+
+  void EmitEqualityRegConstCompare(Register reg,
+                                   const Object& obj,
+                                   bool needs_number_check);
+  void EmitEqualityRegRegCompare(Register left,
+                                 Register right,
+                                 bool needs_number_check);
+  // Implement equality: if any of the arguments is null do identity check.
+  // Fallthrough calls super equality.
+  void EmitSuperEqualityCallPrologue(Register result, Label* skip_call);
+
+  intptr_t StackSize() const;
+
+  // Returns assembler label associated with the given block entry.
+  Label* GetBlockLabel(BlockEntryInstr* block_entry) const;
+
+  // Returns true if there is a next block after the current one in
+  // the block order and if it is the given block.
+  bool IsNextBlock(BlockEntryInstr* block_entry) const;
+
+  void AddExceptionHandler(intptr_t try_index,
+                           intptr_t outer_try_index,
+                           intptr_t pc_offset,
+                           const Array& handler_types);
+  void AddCurrentDescriptor(PcDescriptors::Kind kind,
+                            intptr_t deopt_id,
+                            intptr_t token_pos);
+
+  void RecordSafepoint(LocationSummary* locs);
+
+  Label* AddDeoptStub(intptr_t deopt_id, DeoptReasonId reason);
+
+  void AddDeoptIndexAtCall(intptr_t deopt_id, intptr_t token_pos);
+
+  void AddSlowPathCode(SlowPathCode* slow_path);
+
+  void FinalizeExceptionHandlers(const Code& code);
+  void FinalizePcDescriptors(const Code& code);
+  void FinalizeDeoptInfo(const Code& code);
+  void FinalizeStackmaps(const Code& code);
+  void FinalizeVarDescriptors(const Code& code);
+  void FinalizeComments(const Code& code);
+  void FinalizeStaticCallTargetsTable(const Code& code);
+
+  const Class& double_class() const { return double_class_; }
+
+  void SaveLiveRegisters(LocationSummary* locs);
+  void RestoreLiveRegisters(LocationSummary* locs);
+
+  // Returns true if the compiled function has a finally clause.
+  bool HasFinally() const;
+
+  intptr_t CurrentTryIndex() const {
+    if (current_block_ == NULL) {
+      return CatchClauseNode::kInvalidTryIndex;
+    }
+    return current_block_->try_index();
+  }
+
+  bool may_reoptimize() const { return may_reoptimize_; }
+
+  static const int kLocalsOffsetFromFP = (-1 * kWordSize);
+
+  static Condition FlipCondition(Condition condition);
+
+  static bool EvaluateCondition(Condition condition, intptr_t l, intptr_t r);
+
+  // Array/list element address computations.
+  static intptr_t DataOffsetFor(intptr_t cid);
+  static intptr_t ElementSizeFor(intptr_t cid);
+  static FieldAddress ElementAddressForIntIndex(intptr_t cid,
+                                                Register array,
+                                                intptr_t offset);
+  static FieldAddress ElementAddressForRegIndex(intptr_t cid,
+                                                Register array,
+                                                Register index);
+  static Address ExternalElementAddressForIntIndex(intptr_t cid,
+                                                   Register array,
+                                                   intptr_t offset);
+  static Address ExternalElementAddressForRegIndex(intptr_t cid,
+                                                   Register array,
+                                                   Register index);
+
+ private:
+  void EmitFrameEntry();
+
+  void AddStaticCallTarget(const Function& function);
+
+  void GenerateDeferredCode();
+
+  void EmitInstructionPrologue(Instruction* instr);
+  void EmitInstructionEpilogue(Instruction* instr);
+
+  // Emit code to load a Value into register 'dst'.
+  void LoadValue(Register dst, Value* value);
+
+  void EmitStaticCall(const Function& function,
+                      const Array& arguments_descriptor,
+                      intptr_t argument_count,
+                      intptr_t deopt_id,
+                      intptr_t token_pos,
+                      LocationSummary* locs);
+
+  // Type checking helper methods.
+  void CheckClassIds(Register class_id_reg,
+                     const GrowableArray<intptr_t>& class_ids,
+                     Label* is_instance_lbl,
+                     Label* is_not_instance_lbl);
+
+  RawSubtypeTestCache* GenerateInlineInstanceof(intptr_t token_pos,
+                                                const AbstractType& type,
+                                                Label* is_instance_lbl,
+                                                Label* is_not_instance_lbl);
+
+  RawSubtypeTestCache* GenerateInstantiatedTypeWithArgumentsTest(
+      intptr_t token_pos,
+      const AbstractType& dst_type,
+      Label* is_instance_lbl,
+      Label* is_not_instance_lbl);
+
+  bool GenerateInstantiatedTypeNoArgumentsTest(intptr_t token_pos,
+                                               const AbstractType& dst_type,
+                                               Label* is_instance_lbl,
+                                               Label* is_not_instance_lbl);
+
+  RawSubtypeTestCache* GenerateUninstantiatedTypeTest(
+      intptr_t token_pos,
+      const AbstractType& dst_type,
+      Label* is_instance_lbl,
+      Label* is_not_instance_label);
+
+  RawSubtypeTestCache* GenerateSubtype1TestCacheLookup(
+      intptr_t token_pos,
+      const Class& type_class,
+      Label* is_instance_lbl,
+      Label* is_not_instance_lbl);
+
+  enum TypeTestStubKind {
+    kTestTypeOneArg,
+    kTestTypeTwoArgs,
+    kTestTypeThreeArgs,
+  };
+
+  RawSubtypeTestCache* GenerateCallSubtypeTestStub(TypeTestStubKind test_kind,
+                                                   Register instance_reg,
+                                                   Register type_arguments_reg,
+                                                   Register temp_reg,
+                                                   Label* is_instance_lbl,
+                                                   Label* is_not_instance_lbl);
+
+  // Returns true if checking against this type is a direct class id comparison.
+  bool TypeCheckAsClassEquality(const AbstractType& type);
+
+  void GenerateBoolToJump(Register bool_reg, Label* is_true, Label* is_false);
+
+  void CopyParameters();
+
+  void GenerateInlinedGetter(intptr_t offset);
+  void GenerateInlinedSetter(intptr_t offset);
+
+  // Perform a greedy local register allocation.  Consider all registers free.
+  void AllocateRegistersLocally(Instruction* instr);
+
+  // Map a block number in a forward iteration into the block number in the
+  // corresponding reverse iteration.  Used to obtain an index into
+  // block_order for reverse iterations.
+  intptr_t reverse_index(intptr_t index) const {
+    return block_order_.length() - index - 1;
+  }
+
+  // Returns 'sorted' array in decreasing count order.
+  // The expected number of elements to sort is less than 10.
+  static void SortICDataByCount(const ICData& ic_data,
+                                GrowableArray<CidTarget>* sorted);
+
+  class Assembler* assembler_;
+  const ParsedFunction& parsed_function_;
+  const GrowableArray<BlockEntryInstr*>& block_order_;
+
+  // Compiler specific per-block state.  Indexed by postorder block number
+  // for convenience.  This is not the block's index in the block order,
+  // which is reverse postorder.
+  BlockEntryInstr* current_block_;
+  ExceptionHandlerList* exception_handlers_list_;
+  DescriptorList* pc_descriptors_list_;
+  StackmapTableBuilder* stackmap_table_builder_;
+  GrowableArray<BlockInfo*> block_info_;
+  GrowableArray<CompilerDeoptInfo*> deopt_infos_;
+  GrowableArray<SlowPathCode*> slow_path_code_;
+  // Stores: [code offset, function, null(code)].
+  const GrowableObjectArray& static_calls_target_table_;
+  const bool is_optimizing_;
+  // Set to true if optimized code has IC calls.
+  bool may_reoptimize_;
+
+  const Class& double_class_;
+
+  ParallelMoveResolver parallel_move_resolver_;
+
+  // Currently instructions generate deopt stubs internally by
+  // calling AddDeoptStub.  To communicate deoptimization environment
+  // that should be used when deoptimizing we store it in this variable.
+  // In future AddDeoptStub should be moved out of the instruction template.
+  Environment* pending_deoptimization_env_;
+
+  DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
+};
+
+}  // namespace dart
 
 #endif  // VM_FLOW_GRAPH_COMPILER_H_
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index c1d3837..3bd8df5 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -11,35 +11,358 @@
 
 namespace dart {
 
+FlowGraphCompiler::~FlowGraphCompiler() {
+  // BlockInfos are zone-allocated, so their destructors are not called.
+  // Verify the labels explicitly here.
+  for (int i = 0; i < block_info_.length(); ++i) {
+    ASSERT(!block_info_[i]->label.IsLinked());
+  }
+}
+
+
+bool FlowGraphCompiler::SupportsUnboxedMints() {
+  return false;
+}
+
+
+void CompilerDeoptInfoWithStub::GenerateCode(FlowGraphCompiler* compiler,
+                                             intptr_t stub_ix) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateBoolToJump(Register bool_register,
+                                           Label* is_true,
+                                           Label* is_false) {
+  UNIMPLEMENTED();
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateCallSubtypeTestStub(
+    TypeTestStubKind test_kind,
+    Register instance_reg,
+    Register type_arguments_reg,
+    Register temp_reg,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+RawSubtypeTestCache*
+FlowGraphCompiler::GenerateInstantiatedTypeWithArgumentsTest(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void FlowGraphCompiler::CheckClassIds(Register class_id_reg,
+                                      const GrowableArray<intptr_t>& class_ids,
+                                      Label* is_equal_lbl,
+                                      Label* is_not_equal_lbl) {
+  UNIMPLEMENTED();
+}
+
+
+bool FlowGraphCompiler::GenerateInstantiatedTypeNoArgumentsTest(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateSubtype1TestCacheLookup(
+    intptr_t token_pos,
+    const Class& type_class,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateUninstantiatedTypeTest(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateInlineInstanceof(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void FlowGraphCompiler::GenerateInstanceOf(intptr_t token_pos,
+                                           const AbstractType& type,
+                                           bool negate_result,
+                                           LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateAssertAssignable(intptr_t token_pos,
+                                                 const AbstractType& dst_type,
+                                                 const String& dst_name,
+                                                 LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitInstructionEpilogue(Instruction* instr) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::CopyParameters() {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateInlinedGetter(intptr_t offset) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateInlinedSetter(intptr_t offset) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitFrameEntry() {
+  UNIMPLEMENTED();
+}
+
+
 void FlowGraphCompiler::CompileGraph() {
   UNIMPLEMENTED();
 }
 
 
-void FlowGraphCompiler::FinalizePcDescriptors(const Code& code) {
+void FlowGraphCompiler::GenerateCall(intptr_t token_pos,
+                                     const ExternalLabel* label,
+                                     PcDescriptors::Kind kind,
+                                     LocationSummary* locs) {
   UNIMPLEMENTED();
 }
 
 
-void FlowGraphCompiler::FinalizeStackmaps(const Code& code) {
+void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id,
+                                         intptr_t token_pos,
+                                         const ExternalLabel* label,
+                                         PcDescriptors::Kind kind,
+                                         LocationSummary* locs) {
   UNIMPLEMENTED();
 }
 
 
-void FlowGraphCompiler::FinalizeVarDescriptors(const Code& code) {
+void FlowGraphCompiler::GenerateCallRuntime(intptr_t token_pos,
+                                            const RuntimeEntry& entry,
+                                            LocationSummary* locs) {
   UNIMPLEMENTED();
 }
 
 
-void FlowGraphCompiler::FinalizeExceptionHandlers(const Code& code) {
+void FlowGraphCompiler::EmitOptimizedInstanceCall(
+    ExternalLabel* target_label,
+    const ICData& ic_data,
+    const Array& arguments_descriptor,
+    intptr_t argument_count,
+    intptr_t deopt_id,
+    intptr_t token_pos,
+    LocationSummary* locs) {
   UNIMPLEMENTED();
 }
 
 
-void FlowGraphCompiler::FinalizeComments(const Code& code) {
+void FlowGraphCompiler::EmitInstanceCall(ExternalLabel* target_label,
+                                         const ICData& ic_data,
+                                         const Array& arguments_descriptor,
+                                         intptr_t argument_count,
+                                         intptr_t deopt_id,
+                                         intptr_t token_pos,
+                                         LocationSummary* locs) {
   UNIMPLEMENTED();
 }
 
+
+void FlowGraphCompiler::EmitMegamorphicInstanceCall(
+    const ICData& ic_data,
+    const Array& arguments_descriptor,
+    intptr_t argument_count,
+    intptr_t deopt_id,
+    intptr_t token_pos,
+    LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitStaticCall(const Function& function,
+                                       const Array& arguments_descriptor,
+                                       intptr_t argument_count,
+                                       intptr_t deopt_id,
+                                       intptr_t token_pos,
+                                       LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitEqualityRegConstCompare(Register reg,
+                                                    const Object& obj,
+                                                    bool needs_number_check) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitEqualityRegRegCompare(Register left,
+                                                  Register right,
+                                                  bool needs_number_check) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
+                                                      Label* skip_call) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::SaveLiveRegisters(LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::RestoreLiveRegisters(LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitTestAndCall(const ICData& ic_data,
+                                        Register class_id_reg,
+                                        intptr_t arg_count,
+                                        const Array& arg_names,
+                                        Label* deopt,
+                                        intptr_t deopt_id,
+                                        intptr_t token_index,
+                                        LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitDoubleCompareBranch(Condition true_condition,
+                                                FpuRegister left,
+                                                FpuRegister right,
+                                                BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition,
+                                              FpuRegister left,
+                                              FpuRegister right,
+                                              Register result) {
+  UNIMPLEMENTED();
+}
+
+
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  UNIMPLEMENTED();
+  return condition;
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
+                                                          Register array,
+                                                          intptr_t index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForRegIndex(intptr_t cid,
+                                                          Register array,
+                                                          Register index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForIntIndex(intptr_t cid,
+                                                             Register array,
+                                                             intptr_t index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForRegIndex(intptr_t cid,
+                                                             Register array,
+                                                             Register index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+void ParallelMoveResolver::EmitMove(int index) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::EmitSwap(int index) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::MoveMemoryToMemory(const Address& dst,
+                                              const Address& src) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::Exchange(Register reg, const Address& mem) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::Exchange(const Address& mem1, const Address& mem2) {
+  UNIMPLEMENTED();
+}
+
+
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/flow_graph_compiler_arm.h b/runtime/vm/flow_graph_compiler_arm.h
deleted file mode 100644
index 8c4c209..0000000
--- a/runtime/vm/flow_graph_compiler_arm.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef VM_FLOW_GRAPH_COMPILER_ARM_H_
-#define VM_FLOW_GRAPH_COMPILER_ARM_H_
-
-#ifndef VM_FLOW_GRAPH_COMPILER_H_
-#error Include flow_graph_compiler.h instead of flow_graph_compiler_arm.h.
-#endif
-
-#include "vm/flow_graph.h"
-#include "vm/intermediate_language.h"
-
-namespace dart {
-
-class Assembler;
-class Code;
-template <typename T> class GrowableArray;
-class ParsedFunction;
-
-// Stubbed out implementation of graph compiler, bails out immediately if
-// CompileGraph is called. The rest of the public API is UNIMPLEMENTED.
-class FlowGraphCompiler : public FlowGraphVisitor {
- public:
-  FlowGraphCompiler(Assembler* assembler,
-                    const FlowGraph& flow_graph,
-                    bool is_optimizing)
-      : FlowGraphVisitor(flow_graph.reverse_postorder()),
-        parsed_function_(flow_graph.parsed_function()),
-        is_optimizing_(is_optimizing) {
-  }
-
-  virtual ~FlowGraphCompiler() { }
-
-  static bool CanOptimize();
-  bool CanOptimizeFunction() const;
-
-  void CompileGraph();
-
-  void FinalizePcDescriptors(const Code& code);
-  void FinalizeStackmaps(const Code& code);
-  void FinalizeVarDescriptors(const Code& code);
-  void FinalizeExceptionHandlers(const Code& code);
-  void FinalizeComments(const Code& code);
-
- private:
-  // Bail out of the flow graph compiler.  Does not return to the caller.
-  void Bailout(const char* reason);
-
-  const ParsedFunction& parsed_function_;
-  const bool is_optimizing_;
-
-  DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
-};
-
-}  // namespace dart
-
-#endif  // VM_FLOW_GRAPH_COMPILER_ARM_H_
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 7195095..97b8da1 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -26,6 +26,16 @@
 DECLARE_FLAG(bool, print_scopes);
 
 
+FlowGraphCompiler::~FlowGraphCompiler() {
+  // BlockInfos are zone-allocated, so their destructors are not called.
+  // Verify the labels explicitly here.
+  for (int i = 0; i < block_info_.length(); ++i) {
+    ASSERT(!block_info_[i]->label.IsLinked());
+    ASSERT(!block_info_[i]->label.HasNear());
+  }
+}
+
+
 bool FlowGraphCompiler::SupportsUnboxedMints() {
   // Support unboxed mints when SSE 4.1 is available.
   return FLAG_unbox_mints && CPUFeatures::sse4_1_supported();
@@ -57,7 +67,7 @@
 void FlowGraphCompiler::GenerateBoolToJump(Register bool_register,
                                            Label* is_true,
                                            Label* is_false) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label fall_through;
   __ cmpl(bool_register, raw_null);
@@ -79,7 +89,7 @@
     Label* is_not_instance_lbl) {
   const SubtypeTestCache& type_test_cache =
       SubtypeTestCache::ZoneHandle(SubtypeTestCache::New());
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ LoadObject(temp_reg, type_test_cache);
   __ pushl(temp_reg);  // Subtype test cache.
@@ -227,7 +237,7 @@
   }
   if (type.IsFunctionType()) {
     // Check if instance is a closure.
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ LoadClassById(EDI, kClassIdReg);
     __ movl(EDI, FieldAddress(EDI, Class::signature_function_offset()));
@@ -294,7 +304,7 @@
   __ Comment("UninstantiatedTypeTest");
   ASSERT(!type.IsInstantiated());
   // Skip check if destination is a dynamic type.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   if (type.IsTypeParameter()) {
     const TypeParameter& type_param = TypeParameter::Cast(type);
@@ -454,7 +464,7 @@
                                            LocationSummary* locs) {
   ASSERT(type.IsFinalized() && !type.IsMalformed());
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label is_instance, is_not_instance;
   __ pushl(ECX);  // Store instantiator on stack.
@@ -543,7 +553,7 @@
   __ pushl(ECX);  // Store instantiator.
   __ pushl(EDX);  // Store instantiator type arguments.
   // A null object is always assignable and is returned as result.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label is_assignable, runtime_call;
   __ cmpl(EAX, raw_null);
@@ -675,7 +685,7 @@
   __ j(POSITIVE, &loop, Assembler::kNearJump);
 
   // Copy or initialize optional named arguments.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label all_arguments_processed;
   if (num_opt_named_params > 0) {
@@ -857,7 +867,7 @@
   __ movl(EAX, Address(ESP, 2 * kWordSize));  // Receiver.
   __ movl(EBX, Address(ESP, 1 * kWordSize));  // Value.
   __ StoreIntoObject(EAX, FieldAddress(EAX, offset), EBX);
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movl(EAX, raw_null);
   __ ret();
@@ -1012,7 +1022,7 @@
   if (!is_optimizing() && (num_locals > 0)) {
     __ Comment("Initialize spill slots");
     const intptr_t slot_base = parsed_function().first_stack_local_index();
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ movl(EAX, raw_null);
     for (intptr_t i = 0; i < num_locals; ++i) {
@@ -1267,7 +1277,7 @@
 // Fallthrough calls super equality.
 void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
                                                       Label* skip_call) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label check_identity, fall_through;
   __ cmpl(Address(ESP, 0 * kWordSize), raw_null);
@@ -1291,7 +1301,7 @@
 }
 
 
-void FlowGraphCompiler::LoadDoubleOrSmiToXmm(XmmRegister result,
+void FlowGraphCompiler::LoadDoubleOrSmiToFpu(FpuRegister result,
                                              Register reg,
                                              Register temp,
                                              Label* not_double_or_smi) {
@@ -1312,7 +1322,7 @@
 
 void FlowGraphCompiler::SaveLiveRegisters(LocationSummary* locs) {
   // TODO(vegorov): consider saving only caller save (volatile) registers.
-  const intptr_t xmm_regs_count = locs->live_registers()->xmm_regs_count();
+  const intptr_t xmm_regs_count = locs->live_registers()->fpu_regs_count();
   if (xmm_regs_count > 0) {
     __ subl(ESP, Immediate(xmm_regs_count * kDoubleSize));
     // Store XMM registers with the lowest register number at the lowest
@@ -1320,7 +1330,7 @@
     intptr_t offset = 0;
     for (intptr_t reg_idx = 0; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
       XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
-      if (locs->live_registers()->ContainsXmmRegister(xmm_reg)) {
+      if (locs->live_registers()->ContainsFpuRegister(xmm_reg)) {
         __ movsd(Address(ESP, offset), xmm_reg);
         offset += kDoubleSize;
       }
@@ -1349,13 +1359,13 @@
     }
   }
 
-  const intptr_t xmm_regs_count = locs->live_registers()->xmm_regs_count();
+  const intptr_t xmm_regs_count = locs->live_registers()->fpu_regs_count();
   if (xmm_regs_count > 0) {
     // XMM registers have the lowest register number at the lowest address.
     intptr_t offset = 0;
     for (intptr_t reg_idx = 0; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
       XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
-      if (locs->live_registers()->ContainsXmmRegister(xmm_reg)) {
+      if (locs->live_registers()->ContainsFpuRegister(xmm_reg)) {
         __ movsd(xmm_reg, Address(ESP, offset));
         offset += kDoubleSize;
       }
@@ -1366,6 +1376,184 @@
 }
 
 
+void FlowGraphCompiler::EmitTestAndCall(const ICData& ic_data,
+                                        Register class_id_reg,
+                                        intptr_t arg_count,
+                                        const Array& arg_names,
+                                        Label* deopt,
+                                        intptr_t deopt_id,
+                                        intptr_t token_index,
+                                        LocationSummary* locs) {
+  ASSERT(!ic_data.IsNull() && (ic_data.NumberOfChecks() > 0));
+  Label match_found;
+  const intptr_t len = ic_data.NumberOfChecks();
+  GrowableArray<CidTarget> sorted(len);
+  SortICDataByCount(ic_data, &sorted);
+  for (intptr_t i = 0; i < len; i++) {
+    const bool is_last_check = (i == (len - 1));
+    Label next_test;
+    assembler()->cmpl(class_id_reg, Immediate(sorted[i].cid));
+    if (is_last_check) {
+      assembler()->j(NOT_EQUAL, deopt);
+    } else {
+      assembler()->j(NOT_EQUAL, &next_test);
+    }
+    GenerateStaticCall(deopt_id,
+                       token_index,
+                       *sorted[i].target,
+                       arg_count,
+                       arg_names,
+                       locs);
+    if (!is_last_check) {
+      assembler()->jmp(&match_found);
+    }
+    assembler()->Bind(&next_test);
+  }
+  assembler()->Bind(&match_found);
+}
+
+
+void FlowGraphCompiler::EmitDoubleCompareBranch(Condition true_condition,
+                                                FpuRegister left,
+                                                FpuRegister right,
+                                                BranchInstr* branch) {
+  ASSERT(branch != NULL);
+  assembler()->comisd(left, right);
+  BlockEntryInstr* nan_result = (true_condition == NOT_EQUAL) ?
+      branch->true_successor() : branch->false_successor();
+  assembler()->j(PARITY_EVEN, GetBlockLabel(nan_result));
+  branch->EmitBranchOnCondition(this, true_condition);
+}
+
+
+
+void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition,
+                                              FpuRegister left,
+                                              FpuRegister right,
+                                              Register result) {
+  assembler()->comisd(left, right);
+  Label is_false, is_true, done;
+  assembler()->j(PARITY_EVEN, &is_false, Assembler::kNearJump);  // NaN false;
+  assembler()->j(true_condition, &is_true, Assembler::kNearJump);
+  assembler()->Bind(&is_false);
+  assembler()->LoadObject(result, Bool::False());
+  assembler()->jmp(&done);
+  assembler()->Bind(&is_true);
+  assembler()->LoadObject(result, Bool::True());
+  assembler()->Bind(&done);
+}
+
+
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  switch (condition) {
+    case EQUAL:         return EQUAL;
+    case NOT_EQUAL:     return NOT_EQUAL;
+    case LESS:          return GREATER;
+    case LESS_EQUAL:    return GREATER_EQUAL;
+    case GREATER:       return LESS;
+    case GREATER_EQUAL: return LESS_EQUAL;
+    case BELOW:         return ABOVE;
+    case BELOW_EQUAL:   return ABOVE_EQUAL;
+    case ABOVE:         return BELOW;
+    case ABOVE_EQUAL:   return BELOW_EQUAL;
+    default:
+      UNIMPLEMENTED();
+      return EQUAL;
+  }
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  const uintptr_t unsigned_left = static_cast<uintptr_t>(left);
+  const uintptr_t unsigned_right = static_cast<uintptr_t>(right);
+  switch (condition) {
+    case EQUAL:         return left == right;
+    case NOT_EQUAL:     return left != right;
+    case LESS:          return left < right;
+    case LESS_EQUAL:    return left <= right;
+    case GREATER:       return left > right;
+    case GREATER_EQUAL: return left >= right;
+    case BELOW:         return unsigned_left < unsigned_right;
+    case BELOW_EQUAL:   return unsigned_left <= unsigned_right;
+    case ABOVE:         return unsigned_left > unsigned_right;
+    case ABOVE_EQUAL:   return unsigned_left >= unsigned_right;
+    default:
+      UNIMPLEMENTED();
+      return false;
+  }
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
+                                                          Register array,
+                                                          intptr_t index) {
+  const int64_t disp =
+      static_cast<int64_t>(index) * ElementSizeFor(cid) + DataOffsetFor(cid);
+  ASSERT(Utils::IsInt(32, disp));
+  return FieldAddress(array, static_cast<int32_t>(disp));
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForRegIndex(intptr_t cid,
+                                                          Register array,
+                                                          Register index) {
+  // Note that index is smi-tagged, (i.e, times 2) for all arrays with element
+  // size > 1. For Uint8Array and OneByteString the index is expected to be
+  // untagged before accessing.
+  ASSERT(kSmiTagShift == 1);
+  switch (cid) {
+    case kArrayCid:
+    case kImmutableArrayCid:
+      return FieldAddress(
+          array, index, TIMES_HALF_WORD_SIZE, Array::data_offset());
+    case kFloat32ArrayCid:
+      return FieldAddress(array, index, TIMES_2, Float32Array::data_offset());
+    case kFloat64ArrayCid:
+      return FieldAddress(array, index, TIMES_4, Float64Array::data_offset());
+    case kInt8ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Int8Array::data_offset());
+    case kUint8ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Uint8Array::data_offset());
+    case kUint8ClampedArrayCid:
+      return
+          FieldAddress(array, index, TIMES_1, Uint8ClampedArray::data_offset());
+    case kInt16ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Int16Array::data_offset());
+    case kUint16ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Uint16Array::data_offset());
+    case kOneByteStringCid:
+      return FieldAddress(array, index, TIMES_1, OneByteString::data_offset());
+    case kTwoByteStringCid:
+      return FieldAddress(array, index, TIMES_1, TwoByteString::data_offset());
+    default:
+      UNIMPLEMENTED();
+      return FieldAddress(SPREG, 0);
+  }
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForIntIndex(intptr_t cid,
+                                                             Register array,
+                                                             intptr_t index) {
+  return Address(array, index * ElementSizeFor(cid));
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForRegIndex(intptr_t cid,
+                                                             Register array,
+                                                             Register index) {
+  switch (cid) {
+    case kExternalUint8ArrayCid:
+      return Address(array, index, TIMES_1, 0);
+    default:
+      UNIMPLEMENTED();
+      return Address(SPREG, 0);
+  }
+}
+
+
 #undef __
 #define __ compiler_->assembler()->
 
@@ -1390,18 +1578,18 @@
       MoveMemoryToMemory(destination.ToStackSlotAddress(),
                          source.ToStackSlotAddress());
     }
-  } else if (source.IsXmmRegister()) {
-    if (destination.IsXmmRegister()) {
+  } else if (source.IsFpuRegister()) {
+    if (destination.IsFpuRegister()) {
       // Optimization manual recommends using MOVAPS for register
       // to register moves.
-      __ movaps(destination.xmm_reg(), source.xmm_reg());
+      __ movaps(destination.fpu_reg(), source.fpu_reg());
     } else {
       ASSERT(destination.IsDoubleStackSlot());
-      __ movsd(destination.ToStackSlotAddress(), source.xmm_reg());
+      __ movsd(destination.ToStackSlotAddress(), source.fpu_reg());
     }
   } else if (source.IsDoubleStackSlot()) {
-    if (destination.IsXmmRegister()) {
-      __ movsd(destination.xmm_reg(), source.ToStackSlotAddress());
+    if (destination.IsFpuRegister()) {
+      __ movsd(destination.fpu_reg(), source.ToStackSlotAddress());
     } else {
       ASSERT(destination.IsDoubleStackSlot());
       __ movsd(XMM0, source.ToStackSlotAddress());
@@ -1439,15 +1627,15 @@
     Exchange(destination.reg(), source.ToStackSlotAddress());
   } else if (source.IsStackSlot() && destination.IsStackSlot()) {
     Exchange(destination.ToStackSlotAddress(), source.ToStackSlotAddress());
-  } else if (source.IsXmmRegister() && destination.IsXmmRegister()) {
-    __ movaps(XMM0, source.xmm_reg());
-    __ movaps(source.xmm_reg(), destination.xmm_reg());
-    __ movaps(destination.xmm_reg(), XMM0);
-  } else if (source.IsXmmRegister() || destination.IsXmmRegister()) {
+  } else if (source.IsFpuRegister() && destination.IsFpuRegister()) {
+    __ movaps(XMM0, source.fpu_reg());
+    __ movaps(source.fpu_reg(), destination.fpu_reg());
+    __ movaps(destination.fpu_reg(), XMM0);
+  } else if (source.IsFpuRegister() || destination.IsFpuRegister()) {
     ASSERT(destination.IsDoubleStackSlot() || source.IsDoubleStackSlot());
-    XmmRegister reg = source.IsXmmRegister() ? source.xmm_reg()
-                                             : destination.xmm_reg();
-    Address slot_address = source.IsXmmRegister()
+    XmmRegister reg = source.IsFpuRegister() ? source.fpu_reg()
+                                             : destination.fpu_reg();
+    const Address& slot_address = source.IsFpuRegister()
         ? destination.ToStackSlotAddress()
         : source.ToStackSlotAddress();
 
diff --git a/runtime/vm/flow_graph_compiler_ia32.h b/runtime/vm/flow_graph_compiler_ia32.h
deleted file mode 100644
index 3f7cf0e..0000000
--- a/runtime/vm/flow_graph_compiler_ia32.h
+++ /dev/null
@@ -1,366 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef VM_FLOW_GRAPH_COMPILER_IA32_H_
-#define VM_FLOW_GRAPH_COMPILER_IA32_H_
-
-#ifndef VM_FLOW_GRAPH_COMPILER_H_
-#error Include flow_graph_compiler.h instead of flow_graph_compiler_ia32.h.
-#endif
-
-namespace dart {
-
-class Code;
-class FlowGraph;
-template <typename T> class GrowableArray;
-class ParsedFunction;
-
-class FlowGraphCompiler : public ValueObject {
- private:
-  struct BlockInfo : public ZoneAllocated {
-   public:
-    BlockInfo() : label() { }
-    Label label;
-  };
-
- public:
-  FlowGraphCompiler(Assembler* assembler,
-                    const FlowGraph& flow_graph,
-                    bool is_optimizing);
-
-  ~FlowGraphCompiler();
-
-  static bool SupportsUnboxedMints();
-
-  // Accessors.
-  Assembler* assembler() const { return assembler_; }
-  const ParsedFunction& parsed_function() const { return parsed_function_; }
-  const GrowableArray<BlockEntryInstr*>& block_order() const {
-    return block_order_;
-  }
-  DescriptorList* pc_descriptors_list() const {
-    return pc_descriptors_list_;
-  }
-  BlockEntryInstr* current_block() const { return current_block_; }
-  void set_current_block(BlockEntryInstr* value) {
-    current_block_ = value;
-  }
-  static bool CanOptimize();
-  bool CanOptimizeFunction() const;
-
-  bool is_optimizing() const { return is_optimizing_; }
-
-  const GrowableArray<BlockInfo*>& block_info() const { return block_info_; }
-  ParallelMoveResolver* parallel_move_resolver() {
-    return &parallel_move_resolver_;
-  }
-
-  // Constructor is lighweight, major initialization work should occur here.
-  // This makes it easier to measure time spent in the compiler.
-  void InitCompiler();
-
-  void CompileGraph();
-
-  void VisitBlocks();
-
-  // Bail out of the flow graph compiler. Does not return to the caller.
-  void Bailout(const char* reason);
-
-  void LoadDoubleOrSmiToXmm(XmmRegister result,
-                            Register reg,
-                            Register temp,
-                            Label* not_double_or_smi);
-
-  // Returns 'true' if code generation for this function is complete, i.e.,
-  // no fall-through to regular code is needed.
-  bool TryIntrinsify();
-
-  void GenerateCallRuntime(intptr_t token_pos,
-                           const RuntimeEntry& entry,
-                           LocationSummary* locs);
-
-  void GenerateCall(intptr_t token_pos,
-                    const ExternalLabel* label,
-                    PcDescriptors::Kind kind,
-                    LocationSummary* locs);
-
-  void GenerateDartCall(intptr_t deopt_id,
-                        intptr_t token_pos,
-                        const ExternalLabel* label,
-                        PcDescriptors::Kind kind,
-                        LocationSummary* locs);
-
-  void GenerateAssertAssignable(intptr_t token_pos,
-                                const AbstractType& dst_type,
-                                const String& dst_name,
-                                LocationSummary* locs);
-
-  void GenerateInstanceOf(intptr_t token_pos,
-                          const AbstractType& type,
-                          bool negate_result,
-                          LocationSummary* locs);
-
-  void GenerateInstanceCall(intptr_t deopt_id,
-                            intptr_t token_pos,
-                            intptr_t argument_count,
-                            const Array& argument_names,
-                            LocationSummary* locs,
-                            const ICData& ic_data);
-
-  void GenerateStaticCall(intptr_t deopt_id,
-                          intptr_t token_pos,
-                          const Function& function,
-                          intptr_t argument_count,
-                          const Array& argument_names,
-                          LocationSummary* locs);
-
-  void GenerateNumberTypeCheck(Register kClassIdReg,
-                               const AbstractType& type,
-                               Label* is_instance_lbl,
-                               Label* is_not_instance_lbl);
-  void GenerateStringTypeCheck(Register kClassIdReg,
-                               Label* is_instance_lbl,
-                               Label* is_not_instance_lbl);
-  void GenerateListTypeCheck(Register kClassIdReg,
-                             Label* is_instance_lbl);
-
-  void EmitComment(Instruction* instr);
-
-  void EmitOptimizedInstanceCall(ExternalLabel* target_label,
-                                 const ICData& ic_data,
-                                 const Array& arguments_descriptor,
-                                 intptr_t argument_count,
-                                 intptr_t deopt_id,
-                                 intptr_t token_pos,
-                                 LocationSummary* locs);
-
-  void EmitInstanceCall(ExternalLabel* target_label,
-                        const ICData& ic_data,
-                        const Array& arguments_descriptor,
-                        intptr_t argument_count,
-                        intptr_t deopt_id,
-                        intptr_t token_pos,
-                        LocationSummary* locs);
-
-  void EmitMegamorphicInstanceCall(const ICData& ic_data,
-                                   const Array& arguments_descriptor,
-                                   intptr_t argument_count,
-                                   intptr_t deopt_id,
-                                   intptr_t token_pos,
-                                   LocationSummary* locs);
-
-  void EmitTestAndCall(const ICData& ic_data,
-                       Register class_id_reg,
-                       intptr_t arg_count,
-                       const Array& arg_names,
-                       Label* deopt,
-                       intptr_t deopt_id,
-                       intptr_t token_index,
-                       LocationSummary* locs);
-
-  void EmitDoubleCompareBranch(Condition true_condition,
-                               XmmRegister left,
-                               XmmRegister right,
-                               BranchInstr* branch);
-  void EmitDoubleCompareBool(Condition true_condition,
-                             XmmRegister left,
-                             XmmRegister right,
-                             Register result);
-
-  void EmitEqualityRegConstCompare(Register reg,
-                                   const Object& obj,
-                                   bool needs_number_check);
-  void EmitEqualityRegRegCompare(Register left,
-                                 Register right,
-                                 bool needs_number_check);
-  // Implement equality: if any of the arguments is null do identity check.
-  // Fallthrough calls super equality.
-  void EmitSuperEqualityCallPrologue(Register result, Label* skip_call);
-
-  intptr_t StackSize() const;
-
-  // Returns assembler label associated with the given block entry.
-  Label* GetBlockLabel(BlockEntryInstr* block_entry) const;
-
-  // Returns true if there is a next block after the current one in
-  // the block order and if it is the given block.
-  bool IsNextBlock(BlockEntryInstr* block_entry) const;
-
-  void AddExceptionHandler(intptr_t try_index, intptr_t pc_offset);
-  void AddCurrentDescriptor(PcDescriptors::Kind kind,
-                            intptr_t deopt_id,
-                            intptr_t token_pos);
-
-  void RecordSafepoint(LocationSummary* locs);
-
-  Label* AddDeoptStub(intptr_t deopt_id, DeoptReasonId reason);
-
-  void AddDeoptIndexAtCall(intptr_t deopt_id, intptr_t token_pos);
-
-  void AddSlowPathCode(SlowPathCode* slow_path);
-
-  void FinalizeExceptionHandlers(const Code& code);
-  void FinalizePcDescriptors(const Code& code);
-  void FinalizeDeoptInfo(const Code& code);
-  void FinalizeStackmaps(const Code& code);
-  void FinalizeVarDescriptors(const Code& code);
-  void FinalizeComments(const Code& code);
-  void FinalizeStaticCallTargetsTable(const Code& code);
-
-  const Class& double_class() const { return double_class_; }
-
-  void SaveLiveRegisters(LocationSummary* locs);
-  void RestoreLiveRegisters(LocationSummary* locs);
-
-  // Returns true if the compiled function has a finally clause.
-  bool HasFinally() const;
-
-  intptr_t CurrentTryIndex() const {
-    if (current_block_ == NULL) {
-      return CatchClauseNode::kInvalidTryIndex;
-    }
-    return current_block_->try_index();
-  }
-
-  bool may_reoptimize() const { return may_reoptimize_; }
-
-  static const int kLocalsOffsetFromFP = (-1 * kWordSize);
-
-  static Condition FlipCondition(Condition condition);
-
-  static bool EvaluateCondition(Condition condition, intptr_t l, intptr_t r);
-
-  // Array/list element address computations.
-  static intptr_t DataOffsetFor(intptr_t cid);
-  static intptr_t ElementSizeFor(intptr_t cid);
-  static FieldAddress ElementAddressForIntIndex(intptr_t cid,
-                                                Register array,
-                                                intptr_t offset);
-  static FieldAddress ElementAddressForRegIndex(intptr_t cid,
-                                                Register array,
-                                                Register index);
-
- private:
-  void EmitFrameEntry();
-
-  void AddStaticCallTarget(const Function& function);
-
-  void GenerateDeferredCode();
-
-  void EmitInstructionPrologue(Instruction* instr);
-  void EmitInstructionEpilogue(Instruction* instr);
-
-  // Emit code to load a Value into register 'dst'.
-  void LoadValue(Register dst, Value* value);
-
-  void EmitStaticCall(const Function& function,
-                      const Array& arguments_descriptor,
-                      intptr_t argument_count,
-                      intptr_t deopt_id,
-                      intptr_t token_pos,
-                      LocationSummary* locs);
-
-  // Type checking helper methods.
-  void CheckClassIds(Register class_id_reg,
-                     const GrowableArray<intptr_t>& class_ids,
-                     Label* is_instance_lbl,
-                     Label* is_not_instance_lbl);
-
-  RawSubtypeTestCache* GenerateInlineInstanceof(intptr_t token_pos,
-                                                const AbstractType& type,
-                                                Label* is_instance_lbl,
-                                                Label* is_not_instance_lbl);
-
-  RawSubtypeTestCache* GenerateInstantiatedTypeWithArgumentsTest(
-      intptr_t token_pos,
-      const AbstractType& dst_type,
-      Label* is_instance_lbl,
-      Label* is_not_instance_lbl);
-
-  bool GenerateInstantiatedTypeNoArgumentsTest(intptr_t token_pos,
-                                               const AbstractType& dst_type,
-                                               Label* is_instance_lbl,
-                                               Label* is_not_instance_lbl);
-
-  RawSubtypeTestCache* GenerateUninstantiatedTypeTest(
-      intptr_t token_pos,
-      const AbstractType& dst_type,
-      Label* is_instance_lbl,
-      Label* is_not_instance_label);
-
-  RawSubtypeTestCache* GenerateSubtype1TestCacheLookup(
-      intptr_t token_pos,
-      const Class& type_class,
-      Label* is_instance_lbl,
-      Label* is_not_instance_lbl);
-
-  enum TypeTestStubKind {
-    kTestTypeOneArg,
-    kTestTypeTwoArgs,
-    kTestTypeThreeArgs,
-  };
-
-  RawSubtypeTestCache* GenerateCallSubtypeTestStub(TypeTestStubKind test_kind,
-                                                   Register instance_reg,
-                                                   Register type_arguments_reg,
-                                                   Register temp_reg,
-                                                   Label* is_instance_lbl,
-                                                   Label* is_not_instance_lbl);
-
-  // Returns true if checking against this type is a direct class id comparison.
-  bool TypeCheckAsClassEquality(const AbstractType& type);
-
-  void GenerateBoolToJump(Register bool_reg, Label* is_true, Label* is_false);
-
-  void CopyParameters();
-
-  void GenerateInlinedGetter(intptr_t offset);
-  void GenerateInlinedSetter(intptr_t offset);
-
-  // Perform a greedy local register allocation.  Consider all registers free.
-  void AllocateRegistersLocally(Instruction* instr);
-
-  // Map a block number in a forward iteration into the block number in the
-  // corresponding reverse iteration.  Used to obtain an index into
-  // block_order for reverse iterations.
-  intptr_t reverse_index(intptr_t index) const {
-    return block_order_.length() - index - 1;
-  }
-
-  class Assembler* assembler_;
-  const ParsedFunction& parsed_function_;
-  const GrowableArray<BlockEntryInstr*>& block_order_;
-
-  // Compiler specific per-block state.  Indexed by postorder block number
-  // for convenience.  This is not the block's index in the block order,
-  // which is reverse postorder.
-  BlockEntryInstr* current_block_;
-  ExceptionHandlerList* exception_handlers_list_;
-  DescriptorList* pc_descriptors_list_;
-  StackmapTableBuilder* stackmap_table_builder_;
-  GrowableArray<BlockInfo*> block_info_;
-  GrowableArray<CompilerDeoptInfo*> deopt_infos_;
-  GrowableArray<SlowPathCode*> slow_path_code_;
-  // Stores: [code offset, function, null(code)].
-  const GrowableObjectArray& static_calls_target_table_;
-  const bool is_optimizing_;
-  // Set to true if optimized code has IC calls.
-  bool may_reoptimize_;
-
-  const Class& double_class_;
-
-  ParallelMoveResolver parallel_move_resolver_;
-
-  // Currently instructions generate deopt stubs internally by
-  // calling AddDeoptStub.  To communicate deoptimization environment
-  // that should be used when deoptimizing we store it in this variable.
-  // In future AddDeoptStub should be moved out of the instruction template.
-  Environment* pending_deoptimization_env_;
-
-  DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
-};
-
-}  // namespace dart
-
-#endif  // VM_FLOW_GRAPH_COMPILER_IA32_H_
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
new file mode 100644
index 0000000..c6243bc
--- /dev/null
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -0,0 +1,368 @@
+// 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.
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_MIPS.
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/flow_graph_compiler.h"
+
+#include "vm/longjump.h"
+
+namespace dart {
+
+FlowGraphCompiler::~FlowGraphCompiler() {
+  // BlockInfos are zone-allocated, so their destructors are not called.
+  // Verify the labels explicitly here.
+  for (int i = 0; i < block_info_.length(); ++i) {
+    ASSERT(!block_info_[i]->label.IsLinked());
+  }
+}
+
+
+bool FlowGraphCompiler::SupportsUnboxedMints() {
+  return false;
+}
+
+
+void CompilerDeoptInfoWithStub::GenerateCode(FlowGraphCompiler* compiler,
+                                             intptr_t stub_ix) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateBoolToJump(Register bool_register,
+                                           Label* is_true,
+                                           Label* is_false) {
+  UNIMPLEMENTED();
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateCallSubtypeTestStub(
+    TypeTestStubKind test_kind,
+    Register instance_reg,
+    Register type_arguments_reg,
+    Register temp_reg,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+RawSubtypeTestCache*
+FlowGraphCompiler::GenerateInstantiatedTypeWithArgumentsTest(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void FlowGraphCompiler::CheckClassIds(Register class_id_reg,
+                                      const GrowableArray<intptr_t>& class_ids,
+                                      Label* is_equal_lbl,
+                                      Label* is_not_equal_lbl) {
+  UNIMPLEMENTED();
+}
+
+
+bool FlowGraphCompiler::GenerateInstantiatedTypeNoArgumentsTest(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateSubtype1TestCacheLookup(
+    intptr_t token_pos,
+    const Class& type_class,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateUninstantiatedTypeTest(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+RawSubtypeTestCache* FlowGraphCompiler::GenerateInlineInstanceof(
+    intptr_t token_pos,
+    const AbstractType& type,
+    Label* is_instance_lbl,
+    Label* is_not_instance_lbl) {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void FlowGraphCompiler::GenerateInstanceOf(intptr_t token_pos,
+                                           const AbstractType& type,
+                                           bool negate_result,
+                                           LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateAssertAssignable(intptr_t token_pos,
+                                                 const AbstractType& dst_type,
+                                                 const String& dst_name,
+                                                 LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitInstructionPrologue(Instruction* instr) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitInstructionEpilogue(Instruction* instr) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::CopyParameters() {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateInlinedGetter(intptr_t offset) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateInlinedSetter(intptr_t offset) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitFrameEntry() {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::CompileGraph() {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateCall(intptr_t token_pos,
+                                     const ExternalLabel* label,
+                                     PcDescriptors::Kind kind,
+                                     LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id,
+                                         intptr_t token_pos,
+                                         const ExternalLabel* label,
+                                         PcDescriptors::Kind kind,
+                                         LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::GenerateCallRuntime(intptr_t token_pos,
+                                            const RuntimeEntry& entry,
+                                            LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitOptimizedInstanceCall(
+    ExternalLabel* target_label,
+    const ICData& ic_data,
+    const Array& arguments_descriptor,
+    intptr_t argument_count,
+    intptr_t deopt_id,
+    intptr_t token_pos,
+    LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitInstanceCall(ExternalLabel* target_label,
+                                         const ICData& ic_data,
+                                         const Array& arguments_descriptor,
+                                         intptr_t argument_count,
+                                         intptr_t deopt_id,
+                                         intptr_t token_pos,
+                                         LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitMegamorphicInstanceCall(
+    const ICData& ic_data,
+    const Array& arguments_descriptor,
+    intptr_t argument_count,
+    intptr_t deopt_id,
+    intptr_t token_pos,
+    LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitStaticCall(const Function& function,
+                                       const Array& arguments_descriptor,
+                                       intptr_t argument_count,
+                                       intptr_t deopt_id,
+                                       intptr_t token_pos,
+                                       LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitEqualityRegConstCompare(Register reg,
+                                                    const Object& obj,
+                                                    bool needs_number_check) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitEqualityRegRegCompare(Register left,
+                                                  Register right,
+                                                  bool needs_number_check) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
+                                                      Label* skip_call) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::SaveLiveRegisters(LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::RestoreLiveRegisters(LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitTestAndCall(const ICData& ic_data,
+                                        Register class_id_reg,
+                                        intptr_t arg_count,
+                                        const Array& arg_names,
+                                        Label* deopt,
+                                        intptr_t deopt_id,
+                                        intptr_t token_index,
+                                        LocationSummary* locs) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitDoubleCompareBranch(Condition true_condition,
+                                                FpuRegister left,
+                                                FpuRegister right,
+                                                BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition,
+                                              FpuRegister left,
+                                              FpuRegister right,
+                                              Register result) {
+  UNIMPLEMENTED();
+}
+
+
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  UNIMPLEMENTED();
+  return condition;
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
+                                                          Register array,
+                                                          intptr_t index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForRegIndex(intptr_t cid,
+                                                          Register array,
+                                                          Register index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForIntIndex(intptr_t cid,
+                                                             Register array,
+                                                             intptr_t index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForRegIndex(intptr_t cid,
+                                                             Register array,
+                                                             Register index) {
+  UNIMPLEMENTED();
+  return FieldAddress(array, index);
+}
+
+
+void ParallelMoveResolver::EmitMove(int index) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::EmitSwap(int index) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::MoveMemoryToMemory(const Address& dst,
+                                              const Address& src) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::StoreObject(const Address& dst, const Object& obj) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::Exchange(Register reg, const Address& mem) {
+  UNIMPLEMENTED();
+}
+
+
+void ParallelMoveResolver::Exchange(const Address& mem1, const Address& mem2) {
+  UNIMPLEMENTED();
+}
+
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 19e3f4e..777f1ae 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -26,6 +26,16 @@
 DECLARE_FLAG(bool, use_sse41);
 
 
+FlowGraphCompiler::~FlowGraphCompiler() {
+  // BlockInfos are zone-allocated, so their destructors are not called.
+  // Verify the labels explicitly here.
+  for (int i = 0; i < block_info_.length(); ++i) {
+    ASSERT(!block_info_[i]->label.IsLinked());
+    ASSERT(!block_info_[i]->label.HasNear());
+  }
+}
+
+
 bool FlowGraphCompiler::SupportsUnboxedMints() {
   return false;
 }
@@ -57,7 +67,7 @@
 void FlowGraphCompiler::GenerateBoolToJump(Register bool_register,
                                            Label* is_true,
                                            Label* is_false) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label fall_through;
   __ cmpq(bool_register, raw_null);
@@ -79,7 +89,7 @@
     Label* is_not_instance_lbl) {
   const SubtypeTestCache& type_test_cache =
       SubtypeTestCache::ZoneHandle(SubtypeTestCache::New());
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ LoadObject(temp_reg, type_test_cache);
   __ pushq(temp_reg);  // Subtype test cache.
@@ -227,7 +237,7 @@
   }
   if (type.IsFunctionType()) {
     // Check if instance is a closure.
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ LoadClassById(R13, kClassIdReg);
     __ movq(R13, FieldAddress(R13, Class::signature_function_offset()));
@@ -294,7 +304,7 @@
   __ Comment("UninstantiatedTypeTest");
   ASSERT(!type.IsInstantiated());
   // Skip check if destination is a dynamic type.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   if (type.IsTypeParameter()) {
     const TypeParameter& type_param = TypeParameter::Cast(type);
@@ -454,7 +464,7 @@
                                            LocationSummary* locs) {
   ASSERT(type.IsFinalized() && !type.IsMalformed());
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label is_instance, is_not_instance;
   __ pushq(RCX);  // Store instantiator on stack.
@@ -543,7 +553,7 @@
   __ pushq(RCX);  // Store instantiator.
   __ pushq(RDX);  // Store instantiator type arguments.
   // A null object is always assignable and is returned as result.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label is_assignable, runtime_call;
   __ cmpq(RAX, raw_null);
@@ -677,7 +687,7 @@
   __ j(POSITIVE, &loop, Assembler::kNearJump);
 
   // Copy or initialize optional named arguments.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label all_arguments_processed;
   if (num_opt_named_params > 0) {
@@ -859,7 +869,7 @@
   __ movq(RAX, Address(RSP, 2 * kWordSize));  // Receiver.
   __ movq(RBX, Address(RSP, 1 * kWordSize));  // Value.
   __ StoreIntoObject(RAX, FieldAddress(RAX, offset), RBX);
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movq(RAX, raw_null);
   __ ret();
@@ -1015,7 +1025,7 @@
   if (!is_optimizing() && (num_locals > 0)) {
     __ Comment("Initialize spill slots");
     const intptr_t slot_base = parsed_function().first_stack_local_index();
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ movq(RAX, raw_null);
     for (intptr_t i = 0; i < num_locals; ++i) {
@@ -1271,7 +1281,7 @@
 // Fallthrough calls super equality.
 void FlowGraphCompiler::EmitSuperEqualityCallPrologue(Register result,
                                                       Label* skip_call) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label check_identity, fall_through;
   __ cmpq(Address(RSP, 0 * kWordSize), raw_null);
@@ -1295,7 +1305,7 @@
 }
 
 
-void FlowGraphCompiler::LoadDoubleOrSmiToXmm(XmmRegister result,
+void FlowGraphCompiler::LoadDoubleOrSmiToFpu(FpuRegister result,
                                              Register reg,
                                              Register temp,
                                              Label* not_double_or_smi) {
@@ -1316,7 +1326,7 @@
 
 void FlowGraphCompiler::SaveLiveRegisters(LocationSummary* locs) {
   // TODO(vegorov): consider saving only caller save (volatile) registers.
-  const intptr_t xmm_regs_count = locs->live_registers()->xmm_regs_count();
+  const intptr_t xmm_regs_count = locs->live_registers()->fpu_regs_count();
   if (xmm_regs_count > 0) {
     __ subq(RSP, Immediate(xmm_regs_count * kDoubleSize));
     // Store XMM registers with the lowest register number at the lowest
@@ -1324,7 +1334,7 @@
     intptr_t offset = 0;
     for (intptr_t reg_idx = 0; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
       XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
-      if (locs->live_registers()->ContainsXmmRegister(xmm_reg)) {
+      if (locs->live_registers()->ContainsFpuRegister(xmm_reg)) {
         __ movsd(Address(RSP, offset), xmm_reg);
         offset += kDoubleSize;
       }
@@ -1353,13 +1363,13 @@
     }
   }
 
-  const intptr_t xmm_regs_count = locs->live_registers()->xmm_regs_count();
+  const intptr_t xmm_regs_count = locs->live_registers()->fpu_regs_count();
   if (xmm_regs_count > 0) {
     // XMM registers have the lowest register number at the lowest address.
     intptr_t offset = 0;
     for (intptr_t reg_idx = 0; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
       XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
-      if (locs->live_registers()->ContainsXmmRegister(xmm_reg)) {
+      if (locs->live_registers()->ContainsFpuRegister(xmm_reg)) {
         __ movsd(xmm_reg, Address(RSP, offset));
         offset += kDoubleSize;
       }
@@ -1370,6 +1380,184 @@
 }
 
 
+void FlowGraphCompiler::EmitTestAndCall(const ICData& ic_data,
+                                        Register class_id_reg,
+                                        intptr_t arg_count,
+                                        const Array& arg_names,
+                                        Label* deopt,
+                                        intptr_t deopt_id,
+                                        intptr_t token_index,
+                                        LocationSummary* locs) {
+  ASSERT(!ic_data.IsNull() && (ic_data.NumberOfChecks() > 0));
+  Label match_found;
+  const intptr_t len = ic_data.NumberOfChecks();
+  GrowableArray<CidTarget> sorted(len);
+  SortICDataByCount(ic_data, &sorted);
+  for (intptr_t i = 0; i < len; i++) {
+    const bool is_last_check = (i == (len - 1));
+    Label next_test;
+    assembler()->cmpl(class_id_reg, Immediate(sorted[i].cid));
+    if (is_last_check) {
+      assembler()->j(NOT_EQUAL, deopt);
+    } else {
+      assembler()->j(NOT_EQUAL, &next_test);
+    }
+    GenerateStaticCall(deopt_id,
+                       token_index,
+                       *sorted[i].target,
+                       arg_count,
+                       arg_names,
+                       locs);
+    if (!is_last_check) {
+      assembler()->jmp(&match_found);
+    }
+    assembler()->Bind(&next_test);
+  }
+  assembler()->Bind(&match_found);
+}
+
+
+void FlowGraphCompiler::EmitDoubleCompareBranch(Condition true_condition,
+                                                FpuRegister left,
+                                                FpuRegister right,
+                                                BranchInstr* branch) {
+  ASSERT(branch != NULL);
+  assembler()->comisd(left, right);
+  BlockEntryInstr* nan_result = (true_condition == NOT_EQUAL) ?
+      branch->true_successor() : branch->false_successor();
+  assembler()->j(PARITY_EVEN, GetBlockLabel(nan_result));
+  branch->EmitBranchOnCondition(this, true_condition);
+}
+
+
+
+void FlowGraphCompiler::EmitDoubleCompareBool(Condition true_condition,
+                                              FpuRegister left,
+                                              FpuRegister right,
+                                              Register result) {
+  assembler()->comisd(left, right);
+  Label is_false, is_true, done;
+  assembler()->j(PARITY_EVEN, &is_false, Assembler::kNearJump);  // NaN false;
+  assembler()->j(true_condition, &is_true, Assembler::kNearJump);
+  assembler()->Bind(&is_false);
+  assembler()->LoadObject(result, Bool::False());
+  assembler()->jmp(&done);
+  assembler()->Bind(&is_true);
+  assembler()->LoadObject(result, Bool::True());
+  assembler()->Bind(&done);
+}
+
+
+Condition FlowGraphCompiler::FlipCondition(Condition condition) {
+  switch (condition) {
+    case EQUAL:         return EQUAL;
+    case NOT_EQUAL:     return NOT_EQUAL;
+    case LESS:          return GREATER;
+    case LESS_EQUAL:    return GREATER_EQUAL;
+    case GREATER:       return LESS;
+    case GREATER_EQUAL: return LESS_EQUAL;
+    case BELOW:         return ABOVE;
+    case BELOW_EQUAL:   return ABOVE_EQUAL;
+    case ABOVE:         return BELOW;
+    case ABOVE_EQUAL:   return BELOW_EQUAL;
+    default:
+      UNIMPLEMENTED();
+      return EQUAL;
+  }
+}
+
+
+bool FlowGraphCompiler::EvaluateCondition(Condition condition,
+                                          intptr_t left,
+                                          intptr_t right) {
+  const uintptr_t unsigned_left = static_cast<uintptr_t>(left);
+  const uintptr_t unsigned_right = static_cast<uintptr_t>(right);
+  switch (condition) {
+    case EQUAL:         return left == right;
+    case NOT_EQUAL:     return left != right;
+    case LESS:          return left < right;
+    case LESS_EQUAL:    return left <= right;
+    case GREATER:       return left > right;
+    case GREATER_EQUAL: return left >= right;
+    case BELOW:         return unsigned_left < unsigned_right;
+    case BELOW_EQUAL:   return unsigned_left <= unsigned_right;
+    case ABOVE:         return unsigned_left > unsigned_right;
+    case ABOVE_EQUAL:   return unsigned_left >= unsigned_right;
+    default:
+      UNIMPLEMENTED();
+      return false;
+  }
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForIntIndex(intptr_t cid,
+                                                          Register array,
+                                                          intptr_t index) {
+  const int64_t disp =
+      static_cast<int64_t>(index) * ElementSizeFor(cid) + DataOffsetFor(cid);
+  ASSERT(Utils::IsInt(32, disp));
+  return FieldAddress(array, static_cast<int32_t>(disp));
+}
+
+
+FieldAddress FlowGraphCompiler::ElementAddressForRegIndex(intptr_t cid,
+                                                          Register array,
+                                                          Register index) {
+  // Note that index is smi-tagged, (i.e, times 2) for all arrays with element
+  // size > 1. For Uint8Array and OneByteString the index is expected to be
+  // untagged before accessing.
+  ASSERT(kSmiTagShift == 1);
+  switch (cid) {
+    case kArrayCid:
+    case kImmutableArrayCid:
+      return FieldAddress(
+          array, index, TIMES_HALF_WORD_SIZE, Array::data_offset());
+    case kFloat32ArrayCid:
+      return FieldAddress(array, index, TIMES_2, Float32Array::data_offset());
+    case kFloat64ArrayCid:
+      return FieldAddress(array, index, TIMES_4, Float64Array::data_offset());
+    case kInt8ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Int8Array::data_offset());
+    case kUint8ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Uint8Array::data_offset());
+    case kUint8ClampedArrayCid:
+      return
+          FieldAddress(array, index, TIMES_1, Uint8ClampedArray::data_offset());
+    case kInt16ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Int16Array::data_offset());
+    case kUint16ArrayCid:
+      return FieldAddress(array, index, TIMES_1, Uint16Array::data_offset());
+    case kOneByteStringCid:
+      return FieldAddress(array, index, TIMES_1, OneByteString::data_offset());
+    case kTwoByteStringCid:
+      return FieldAddress(array, index, TIMES_1, TwoByteString::data_offset());
+    default:
+      UNIMPLEMENTED();
+      return FieldAddress(SPREG, 0);
+  }
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForIntIndex(intptr_t cid,
+                                                             Register array,
+                                                             intptr_t index) {
+  return Address(array, index * ElementSizeFor(cid));
+}
+
+
+Address FlowGraphCompiler::ExternalElementAddressForRegIndex(intptr_t cid,
+                                                             Register array,
+                                                             Register index) {
+  switch (cid) {
+    case kExternalUint8ArrayCid:
+      return Address(array, index, TIMES_1, 0);
+    default:
+      UNIMPLEMENTED();
+      return Address(SPREG, 0);
+  }
+}
+
+
 #undef __
 #define __ compiler_->assembler()->
 
@@ -1394,18 +1582,18 @@
       MoveMemoryToMemory(destination.ToStackSlotAddress(),
                          source.ToStackSlotAddress());
     }
-  } else if (source.IsXmmRegister()) {
-    if (destination.IsXmmRegister()) {
+  } else if (source.IsFpuRegister()) {
+    if (destination.IsFpuRegister()) {
       // Optimization manual recommends using MOVAPS for register
       // to register moves.
-      __ movaps(destination.xmm_reg(), source.xmm_reg());
+      __ movaps(destination.fpu_reg(), source.fpu_reg());
     } else {
       ASSERT(destination.IsDoubleStackSlot());
-      __ movsd(destination.ToStackSlotAddress(), source.xmm_reg());
+      __ movsd(destination.ToStackSlotAddress(), source.fpu_reg());
     }
   } else if (source.IsDoubleStackSlot()) {
-    if (destination.IsXmmRegister()) {
-      __ movsd(destination.xmm_reg(), source.ToStackSlotAddress());
+    if (destination.IsFpuRegister()) {
+      __ movsd(destination.fpu_reg(), source.ToStackSlotAddress());
     } else {
       ASSERT(destination.IsDoubleStackSlot());
       __ movsd(XMM0, source.ToStackSlotAddress());
@@ -1443,15 +1631,15 @@
     Exchange(destination.reg(), source.ToStackSlotAddress());
   } else if (source.IsStackSlot() && destination.IsStackSlot()) {
     Exchange(destination.ToStackSlotAddress(), source.ToStackSlotAddress());
-  } else if (source.IsXmmRegister() && destination.IsXmmRegister()) {
-    __ movaps(XMM0, source.xmm_reg());
-    __ movaps(source.xmm_reg(), destination.xmm_reg());
-    __ movaps(destination.xmm_reg(), XMM0);
-  } else if (source.IsXmmRegister() || destination.IsXmmRegister()) {
+  } else if (source.IsFpuRegister() && destination.IsFpuRegister()) {
+    __ movaps(XMM0, source.fpu_reg());
+    __ movaps(source.fpu_reg(), destination.fpu_reg());
+    __ movaps(destination.fpu_reg(), XMM0);
+  } else if (source.IsFpuRegister() || destination.IsFpuRegister()) {
     ASSERT(destination.IsDoubleStackSlot() || source.IsDoubleStackSlot());
-    XmmRegister reg = source.IsXmmRegister() ? source.xmm_reg()
-                                             : destination.xmm_reg();
-    Address slot_address = source.IsXmmRegister()
+    XmmRegister reg = source.IsFpuRegister() ? source.fpu_reg()
+                                             : destination.fpu_reg();
+    Address slot_address = source.IsFpuRegister()
         ? destination.ToStackSlotAddress()
         : source.ToStackSlotAddress();
 
diff --git a/runtime/vm/flow_graph_compiler_x64.h b/runtime/vm/flow_graph_compiler_x64.h
deleted file mode 100644
index 4c9f690..0000000
--- a/runtime/vm/flow_graph_compiler_x64.h
+++ /dev/null
@@ -1,366 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef VM_FLOW_GRAPH_COMPILER_X64_H_
-#define VM_FLOW_GRAPH_COMPILER_X64_H_
-
-#ifndef VM_FLOW_GRAPH_COMPILER_H_
-#error Include flow_graph_compiler.h instead of flow_graph_compiler_x64.h.
-#endif
-
-namespace dart {
-
-class Code;
-class FlowGraph;
-template <typename T> class GrowableArray;
-class ParsedFunction;
-
-class FlowGraphCompiler : public ValueObject {
- private:
-  struct BlockInfo : public ZoneAllocated {
-   public:
-    BlockInfo() : label() { }
-    Label label;
-  };
-
- public:
-  FlowGraphCompiler(Assembler* assembler,
-                    const FlowGraph& flow_graph,
-                    bool is_optimizing);
-
-  ~FlowGraphCompiler();
-
-  static bool SupportsUnboxedMints();
-
-  // Accessors.
-  Assembler* assembler() const { return assembler_; }
-  const ParsedFunction& parsed_function() const { return parsed_function_; }
-  const GrowableArray<BlockEntryInstr*>& block_order() const {
-    return block_order_;
-  }
-  DescriptorList* pc_descriptors_list() const {
-    return pc_descriptors_list_;
-  }
-  BlockEntryInstr* current_block() const { return current_block_; }
-  void set_current_block(BlockEntryInstr* value) {
-    current_block_ = value;
-  }
-  static bool CanOptimize();
-  bool CanOptimizeFunction() const;
-  bool is_optimizing() const { return is_optimizing_; }
-
-  const GrowableArray<BlockInfo*>& block_info() const { return block_info_; }
-  ParallelMoveResolver* parallel_move_resolver() {
-    return &parallel_move_resolver_;
-  }
-
-  // Constructor is lighweight, major initialization work should occur here.
-  // This makes it easier to measure time spent in the compiler.
-  void InitCompiler();
-
-  void CompileGraph();
-
-  void VisitBlocks();
-
-  // Bail out of the flow graph compiler. Does not return to the caller.
-  void Bailout(const char* reason);
-
-  void LoadDoubleOrSmiToXmm(XmmRegister result,
-                            Register reg,
-                            Register temp,
-                            Label* not_double_or_smi);
-
-  // Returns 'true' if code generation for this function is complete, i.e.,
-  // no fall-through to regular code is needed.
-  bool TryIntrinsify();
-
-  void GenerateCallRuntime(intptr_t token_pos,
-                           const RuntimeEntry& entry,
-                           LocationSummary* locs);
-
-  void GenerateCall(intptr_t token_pos,
-                    const ExternalLabel* label,
-                    PcDescriptors::Kind kind,
-                    LocationSummary* locs);
-
-  void GenerateDartCall(intptr_t deopt_id,
-                        intptr_t token_pos,
-                        const ExternalLabel* label,
-                        PcDescriptors::Kind kind,
-                        LocationSummary* locs);
-
-  void GenerateAssertAssignable(intptr_t token_pos,
-                                const AbstractType& dst_type,
-                                const String& dst_name,
-                                LocationSummary* locs);
-
-  void GenerateInstanceOf(intptr_t token_pos,
-                          const AbstractType& type,
-                          bool negate_result,
-                          LocationSummary* locs);
-
-  void GenerateInstanceCall(intptr_t deopt_id,
-                            intptr_t token_pos,
-                            intptr_t argument_count,
-                            const Array& argument_names,
-                            LocationSummary* locs,
-                            const ICData& ic_data);
-
-  void GenerateStaticCall(intptr_t deopt_id,
-                          intptr_t token_pos,
-                          const Function& function,
-                          intptr_t argument_count,
-                          const Array& argument_names,
-                          LocationSummary* locs);
-
-  void GenerateNumberTypeCheck(Register kClassIdReg,
-                               const AbstractType& type,
-                               Label* is_instance_lbl,
-                               Label* is_not_instance_lbl);
-  void GenerateStringTypeCheck(Register kClassIdReg,
-                               Label* is_instance_lbl,
-                               Label* is_not_instance_lbl);
-  void GenerateListTypeCheck(Register kClassIdReg,
-                             Label* is_instance_lbl);
-
-  void EmitComment(Instruction* instr);
-
-  void EmitOptimizedInstanceCall(ExternalLabel* target_label,
-                                 const ICData& ic_data,
-                                 const Array& arguments_descriptor,
-                                 intptr_t argument_count,
-                                 intptr_t deopt_id,
-                                 intptr_t token_pos,
-                                 LocationSummary* locs);
-
-  void EmitInstanceCall(ExternalLabel* target_label,
-                        const ICData& ic_data,
-                        const Array& arguments_descriptor,
-                        intptr_t argument_count,
-                        intptr_t deopt_id,
-                        intptr_t token_pos,
-                        LocationSummary* locs);
-
-  void EmitMegamorphicInstanceCall(const ICData& ic_data,
-                                   const Array& arguments_descriptor,
-                                   intptr_t argument_count,
-                                   intptr_t deopt_id,
-                                   intptr_t token_pos,
-                                   LocationSummary* locs);
-
-  void EmitTestAndCall(const ICData& ic_data,
-                       Register class_id_reg,
-                       intptr_t arg_count,
-                       const Array& arg_names,
-                       Label* deopt,
-                       intptr_t deopt_id,
-                       intptr_t token_index,
-                       LocationSummary* locs);
-
-  void EmitDoubleCompareBranch(Condition true_condition,
-                               XmmRegister left,
-                               XmmRegister right,
-                               BranchInstr* branch);
-  void EmitDoubleCompareBool(Condition true_condition,
-                             XmmRegister left,
-                             XmmRegister right,
-                             Register result);
-
-  void EmitEqualityRegConstCompare(Register reg,
-                                   const Object& obj,
-                                   bool needs_number_check);
-  void EmitEqualityRegRegCompare(Register left,
-                                 Register right,
-                                 bool needs_number_check);
-  void EmitEqualityRegConstCompare(Register reg, const Object& obj);
-  // Implement equality: if any of the arguments is null do identity check.
-  // Fallthrough calls super equality.
-  void EmitSuperEqualityCallPrologue(Register result, Label* skip_call);
-
-  intptr_t StackSize() const;
-
-  // Returns assembler label associated with the given block entry.
-  Label* GetBlockLabel(BlockEntryInstr* block_entry) const;
-
-  // Returns true if there is a next block after the current one in
-  // the block order and if it is the given block.
-  bool IsNextBlock(BlockEntryInstr* block_entry) const;
-
-  void AddExceptionHandler(intptr_t try_index, intptr_t pc_offset);
-  void AddCurrentDescriptor(PcDescriptors::Kind kind,
-                            intptr_t deopt_id,
-                            intptr_t token_pos);
-
-  void RecordSafepoint(LocationSummary* locs);
-
-  Label* AddDeoptStub(intptr_t deopt_id, DeoptReasonId reason);
-
-  void AddDeoptIndexAtCall(intptr_t deopt_id, intptr_t token_pos);
-
-  void AddSlowPathCode(SlowPathCode* slow_path);
-
-  void FinalizeExceptionHandlers(const Code& code);
-  void FinalizePcDescriptors(const Code& code);
-  void FinalizeDeoptInfo(const Code& code);
-  void FinalizeStackmaps(const Code& code);
-  void FinalizeVarDescriptors(const Code& code);
-  void FinalizeComments(const Code& code);
-  void FinalizeStaticCallTargetsTable(const Code& code);
-
-  const Class& double_class() const { return double_class_; }
-
-  // Returns true if the compiled function has a finally clause.
-  bool HasFinally() const;
-
-  static const int kLocalsOffsetFromFP = (-1 * kWordSize);
-
-  void SaveLiveRegisters(LocationSummary* locs);
-  void RestoreLiveRegisters(LocationSummary* locs);
-
-  intptr_t CurrentTryIndex() const {
-    if (current_block_ == NULL) {
-      return CatchClauseNode::kInvalidTryIndex;
-    }
-    return current_block_->try_index();
-  }
-
-  bool may_reoptimize() const { return may_reoptimize_; }
-
-  static Condition FlipCondition(Condition condition);
-
-  static bool EvaluateCondition(Condition condition, intptr_t l, intptr_t r);
-
-  // Array/list element address computations.
-  static intptr_t DataOffsetFor(intptr_t cid);
-  static intptr_t ElementSizeFor(intptr_t cid);
-  static FieldAddress ElementAddressForIntIndex(intptr_t cid,
-                                                Register array,
-                                                intptr_t offset);
-  static FieldAddress ElementAddressForRegIndex(intptr_t cid,
-                                                Register array,
-                                                Register index);
-
- private:
-  void EmitFrameEntry();
-
-  void AddStaticCallTarget(const Function& function);
-
-  void GenerateDeferredCode();
-
-  void EmitInstructionPrologue(Instruction* instr);
-  void EmitInstructionEpilogue(Instruction* instr);
-
-  // Emit code to load a Value into register 'dst'.
-  void LoadValue(Register dst, Value* value);
-
-  void EmitStaticCall(const Function& function,
-                      const Array& arguments_descriptor,
-                      intptr_t argument_count,
-                      intptr_t deopt_id,
-                      intptr_t token_pos,
-                      LocationSummary* locs);
-
-  // Type checking helper methods.
-  void CheckClassIds(Register class_id_reg,
-                     const GrowableArray<intptr_t>& class_ids,
-                     Label* is_instance_lbl,
-                     Label* is_not_instance_lbl);
-
-  RawSubtypeTestCache* GenerateInlineInstanceof(intptr_t token_pos,
-                                                const AbstractType& type,
-                                                Label* is_instance_lbl,
-                                                Label* is_not_instance_lbl);
-
-  RawSubtypeTestCache* GenerateInstantiatedTypeWithArgumentsTest(
-      intptr_t token_pos,
-      const AbstractType& dst_type,
-      Label* is_instance_lbl,
-      Label* is_not_instance_lbl);
-
-  bool GenerateInstantiatedTypeNoArgumentsTest(intptr_t token_pos,
-                                               const AbstractType& dst_type,
-                                               Label* is_instance_lbl,
-                                               Label* is_not_instance_lbl);
-
-  RawSubtypeTestCache* GenerateUninstantiatedTypeTest(
-      intptr_t token_pos,
-      const AbstractType& dst_type,
-      Label* is_instance_lbl,
-      Label* is_not_instance_label);
-
-  RawSubtypeTestCache* GenerateSubtype1TestCacheLookup(
-      intptr_t token_pos,
-      const Class& type_class,
-      Label* is_instance_lbl,
-      Label* is_not_instance_lbl);
-
-  enum TypeTestStubKind {
-    kTestTypeOneArg,
-    kTestTypeTwoArgs,
-    kTestTypeThreeArgs,
-  };
-
-  RawSubtypeTestCache* GenerateCallSubtypeTestStub(TypeTestStubKind test_kind,
-                                                   Register instance_reg,
-                                                   Register type_arguments_reg,
-                                                   Register temp_reg,
-                                                   Label* is_instance_lbl,
-                                                   Label* is_not_instance_lbl);
-
-  // Returns true if checking against this type is a direct class id comparison.
-  bool TypeCheckAsClassEquality(const AbstractType& type);
-
-  void GenerateBoolToJump(Register bool_reg, Label* is_true, Label* is_false);
-
-  void CopyParameters();
-
-  void GenerateInlinedGetter(intptr_t offset);
-  void GenerateInlinedSetter(intptr_t offset);
-
-  // Map a block number in a forward iteration into the block number in the
-  // corresponding reverse iteration.  Used to obtain an index into
-  // block_order for reverse iterations.
-  intptr_t reverse_index(intptr_t index) const {
-    return block_order_.length() - index - 1;
-  }
-
-  // Perform a greedy local register allocation.  Consider all registers free.
-  void AllocateRegistersLocally(Instruction* instr);
-
-  class Assembler* assembler_;
-  const ParsedFunction& parsed_function_;
-  const GrowableArray<BlockEntryInstr*>& block_order_;
-
-  // Compiler specific per-block state.  Indexed by postorder block number
-  // for convenience.  This is not the block's index in the block order,
-  // which is reverse postorder.
-  BlockEntryInstr* current_block_;
-  ExceptionHandlerList* exception_handlers_list_;
-  DescriptorList* pc_descriptors_list_;
-  StackmapTableBuilder* stackmap_table_builder_;
-  GrowableArray<BlockInfo*> block_info_;
-  GrowableArray<CompilerDeoptInfo*> deopt_infos_;
-  GrowableArray<SlowPathCode*> slow_path_code_;
-  // Stores: [code offset, function, null(code)].
-  const GrowableObjectArray& static_calls_target_table_;
-  const bool is_optimizing_;
-  // Set to true if optimized code has IC calls.
-  bool may_reoptimize_;
-
-  const Class& double_class_;
-
-  ParallelMoveResolver parallel_move_resolver_;
-
-  // Currently instructions generate deopt stubs internally by
-  // calling AddDeoptStub.  To communicate deoptimization environment
-  // that should be used when deoptimizing we store it in this variable.
-  // In future AddDeoptStub should be moved out of the instruction template.
-  Environment* pending_deoptimization_env_;
-
-  DISALLOW_COPY_AND_ASSIGN(FlowGraphCompiler);
-};
-
-}  // namespace dart
-
-#endif  // VM_FLOW_GRAPH_COMPILER_X64_H_
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index c8b8b72..3a71164 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -134,7 +134,7 @@
 
 
 // Pair of an argument name and its value.
-struct NamedArgument : ValueObject {
+struct NamedArgument {
  public:
   String* name;
   Value* value;
@@ -792,7 +792,7 @@
     GrowableArray<NamedArgument> named_args(argument_names_count);
     for (intptr_t i = 0; i < argument_names.Length(); ++i) {
       String& arg_name = String::Handle(Isolate::Current());
-      arg_name ^= argument_names.At(i);
+      arg_name |= argument_names.At(i);
       named_args.Add(
           NamedArgument(&arg_name, (*arguments)[i + fixed_param_count]));
     }
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 7096933..ad4f034 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -56,6 +56,9 @@
             VisitInstanceCall(call);
           }
         }
+      } else if (it.Current()->IsPolymorphicInstanceCall()) {
+        SpecializePolymorphicInstanceCall(
+            it.Current()->AsPolymorphicInstanceCall());
       } else if (it.Current()->IsStrictCompare()) {
         VisitStrictCompare(it.Current()->AsStrictCompare());
       } else if (it.Current()->IsBranch()) {
@@ -117,6 +120,52 @@
 }
 
 
+static const ICData& SpecializeICData(const ICData& ic_data, intptr_t cid) {
+  ASSERT(ic_data.num_args_tested() == 1);
+
+  if ((ic_data.NumberOfChecks() == 1) &&
+      (ic_data.GetReceiverClassIdAt(0) == cid)) {
+    return ic_data;  // Nothing to do
+  }
+
+  const ICData& new_ic_data = ICData::ZoneHandle(ICData::New(
+      Function::Handle(ic_data.function()),
+      String::Handle(ic_data.target_name()),
+      ic_data.deopt_id(),
+      ic_data.num_args_tested()));
+
+  const Function& function =
+      Function::Handle(ic_data.GetTargetForReceiverClassId(cid));
+  if (!function.IsNull()) {
+    new_ic_data.AddReceiverCheck(cid, function);
+  }
+
+  return new_ic_data;
+}
+
+
+void FlowGraphOptimizer::SpecializePolymorphicInstanceCall(
+    PolymorphicInstanceCallInstr* call) {
+  if (!call->with_checks()) {
+    return;  // Already specialized.
+  }
+
+  const intptr_t receiver_cid  = call->ArgumentAt(0)->value()->ResultCid();
+  if (receiver_cid == kDynamicCid) {
+    return;  // No information about receiver was infered.
+  }
+
+  const ICData& ic_data = SpecializeICData(call->ic_data(), receiver_cid);
+
+  const bool with_checks = false;
+  PolymorphicInstanceCallInstr* specialized =
+      new PolymorphicInstanceCallInstr(call->instance_call(),
+                                       ic_data,
+                                       with_checks);
+  call->ReplaceWith(specialized, current_iterator());
+}
+
+
 static void EnsureSSATempIndex(FlowGraph* graph,
                                Definition* defn,
                                Definition* replacement) {
@@ -298,19 +347,6 @@
 }
 
 
-static bool ICDataHasReceiverClassId(const ICData& ic_data, intptr_t class_id) {
-  ASSERT(ic_data.num_args_tested() > 0);
-  const intptr_t len = ic_data.NumberOfChecks();
-  for (intptr_t i = 0; i < len; i++) {
-    const intptr_t test_class_id = ic_data.GetReceiverClassIdAt(i);
-    if (test_class_id == class_id) {
-      return true;
-    }
-  }
-  return false;
-}
-
-
 static bool ICDataHasReceiverArgumentClassIds(const ICData& ic_data,
                                               intptr_t receiver_class_id,
                                               intptr_t argument_class_id) {
@@ -368,18 +404,18 @@
 
 static bool HasOnlyOneSmi(const ICData& ic_data) {
   return (ic_data.NumberOfChecks() == 1)
-      && ICDataHasReceiverClassId(ic_data, kSmiCid);
+      && ic_data.HasReceiverClassId(kSmiCid);
 }
 
 
 static bool HasOnlySmiOrMint(const ICData& ic_data) {
   if (ic_data.NumberOfChecks() == 1) {
-    return ICDataHasReceiverClassId(ic_data, kSmiCid)
-        || ICDataHasReceiverClassId(ic_data, kMintCid);
+    return ic_data.HasReceiverClassId(kSmiCid)
+        || ic_data.HasReceiverClassId(kMintCid);
   }
   return (ic_data.NumberOfChecks() == 2)
-      && ICDataHasReceiverClassId(ic_data, kSmiCid)
-      && ICDataHasReceiverClassId(ic_data, kMintCid);
+      && ic_data.HasReceiverClassId(kSmiCid)
+      && ic_data.HasReceiverClassId(kMintCid);
 }
 
 
@@ -401,7 +437,7 @@
 
 static bool HasOnlyOneDouble(const ICData& ic_data) {
   return (ic_data.NumberOfChecks() == 1)
-      && ICDataHasReceiverClassId(ic_data, kDoubleCid);
+      && ic_data.HasReceiverClassId(kDoubleCid);
 }
 
 
@@ -549,7 +585,11 @@
         value_check = call->ic_data()->AsUnaryClassChecksForArgNr(2);
       }
       break;
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
+    case kUint8ClampedArrayCid:
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
       // Check that value is always smi.
       value_check = call->ic_data()->AsUnaryClassChecksForArgNr(2);
       if ((value_check.NumberOfChecks() != 1) ||
@@ -600,14 +640,17 @@
         type_args = new Value(load_type_args);
         break;
       }
+      case kInt8ArrayCid:
       case kUint8ArrayCid:
+      case kUint8ClampedArrayCid:
+      case kInt16ArrayCid:
+      case kUint16ArrayCid:
+        ASSERT(value_type.IsIntType());
+        // Fall through.
       case kFloat32ArrayCid:
       case kFloat64ArrayCid: {
-        ConstantInstr* null_constant = new ConstantInstr(Object::ZoneHandle());
-        InsertBefore(call, null_constant, NULL, Definition::kValue);
-        instantiator = new Value(null_constant);
-        type_args = new Value(null_constant);
-        ASSERT((class_id != kUint8ArrayCid) || value_type.IsIntType());
+        instantiator = new Value(flow_graph_->constant_null());
+        type_args = new Value(flow_graph_->constant_null());
         ASSERT((class_id != kFloat32ArrayCid && class_id != kFloat64ArrayCid) ||
                value_type.IsDoubleType());
         ASSERT(value_type.IsInstantiated());
@@ -671,9 +714,12 @@
     case kGrowableObjectArrayCid:
     case kFloat32ArrayCid:
     case kFloat64ArrayCid:
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
     case kUint8ClampedArrayCid:
     case kExternalUint8ArrayCid:
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
       // Acceptable load index classes.
       break;
     default:
@@ -964,6 +1010,23 @@
 }
 
 
+bool FlowGraphOptimizer::MethodExtractorNeedsClassCheck(
+    InstanceCallInstr* call) const {
+  if (!FLAG_use_cha) return true;
+  Definition* callee_receiver = call->ArgumentAt(0)->value()->definition();
+  ASSERT(callee_receiver != NULL);
+  const Function& function = flow_graph_->parsed_function().function();
+  if (function.IsDynamicFunction() &&
+      callee_receiver->IsParameter() &&
+      (callee_receiver->AsParameter()->index() == 0)) {
+    const String& field_name =
+      String::Handle(Field::NameFromGetter(call->function_name()));
+    return CHA::HasOverride(Class::Handle(function.Owner()), field_name);
+  }
+  return true;
+}
+
+
 void FlowGraphOptimizer::InlineImplicitInstanceGetter(InstanceCallInstr* call) {
   ASSERT(call->HasICData());
   const ICData& ic_data = *call->ic_data();
@@ -1111,6 +1174,8 @@
     }
     InlineImplicitInstanceGetter(call);
     return true;
+  } else if (target.kind() == RawFunction::kMethodExtractor) {
+    return false;
   }
 
   // Not an implicit getter.
@@ -1159,7 +1224,7 @@
 }
 
 
-StringCharCodeAtInstr* FlowGraphOptimizer::BuildStringCharCodeAt(
+LoadIndexedInstr* FlowGraphOptimizer::BuildStringCharCodeAt(
     InstanceCallInstr* call,
     intptr_t cid) {
   Value* str = call->ArgumentAt(0)->value();
@@ -1192,7 +1257,7 @@
                  call->env(),
                  Definition::kEffect);
   }
-  return new StringCharCodeAtInstr(str, index, cid);
+  return new LoadIndexedInstr(str, index, cid);
 }
 
 
@@ -1213,7 +1278,7 @@
       (ic_data.NumberOfChecks() == 1) &&
       ((class_ids[0] == kOneByteStringCid) ||
        (class_ids[0] == kTwoByteStringCid))) {
-    StringCharCodeAtInstr* instr = BuildStringCharCodeAt(call, class_ids[0]);
+    LoadIndexedInstr* instr = BuildStringCharCodeAt(call, class_ids[0]);
     call->ReplaceWith(instr, current_iterator());
     RemovePushArguments(call);
     return true;
@@ -1222,7 +1287,7 @@
       (ic_data.NumberOfChecks() == 1) &&
       (class_ids[0] == kOneByteStringCid)) {
     // TODO(fschneider): Handle TwoByteString.
-    StringCharCodeAtInstr* load_char_code =
+    LoadIndexedInstr* load_char_code =
         BuildStringCharCodeAt(call, class_ids[0]);
     InsertBefore(call, load_char_code, NULL, Definition::kValue);
     StringFromCharCodeInstr* char_at =
@@ -1261,8 +1326,10 @@
       return true;
     }
     if ((recognized_kind == MethodRecognizer::kDoubleTruncate) ||
-        (recognized_kind == MethodRecognizer::kDoubleRound)) {
-      if (!CPUFeatures::sse4_1_supported()) {
+        (recognized_kind == MethodRecognizer::kDoubleRound) ||
+        (recognized_kind == MethodRecognizer::kDoubleFloor) ||
+        (recognized_kind == MethodRecognizer::kDoubleCeil)) {
+      if (!CPUFeatures::double_truncate_round_supported()) {
         return false;
       }
       AddCheckClass(call, call->ArgumentAt(0)->value()->Copy());
@@ -1363,6 +1430,7 @@
 
   const ICData& unary_checks =
       ICData::ZoneHandle(instr->ic_data()->AsUnaryClassChecks());
+
   if ((unary_checks.NumberOfChecks() > FLAG_max_polymorphic_checks) &&
       InstanceCallNeedsClassCheck(instr)) {
     // Too many checks, it will be megamorphic which needs unary checks.
@@ -1395,17 +1463,27 @@
   if (TryInlineInstanceMethod(instr)) {
     return;
   }
-  if (!InstanceCallNeedsClassCheck(instr)) {
-    const bool call_with_checks = false;
-    PolymorphicInstanceCallInstr* call =
-        new PolymorphicInstanceCallInstr(instr, unary_checks,
-                                         call_with_checks);
-    instr->ReplaceWith(call, current_iterator());
-    return;
+
+  const bool has_one_target = unary_checks.HasOneTarget();
+
+  if (has_one_target) {
+    const bool is_method_extraction =
+        Function::Handle(unary_checks.GetTargetAt(0)).IsMethodExtractor();
+
+    if ((is_method_extraction && !MethodExtractorNeedsClassCheck(instr)) ||
+        (!is_method_extraction && !InstanceCallNeedsClassCheck(instr))) {
+      const bool call_with_checks = false;
+      PolymorphicInstanceCallInstr* call =
+          new PolymorphicInstanceCallInstr(instr, unary_checks,
+                                           call_with_checks);
+      instr->ReplaceWith(call, current_iterator());
+      return;
+    }
   }
+
   if (unary_checks.NumberOfChecks() <= FLAG_max_polymorphic_checks) {
     bool call_with_checks;
-    if (unary_checks.HasOneTarget()) {
+    if (has_one_target) {
       // Type propagation has not run yet, we cannot eliminate the check.
       AddCheckClass(instr, instr->ArgumentAt(0)->value()->Copy());
       // Call can still deoptimize, do not detach environment from instr.
@@ -1957,6 +2035,17 @@
     ArrayLengthData(Definition* array, Definition* array_length)
         : array_(array), array_length_(array_length) { }
 
+    ArrayLengthData(const ArrayLengthData& other)
+        : ValueObject(),
+          array_(other.array_),
+          array_length_(other.array_length_) { }
+
+    ArrayLengthData& operator=(const ArrayLengthData& other) {
+      array_ = other.array_;
+      array_length_ = other.array_length_;
+      return *this;
+    }
+
     Definition* array() const { return array_; }
     Definition* array_length() const { return array_length_; }
 
@@ -3178,13 +3267,21 @@
             // will ever be used.
             gen->RemoveAll(kill_by_offset_[offset_in_words]);
 
-            Definition* load = map_->Lookup(instr->AsDefinition());
-            if (load != NULL) {
-              // Store has a corresponding numbered load. Try forwarding
-              // stored value to it.
-              gen->Add(load->expr_id());
-              if (out_values == NULL) out_values = CreateBlockOutValues();
-              (*out_values)[load->expr_id()] = GetStoredValue(instr);
+            // Only forward stores to normal arrays and float64 arrays
+            // to loads because other array stores (intXX/uintXX/float32)
+            // may implicitly convert the value stored.
+            StoreIndexedInstr* array_store = instr->AsStoreIndexed();
+            if (array_store == NULL ||
+                array_store->class_id() == kArrayCid ||
+                array_store->class_id() == kFloat64ArrayCid) {
+              Definition* load = map_->Lookup(instr->AsDefinition());
+              if (load != NULL) {
+                // Store has a corresponding numbered load. Try forwarding
+                // stored value to it.
+                gen->Add(load->expr_id());
+                if (out_values == NULL) out_values = CreateBlockOutValues();
+                (*out_values)[load->expr_id()] = GetStoredValue(instr);
+              }
             }
           }
           ASSERT(instr->IsDefinition() &&
@@ -3967,11 +4064,6 @@
 }
 
 
-void ConstantPropagator::VisitStringCharCodeAt(StringCharCodeAtInstr* instr) {
-  SetValue(instr, non_constant_);
-}
-
-
 void ConstantPropagator::VisitStringFromCharCode(
     StringFromCharCodeInstr* instr) {
   SetValue(instr, non_constant_);
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index 838185c..45285cc 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -53,6 +53,8 @@
   // Attempt to build ICData for call using propagated class-ids.
   bool TryCreateICData(InstanceCallInstr* call);
 
+  void SpecializePolymorphicInstanceCall(PolymorphicInstanceCallInstr* call);
+
   intptr_t PrepareIndexedOp(InstanceCallInstr* call,
                             intptr_t class_id,
                             Value** array,
@@ -70,8 +72,8 @@
   bool TryInlineInstanceMethod(InstanceCallInstr* call);
   void ReplaceWithInstanceOf(InstanceCallInstr* instr);
 
-  StringCharCodeAtInstr* BuildStringCharCodeAt(InstanceCallInstr* call,
-                                               intptr_t cid);
+  LoadIndexedInstr* BuildStringCharCodeAt(InstanceCallInstr* call,
+                                          intptr_t cid);
 
   void AddCheckClass(InstanceCallInstr* call, Value* value);
 
@@ -90,6 +92,7 @@
                         Instruction* deopt_target);
 
   bool InstanceCallNeedsClassCheck(InstanceCallInstr* call) const;
+  bool MethodExtractorNeedsClassCheck(InstanceCallInstr* call) const;
 
   void InlineImplicitInstanceGetter(InstanceCallInstr* call);
   void InlineArrayLengthGetter(InstanceCallInstr* call,
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index 07696d0..41d3091 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -277,8 +277,18 @@
 void Heap::PrintSizes() const {
   OS::PrintErr("New space (%"Pd"k of %"Pd"k) "
                "Old space (%"Pd"k of %"Pd"k)\n",
-               (new_space_->in_use() / KB), (new_space_->capacity() / KB),
-               (old_space_->in_use() / KB), (old_space_->capacity() / KB));
+               (Used(kNew) / KB), (Capacity(kNew) / KB),
+               (Used(kOld) / KB), (Capacity(kOld) / KB));
+}
+
+
+intptr_t Heap::Used(Space space) const {
+  return space == kNew ? new_space_->in_use() : old_space_->in_use();
+}
+
+
+intptr_t Heap::Capacity(Space space) const {
+  return space == kNew ? new_space_->capacity() : old_space_->capacity();
 }
 
 
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index 00c21a8..3090efa 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.h
@@ -155,6 +155,10 @@
   // Print heap sizes.
   void PrintSizes() const;
 
+  // Return amount of memory used and capacity in a space.
+  intptr_t Used(Space space) const;
+  intptr_t Capacity(Space space) const;
+
   // Returns the [lowest, highest) addresses in the heap.
   void StartEndAddress(uword* start, uword* end) const;
 
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index 4a6fe3b..37566d9 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -128,6 +128,7 @@
     if (count > 0) {
       f->Print(" #%"Pd, count);
     }
+    f->Print(" <%p>", static_cast<void*>(target.raw()));
   }
   f->Print("]");
 }
@@ -323,7 +324,12 @@
 
 
 void PolymorphicInstanceCallInstr::PrintOperandsTo(BufferFormatter* f) const {
-  instance_call()->PrintOperandsTo(f);
+  f->Print("%s", instance_call()->function_name().ToCString());
+  for (intptr_t i = 0; i < ArgumentCount(); ++i) {
+    f->Print(", ");
+    ArgumentAt(i)->value()->PrintTo(f);
+  }
+  PrintICData(f, ic_data());
 }
 
 
@@ -372,7 +378,9 @@
 
 
 void StoreInstanceFieldInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("%s, ", String::Handle(field().name()).ToCString());
+  f->Print("%s {%"Pd"}, ",
+           String::Handle(field().name()).ToCString(),
+           field().Offset());
   instance()->PrintTo(f);
   f->Print(", ");
   value()->PrintTo(f);
diff --git a/runtime/vm/instructions.h b/runtime/vm/instructions.h
index e665b64..97fe299 100644
--- a/runtime/vm/instructions.h
+++ b/runtime/vm/instructions.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -12,7 +12,9 @@
 #elif defined(TARGET_ARCH_X64)
 #include "vm/instructions_x64.h"
 #elif defined(TARGET_ARCH_ARM)
-// No instruction patterns implemented.
+#include "vm/instructions_arm.h"
+#elif defined(TARGET_ARCH_MIPS)
+#include "vm/instructions_mips.h"
 #else
 #error Unknown architecture.
 #endif
diff --git a/runtime/vm/instructions_arm.cc b/runtime/vm/instructions_arm.cc
new file mode 100644
index 0000000..1ba1dcc
--- /dev/null
+++ b/runtime/vm/instructions_arm.cc
@@ -0,0 +1,44 @@
+// 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.
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM.
+#if defined(TARGET_ARCH_ARM)
+
+#include "vm/instructions.h"
+#include "vm/object.h"
+
+namespace dart {
+
+bool InstructionPattern::TestBytesWith(const int* data, int num_bytes) const {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
+uword CallOrJumpPattern::TargetAddress() const {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+void CallOrJumpPattern::SetTargetAddress(uword target) const {
+  UNIMPLEMENTED();
+}
+
+
+const int* CallPattern::pattern() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+const int* JumpPattern::pattern() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_ARM
+
diff --git a/runtime/vm/instructions_arm.h b/runtime/vm/instructions_arm.h
new file mode 100644
index 0000000..c3ea8ea
--- /dev/null
+++ b/runtime/vm/instructions_arm.h
@@ -0,0 +1,99 @@
+// 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.
+// Classes that describe assembly patterns as used by inline caches.
+
+#ifndef VM_INSTRUCTIONS_ARM_H_
+#define VM_INSTRUCTIONS_ARM_H_
+
+#ifndef VM_INSTRUCTIONS_H_
+#error Do not include instructions_arm.h directly; use instructions.h instead.
+#endif
+
+#include "vm/allocation.h"
+
+namespace dart {
+
+// Forward declarations.
+class RawClass;
+class Immediate;
+class RawObject;
+
+// Abstract class for all instruction pattern classes.
+class InstructionPattern : public ValueObject {
+ public:
+  explicit InstructionPattern(uword pc) : start_(pc) {
+    ASSERT(pc != 0);
+  }
+  virtual ~InstructionPattern() {}
+
+  // Call to check if the instruction pattern at 'pc' match the instruction.
+  virtual bool IsValid() const {
+    return TestBytesWith(pattern(), pattern_length_in_bytes());
+  }
+
+  // 'pattern' returns the expected byte pattern in form of an integer array
+  // with length of 'pattern_length_in_bytes'. A '-1' element means 'any byte'.
+  virtual const int* pattern() const = 0;
+  virtual int pattern_length_in_bytes() const = 0;
+
+ protected:
+  uword start() const { return start_; }
+
+ private:
+  // Returns true if the 'num_bytes' bytes at 'start_' correspond to
+  // array of integers 'data'. 'data' elements are either a byte or -1, which
+  // represents any byte.
+  bool TestBytesWith(const int* data, int num_bytes) const;
+
+  const uword start_;
+
+  DISALLOW_COPY_AND_ASSIGN(InstructionPattern);
+};
+
+
+class CallOrJumpPattern : public InstructionPattern {
+ public:
+  virtual int pattern_length_in_bytes() const {
+    return kLengthInBytes;
+  }
+  uword TargetAddress() const;
+  void SetTargetAddress(uword new_target) const;
+
+ protected:
+  explicit CallOrJumpPattern(uword pc) : InstructionPattern(pc) {}
+  static const int kLengthInBytes = 0;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CallOrJumpPattern);
+};
+
+
+class CallPattern : public CallOrJumpPattern {
+ public:
+  explicit CallPattern(uword pc) : CallOrJumpPattern(pc) {}
+  static int InstructionLength() {
+    return kLengthInBytes;
+  }
+
+ private:
+  virtual const int* pattern() const;
+
+  DISALLOW_COPY_AND_ASSIGN(CallPattern);
+};
+
+
+class JumpPattern : public CallOrJumpPattern {
+ public:
+  explicit JumpPattern(uword pc) : CallOrJumpPattern(pc) {}
+
+ private:
+  virtual const int* pattern() const;
+
+  DISALLOW_COPY_AND_ASSIGN(JumpPattern);
+};
+
+}  // namespace dart
+
+#endif  // VM_INSTRUCTIONS_ARM_H_
+
diff --git a/runtime/vm/instructions_mips.cc b/runtime/vm/instructions_mips.cc
new file mode 100644
index 0000000..5e115a0
--- /dev/null
+++ b/runtime/vm/instructions_mips.cc
@@ -0,0 +1,44 @@
+// 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.
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_MIPS.
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/instructions.h"
+#include "vm/object.h"
+
+namespace dart {
+
+bool InstructionPattern::TestBytesWith(const int* data, int num_bytes) const {
+  UNIMPLEMENTED();
+  return false;
+}
+
+
+uword CallOrJumpPattern::TargetAddress() const {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+void CallOrJumpPattern::SetTargetAddress(uword target) const {
+  UNIMPLEMENTED();
+}
+
+
+const int* CallPattern::pattern() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+const int* JumpPattern::pattern() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
+
diff --git a/runtime/vm/instructions_mips.h b/runtime/vm/instructions_mips.h
new file mode 100644
index 0000000..6da4eb0
--- /dev/null
+++ b/runtime/vm/instructions_mips.h
@@ -0,0 +1,99 @@
+// 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.
+// Classes that describe assembly patterns as used by inline caches.
+
+#ifndef VM_INSTRUCTIONS_MIPS_H_
+#define VM_INSTRUCTIONS_MIPS_H_
+
+#ifndef VM_INSTRUCTIONS_H_
+#error Do not include instructions_mips.h directly; use instructions.h instead.
+#endif
+
+#include "vm/allocation.h"
+
+namespace dart {
+
+// Forward declarations.
+class RawClass;
+class Immediate;
+class RawObject;
+
+// Abstract class for all instruction pattern classes.
+class InstructionPattern : public ValueObject {
+ public:
+  explicit InstructionPattern(uword pc) : start_(pc) {
+    ASSERT(pc != 0);
+  }
+  virtual ~InstructionPattern() {}
+
+  // Call to check if the instruction pattern at 'pc' match the instruction.
+  virtual bool IsValid() const {
+    return TestBytesWith(pattern(), pattern_length_in_bytes());
+  }
+
+  // 'pattern' returns the expected byte pattern in form of an integer array
+  // with length of 'pattern_length_in_bytes'. A '-1' element means 'any byte'.
+  virtual const int* pattern() const = 0;
+  virtual int pattern_length_in_bytes() const = 0;
+
+ protected:
+  uword start() const { return start_; }
+
+ private:
+  // Returns true if the 'num_bytes' bytes at 'start_' correspond to
+  // array of integers 'data'. 'data' elements are either a byte or -1, which
+  // represents any byte.
+  bool TestBytesWith(const int* data, int num_bytes) const;
+
+  const uword start_;
+
+  DISALLOW_COPY_AND_ASSIGN(InstructionPattern);
+};
+
+
+class CallOrJumpPattern : public InstructionPattern {
+ public:
+  virtual int pattern_length_in_bytes() const {
+    return kLengthInBytes;
+  }
+  uword TargetAddress() const;
+  void SetTargetAddress(uword new_target) const;
+
+ protected:
+  explicit CallOrJumpPattern(uword pc) : InstructionPattern(pc) {}
+  static const int kLengthInBytes = 0;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CallOrJumpPattern);
+};
+
+
+class CallPattern : public CallOrJumpPattern {
+ public:
+  explicit CallPattern(uword pc) : CallOrJumpPattern(pc) {}
+  static int InstructionLength() {
+    return kLengthInBytes;
+  }
+
+ private:
+  virtual const int* pattern() const;
+
+  DISALLOW_COPY_AND_ASSIGN(CallPattern);
+};
+
+
+class JumpPattern : public CallOrJumpPattern {
+ public:
+  explicit JumpPattern(uword pc) : CallOrJumpPattern(pc) {}
+
+ private:
+  virtual const int* pattern() const;
+
+  DISALLOW_COPY_AND_ASSIGN(JumpPattern);
+};
+
+}  // namespace dart
+
+#endif  // VM_INSTRUCTIONS_MIPS_H_
+
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 93b89ff..d5cfa0a 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -103,6 +103,14 @@
 }
 
 
+bool CheckClassInstr::AffectedBySideEffect() const {
+  // The class-id of string objects is not invariant: Externalization of strings
+  // via the API can change the class-id.
+  return unary_checks().HasReceiverClassId(kOneByteStringCid)
+      || unary_checks().HasReceiverClassId(kTwoByteStringCid);
+}
+
+
 bool CheckArrayBoundInstr::AttributesEqual(Instruction* other) const {
   CheckArrayBoundInstr* other_check = other->AsCheckArrayBound();
   ASSERT(other_check != NULL);
@@ -156,13 +164,6 @@
 }
 
 
-bool StringCharCodeAtInstr::AttributesEqual(Instruction* other) const {
-  StringCharCodeAtInstr* other_load = other->AsStringCharCodeAt();
-  ASSERT(other_load != NULL);
-  return class_id() == other_load->class_id();
-}
-
-
 bool LoadIndexedInstr::AttributesEqual(Instruction* other) const {
   LoadIndexedInstr* other_load = other->AsLoadIndexed();
   ASSERT(other_load != NULL);
@@ -1108,16 +1109,6 @@
 }
 
 
-RawAbstractType* StringCharCodeAtInstr::CompileType() const {
-  return Type::IntType();
-}
-
-
-intptr_t StringCharCodeAtInstr::ResultCid() const {
-  return kSmiCid;
-}
-
-
 RawAbstractType* StringFromCharCodeInstr::CompileType() const {
   return Type::StringType();
 }
@@ -1131,9 +1122,14 @@
     case kFloat32ArrayCid :
     case kFloat64ArrayCid :
       return Type::Double();
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
     case kUint8ClampedArrayCid:
     case kExternalUint8ArrayCid:
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
+    case kOneByteStringCid:
+    case kTwoByteStringCid:
       return Type::IntType();
     default:
       UNIMPLEMENTED();
@@ -1150,9 +1146,14 @@
     case kFloat32ArrayCid :
     case kFloat64ArrayCid :
       return kDoubleCid;
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
     case kUint8ClampedArrayCid:
     case kExternalUint8ArrayCid:
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
+    case kOneByteStringCid:
+    case kTwoByteStringCid:
       return kSmiCid;
     default:
       UNIMPLEMENTED();
@@ -1165,9 +1166,14 @@
   switch (class_id_) {
     case kArrayCid:
     case kImmutableArrayCid:
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
     case kUint8ClampedArrayCid:
     case kExternalUint8ArrayCid:
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
+    case kOneByteStringCid:
+    case kTwoByteStringCid:
       return kTagged;
     case kFloat32ArrayCid :
     case kFloat64ArrayCid :
@@ -1190,7 +1196,11 @@
   ASSERT(idx == 2);
   switch (class_id_) {
     case kArrayCid:
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
+    case kUint8ClampedArrayCid:
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
       return kTagged;
     case kFloat32ArrayCid :
     case kFloat64ArrayCid :
@@ -1748,12 +1758,19 @@
 
 Instruction* CheckClassInstr::Canonicalize(FlowGraphOptimizer* optimizer) {
   const intptr_t value_cid = value()->ResultCid();
-  const intptr_t num_checks = unary_checks().NumberOfChecks();
-  if ((num_checks == 1) &&
-      (value_cid == unary_checks().GetReceiverClassIdAt(0))) {
-    // No checks needed.
-    return NULL;
+  if (value_cid == kDynamicCid) {
+    return this;
   }
+
+  const intptr_t num_checks = unary_checks().NumberOfChecks();
+
+  for (intptr_t i = 0; i < num_checks; i++) {
+    if (value_cid == unary_checks().GetReceiverClassIdAt(i)) {
+      // No checks needed.
+      return NULL;
+    }
+  }
+
   return this;
 }
 
@@ -1797,7 +1814,9 @@
   __ Bind(compiler->GetBlockLabel(this));
   if (IsCatchEntry()) {
     compiler->AddExceptionHandler(catch_try_index(),
-                                  compiler->assembler()->CodeSize());
+                                  try_index(),
+                                  compiler->assembler()->CodeSize(),
+                                  catch_handler_types_);
   }
   if (HasParallelMove()) {
     compiler->parallel_move_resolver()->EmitNativeCode(parallel_move());
@@ -1880,115 +1899,6 @@
   UNREACHABLE();
 }
 
-LocationSummary* ThrowInstr::MakeLocationSummary() const {
-  return new LocationSummary(0, 0, LocationSummary::kCall);
-}
-
-
-
-void ThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  compiler->GenerateCallRuntime(token_pos(),
-                                kThrowRuntimeEntry,
-                                locs());
-  __ int3();
-}
-
-
-LocationSummary* ReThrowInstr::MakeLocationSummary() const {
-  return new LocationSummary(0, 0, LocationSummary::kCall);
-}
-
-
-void ReThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  compiler->GenerateCallRuntime(token_pos(),
-                                kReThrowRuntimeEntry,
-                                locs());
-  __ int3();
-}
-
-
-LocationSummary* GotoInstr::MakeLocationSummary() const {
-  return new LocationSummary(0, 0, LocationSummary::kNoCall);
-}
-
-
-void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  // Add deoptimization descriptor for deoptimizing instructions
-  // that may be inserted before this instruction.
-  if (!compiler->is_optimizing()) {
-    compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore,
-                                   GetDeoptId(),
-                                   0);  // No token position.
-  }
-
-  if (HasParallelMove()) {
-    compiler->parallel_move_resolver()->EmitNativeCode(parallel_move());
-  }
-
-  // We can fall through if the successor is the next block in the list.
-  // Otherwise, we need a jump.
-  if (!compiler->IsNextBlock(successor())) {
-    __ jmp(compiler->GetBlockLabel(successor()));
-  }
-}
-
-
-static Condition NegateCondition(Condition condition) {
-  switch (condition) {
-    case EQUAL:         return NOT_EQUAL;
-    case NOT_EQUAL:     return EQUAL;
-    case LESS:          return GREATER_EQUAL;
-    case LESS_EQUAL:    return GREATER;
-    case GREATER:       return LESS_EQUAL;
-    case GREATER_EQUAL: return LESS;
-    case BELOW:         return ABOVE_EQUAL;
-    case BELOW_EQUAL:   return ABOVE;
-    case ABOVE:         return BELOW_EQUAL;
-    case ABOVE_EQUAL:   return BELOW;
-    default:
-      OS::Print("Error %d\n", condition);
-      UNIMPLEMENTED();
-      return EQUAL;
-  }
-}
-
-
-void ControlInstruction::EmitBranchOnValue(FlowGraphCompiler* compiler,
-                                           bool value) {
-  if (value && compiler->IsNextBlock(false_successor())) {
-    __ jmp(compiler->GetBlockLabel(true_successor()));
-  } else if (!value && compiler->IsNextBlock(true_successor())) {
-    __ jmp(compiler->GetBlockLabel(false_successor()));
-  }
-}
-
-
-void ControlInstruction::EmitBranchOnCondition(FlowGraphCompiler* compiler,
-                                               Condition true_condition) {
-  if (compiler->IsNextBlock(false_successor())) {
-    // If the next block is the false successor we will fall through to it.
-    __ j(true_condition, compiler->GetBlockLabel(true_successor()));
-  } else {
-    // If the next block is the true successor we negate comparison and fall
-    // through to it.
-    ASSERT(compiler->IsNextBlock(true_successor()));
-    Condition false_condition = NegateCondition(true_condition);
-    __ j(false_condition, compiler->GetBlockLabel(false_successor()));
-  }
-}
-
-
-LocationSummary* CurrentContextInstr::MakeLocationSummary() const {
-  return LocationSummary::Make(0,
-                               Location::RequiresRegister(),
-                               LocationSummary::kNoCall);
-}
-
-
-void CurrentContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  __ MoveRegister(locs()->out().reg(), CTX);
-}
-
 
 LocationSummary* StoreContextInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
@@ -2015,107 +1925,6 @@
 }
 
 
-LocationSummary* StrictCompareInstr::MakeLocationSummary() const {
-  const intptr_t kNumInputs = 2;
-  const intptr_t kNumTemps = 0;
-  LocationSummary* locs =
-      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_in(0, Location::RegisterOrConstant(left()));
-  locs->set_in(1, Location::RegisterOrConstant(right()));
-  locs->set_out(Location::RequiresRegister());
-  return locs;
-}
-
-
-// Special code for numbers (compare values instead of references.)
-void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
-  Location left = locs()->in(0);
-  Location right = locs()->in(1);
-  if (left.IsConstant() && right.IsConstant()) {
-    // TODO(vegorov): should be eliminated earlier by constant propagation.
-    const bool result = (kind() == Token::kEQ_STRICT) ?
-        left.constant().raw() == right.constant().raw() :
-        left.constant().raw() != right.constant().raw();
-    __ LoadObject(locs()->out().reg(), result ? Bool::True() : Bool::False());
-    return;
-  }
-  if (left.IsConstant()) {
-    compiler->EmitEqualityRegConstCompare(right.reg(),
-                                          left.constant(),
-                                          needs_number_check());
-  } else if (right.IsConstant()) {
-    compiler->EmitEqualityRegConstCompare(left.reg(),
-                                          right.constant(),
-                                          needs_number_check());
-  } else {
-    compiler->EmitEqualityRegRegCompare(left.reg(),
-                                       right.reg(),
-                                       needs_number_check());
-  }
-
-  Register result = locs()->out().reg();
-  Label load_true, done;
-  Condition true_condition = (kind() == Token::kEQ_STRICT) ? EQUAL : NOT_EQUAL;
-  __ j(true_condition, &load_true, Assembler::kNearJump);
-  __ LoadObject(result, Bool::False());
-  __ jmp(&done, Assembler::kNearJump);
-  __ Bind(&load_true);
-  __ LoadObject(result, Bool::True());
-  __ Bind(&done);
-}
-
-
-void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
-                                        BranchInstr* branch) {
-  ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
-  Location left = locs()->in(0);
-  Location right = locs()->in(1);
-  if (left.IsConstant() && right.IsConstant()) {
-    // TODO(vegorov): should be eliminated earlier by constant propagation.
-    const bool result = (kind() == Token::kEQ_STRICT) ?
-        left.constant().raw() == right.constant().raw() :
-        left.constant().raw() != right.constant().raw();
-    branch->EmitBranchOnValue(compiler, result);
-    return;
-  }
-  if (left.IsConstant()) {
-    compiler->EmitEqualityRegConstCompare(right.reg(),
-                                          left.constant(),
-                                          needs_number_check());
-  } else if (right.IsConstant()) {
-    compiler->EmitEqualityRegConstCompare(left.reg(),
-                                          right.constant(),
-                                          needs_number_check());
-  } else {
-    compiler->EmitEqualityRegRegCompare(left.reg(),
-                                        right.reg(),
-                                        needs_number_check());
-  }
-
-  Condition true_condition = (kind() == Token::kEQ_STRICT) ? EQUAL : NOT_EQUAL;
-  branch->EmitBranchOnCondition(compiler, true_condition);
-}
-
-
-void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  // The arguments to the stub include the closure, as does the arguments
-  // descriptor.
-  Register temp_reg = locs()->temp(0).reg();
-  int argument_count = ArgumentCount();
-  const Array& arguments_descriptor =
-      Array::ZoneHandle(ArgumentsDescriptor::New(argument_count,
-                                                 argument_names()));
-  __ LoadObject(temp_reg, arguments_descriptor);
-  compiler->GenerateDartCall(deopt_id(),
-                             token_pos(),
-                             &StubCode::CallClosureFunctionLabel(),
-                             PcDescriptors::kOther,
-                             locs());
-  __ Drop(argument_count);
-}
-
-
 LocationSummary* InstanceCallInstr::MakeLocationSummary() const {
   return MakeCallSummary();
 }
@@ -2172,6 +1981,13 @@
 
 void StaticCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Label skip_call;
+  if (!compiler->is_optimizing()) {
+    // Some static calls can be optimized by the optimizing compiler (e.g. sqrt)
+    // and therefore need a deoptimization descriptor.
+    compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore,
+                                   deopt_id(),
+                                   token_pos());
+  }
   if (function().name() == Symbols::EqualOperator().raw()) {
     compiler->EmitSuperEqualityCallPrologue(locs()->out().reg(), &skip_call);
   }
@@ -2196,107 +2012,6 @@
 }
 
 
-LocationSummary* BooleanNegateInstr::MakeLocationSummary() const {
-  return LocationSummary::Make(1,
-                               Location::RequiresRegister(),
-                               LocationSummary::kNoCall);
-}
-
-
-void BooleanNegateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register value = locs()->in(0).reg();
-  Register result = locs()->out().reg();
-
-  Label done;
-  __ LoadObject(result, Bool::True());
-  __ CompareRegisters(result, value);
-  __ j(NOT_EQUAL, &done, Assembler::kNearJump);
-  __ LoadObject(result, Bool::False());
-  __ Bind(&done);
-}
-
-
-LocationSummary* ChainContextInstr::MakeLocationSummary() const {
-  return LocationSummary::Make(1,
-                               Location::NoLocation(),
-                               LocationSummary::kNoCall);
-}
-
-
-void ChainContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register context_value = locs()->in(0).reg();
-
-  // Chain the new context in context_value to its parent in CTX.
-  __ StoreIntoObject(context_value,
-                     FieldAddress(context_value, Context::parent_offset()),
-                     CTX);
-  // Set new context as current context.
-  __ MoveRegister(CTX, context_value);
-}
-
-
-LocationSummary* StoreVMFieldInstr::MakeLocationSummary() const {
-  const intptr_t kNumInputs = 2;
-  const intptr_t kNumTemps = 0;
-  LocationSummary* locs =
-      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_in(0, value()->NeedsStoreBuffer() ? Location::WritableRegister()
-                                              : Location::RequiresRegister());
-  locs->set_in(1, Location::RequiresRegister());
-  return locs;
-}
-
-
-void StoreVMFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register value_reg = locs()->in(0).reg();
-  Register dest_reg = locs()->in(1).reg();
-
-  if (value()->NeedsStoreBuffer()) {
-    __ StoreIntoObject(dest_reg, FieldAddress(dest_reg, offset_in_bytes()),
-                       value_reg);
-  } else {
-    __ StoreIntoObjectNoBarrier(
-        dest_reg, FieldAddress(dest_reg, offset_in_bytes()), value_reg);
-  }
-}
-
-
-LocationSummary* AllocateObjectInstr::MakeLocationSummary() const {
-  return MakeCallSummary();
-}
-
-
-void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const Class& cls = Class::ZoneHandle(constructor().Owner());
-  const Code& stub = Code::Handle(StubCode::GetAllocationStubForClass(cls));
-  const ExternalLabel label(cls.ToCString(), stub.EntryPoint());
-  compiler->GenerateCall(token_pos(),
-                         &label,
-                         PcDescriptors::kOther,
-                         locs());
-  __ Drop(ArgumentCount());  // Discard arguments.
-}
-
-
-LocationSummary* CreateClosureInstr::MakeLocationSummary() const {
-  return MakeCallSummary();
-}
-
-
-void CreateClosureInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const Function& closure_function = function();
-  ASSERT(!closure_function.IsImplicitStaticClosureFunction());
-  const Code& stub = Code::Handle(
-      StubCode::GetAllocationStubForClosure(closure_function));
-  const ExternalLabel label(closure_function.ToCString(), stub.EntryPoint());
-  compiler->GenerateCall(token_pos(),
-                         &label,
-                         PcDescriptors::kOther,
-                         locs());
-  __ Drop(2);  // Discard type arguments and receiver.
-}
-
-
 Environment* Environment::From(const GrowableArray<Definition*>& definitions,
                                intptr_t fixed_parameter_count,
                                const Function& function) {
@@ -2671,8 +2386,26 @@
 
 
 
-void StringCharCodeAtInstr::InferRange() {
-  switch (class_id_) {
+void LoadIndexedInstr::InferRange() {
+  switch (class_id()) {
+    case kInt8ArrayCid:
+      range_ = new Range(RangeBoundary::FromConstant(-128),
+                         RangeBoundary::FromConstant(127));
+      break;
+    case kUint8ArrayCid:
+    case kUint8ClampedArrayCid:
+    case kExternalUint8ArrayCid:
+      range_ = new Range(RangeBoundary::FromConstant(0),
+                         RangeBoundary::FromConstant(255));
+      break;
+    case kInt16ArrayCid:
+      range_ = new Range(RangeBoundary::FromConstant(-32768),
+                         RangeBoundary::FromConstant(32767));
+      break;
+    case kUint16ArrayCid:
+      range_ = new Range(RangeBoundary::FromConstant(0),
+                         RangeBoundary::FromConstant(65535));
+      break;
     case kOneByteStringCid:
       range_ = new Range(RangeBoundary::FromConstant(0),
                          RangeBoundary::FromConstant(0xFF));
@@ -2682,20 +2415,6 @@
                          RangeBoundary::FromConstant(0xFFFF));
       break;
     default:
-      UNIMPLEMENTED();
-  }
-}
-
-
-void LoadIndexedInstr::InferRange() {
-  switch (class_id()) {
-    case kUint8ArrayCid:
-    case kUint8ClampedArrayCid:
-    case kExternalUint8ArrayCid:
-      range_ = new Range(RangeBoundary::FromConstant(0),
-                         RangeBoundary::FromConstant(255));
-      break;
-    default:
       Definition::InferRange();
       break;
   }
@@ -2964,7 +2683,6 @@
   }
 }
 
-
 #undef __
 
 }  // namespace dart
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 9ef1368..0228cfb 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -46,6 +46,8 @@
   V(_Double, toInt, DoubleToInteger, 362666636)                                \
   V(_Double, truncate, DoubleTruncate, 620870996)                              \
   V(_Double, round, DoubleRound, 620870996)                                    \
+  V(_Double, floor, DoubleFloor, 620870996)                                    \
+  V(_Double, ceil, DoubleCeil, 620870996)                                      \
   V(::, sqrt, MathSqrt, 1662640002)                                            \
 
 // Class that recognizes the name and owner of a function and returns the
@@ -272,7 +274,6 @@
   M(UnaryMintOp)                                                               \
   M(CheckArrayBound)                                                           \
   M(Constraint)                                                                \
-  M(StringCharCodeAt)                                                          \
   M(StringFromCharCode)
 
 
@@ -511,7 +512,6 @@
   friend class CheckSmiInstr;
   friend class CheckArrayBoundInstr;
   friend class CheckEitherNonSmiInstr;
-  friend class StringCharCodeAtInstr;
   friend class LICM;
   friend class DoubleToSmiInstr;
   friend class DoubleToDoubleInstr;
@@ -978,7 +978,8 @@
   TargetEntryInstr(intptr_t block_id, intptr_t try_index, intptr_t loop_depth)
       : BlockEntryInstr(block_id, try_index, loop_depth),
         predecessor_(NULL),
-        catch_try_index_(CatchClauseNode::kInvalidTryIndex) { }
+        catch_try_index_(CatchClauseNode::kInvalidTryIndex),
+        catch_handler_types_(Array::ZoneHandle()) { }
 
   DECLARE_INSTRUCTION(TargetEntry)
 
@@ -1002,6 +1003,9 @@
     return catch_try_index_;
   }
   void set_catch_try_index(intptr_t index) { catch_try_index_ = index; }
+  void set_catch_handler_types(const Array& handler_types) {
+    catch_handler_types_ = handler_types.raw();
+  }
 
   virtual void PrepareEntry(FlowGraphCompiler* compiler);
 
@@ -1017,6 +1021,7 @@
 
   BlockEntryInstr* predecessor_;
   intptr_t catch_try_index_;
+  Array& catch_handler_types_;
 
   DISALLOW_COPY_AND_ASSIGN(TargetEntryInstr);
 };
@@ -1609,6 +1614,19 @@
 
   RangeBoundary() : kind_(kUnknown), value_(0), offset_(0) { }
 
+  RangeBoundary(const RangeBoundary& other)
+      : ValueObject(),
+        kind_(other.kind_),
+        value_(other.value_),
+        offset_(other.offset_) { }
+
+  RangeBoundary& operator=(const RangeBoundary& other) {
+    kind_ = other.kind_;
+    value_ = other.value_;
+    offset_ = other.offset_;
+    return *this;
+  }
+
   static RangeBoundary FromConstant(intptr_t val) {
     return RangeBoundary(kConstant, val, 0);
   }
@@ -2279,9 +2297,10 @@
                        Value* left,
                        Value* right)
       : ComparisonInstr(kind, left, right),
-        ic_data_(Isolate::Current()->GetICDataForDeoptId(deopt_id())),
         token_pos_(token_pos),
         receiver_class_id_(kIllegalCid) {
+    // deopt_id() checks receiver_class_id_ value.
+    ic_data_ = Isolate::Current()->GetICDataForDeoptId(deopt_id());
     ASSERT((kind == Token::kEQ) || (kind == Token::kNE));
   }
 
@@ -2346,9 +2365,10 @@
                     Value* left,
                     Value* right)
       : ComparisonInstr(kind, left, right),
-        ic_data_(Isolate::Current()->GetICDataForDeoptId(deopt_id())),
         token_pos_(token_pos),
         operands_class_id_(kIllegalCid) {
+    // deopt_id() checks operands_class_id_ value.
+    ic_data_ = Isolate::Current()->GetICDataForDeoptId(deopt_id());
     ASSERT(Token::IsRelationalOperator(kind));
   }
 
@@ -2670,77 +2690,6 @@
 };
 
 
-class StringCharCodeAtInstr : public TemplateDefinition<2> {
- public:
-  StringCharCodeAtInstr(Value* receiver,
-                        Value* index,
-                        intptr_t class_id)
-      : class_id_(class_id) {
-    ASSERT(receiver != NULL);
-    ASSERT(index != NULL);
-    inputs_[0] = receiver;
-    inputs_[1] = index;
-  }
-
-  DECLARE_INSTRUCTION(StringCharCodeAt)
-  virtual RawAbstractType* CompileType() const;
-
-  Value* receiver() const { return inputs_[0]; }
-  Value* index() const { return inputs_[1]; }
-  intptr_t class_id() const { return class_id_; }
-
-  virtual bool CanDeoptimize() const { return false; }
-
-  virtual bool HasSideEffect() const { return false; }
-
-  virtual intptr_t ResultCid() const;
-
-  virtual bool AttributesEqual(Instruction* other) const;
-
-  virtual bool AffectedBySideEffect() const { return true; }
-
-  virtual void InferRange();
-
- private:
-  const intptr_t class_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(StringCharCodeAtInstr);
-};
-
-
-class StringFromCharCodeInstr : public TemplateDefinition<1> {
- public:
-  explicit StringFromCharCodeInstr(Value* char_code,
-                                   intptr_t cid) : cid_(cid) {
-    ASSERT(char_code != NULL);
-    ASSERT(char_code->definition()->IsStringCharCodeAt() &&
-           (char_code->definition()->AsStringCharCodeAt()->class_id() ==
-            kOneByteStringCid));
-    inputs_[0] = char_code;
-  }
-
-  DECLARE_INSTRUCTION(StringFromCharCode)
-  virtual RawAbstractType* CompileType() const;
-
-  Value* char_code() const { return inputs_[0]; }
-
-  virtual bool CanDeoptimize() const { return false; }
-
-  virtual bool HasSideEffect() const { return false; }
-
-  virtual intptr_t ResultCid() const {  return cid_; }
-
-  virtual bool AttributesEqual(Instruction* other) const { return true; }
-
-  virtual bool AffectedBySideEffect() const { return false; }
-
- private:
-  const intptr_t cid_;
-
-  DISALLOW_COPY_AND_ASSIGN(StringFromCharCodeInstr);
-};
-
-
 class LoadIndexedInstr : public TemplateDefinition<2> {
  public:
   LoadIndexedInstr(Value* array, Value* index, intptr_t class_id)
@@ -2779,6 +2728,39 @@
 };
 
 
+class StringFromCharCodeInstr : public TemplateDefinition<1> {
+ public:
+  explicit StringFromCharCodeInstr(Value* char_code,
+                                   intptr_t cid) : cid_(cid) {
+    ASSERT(char_code != NULL);
+    ASSERT(char_code->definition()->IsLoadIndexed() &&
+           (char_code->definition()->AsLoadIndexed()->class_id() ==
+            kOneByteStringCid));
+    inputs_[0] = char_code;
+  }
+
+  DECLARE_INSTRUCTION(StringFromCharCode)
+  virtual RawAbstractType* CompileType() const;
+
+  Value* char_code() const { return inputs_[0]; }
+
+  virtual bool CanDeoptimize() const { return false; }
+
+  virtual bool HasSideEffect() const { return false; }
+
+  virtual intptr_t ResultCid() const {  return cid_; }
+
+  virtual bool AttributesEqual(Instruction* other) const { return true; }
+
+  virtual bool AffectedBySideEffect() const { return false; }
+
+ private:
+  const intptr_t cid_;
+
+  DISALLOW_COPY_AND_ASSIGN(StringFromCharCodeInstr);
+};
+
+
 class StoreIndexedInstr : public TemplateDefinition<3> {
  public:
   StoreIndexedInstr(Value* array,
@@ -2912,7 +2894,9 @@
  public:
   AllocateObjectInstr(ConstructorCallNode* node,
                       ZoneGrowableArray<PushArgumentInstr*>* arguments)
-      : ast_node_(*node), arguments_(arguments) {
+      : ast_node_(*node),
+        arguments_(arguments),
+        cid_(Class::Handle(node->constructor().Owner()).id()) {
     // Either no arguments or one type-argument and one instantiator.
     ASSERT(arguments->is_empty() || (arguments->length() == 2));
   }
@@ -2934,11 +2918,12 @@
 
   virtual bool HasSideEffect() const { return true; }
 
-  virtual intptr_t ResultCid() const { return kDynamicCid; }
+  virtual intptr_t ResultCid() const { return cid_; }
 
  private:
   const ConstructorCallNode& ast_node_;
   ZoneGrowableArray<PushArgumentInstr*>* const arguments_;
+  const intptr_t cid_;
 
   DISALLOW_COPY_AND_ASSIGN(AllocateObjectInstr);
 };
@@ -3027,16 +3012,18 @@
 
 class CreateClosureInstr : public TemplateDefinition<0> {
  public:
-  CreateClosureInstr(ClosureNode* node,
-                     ZoneGrowableArray<PushArgumentInstr*>* arguments)
-      : ast_node_(*node),
-        arguments_(arguments) { }
+  CreateClosureInstr(const Function& function,
+                     ZoneGrowableArray<PushArgumentInstr*>* arguments,
+                     intptr_t token_pos)
+      : function_(function),
+        arguments_(arguments),
+        token_pos_(token_pos) { }
 
   DECLARE_INSTRUCTION(CreateClosure)
   virtual RawAbstractType* CompileType() const;
 
-  intptr_t token_pos() const { return ast_node_.token_pos(); }
-  const Function& function() const { return ast_node_.function(); }
+  intptr_t token_pos() const { return token_pos_; }
+  const Function& function() const { return function_; }
 
   virtual intptr_t ArgumentCount() const { return arguments_->length(); }
   PushArgumentInstr* ArgumentAt(intptr_t index) const {
@@ -3052,8 +3039,9 @@
   virtual intptr_t ResultCid() const { return kDynamicCid; }
 
  private:
-  const ClosureNode& ast_node_;
+  const Function& function_;
   ZoneGrowableArray<PushArgumentInstr*>* arguments_;
+  intptr_t token_pos_;
 
   DISALLOW_COPY_AND_ASSIGN(CreateClosureInstr);
 };
@@ -4085,7 +4073,7 @@
 
   virtual bool AttributesEqual(Instruction* other) const;
 
-  virtual bool AffectedBySideEffect() const { return false; }
+  virtual bool AffectedBySideEffect() const;
 
   Value* value() const { return inputs_[0]; }
 
@@ -4189,6 +4177,17 @@
     explicit ShallowIterator(Environment* environment)
         : environment_(environment), index_(0) { }
 
+    ShallowIterator(const ShallowIterator& other)
+        : ValueObject(),
+          environment_(other.environment_),
+          index_(other.index_) { }
+
+    ShallowIterator& operator=(const ShallowIterator& other) {
+      environment_ = other.environment_;
+      index_ = other.index_;
+      return *this;
+    }
+
     Environment* environment() const { return environment_; }
 
     void Advance() {
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
new file mode 100644
index 0000000..8838123
--- /dev/null
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -0,0 +1,725 @@
+// 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.
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_ARM.
+#if defined(TARGET_ARCH_ARM)
+
+#include "vm/intermediate_language.h"
+
+#include "lib/error.h"
+#include "vm/dart_entry.h"
+#include "vm/flow_graph_compiler.h"
+#include "vm/locations.h"
+#include "vm/object_store.h"
+#include "vm/parser.h"
+#include "vm/stub_code.h"
+#include "vm/symbols.h"
+
+namespace dart {
+
+DECLARE_FLAG(int, optimization_counter_threshold);
+DECLARE_FLAG(bool, propagate_ic_data);
+
+LocationSummary* Instruction::MakeCallSummary() {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+LocationSummary* PushArgumentInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void PushArgumentInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ReturnInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ReturnInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ClosureCallInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+LocationSummary* LoadLocalInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadLocalInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreLocalInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreLocalInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ConstantInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ConstantInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* AssertAssignableInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+LocationSummary* AssertBooleanInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AssertBooleanInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ArgumentDefinitionTestInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ArgumentDefinitionTestInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* EqualityCompareInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void EqualityCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void EqualityCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                          BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* RelationalOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void RelationalOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void RelationalOpInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                       BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* NativeCallInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void NativeCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StringFromCharCodeInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StringFromCharCodeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* LoadIndexedInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadIndexedInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreIndexedInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreInstanceFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* LoadStaticFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreStaticFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* InstanceOfInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void InstanceOfInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CreateArrayInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CreateArrayInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary*
+AllocateObjectWithBoundsCheckInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AllocateObjectWithBoundsCheckInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* LoadFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* InstantiateTypeArgumentsInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void InstantiateTypeArgumentsInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary*
+ExtractConstructorTypeArgumentsInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ExtractConstructorTypeArgumentsInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary*
+ExtractConstructorInstantiatorInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ExtractConstructorInstantiatorInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* AllocateContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AllocateContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CloneContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CloneContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CatchEntryInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CatchEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckStackOverflowInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckStackOverflowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BinarySmiOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BinarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckEitherNonSmiInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckEitherNonSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BoxDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BoxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnboxDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnboxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BinaryDoubleOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BinaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* MathSqrtInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void MathSqrtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnarySmiOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void SmiToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* DoubleToIntegerInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* DoubleToSmiInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void DoubleToSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* PolymorphicInstanceCallInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void PolymorphicInstanceCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BranchInstr::MakeLocationSummary() const {
+  UNREACHABLE();
+  return NULL;
+}
+
+
+void BranchInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckClassInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckSmiInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckArrayBoundInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnboxIntegerInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnboxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BoxIntegerInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BoxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BinaryMintOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BinaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ShiftMintOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ShiftMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnaryMintOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ThrowInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+
+void ThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ReThrowInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ReThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* GotoInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void ControlInstruction::EmitBranchOnValue(FlowGraphCompiler* compiler,
+                                           bool value) {
+  UNIMPLEMENTED();
+}
+
+
+void ControlInstruction::EmitBranchOnCondition(FlowGraphCompiler* compiler,
+                                               Condition true_condition) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CurrentContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CurrentContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StrictCompareInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                        BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BooleanNegateInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BooleanNegateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ChainContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ChainContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreVMFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreVMFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* AllocateObjectInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CreateClosureInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CreateClosureInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_ARM
+
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 9172a5c..c336720 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -8,6 +8,7 @@
 #include "vm/intermediate_language.h"
 
 #include "lib/error.h"
+#include "vm/dart_entry.h"
 #include "vm/flow_graph_compiler.h"
 #include "vm/locations.h"
 #include "vm/object_store.h"
@@ -267,8 +268,8 @@
     const intptr_t kNumTemps = 1;
     LocationSummary* locs =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    locs->set_in(0, Location::RequiresXmmRegister());
-    locs->set_in(1, Location::RequiresXmmRegister());
+    locs->set_in(0, Location::RequiresFpuRegister());
+    locs->set_in(1, Location::RequiresFpuRegister());
     locs->set_temp(0, Location::RequiresRegister());
     locs->set_out(Location::RequiresRegister());
     return locs;
@@ -277,8 +278,8 @@
     const intptr_t kNumTemps = 0;
     LocationSummary* locs =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    locs->set_in(0, Location::RequiresXmmRegister());
-    locs->set_in(1, Location::RequiresXmmRegister());
+    locs->set_in(0, Location::RequiresFpuRegister());
+    locs->set_in(1, Location::RequiresFpuRegister());
     locs->set_out(Location::RequiresRegister());
     return locs;
   }
@@ -341,7 +342,7 @@
   const Array& kNoArgumentNames = Array::Handle();
   const int kNumArgumentsChecked = 2;
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label check_identity;
   __ cmpl(Address(ESP, 0 * kWordSize), raw_null);
@@ -527,7 +528,7 @@
   __ testl(left, Immediate(kSmiTagMask));
   __ j(ZERO, deopt);
   // 'left' is not Smi.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label identity_compare;
   __ cmpl(right, raw_null);
@@ -578,7 +579,7 @@
   ASSERT(!ic_data.IsNull() && (ic_data.NumberOfChecks() > 0));
   Register left = locs->in(0).reg();
   Register right = locs->in(1).reg();
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label done, identity_compare, non_null_compare;
   __ cmpl(right, raw_null);
@@ -664,8 +665,8 @@
                                       Token::Kind kind,
                                       BranchInstr* branch) {
   ASSERT(Token::IsEqualityOperator(kind));
-  XmmRegister left = locs.in(0).xmm_reg();
-  XmmRegister right = locs.in(1).xmm_reg();
+  XmmRegister left = locs.in(0).fpu_reg();
+  XmmRegister right = locs.in(1).fpu_reg();
   Register temp = locs.temp(0).reg();
   __ movaps(XMM0, left);
   __ pcmpeqq(XMM0, right);
@@ -693,8 +694,8 @@
                                         const LocationSummary& locs,
                                         Token::Kind kind,
                                         BranchInstr* branch) {
-  XmmRegister left = locs.in(0).xmm_reg();
-  XmmRegister right = locs.in(1).xmm_reg();
+  XmmRegister left = locs.in(0).fpu_reg();
+  XmmRegister right = locs.in(1).fpu_reg();
   Register left_tmp = locs.temp(0).reg();
   Register right_tmp = locs.temp(1).reg();
   Register result = branch == NULL ? locs.out().reg() : kNoRegister;
@@ -773,8 +774,8 @@
                                    const LocationSummary& locs,
                                    Token::Kind kind,
                                    BranchInstr* branch) {
-  XmmRegister left = locs.in(0).xmm_reg();
-  XmmRegister right = locs.in(1).xmm_reg();
+  XmmRegister left = locs.in(0).fpu_reg();
+  XmmRegister right = locs.in(1).fpu_reg();
 
   Condition true_condition = TokenKindToDoubleCondition(kind);
   if (branch != NULL) {
@@ -883,8 +884,8 @@
     const intptr_t kNumTemps = 2;
     LocationSummary* locs =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    locs->set_in(0, Location::RequiresXmmRegister());
-    locs->set_in(1, Location::RequiresXmmRegister());
+    locs->set_in(0, Location::RequiresFpuRegister());
+    locs->set_in(1, Location::RequiresFpuRegister());
     locs->set_temp(0, Location::RequiresRegister());
     locs->set_temp(1, Location::RequiresRegister());
     locs->set_out(Location::RequiresRegister());
@@ -893,8 +894,8 @@
   if (operands_class_id() == kDoubleCid) {
     LocationSummary* summary =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    summary->set_in(0, Location::RequiresXmmRegister());
-    summary->set_in(1, Location::RequiresXmmRegister());
+    summary->set_in(0, Location::RequiresFpuRegister());
+    summary->set_in(1, Location::RequiresFpuRegister());
     summary->set_out(Location::RequiresRegister());
     return summary;
   } else if (operands_class_id() == kSmiCid) {
@@ -1066,51 +1067,6 @@
 }
 
 
-LocationSummary* StringCharCodeAtInstr::MakeLocationSummary() const {
-  const intptr_t kNumInputs = 2;
-  const intptr_t kNumTemps = 0;
-  LocationSummary* locs =
-      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_in(0, Location::RequiresRegister());
-  locs->set_in(1, CanBeImmediateIndex(index(), class_id())
-                    ? Location::RegisterOrSmiConstant(index())
-                    : Location::RequiresRegister());
-  locs->set_out(Location::RequiresRegister());
-  return locs;
-}
-
-
-void StringCharCodeAtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register str = locs()->in(0).reg();
-  Location index = locs()->in(1);
-  Register result = locs()->out().reg();
-
-  ASSERT((class_id() == kOneByteStringCid) ||
-         (class_id() == kTwoByteStringCid));
-
-  FieldAddress element_address = index.IsRegister() ?
-      FlowGraphCompiler::ElementAddressForRegIndex(
-          class_id(), str, index.reg()) :
-      FlowGraphCompiler::ElementAddressForIntIndex(
-          class_id(), str, Smi::Cast(index.constant()).Value());
-
-  if (class_id() == kOneByteStringCid) {
-    if (index.IsRegister()) {
-      __ SmiUntag(index.reg());
-    }
-    __ movzxb(result, element_address);
-    if (index.IsRegister()) {
-      __ SmiTag(index.reg());  // Retag index.
-    }
-    __ SmiTag(result);
-  } else {
-    // Don't untag smi-index and use TIMES_1 for two byte strings.
-    __ movzxw(result, element_address);
-    __ SmiTag(result);
-  }
-}
-
-
 LocationSummary* StringFromCharCodeInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
@@ -1141,11 +1097,14 @@
   LocationSummary* locs =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   locs->set_in(0, Location::RequiresRegister());
+  // The smi index is either untagged and tagged again at the end of the
+  // operation (element size == 1), or it is left smi tagged (for all element
+  // sizes > 1).
   locs->set_in(1, CanBeImmediateIndex(index(), class_id())
                     ? Location::RegisterOrSmiConstant(index())
                     : Location::RequiresRegister());
   if (representation() == kUnboxedDouble) {
-    locs->set_out(Location::RequiresXmmRegister());
+    locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
   }
@@ -1159,9 +1118,11 @@
 
   if (class_id() == kExternalUint8ArrayCid) {
     Register result = locs()->out().reg();
-    Address element_address = index.IsRegister()
-        ? Address(result, index.reg(), TIMES_1, 0)
-        : Address(result, Smi::Cast(index.constant()).Value());
+    const Address& element_address = index.IsRegister()
+        ? FlowGraphCompiler::ExternalElementAddressForRegIndex(
+            class_id(), result, index.reg())
+        : FlowGraphCompiler::ExternalElementAddressForIntIndex(
+            class_id(), result, Smi::Cast(index.constant()).Value());
     if (index.IsRegister()) {
       __ SmiUntag(index.reg());
     }
@@ -1177,19 +1138,19 @@
     return;
   }
 
-  FieldAddress element_address = index.IsRegister() ?
-      FlowGraphCompiler::ElementAddressForRegIndex(
-          class_id(), array, index.reg()) :
-      FlowGraphCompiler::ElementAddressForIntIndex(
+  FieldAddress element_address = index.IsRegister()
+      ? FlowGraphCompiler::ElementAddressForRegIndex(
+          class_id(), array, index.reg())
+      : FlowGraphCompiler::ElementAddressForIntIndex(
           class_id(), array, Smi::Cast(index.constant()).Value());
 
   if (representation() == kUnboxedDouble) {
-    XmmRegister result = locs()->out().xmm_reg();
+    XmmRegister result = locs()->out().fpu_reg();
     if (class_id() == kFloat32ArrayCid) {
       // Load single precision float.
       __ movss(result, element_address);
       // Promote to double.
-      __ cvtss2sd(result, locs()->out().xmm_reg());
+      __ cvtss2sd(result, locs()->out().fpu_reg());
     } else {
       ASSERT(class_id() == kFloat64ArrayCid);
       __ movsd(result, element_address);
@@ -1198,21 +1159,38 @@
   }
 
   Register result = locs()->out().reg();
-  if ((class_id() == kUint8ArrayCid) ||
-      (class_id() == kUint8ClampedArrayCid)) {
-    if (index.IsRegister()) {
-      __ SmiUntag(index.reg());
-    }
-    __ movzxb(result, element_address);
-    __ SmiTag(result);
-    if (index.IsRegister()) {
-      __ SmiTag(index.reg());  // Re-tag.
-    }
-    return;
+  switch (class_id()) {
+    case kInt8ArrayCid:
+    case kUint8ArrayCid:
+    case kUint8ClampedArrayCid:
+    case kOneByteStringCid:
+      if (index.IsRegister()) {
+        __ SmiUntag(index.reg());
+      }
+      if (class_id() == kInt8ArrayCid) {
+        __ movsxb(result, element_address);
+      } else {
+        __ movzxb(result, element_address);
+      }
+      __ SmiTag(result);
+      if (index.IsRegister()) {
+        __ SmiTag(index.reg());  // Re-tag.
+      }
+      break;
+    case kInt16ArrayCid:
+      __ movsxw(result, element_address);
+      __ SmiTag(result);
+      break;
+    case kUint16ArrayCid:
+    case kTwoByteStringCid:
+      __ movzxw(result, element_address);
+      __ SmiTag(result);
+      break;
+    default:
+      ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid));
+      __ movl(result, element_address);
+      break;
   }
-
-  ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid));
-  __ movl(result, element_address);
 }
 
 
@@ -1222,6 +1200,9 @@
   LocationSummary* locs =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   locs->set_in(0, Location::RequiresRegister());
+  // The smi index is either untagged and tagged again at the end of the
+  // operation (element size == 1), or it is left smi tagged (for all element
+  // sizes > 1).
   locs->set_in(1, CanBeImmediateIndex(index(), class_id())
                     ? Location::RegisterOrSmiConstant(index())
                     : Location::RequiresRegister());
@@ -1231,18 +1212,25 @@
                         ? Location::WritableRegister()
                         : Location::RegisterOrConstant(value()));
       break;
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
+    case kUint8ClampedArrayCid:
       // TODO(fschneider): Add location constraint for byte registers (EAX,
       // EBX, ECX, EDX) instead of using a fixed register.
       locs->set_in(2, Location::FixedRegisterOrSmiConstant(value(), EAX));
       break;
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
+      // Writable register because the value must be untagged before storing.
+      locs->set_in(2, Location::WritableRegister());
+      break;
     case kFloat32ArrayCid:
       // Need temp register for float-to-double conversion.
-      locs->AddTemp(Location::RequiresXmmRegister());
+      locs->AddTemp(Location::RequiresFpuRegister());
       // Fall through.
     case kFloat64ArrayCid:
       // TODO(srdjan): Support Float64 constants.
-      locs->set_in(2, Location::RequiresXmmRegister());
+      locs->set_in(2, Location::RequiresFpuRegister());
       break;
     default:
       UNREACHABLE();
@@ -1275,6 +1263,7 @@
         __ StoreIntoObjectNoBarrier(array, element_address, value);
       }
       break;
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
       if (index.IsRegister()) {
         __ SmiUntag(index.reg());
@@ -1292,14 +1281,56 @@
         __ SmiTag(index.reg());  // Re-tag.
       }
       break;
+    case kUint8ClampedArrayCid: {
+      if (index.IsRegister()) {
+        __ SmiUntag(index.reg());
+      }
+      if (locs()->in(2).IsConstant()) {
+        const Smi& constant = Smi::Cast(locs()->in(2).constant());
+        intptr_t value = constant.Value();
+        // Clamp to 0x0 or 0xFF respectively.
+        if (value > 0xFF) {
+          value = 0xFF;
+        } else if (value < 0) {
+          value = 0;
+        }
+        __ movb(element_address,
+                Immediate(static_cast<int8_t>(value)));
+      } else {
+        ASSERT(locs()->in(2).reg() == EAX);
+        Label store_value, store_0xff;
+        __ SmiUntag(EAX);
+        __ cmpl(EAX, Immediate(0xFF));
+        __ j(BELOW_EQUAL, &store_value, Assembler::kNearJump);
+        // Clamp to 0x0 or 0xFF respectively.
+        __ j(GREATER, &store_0xff);
+        __ xorl(EAX, EAX);
+        __ jmp(&store_value, Assembler::kNearJump);
+        __ Bind(&store_0xff);
+        __ movl(EAX, Immediate(0xFF));
+        __ Bind(&store_value);
+        __ movb(element_address, AL);
+      }
+      if (index.IsRegister()) {
+        __ SmiTag(index.reg());  // Re-tag.
+      }
+      break;
+    }
+    case kInt16ArrayCid:
+    case kUint16ArrayCid: {
+        Register value = locs()->in(2).reg();
+        __ SmiUntag(value);
+        __ movw(element_address, value);
+        break;
+      }
     case kFloat32ArrayCid:
       // Convert to single precision.
-      __ cvtsd2ss(locs()->temp(0).xmm_reg(), locs()->in(2).xmm_reg());
+      __ cvtsd2ss(locs()->temp(0).fpu_reg(), locs()->in(2).fpu_reg());
       // Store.
-      __ movss(element_address, locs()->temp(0).xmm_reg());
+      __ movss(element_address, locs()->temp(0).fpu_reg());
       break;
     case kFloat64ArrayCid:
-      __ movsd(element_address, locs()->in(2).xmm_reg());
+      __ movsd(element_address, locs()->in(2).fpu_reg());
       break;
     default:
       UNREACHABLE();
@@ -1418,7 +1449,7 @@
 void CreateArrayInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // Allocate the array.  EDX = length, ECX = element type.
   ASSERT(locs()->in(0).reg() == ECX);
-  __ movl(EDX,  Immediate(Smi::RawValue(ArgumentCount())));
+  __ movl(EDX, Immediate(Smi::RawValue(ArgumentCount())));
   compiler->GenerateCall(token_pos(),
                          &StubCode::AllocateArrayLabel(),
                          PcDescriptors::kOther,
@@ -1509,7 +1540,7 @@
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
   if (type_arguments().IsRawInstantiatedRaw(len)) {
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ cmpl(instantiator_reg, raw_null);
     __ j(EQUAL, &type_arguments_instantiated, Assembler::kNearJump);
@@ -1572,7 +1603,7 @@
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
   if (type_arguments().IsRawInstantiatedRaw(len)) {
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ cmpl(instantiator_reg, raw_null);
     __ j(EQUAL, &type_arguments_instantiated, Assembler::kNearJump);
@@ -1586,7 +1617,7 @@
     Label type_arguments_uninstantiated;
     __ CompareClassId(instantiator_reg, kTypeArgumentsCid, temp_reg);
     __ j(NOT_EQUAL, &type_arguments_uninstantiated, Assembler::kNearJump);
-    Immediate arguments_length =
+    const Immediate& arguments_length =
         Immediate(Smi::RawValue(type_arguments().Length()));
     __ cmpl(FieldAddress(instantiator_reg, TypeArguments::length_offset()),
         arguments_length);
@@ -1628,7 +1659,7 @@
   Label done;
   const intptr_t len = type_arguments().Length();
   if (type_arguments().IsRawInstantiatedRaw(len)) {
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     Label instantiator_not_null;
     __ cmpl(instantiator_reg, raw_null);
@@ -1654,7 +1685,7 @@
     // instantiator will have the wrong class (Null instead of TypeArguments).
     __ CompareClassId(instantiator_reg, kTypeArgumentsCid, temp_reg);
     __ j(NOT_EQUAL, &done, Assembler::kNearJump);
-    Immediate arguments_length =
+    const Immediate& arguments_length =
         Immediate(Smi::RawValue(type_arguments().Length()));
     __ cmpl(FieldAddress(instantiator_reg, TypeArguments::length_offset()),
         arguments_length);
@@ -2088,7 +2119,7 @@
       new LocationSummary(kNumInputs,
                           kNumTemps,
                           LocationSummary::kCallOnSlowPath);
-  summary->set_in(0, Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
   summary->set_out(Location::RequiresRegister());
   return summary;
 }
@@ -2131,7 +2162,7 @@
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
-  XmmRegister value = locs()->in(0).xmm_reg();
+  XmmRegister value = locs()->in(0).fpu_reg();
 
   AssemblerMacros::TryAllocate(compiler->assembler(),
                                compiler->double_class(),
@@ -2150,7 +2181,7 @@
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
   if (CanDeoptimize()) summary->set_temp(0, Location::RequiresRegister());
-  summary->set_out(Location::RequiresXmmRegister());
+  summary->set_out(Location::RequiresFpuRegister());
   return summary;
 }
 
@@ -2158,7 +2189,7 @@
 void UnboxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->ResultCid();
   const Register value = locs()->in(0).reg();
-  const XmmRegister result = locs()->out().xmm_reg();
+  const XmmRegister result = locs()->out().fpu_reg();
 
   if (value_cid == kDoubleCid) {
     __ movsd(result, FieldAddress(value, Double::value_offset()));
@@ -2168,7 +2199,7 @@
     __ SmiTag(value);  // Restore input register.
   } else {
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptBinaryDoubleOp);
-    compiler->LoadDoubleOrSmiToXmm(result,
+    compiler->LoadDoubleOrSmiToFpu(result,
                                    value,
                                    locs()->temp(0).reg(),
                                    deopt);
@@ -2181,18 +2212,18 @@
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RequiresXmmRegister());
-  summary->set_in(1, Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_in(1, Location::RequiresFpuRegister());
   summary->set_out(Location::SameAsFirstInput());
   return summary;
 }
 
 
 void BinaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  XmmRegister left = locs()->in(0).xmm_reg();
-  XmmRegister right = locs()->in(1).xmm_reg();
+  XmmRegister left = locs()->in(0).fpu_reg();
+  XmmRegister right = locs()->in(1).fpu_reg();
 
-  ASSERT(locs()->out().xmm_reg() == left);
+  ASSERT(locs()->out().fpu_reg() == left);
 
   switch (op_kind()) {
     case Token::kADD: __ addsd(left, right); break;
@@ -2209,14 +2240,14 @@
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RequiresXmmRegister());
-  summary->set_out(Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_out(Location::RequiresFpuRegister());
   return summary;
 }
 
 
 void MathSqrtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  __ sqrtsd(locs()->out().xmm_reg(), locs()->in(0).xmm_reg());
+  __ sqrtsd(locs()->out().fpu_reg(), locs()->in(0).fpu_reg());
 }
 
 
@@ -2336,7 +2367,7 @@
   const intptr_t kNumTemps = 0;
   LocationSummary* result = new LocationSummary(
       kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  result->set_in(0, Location::RequiresXmmRegister());
+  result->set_in(0, Location::RequiresFpuRegister());
   result->set_out(Location::RequiresRegister());
   return result;
 }
@@ -2345,7 +2376,7 @@
 void DoubleToSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptDoubleToSmi);
   Register result = locs()->out().reg();
-  XmmRegister value = locs()->in(0).xmm_reg();
+  XmmRegister value = locs()->in(0).fpu_reg();
   __ cvttsd2si(result, value);
   // Overflow is signalled with minint.
   Label do_call, done;
@@ -2362,23 +2393,35 @@
       (recognized_kind() == MethodRecognizer::kDoubleRound) ? 1 : 0;
   LocationSummary* result =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  result->set_in(0, Location::RequiresXmmRegister());
-  result->set_out(Location::RequiresXmmRegister());
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(Location::RequiresFpuRegister());
   if (recognized_kind() == MethodRecognizer::kDoubleRound) {
-    result->set_temp(0, Location::RequiresXmmRegister());
+    result->set_temp(0, Location::RequiresFpuRegister());
   }
   return result;
 }
 
 
 void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  XmmRegister value = locs()->in(0).xmm_reg();
-  XmmRegister result = locs()->out().xmm_reg();
-  if (recognized_kind() == MethodRecognizer::kDoubleTruncate) {
-    __ roundsd(result, value,  Assembler::kRoundToZero);
-  } else {
-    XmmRegister temp = locs()->temp(0).xmm_reg();
-    __ DoubleRound(result, value, temp);
+  XmmRegister value = locs()->in(0).fpu_reg();
+  XmmRegister result = locs()->out().fpu_reg();
+  switch (recognized_kind()) {
+    case MethodRecognizer::kDoubleTruncate:
+      __ roundsd(result, value,  Assembler::kRoundToZero);
+      break;
+    case MethodRecognizer::kDoubleFloor:
+      __ roundsd(result, value,  Assembler::kRoundDown);
+      break;
+    case MethodRecognizer::kDoubleCeil:
+      __ roundsd(result, value,  Assembler::kRoundUp);
+      break;
+    case MethodRecognizer::kDoubleRound: {
+      XmmRegister temp = locs()->temp(0).fpu_reg();
+      __ DoubleRound(result, value, temp);
+      break;
+    }
+    default:
+      UNREACHABLE();
   }
 }
 
@@ -2397,6 +2440,7 @@
   }
   ASSERT(ic_data().num_args_tested() == 1);
   if (!with_checks()) {
+    ASSERT(ic_data().HasOneTarget());
     const Function& target = Function::ZoneHandle(ic_data().GetTargetAt(0));
     compiler->GenerateStaticCall(instance_call()->deopt_id(),
                                  instance_call()->token_pos(),
@@ -2570,7 +2614,7 @@
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
   if (CanDeoptimize()) summary->set_temp(0, Location::RequiresRegister());
-  summary->set_out(Location::RequiresXmmRegister());
+  summary->set_out(Location::RequiresFpuRegister());
   return summary;
 }
 
@@ -2578,7 +2622,7 @@
 void UnboxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->ResultCid();
   const Register value = locs()->in(0).reg();
-  const XmmRegister result = locs()->out().xmm_reg();
+  const XmmRegister result = locs()->out().fpu_reg();
 
   if (value_cid == kMintCid) {
     __ movsd(result, FieldAddress(value, Mint::value_offset()));
@@ -2614,7 +2658,7 @@
       new LocationSummary(kNumInputs,
                           kNumTemps,
                           LocationSummary::kCallOnSlowPath);
-  summary->set_in(0, Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
   summary->set_temp(0, Location::RegisterLocation(EAX));
   summary->set_temp(1, Location::RegisterLocation(EDX));
   // TODO(fschneider): Save one temp by using result register as a temp.
@@ -2661,7 +2705,7 @@
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
-  XmmRegister value = locs()->in(0).xmm_reg();
+  XmmRegister value = locs()->in(0).fpu_reg();
 
   // Unboxed operations produce smis or mint-sized values.
   // Check if value fits into a smi.
@@ -2705,8 +2749,8 @@
       const intptr_t kNumTemps = 0;
       LocationSummary* summary =
           new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-      summary->set_in(0, Location::RequiresXmmRegister());
-      summary->set_in(1, Location::RequiresXmmRegister());
+      summary->set_in(0, Location::RequiresFpuRegister());
+      summary->set_in(1, Location::RequiresFpuRegister());
       summary->set_out(Location::SameAsFirstInput());
       return summary;
     }
@@ -2715,8 +2759,8 @@
       const intptr_t kNumTemps = 2;
       LocationSummary* summary =
           new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-      summary->set_in(0, Location::RequiresXmmRegister());
-      summary->set_in(1, Location::RequiresXmmRegister());
+      summary->set_in(0, Location::RequiresFpuRegister());
+      summary->set_in(1, Location::RequiresFpuRegister());
       summary->set_temp(0, Location::RequiresRegister());
       summary->set_temp(1, Location::RequiresRegister());
       summary->set_out(Location::SameAsFirstInput());
@@ -2730,10 +2774,10 @@
 
 
 void BinaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  XmmRegister left = locs()->in(0).xmm_reg();
-  XmmRegister right = locs()->in(1).xmm_reg();
+  XmmRegister left = locs()->in(0).fpu_reg();
+  XmmRegister right = locs()->in(1).fpu_reg();
 
-  ASSERT(locs()->out().xmm_reg() == left);
+  ASSERT(locs()->out().fpu_reg() == left);
 
   switch (op_kind()) {
     case Token::kBIT_AND: __ andpd(left, right); break;
@@ -2777,7 +2821,7 @@
   const intptr_t kNumTemps = op_kind() == Token::kSHL ? 2 : 1;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
   summary->set_in(1, Location::RegisterLocation(ECX));
   summary->set_temp(0, Location::RequiresRegister());
   if (op_kind() == Token::kSHL) {
@@ -2789,9 +2833,9 @@
 
 
 void ShiftMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  XmmRegister left = locs()->in(0).xmm_reg();
+  XmmRegister left = locs()->in(0).fpu_reg();
   ASSERT(locs()->in(1).reg() == ECX);
-  ASSERT(locs()->out().xmm_reg() == left);
+  ASSERT(locs()->out().fpu_reg() == left);
 
   Label* deopt  = compiler->AddDeoptStub(deopt_id(),
                                          kDeoptShiftMintOp);
@@ -2805,7 +2849,7 @@
   // shrd is undefined with count > operand size (32)
   // TODO(fschneider): Support shift counts > 31 without deoptimization.
   __ SmiUntag(ECX);
-  const Immediate kCountLimit = Immediate(31);
+  const Immediate& kCountLimit = Immediate(31);
   __ cmpl(ECX, kCountLimit);
   __ j(ABOVE, deopt);
   switch (op_kind()) {
@@ -2847,7 +2891,7 @@
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
   summary->set_out(Location::SameAsFirstInput());
   return summary;
 }
@@ -2855,15 +2899,326 @@
 
 void UnaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   ASSERT(op_kind() == Token::kBIT_NOT);
-  XmmRegister value = locs()->in(0).xmm_reg();
-  ASSERT(value == locs()->out().xmm_reg());
+  XmmRegister value = locs()->in(0).fpu_reg();
+  ASSERT(value == locs()->out().fpu_reg());
   __ pcmpeqq(XMM0, XMM0);  // Generate all 1's.
   __ pxor(value, XMM0);
 }
 
 
+LocationSummary* ThrowInstr::MakeLocationSummary() const {
+  return new LocationSummary(0, 0, LocationSummary::kCall);
+}
+
+
+
+void ThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  compiler->GenerateCallRuntime(token_pos(),
+                                kThrowRuntimeEntry,
+                                locs());
+  __ int3();
+}
+
+
+LocationSummary* ReThrowInstr::MakeLocationSummary() const {
+  return new LocationSummary(0, 0, LocationSummary::kCall);
+}
+
+
+void ReThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  compiler->GenerateCallRuntime(token_pos(),
+                                kReThrowRuntimeEntry,
+                                locs());
+  __ int3();
+}
+
+
+LocationSummary* GotoInstr::MakeLocationSummary() const {
+  return new LocationSummary(0, 0, LocationSummary::kNoCall);
+}
+
+
+void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  // Add deoptimization descriptor for deoptimizing instructions
+  // that may be inserted before this instruction.
+  if (!compiler->is_optimizing()) {
+    compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore,
+                                   GetDeoptId(),
+                                   0);  // No token position.
+  }
+
+  if (HasParallelMove()) {
+    compiler->parallel_move_resolver()->EmitNativeCode(parallel_move());
+  }
+
+  // We can fall through if the successor is the next block in the list.
+  // Otherwise, we need a jump.
+  if (!compiler->IsNextBlock(successor())) {
+    __ jmp(compiler->GetBlockLabel(successor()));
+  }
+}
+
+
+static Condition NegateCondition(Condition condition) {
+  switch (condition) {
+    case EQUAL:         return NOT_EQUAL;
+    case NOT_EQUAL:     return EQUAL;
+    case LESS:          return GREATER_EQUAL;
+    case LESS_EQUAL:    return GREATER;
+    case GREATER:       return LESS_EQUAL;
+    case GREATER_EQUAL: return LESS;
+    case BELOW:         return ABOVE_EQUAL;
+    case BELOW_EQUAL:   return ABOVE;
+    case ABOVE:         return BELOW_EQUAL;
+    case ABOVE_EQUAL:   return BELOW;
+    default:
+      OS::Print("Error %d\n", condition);
+      UNIMPLEMENTED();
+      return EQUAL;
+  }
+}
+
+
+void ControlInstruction::EmitBranchOnValue(FlowGraphCompiler* compiler,
+                                           bool value) {
+  if (value && compiler->IsNextBlock(false_successor())) {
+    __ jmp(compiler->GetBlockLabel(true_successor()));
+  } else if (!value && compiler->IsNextBlock(true_successor())) {
+    __ jmp(compiler->GetBlockLabel(false_successor()));
+  }
+}
+
+
+void ControlInstruction::EmitBranchOnCondition(FlowGraphCompiler* compiler,
+                                               Condition true_condition) {
+  if (compiler->IsNextBlock(false_successor())) {
+    // If the next block is the false successor we will fall through to it.
+    __ j(true_condition, compiler->GetBlockLabel(true_successor()));
+  } else {
+    // If the next block is the true successor we negate comparison and fall
+    // through to it.
+    ASSERT(compiler->IsNextBlock(true_successor()));
+    Condition false_condition = NegateCondition(true_condition);
+    __ j(false_condition, compiler->GetBlockLabel(false_successor()));
+  }
+}
+
+
+LocationSummary* CurrentContextInstr::MakeLocationSummary() const {
+  return LocationSummary::Make(0,
+                               Location::RequiresRegister(),
+                               LocationSummary::kNoCall);
+}
+
+
+void CurrentContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  __ MoveRegister(locs()->out().reg(), CTX);
+}
+
+
+LocationSummary* StrictCompareInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_in(0, Location::RegisterOrConstant(left()));
+  locs->set_in(1, Location::RegisterOrConstant(right()));
+  locs->set_out(Location::RequiresRegister());
+  return locs;
+}
+
+
+// Special code for numbers (compare values instead of references.)
+void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
+  Location left = locs()->in(0);
+  Location right = locs()->in(1);
+  if (left.IsConstant() && right.IsConstant()) {
+    // TODO(vegorov): should be eliminated earlier by constant propagation.
+    const bool result = (kind() == Token::kEQ_STRICT) ?
+        left.constant().raw() == right.constant().raw() :
+        left.constant().raw() != right.constant().raw();
+    __ LoadObject(locs()->out().reg(), result ? Bool::True() : Bool::False());
+    return;
+  }
+  if (left.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(right.reg(),
+                                          left.constant(),
+                                          needs_number_check());
+  } else if (right.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(left.reg(),
+                                          right.constant(),
+                                          needs_number_check());
+  } else {
+    compiler->EmitEqualityRegRegCompare(left.reg(),
+                                       right.reg(),
+                                       needs_number_check());
+  }
+
+  Register result = locs()->out().reg();
+  Label load_true, done;
+  Condition true_condition = (kind() == Token::kEQ_STRICT) ? EQUAL : NOT_EQUAL;
+  __ j(true_condition, &load_true, Assembler::kNearJump);
+  __ LoadObject(result, Bool::False());
+  __ jmp(&done, Assembler::kNearJump);
+  __ Bind(&load_true);
+  __ LoadObject(result, Bool::True());
+  __ Bind(&done);
+}
+
+
+void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                        BranchInstr* branch) {
+  ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
+  Location left = locs()->in(0);
+  Location right = locs()->in(1);
+  if (left.IsConstant() && right.IsConstant()) {
+    // TODO(vegorov): should be eliminated earlier by constant propagation.
+    const bool result = (kind() == Token::kEQ_STRICT) ?
+        left.constant().raw() == right.constant().raw() :
+        left.constant().raw() != right.constant().raw();
+    branch->EmitBranchOnValue(compiler, result);
+    return;
+  }
+  if (left.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(right.reg(),
+                                          left.constant(),
+                                          needs_number_check());
+  } else if (right.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(left.reg(),
+                                          right.constant(),
+                                          needs_number_check());
+  } else {
+    compiler->EmitEqualityRegRegCompare(left.reg(),
+                                        right.reg(),
+                                        needs_number_check());
+  }
+
+  Condition true_condition = (kind() == Token::kEQ_STRICT) ? EQUAL : NOT_EQUAL;
+  branch->EmitBranchOnCondition(compiler, true_condition);
+}
+
+
+void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  // The arguments to the stub include the closure, as does the arguments
+  // descriptor.
+  Register temp_reg = locs()->temp(0).reg();
+  int argument_count = ArgumentCount();
+  const Array& arguments_descriptor =
+      Array::ZoneHandle(ArgumentsDescriptor::New(argument_count,
+                                                 argument_names()));
+  __ LoadObject(temp_reg, arguments_descriptor);
+  compiler->GenerateDartCall(deopt_id(),
+                             token_pos(),
+                             &StubCode::CallClosureFunctionLabel(),
+                             PcDescriptors::kOther,
+                             locs());
+  __ Drop(argument_count);
+}
+
+
+LocationSummary* BooleanNegateInstr::MakeLocationSummary() const {
+  return LocationSummary::Make(1,
+                               Location::RequiresRegister(),
+                               LocationSummary::kNoCall);
+}
+
+
+void BooleanNegateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register value = locs()->in(0).reg();
+  Register result = locs()->out().reg();
+
+  Label done;
+  __ LoadObject(result, Bool::True());
+  __ CompareRegisters(result, value);
+  __ j(NOT_EQUAL, &done, Assembler::kNearJump);
+  __ LoadObject(result, Bool::False());
+  __ Bind(&done);
+}
+
+
+LocationSummary* ChainContextInstr::MakeLocationSummary() const {
+  return LocationSummary::Make(1,
+                               Location::NoLocation(),
+                               LocationSummary::kNoCall);
+}
+
+
+void ChainContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register context_value = locs()->in(0).reg();
+
+  // Chain the new context in context_value to its parent in CTX.
+  __ StoreIntoObject(context_value,
+                     FieldAddress(context_value, Context::parent_offset()),
+                     CTX);
+  // Set new context as current context.
+  __ MoveRegister(CTX, context_value);
+}
+
+
+LocationSummary* StoreVMFieldInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_in(0, value()->NeedsStoreBuffer() ? Location::WritableRegister()
+                                              : Location::RequiresRegister());
+  locs->set_in(1, Location::RequiresRegister());
+  return locs;
+}
+
+
+void StoreVMFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register value_reg = locs()->in(0).reg();
+  Register dest_reg = locs()->in(1).reg();
+
+  if (value()->NeedsStoreBuffer()) {
+    __ StoreIntoObject(dest_reg, FieldAddress(dest_reg, offset_in_bytes()),
+                       value_reg);
+  } else {
+    __ StoreIntoObjectNoBarrier(
+        dest_reg, FieldAddress(dest_reg, offset_in_bytes()), value_reg);
+  }
+}
+
+
+LocationSummary* AllocateObjectInstr::MakeLocationSummary() const {
+  return MakeCallSummary();
+}
+
+
+void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Class& cls = Class::ZoneHandle(constructor().Owner());
+  const Code& stub = Code::Handle(StubCode::GetAllocationStubForClass(cls));
+  const ExternalLabel label(cls.ToCString(), stub.EntryPoint());
+  compiler->GenerateCall(token_pos(),
+                         &label,
+                         PcDescriptors::kOther,
+                         locs());
+  __ Drop(ArgumentCount());  // Discard arguments.
+}
+
+
+LocationSummary* CreateClosureInstr::MakeLocationSummary() const {
+  return MakeCallSummary();
+}
+
+
+void CreateClosureInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Function& closure_function = function();
+  ASSERT(!closure_function.IsImplicitStaticClosureFunction());
+  const Code& stub = Code::Handle(
+      StubCode::GetAllocationStubForClosure(closure_function));
+  const ExternalLabel label(closure_function.ToCString(), stub.EntryPoint());
+  compiler->GenerateCall(token_pos(),
+                         &label,
+                         PcDescriptors::kOther,
+                         locs());
+  __ Drop(2);  // Discard type arguments and receiver.
+}
+
 }  // namespace dart
 
 #undef __
 
-#endif  // defined TARGET_ARCH_X64
+#endif  // defined TARGET_ARCH_IA32
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
new file mode 100644
index 0000000..5fdbc56
--- /dev/null
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -0,0 +1,725 @@
+// 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.
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_MIPS.
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/intermediate_language.h"
+
+#include "lib/error.h"
+#include "vm/dart_entry.h"
+#include "vm/flow_graph_compiler.h"
+#include "vm/locations.h"
+#include "vm/object_store.h"
+#include "vm/parser.h"
+#include "vm/stub_code.h"
+#include "vm/symbols.h"
+
+namespace dart {
+
+DECLARE_FLAG(int, optimization_counter_threshold);
+DECLARE_FLAG(bool, propagate_ic_data);
+
+LocationSummary* Instruction::MakeCallSummary() {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+LocationSummary* PushArgumentInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void PushArgumentInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ReturnInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ReturnInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ClosureCallInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+LocationSummary* LoadLocalInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadLocalInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreLocalInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreLocalInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ConstantInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ConstantInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* AssertAssignableInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+LocationSummary* AssertBooleanInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AssertBooleanInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ArgumentDefinitionTestInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ArgumentDefinitionTestInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* EqualityCompareInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void EqualityCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void EqualityCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                          BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* RelationalOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void RelationalOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void RelationalOpInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                       BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* NativeCallInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void NativeCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StringFromCharCodeInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StringFromCharCodeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* LoadIndexedInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadIndexedInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreIndexedInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreInstanceFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* LoadStaticFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreStaticFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreStaticFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* InstanceOfInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void InstanceOfInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CreateArrayInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CreateArrayInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary*
+AllocateObjectWithBoundsCheckInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AllocateObjectWithBoundsCheckInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* LoadFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void LoadFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* InstantiateTypeArgumentsInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void InstantiateTypeArgumentsInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary*
+ExtractConstructorTypeArgumentsInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ExtractConstructorTypeArgumentsInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary*
+ExtractConstructorInstantiatorInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ExtractConstructorInstantiatorInstr::EmitNativeCode(
+    FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* AllocateContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AllocateContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CloneContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CloneContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CatchEntryInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CatchEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckStackOverflowInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckStackOverflowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BinarySmiOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BinarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckEitherNonSmiInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckEitherNonSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BoxDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BoxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnboxDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnboxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BinaryDoubleOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BinaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* MathSqrtInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void MathSqrtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnarySmiOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void SmiToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* DoubleToIntegerInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void DoubleToIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* DoubleToSmiInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void DoubleToSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* PolymorphicInstanceCallInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void PolymorphicInstanceCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BranchInstr::MakeLocationSummary() const {
+  UNREACHABLE();
+  return NULL;
+}
+
+
+void BranchInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckClassInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckClassInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckSmiInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CheckArrayBoundInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnboxIntegerInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnboxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BoxIntegerInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BoxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BinaryMintOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BinaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ShiftMintOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ShiftMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* UnaryMintOpInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void UnaryMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ThrowInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+
+void ThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ReThrowInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ReThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* GotoInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void ControlInstruction::EmitBranchOnValue(FlowGraphCompiler* compiler,
+                                           bool value) {
+  UNIMPLEMENTED();
+}
+
+
+void ControlInstruction::EmitBranchOnCondition(FlowGraphCompiler* compiler,
+                                               Condition true_condition) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CurrentContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CurrentContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StrictCompareInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                        BranchInstr* branch) {
+  UNIMPLEMENTED();
+}
+
+
+void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* BooleanNegateInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void BooleanNegateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* ChainContextInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void ChainContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* StoreVMFieldInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void StoreVMFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* AllocateObjectInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+
+LocationSummary* CreateClosureInstr::MakeLocationSummary() const {
+  UNIMPLEMENTED();
+  return NULL;
+}
+
+
+void CreateClosureInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
+
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 2ac35d3..1a59275 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -8,6 +8,7 @@
 #include "vm/intermediate_language.h"
 
 #include "lib/error.h"
+#include "vm/dart_entry.h"
 #include "vm/flow_graph_compiler.h"
 #include "vm/locations.h"
 #include "vm/object_store.h"
@@ -274,8 +275,8 @@
     const intptr_t kNumTemps =  0;
     LocationSummary* locs =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    locs->set_in(0, Location::RequiresXmmRegister());
-    locs->set_in(1, Location::RequiresXmmRegister());
+    locs->set_in(0, Location::RequiresFpuRegister());
+    locs->set_in(1, Location::RequiresFpuRegister());
     locs->set_out(Location::RequiresRegister());
     return locs;
   }
@@ -338,7 +339,7 @@
   const Array& kNoArgumentNames = Array::Handle();
   const int kNumArgumentsChecked = 2;
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label check_identity;
   __ cmpq(Address(RSP, 0 * kWordSize), raw_null);
@@ -525,7 +526,7 @@
   __ testq(left, Immediate(kSmiTagMask));
   __ j(ZERO, deopt);
   // 'left' is not Smi.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label identity_compare;
   __ cmpq(right, raw_null);
@@ -576,7 +577,7 @@
   ASSERT(!ic_data.IsNull() && (ic_data.NumberOfChecks() > 0));
   Register left = locs->in(0).reg();
   Register right = locs->in(1).reg();
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   Label done, identity_compare, non_null_compare;
   __ cmpq(right, raw_null);
@@ -661,8 +662,8 @@
                                    const LocationSummary& locs,
                                    Token::Kind kind,
                                    BranchInstr* branch) {
-  XmmRegister left = locs.in(0).xmm_reg();
-  XmmRegister right = locs.in(1).xmm_reg();
+  XmmRegister left = locs.in(0).fpu_reg();
+  XmmRegister right = locs.in(1).fpu_reg();
 
   Condition true_condition = TokenKindToDoubleCondition(kind);
   if (branch != NULL) {
@@ -764,8 +765,8 @@
   if (operands_class_id() == kDoubleCid) {
     LocationSummary* summary =
         new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-    summary->set_in(0, Location::RequiresXmmRegister());
-    summary->set_in(1, Location::RequiresXmmRegister());
+    summary->set_in(0, Location::RequiresFpuRegister());
+    summary->set_in(1, Location::RequiresFpuRegister());
     summary->set_out(Location::RequiresRegister());
     return summary;
   } else if (operands_class_id() == kSmiCid) {
@@ -930,51 +931,6 @@
 }
 
 
-LocationSummary* StringCharCodeAtInstr::MakeLocationSummary() const {
-  const intptr_t kNumInputs = 2;
-  const intptr_t kNumTemps = 0;
-  LocationSummary* locs =
-      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  locs->set_in(0, Location::RequiresRegister());
-  locs->set_in(1, CanBeImmediateIndex(index(), class_id())
-                    ? Location::RegisterOrSmiConstant(index())
-                    : Location::RequiresRegister());
-  locs->set_out(Location::RequiresRegister());
-  return locs;
-}
-
-
-void StringCharCodeAtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register str = locs()->in(0).reg();
-  Location index = locs()->in(1);
-  Register result = locs()->out().reg();
-
-  ASSERT((class_id() == kOneByteStringCid) ||
-         (class_id() == kTwoByteStringCid));
-
-  FieldAddress element_address = index.IsRegister() ?
-      FlowGraphCompiler::ElementAddressForRegIndex(
-          class_id(), str, index.reg()) :
-      FlowGraphCompiler::ElementAddressForIntIndex(
-          class_id(), str, Smi::Cast(index.constant()).Value());
-
-  if (class_id() == kOneByteStringCid) {
-    if (index.IsRegister()) {
-      __ SmiUntag(index.reg());
-    }
-    __ movzxb(result, element_address);
-    if (index.IsRegister()) {
-      __ SmiTag(index.reg());  // Retag index.
-    }
-    __ SmiTag(result);
-  } else {
-    // Don't untag smi-index and use TIMES_1 for two byte strings.
-    __ movzxw(result, element_address);
-    __ SmiTag(result);
-  }
-}
-
-
 LocationSummary* StringFromCharCodeInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
@@ -1005,11 +961,14 @@
   LocationSummary* locs =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   locs->set_in(0, Location::RequiresRegister());
+  // The smi index is either untagged and tagged again at the end of the
+  // operation (element size == 1), or it is left smi tagged (for all element
+  // sizes > 1).
   locs->set_in(1, CanBeImmediateIndex(index(), class_id())
                     ? Location::RegisterOrSmiConstant(index())
                     : Location::RequiresRegister());
   if (representation() == kUnboxedDouble) {
-    locs->set_out(Location::RequiresXmmRegister());
+    locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
   }
@@ -1024,8 +983,10 @@
   if (class_id() == kExternalUint8ArrayCid) {
     Register result = locs()->out().reg();
     Address element_address = index.IsRegister()
-        ? Address(result, index.reg(), TIMES_1, 0)
-        : Address(result, Smi::Cast(index.constant()).Value());
+        ? FlowGraphCompiler::ExternalElementAddressForRegIndex(
+            class_id(), result, index.reg())
+        : FlowGraphCompiler::ExternalElementAddressForIntIndex(
+            class_id(), result, Smi::Cast(index.constant()).Value());
     if (index.IsRegister()) {
       __ SmiUntag(index.reg());
     }
@@ -1048,12 +1009,12 @@
           class_id(), array, Smi::Cast(index.constant()).Value());
 
   if (representation() == kUnboxedDouble) {
-    XmmRegister result = locs()->out().xmm_reg();
+    XmmRegister result = locs()->out().fpu_reg();
     if (class_id() == kFloat32ArrayCid) {
       // Load single precision float.
       __ movss(result, element_address);
       // Promote to double.
-      __ cvtss2sd(result, locs()->out().xmm_reg());
+      __ cvtss2sd(result, locs()->out().fpu_reg());
     } else {
       ASSERT(class_id() == kFloat64ArrayCid);
       __ movsd(result, element_address);
@@ -1062,29 +1023,49 @@
   }
 
   Register result = locs()->out().reg();
-  if ((class_id() == kUint8ArrayCid) ||
-      (class_id() == kUint8ClampedArrayCid)) {
-    if (index.IsRegister()) {
-      __ SmiUntag(index.reg());
-    }
-    __ movzxb(result, element_address);
-    __ SmiTag(result);
-    if (index.IsRegister()) {
-      __ SmiTag(index.reg());  // Re-tag.
-    }
-    return;
+  switch (class_id()) {
+    case kInt8ArrayCid:
+    case kUint8ArrayCid:
+    case kUint8ClampedArrayCid:
+    case kOneByteStringCid:
+      if (index.IsRegister()) {
+        __ SmiUntag(index.reg());
+      }
+      if (class_id() == kInt8ArrayCid) {
+        __ movsxb(result, element_address);
+      } else {
+        __ movzxb(result, element_address);
+      }
+      __ SmiTag(result);
+      if (index.IsRegister()) {
+        __ SmiTag(index.reg());  // Re-tag.
+      }
+      break;
+    case kInt16ArrayCid:
+      __ movsxw(result, element_address);
+      __ SmiTag(result);
+      break;
+    case kUint16ArrayCid:
+    case kTwoByteStringCid:
+      __ movzxw(result, element_address);
+      __ SmiTag(result);
+      break;
+    default:
+      ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid));
+      __ movq(result, element_address);
+      break;
   }
-
-  ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid));
-  __ movq(result, element_address);
 }
 
 
 LocationSummary* StoreIndexedInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
-  const intptr_t numTemps = 0;
+  const intptr_t kNumTemps = 0;
   LocationSummary* locs =
-      new LocationSummary(kNumInputs, numTemps, LocationSummary::kNoCall);
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  // The smi index is either untagged and tagged again at the end of the
+  // operation (element size == 1), or it is left smi tagged (for all element
+  // sizes > 1).
   locs->set_in(0, Location::RequiresRegister());
   locs->set_in(1, CanBeImmediateIndex(index(), class_id())
                     ? Location::RegisterOrSmiConstant(index())
@@ -1095,18 +1076,25 @@
                         ? Location::WritableRegister()
                         : Location::RegisterOrConstant(value()));
       break;
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
+    case kUint8ClampedArrayCid:
       // TODO(fschneider): Add location constraint for byte registers (RAX,
       // RBX, RCX, RDX) instead of using a fixed register.
       locs->set_in(2, Location::FixedRegisterOrSmiConstant(value(), RAX));
       break;
+    case kInt16ArrayCid:
+    case kUint16ArrayCid:
+      // Writable register because the value must be untagged before storing.
+      locs->set_in(2, Location::WritableRegister());
+      break;
     case kFloat32ArrayCid:
       // Need temp register for float-to-double conversion.
-      locs->AddTemp(Location::RequiresXmmRegister());
+      locs->AddTemp(Location::RequiresFpuRegister());
       // Fall through.
     case kFloat64ArrayCid:
       // TODO(srdjan): Support Float64 constants.
-      locs->set_in(2, Location::RequiresXmmRegister());
+      locs->set_in(2, Location::RequiresFpuRegister());
       break;
     default:
       UNREACHABLE();
@@ -1139,6 +1127,7 @@
         __ StoreIntoObjectNoBarrier(array, element_address, value);
       }
       break;
+    case kInt8ArrayCid:
     case kUint8ArrayCid:
       if (index.IsRegister()) {
         __ SmiUntag(index.reg());
@@ -1156,14 +1145,56 @@
         __ SmiTag(index.reg());  // Re-tag.
       }
       break;
+    case kUint8ClampedArrayCid: {
+      if (index.IsRegister()) {
+        __ SmiUntag(index.reg());
+      }
+      if (locs()->in(2).IsConstant()) {
+        const Smi& constant = Smi::Cast(locs()->in(2).constant());
+        intptr_t value = constant.Value();
+        // Clamp to 0x0 or 0xFF respectively.
+        if (value > 0xFF) {
+          value = 0xFF;
+        } else if (value < 0) {
+          value = 0;
+        }
+        __ movb(element_address,
+                Immediate(static_cast<int8_t>(value)));
+      } else {
+        ASSERT(locs()->in(2).reg() == RAX);
+        Label store_value, store_0xff;
+        __ SmiUntag(RAX);
+        __ cmpq(RAX, Immediate(0xFF));
+        __ j(BELOW_EQUAL, &store_value, Assembler::kNearJump);
+        // Clamp to 0x0 or 0xFF respectively.
+        __ j(GREATER, &store_0xff);
+        __ xorq(RAX, RAX);
+        __ jmp(&store_value, Assembler::kNearJump);
+        __ Bind(&store_0xff);
+        __ movq(RAX, Immediate(0xFF));
+        __ Bind(&store_value);
+        __ movb(element_address, RAX);
+      }
+      if (index.IsRegister()) {
+        __ SmiTag(index.reg());  // Re-tag.
+      }
+      break;
+    }
+    case kInt16ArrayCid:
+    case kUint16ArrayCid: {
+        Register value = locs()->in(2).reg();
+        __ SmiUntag(value);
+        __ movw(element_address, value);
+        break;
+      }
     case kFloat32ArrayCid:
       // Convert to single precision.
-      __ cvtsd2ss(locs()->temp(0).xmm_reg(), locs()->in(2).xmm_reg());
+      __ cvtsd2ss(locs()->temp(0).fpu_reg(), locs()->in(2).fpu_reg());
       // Store.
-      __ movss(element_address, locs()->temp(0).xmm_reg());
+      __ movss(element_address, locs()->temp(0).fpu_reg());
       break;
     case kFloat64ArrayCid:
-      __ movsd(element_address, locs()->in(2).xmm_reg());
+      __ movsd(element_address, locs()->in(2).fpu_reg());
       break;
     default:
       UNREACHABLE();
@@ -1368,7 +1399,7 @@
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
   if (type_arguments().IsRawInstantiatedRaw(len)) {
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ cmpq(instantiator_reg, raw_null);
     __ j(EQUAL, &type_arguments_instantiated, Assembler::kNearJump);
@@ -1429,7 +1460,7 @@
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
   if (type_arguments().IsRawInstantiatedRaw(len)) {
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     __ cmpq(instantiator_reg, raw_null);
     __ j(EQUAL, &type_arguments_instantiated, Assembler::kNearJump);
@@ -1443,7 +1474,7 @@
     Label type_arguments_uninstantiated;
     __ CompareClassId(instantiator_reg, kTypeArgumentsCid);
     __ j(NOT_EQUAL, &type_arguments_uninstantiated, Assembler::kNearJump);
-    Immediate arguments_length =
+    const Immediate& arguments_length =
         Immediate(Smi::RawValue(type_arguments().Length()));
     __ cmpq(FieldAddress(instantiator_reg, TypeArguments::length_offset()),
         arguments_length);
@@ -1483,7 +1514,7 @@
   Label done;
   const intptr_t len = type_arguments().Length();
   if (type_arguments().IsRawInstantiatedRaw(len)) {
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     Label instantiator_not_null;
     __ cmpq(instantiator_reg, raw_null);
@@ -1509,7 +1540,7 @@
     // instantiator will have the wrong class (Null instead of TypeArguments).
     __ CompareClassId(instantiator_reg, kTypeArgumentsCid);
     __ j(NOT_EQUAL, &done, Assembler::kNearJump);
-    Immediate arguments_length =
+    const Immediate& arguments_length =
         Immediate(Smi::RawValue(type_arguments().Length()));
     __ cmpq(FieldAddress(instantiator_reg, TypeArguments::length_offset()),
         arguments_length);
@@ -1969,7 +2000,7 @@
       new LocationSummary(kNumInputs,
                           kNumTemps,
                           LocationSummary::kCallOnSlowPath);
-  summary->set_in(0, Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
   summary->set_out(Location::RequiresRegister());
   return summary;
 }
@@ -2012,7 +2043,7 @@
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
-  XmmRegister value = locs()->in(0).xmm_reg();
+  XmmRegister value = locs()->in(0).fpu_reg();
 
   AssemblerMacros::TryAllocate(compiler->assembler(),
                                compiler->double_class(),
@@ -2031,7 +2062,7 @@
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
   if (CanDeoptimize()) summary->set_temp(0, Location::RequiresRegister());
-  summary->set_out(Location::RequiresXmmRegister());
+  summary->set_out(Location::RequiresFpuRegister());
   return summary;
 }
 
@@ -2039,7 +2070,7 @@
 void UnboxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->ResultCid();
   const Register value = locs()->in(0).reg();
-  const XmmRegister result = locs()->out().xmm_reg();
+  const XmmRegister result = locs()->out().fpu_reg();
 
   if (value_cid == kDoubleCid) {
     __ movsd(result, FieldAddress(value, Double::value_offset()));
@@ -2049,7 +2080,7 @@
     __ SmiTag(value);  // Restore input register.
   } else {
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptBinaryDoubleOp);
-    compiler->LoadDoubleOrSmiToXmm(result,
+    compiler->LoadDoubleOrSmiToFpu(result,
                                    value,
                                    locs()->temp(0).reg(),
                                    deopt);
@@ -2062,18 +2093,18 @@
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RequiresXmmRegister());
-  summary->set_in(1, Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_in(1, Location::RequiresFpuRegister());
   summary->set_out(Location::SameAsFirstInput());
   return summary;
 }
 
 
 void BinaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  XmmRegister left = locs()->in(0).xmm_reg();
-  XmmRegister right = locs()->in(1).xmm_reg();
+  XmmRegister left = locs()->in(0).fpu_reg();
+  XmmRegister right = locs()->in(1).fpu_reg();
 
-  ASSERT(locs()->out().xmm_reg() == left);
+  ASSERT(locs()->out().fpu_reg() == left);
 
   switch (op_kind()) {
     case Token::kADD: __ addsd(left, right); break;
@@ -2090,14 +2121,14 @@
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RequiresXmmRegister());
-  summary->set_out(Location::RequiresXmmRegister());
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_out(Location::RequiresFpuRegister());
   return summary;
 }
 
 
 void MathSqrtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  __ sqrtsd(locs()->out().xmm_reg(), locs()->in(0).xmm_reg());
+  __ sqrtsd(locs()->out().fpu_reg(), locs()->in(0).fpu_reg());
 }
 
 
@@ -2222,7 +2253,7 @@
   const intptr_t kNumTemps = 1;
   LocationSummary* result = new LocationSummary(
       kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  result->set_in(0, Location::RequiresXmmRegister());
+  result->set_in(0, Location::RequiresFpuRegister());
   result->set_out(Location:: Location::RequiresRegister());
   result->set_temp(0, Location::RequiresRegister());
   return result;
@@ -2232,7 +2263,7 @@
 void DoubleToSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptDoubleToSmi);
   Register result = locs()->out().reg();
-  XmmRegister value = locs()->in(0).xmm_reg();
+  XmmRegister value = locs()->in(0).fpu_reg();
   Register temp = locs()->temp(0).reg();
 
   __ cvttsd2siq(result, value);
@@ -2252,23 +2283,35 @@
       (recognized_kind() == MethodRecognizer::kDoubleRound) ? 1 : 0;
   LocationSummary* result =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  result->set_in(0, Location::RequiresXmmRegister());
-  result->set_out(Location::RequiresXmmRegister());
+  result->set_in(0, Location::RequiresFpuRegister());
+  result->set_out(Location::RequiresFpuRegister());
   if (recognized_kind() == MethodRecognizer::kDoubleRound) {
-    result->set_temp(0, Location::RequiresXmmRegister());
+    result->set_temp(0, Location::RequiresFpuRegister());
   }
   return result;
 }
 
 
 void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  XmmRegister value = locs()->in(0).xmm_reg();
-  XmmRegister result = locs()->out().xmm_reg();
-  if (recognized_kind() == MethodRecognizer::kDoubleTruncate) {
-    __ roundsd(result, value,  Assembler::kRoundToZero);
-  } else {
-    XmmRegister temp = locs()->temp(0).xmm_reg();
-    __ DoubleRound(result, value, temp);
+  XmmRegister value = locs()->in(0).fpu_reg();
+  XmmRegister result = locs()->out().fpu_reg();
+  switch (recognized_kind()) {
+    case MethodRecognizer::kDoubleTruncate:
+      __ roundsd(result, value,  Assembler::kRoundToZero);
+      break;
+    case MethodRecognizer::kDoubleFloor:
+      __ roundsd(result, value,  Assembler::kRoundDown);
+      break;
+    case MethodRecognizer::kDoubleCeil:
+      __ roundsd(result, value,  Assembler::kRoundUp);
+      break;
+    case MethodRecognizer::kDoubleRound: {
+      XmmRegister temp = locs()->temp(0).fpu_reg();
+      __ DoubleRound(result, value, temp);
+      break;
+    }
+    default:
+      UNREACHABLE();
   }
 }
 
@@ -2287,6 +2330,7 @@
   }
   ASSERT(ic_data().num_args_tested() == 1);
   if (!with_checks()) {
+    ASSERT(ic_data().HasOneTarget());
     const Function& target = Function::ZoneHandle(ic_data().GetTargetAt(0));
     compiler->GenerateStaticCall(instance_call()->deopt_id(),
                                  instance_call()->token_pos(),
@@ -2506,6 +2550,317 @@
   UNIMPLEMENTED();
 }
 
+
+LocationSummary* ThrowInstr::MakeLocationSummary() const {
+  return new LocationSummary(0, 0, LocationSummary::kCall);
+}
+
+
+void ThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  compiler->GenerateCallRuntime(token_pos(),
+                                kThrowRuntimeEntry,
+                                locs());
+  __ int3();
+}
+
+
+LocationSummary* ReThrowInstr::MakeLocationSummary() const {
+  return new LocationSummary(0, 0, LocationSummary::kCall);
+}
+
+
+void ReThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  compiler->GenerateCallRuntime(token_pos(),
+                                kReThrowRuntimeEntry,
+                                locs());
+  __ int3();
+}
+
+
+LocationSummary* GotoInstr::MakeLocationSummary() const {
+  return new LocationSummary(0, 0, LocationSummary::kNoCall);
+}
+
+
+void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  // Add deoptimization descriptor for deoptimizing instructions
+  // that may be inserted before this instruction.
+  if (!compiler->is_optimizing()) {
+    compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore,
+                                   GetDeoptId(),
+                                   0);  // No token position.
+  }
+
+  if (HasParallelMove()) {
+    compiler->parallel_move_resolver()->EmitNativeCode(parallel_move());
+  }
+
+  // We can fall through if the successor is the next block in the list.
+  // Otherwise, we need a jump.
+  if (!compiler->IsNextBlock(successor())) {
+    __ jmp(compiler->GetBlockLabel(successor()));
+  }
+}
+
+
+static Condition NegateCondition(Condition condition) {
+  switch (condition) {
+    case EQUAL:         return NOT_EQUAL;
+    case NOT_EQUAL:     return EQUAL;
+    case LESS:          return GREATER_EQUAL;
+    case LESS_EQUAL:    return GREATER;
+    case GREATER:       return LESS_EQUAL;
+    case GREATER_EQUAL: return LESS;
+    case BELOW:         return ABOVE_EQUAL;
+    case BELOW_EQUAL:   return ABOVE;
+    case ABOVE:         return BELOW_EQUAL;
+    case ABOVE_EQUAL:   return BELOW;
+    default:
+      OS::Print("Error %d\n", condition);
+      UNIMPLEMENTED();
+      return EQUAL;
+  }
+}
+
+
+void ControlInstruction::EmitBranchOnValue(FlowGraphCompiler* compiler,
+                                           bool value) {
+  if (value && compiler->IsNextBlock(false_successor())) {
+    __ jmp(compiler->GetBlockLabel(true_successor()));
+  } else if (!value && compiler->IsNextBlock(true_successor())) {
+    __ jmp(compiler->GetBlockLabel(false_successor()));
+  }
+}
+
+
+void ControlInstruction::EmitBranchOnCondition(FlowGraphCompiler* compiler,
+                                               Condition true_condition) {
+  if (compiler->IsNextBlock(false_successor())) {
+    // If the next block is the false successor we will fall through to it.
+    __ j(true_condition, compiler->GetBlockLabel(true_successor()));
+  } else {
+    // If the next block is the true successor we negate comparison and fall
+    // through to it.
+    ASSERT(compiler->IsNextBlock(true_successor()));
+    Condition false_condition = NegateCondition(true_condition);
+    __ j(false_condition, compiler->GetBlockLabel(false_successor()));
+  }
+}
+
+
+LocationSummary* CurrentContextInstr::MakeLocationSummary() const {
+  return LocationSummary::Make(0,
+                               Location::RequiresRegister(),
+                               LocationSummary::kNoCall);
+}
+
+
+void CurrentContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  __ MoveRegister(locs()->out().reg(), CTX);
+}
+
+
+LocationSummary* StrictCompareInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_in(0, Location::RegisterOrConstant(left()));
+  locs->set_in(1, Location::RegisterOrConstant(right()));
+  locs->set_out(Location::RequiresRegister());
+  return locs;
+}
+
+
+// Special code for numbers (compare values instead of references.)
+void StrictCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
+  Location left = locs()->in(0);
+  Location right = locs()->in(1);
+  if (left.IsConstant() && right.IsConstant()) {
+    // TODO(vegorov): should be eliminated earlier by constant propagation.
+    const bool result = (kind() == Token::kEQ_STRICT) ?
+        left.constant().raw() == right.constant().raw() :
+        left.constant().raw() != right.constant().raw();
+    __ LoadObject(locs()->out().reg(), result ? Bool::True() : Bool::False());
+    return;
+  }
+  if (left.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(right.reg(),
+                                          left.constant(),
+                                          needs_number_check());
+  } else if (right.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(left.reg(),
+                                          right.constant(),
+                                          needs_number_check());
+  } else {
+    compiler->EmitEqualityRegRegCompare(left.reg(),
+                                       right.reg(),
+                                       needs_number_check());
+  }
+
+  Register result = locs()->out().reg();
+  Label load_true, done;
+  Condition true_condition = (kind() == Token::kEQ_STRICT) ? EQUAL : NOT_EQUAL;
+  __ j(true_condition, &load_true, Assembler::kNearJump);
+  __ LoadObject(result, Bool::False());
+  __ jmp(&done, Assembler::kNearJump);
+  __ Bind(&load_true);
+  __ LoadObject(result, Bool::True());
+  __ Bind(&done);
+}
+
+
+void StrictCompareInstr::EmitBranchCode(FlowGraphCompiler* compiler,
+                                        BranchInstr* branch) {
+  ASSERT(kind() == Token::kEQ_STRICT || kind() == Token::kNE_STRICT);
+  Location left = locs()->in(0);
+  Location right = locs()->in(1);
+  if (left.IsConstant() && right.IsConstant()) {
+    // TODO(vegorov): should be eliminated earlier by constant propagation.
+    const bool result = (kind() == Token::kEQ_STRICT) ?
+        left.constant().raw() == right.constant().raw() :
+        left.constant().raw() != right.constant().raw();
+    branch->EmitBranchOnValue(compiler, result);
+    return;
+  }
+  if (left.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(right.reg(),
+                                          left.constant(),
+                                          needs_number_check());
+  } else if (right.IsConstant()) {
+    compiler->EmitEqualityRegConstCompare(left.reg(),
+                                          right.constant(),
+                                          needs_number_check());
+  } else {
+    compiler->EmitEqualityRegRegCompare(left.reg(),
+                                        right.reg(),
+                                        needs_number_check());
+  }
+
+  Condition true_condition = (kind() == Token::kEQ_STRICT) ? EQUAL : NOT_EQUAL;
+  branch->EmitBranchOnCondition(compiler, true_condition);
+}
+
+
+void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  // The arguments to the stub include the closure, as does the arguments
+  // descriptor.
+  Register temp_reg = locs()->temp(0).reg();
+  int argument_count = ArgumentCount();
+  const Array& arguments_descriptor =
+      Array::ZoneHandle(ArgumentsDescriptor::New(argument_count,
+                                                 argument_names()));
+  __ LoadObject(temp_reg, arguments_descriptor);
+  compiler->GenerateDartCall(deopt_id(),
+                             token_pos(),
+                             &StubCode::CallClosureFunctionLabel(),
+                             PcDescriptors::kOther,
+                             locs());
+  __ Drop(argument_count);
+}
+
+
+LocationSummary* BooleanNegateInstr::MakeLocationSummary() const {
+  return LocationSummary::Make(1,
+                               Location::RequiresRegister(),
+                               LocationSummary::kNoCall);
+}
+
+
+void BooleanNegateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register value = locs()->in(0).reg();
+  Register result = locs()->out().reg();
+
+  Label done;
+  __ LoadObject(result, Bool::True());
+  __ CompareRegisters(result, value);
+  __ j(NOT_EQUAL, &done, Assembler::kNearJump);
+  __ LoadObject(result, Bool::False());
+  __ Bind(&done);
+}
+
+
+LocationSummary* ChainContextInstr::MakeLocationSummary() const {
+  return LocationSummary::Make(1,
+                               Location::NoLocation(),
+                               LocationSummary::kNoCall);
+}
+
+
+void ChainContextInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register context_value = locs()->in(0).reg();
+
+  // Chain the new context in context_value to its parent in CTX.
+  __ StoreIntoObject(context_value,
+                     FieldAddress(context_value, Context::parent_offset()),
+                     CTX);
+  // Set new context as current context.
+  __ MoveRegister(CTX, context_value);
+}
+
+
+LocationSummary* StoreVMFieldInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_in(0, value()->NeedsStoreBuffer() ? Location::WritableRegister()
+                                              : Location::RequiresRegister());
+  locs->set_in(1, Location::RequiresRegister());
+  return locs;
+}
+
+
+void StoreVMFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register value_reg = locs()->in(0).reg();
+  Register dest_reg = locs()->in(1).reg();
+
+  if (value()->NeedsStoreBuffer()) {
+    __ StoreIntoObject(dest_reg, FieldAddress(dest_reg, offset_in_bytes()),
+                       value_reg);
+  } else {
+    __ StoreIntoObjectNoBarrier(
+        dest_reg, FieldAddress(dest_reg, offset_in_bytes()), value_reg);
+  }
+}
+
+
+LocationSummary* AllocateObjectInstr::MakeLocationSummary() const {
+  return MakeCallSummary();
+}
+
+
+void AllocateObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Class& cls = Class::ZoneHandle(constructor().Owner());
+  const Code& stub = Code::Handle(StubCode::GetAllocationStubForClass(cls));
+  const ExternalLabel label(cls.ToCString(), stub.EntryPoint());
+  compiler->GenerateCall(token_pos(),
+                         &label,
+                         PcDescriptors::kOther,
+                         locs());
+  __ Drop(ArgumentCount());  // Discard arguments.
+}
+
+
+LocationSummary* CreateClosureInstr::MakeLocationSummary() const {
+  return MakeCallSummary();
+}
+
+
+void CreateClosureInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Function& closure_function = function();
+  ASSERT(!closure_function.IsImplicitStaticClosureFunction());
+  const Code& stub = Code::Handle(
+      StubCode::GetAllocationStubForClosure(closure_function));
+  const ExternalLabel label(closure_function.ToCString(), stub.EntryPoint());
+  compiler->GenerateCall(token_pos(),
+                         &label,
+                         PcDescriptors::kOther,
+                         locs());
+  __ Drop(2);  // Discard type arguments and receiver.
+}
+
 }  // namespace dart
 
 #undef __
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
index 05b7116..de3defe 100644
--- a/runtime/vm/intrinsifier_arm.cc
+++ b/runtime/vm/intrinsifier_arm.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -74,12 +74,97 @@
 }
 
 
+bool Intrinsifier::GrowableArray_add(Assembler* assembler) {
+  return false;
+}
+
+
 bool Intrinsifier::ByteArrayBase_getLength(Assembler* assembler) {
   return false;
 }
 
 
-bool Intrinsifier::ByteArrayBase_getIndexed(Assembler* assembler) {
+bool Intrinsifier::Int8Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int8Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint8Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint8Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::UintClamped8Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint8ClampedArray_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int16Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint16Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int32Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint32Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int64Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint64Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float32Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float32Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float64Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float64Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::ExternalUint8Array_getIndexed(Assembler* assembler) {
   return false;
 }
 
@@ -104,7 +189,6 @@
 }
 
 
-
 bool Intrinsifier::Integer_mulFromInteger(Assembler* assembler) {
   return false;
 }
@@ -165,12 +249,12 @@
 }
 
 
-bool Intrinsifier::Integer_lessThan(Assembler* assembler) {
+bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) {
   return false;
 }
 
 
-bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) {
+bool Intrinsifier::Integer_lessThan(Assembler* assembler) {
   return false;
 }
 
@@ -275,6 +359,11 @@
 }
 
 
+bool Intrinsifier::Double_toInt(Assembler* assembler) {
+  return false;
+}
+
+
 bool Intrinsifier::Math_sqrt(Assembler* assembler) {
   return false;
 }
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index 3022eab..29b1477 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 //
@@ -46,7 +46,7 @@
   __ cmpl(EDI, Immediate(0));
   __ j(LESS, &fall_through);
   // Check for maximum allowed length.
-  const Immediate max_len =
+  const Immediate& max_len =
       Immediate(reinterpret_cast<int32_t>(Smi::New(Array::kMaxElements)));
   __ cmpl(EDI, max_len);
   __ j(GREATER, &fall_through);
@@ -117,7 +117,7 @@
   // EBX: new object end address.
   // EDI: iterator which initially points to the start of the variable
   // data area to be initialized.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ leal(EDI, FieldAddress(EAX, sizeof(RawArray)));
   Label done;
@@ -194,7 +194,7 @@
     const intptr_t type_args_field_offset =
         ComputeObjectArrayTypeArgumentsOffset();
     // Inline simple tests (Smi, null), fallthrough if not positive.
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     Label checked_ok;
     __ movl(EDI, Address(ESP, + 1 * kWordSize));  // Value.
@@ -441,7 +441,8 @@
   // Compare length with capacity.
   __ cmpl(EBX, FieldAddress(EDI, Array::length_offset()));
   __ j(EQUAL, &fall_through, Assembler::kNearJump);  // Must grow data.
-  const Immediate value_one = Immediate(reinterpret_cast<int32_t>(Smi::New(1)));
+  const Immediate& value_one =
+      Immediate(reinterpret_cast<int32_t>(Smi::New(1)));
   // len = len + 1;
   __ addl(FieldAddress(EAX, GrowableObjectArray::length_offset()), value_one);
   __ movl(EAX, Address(ESP, + 1 * kWordSize));  // Value
@@ -449,7 +450,7 @@
   __ StoreIntoObject(EDI,
                      FieldAddress(EDI, EBX, TIMES_2, Array::data_offset()),
                      EAX);
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<int32_t>(Object::null()));
   __ movl(EAX, raw_null);
   __ ret();
@@ -1255,7 +1256,7 @@
   Label fall_through, shift_count_ok;
   TestBothArgumentsSmis(assembler, &fall_through);
   // Can destroy ECX since we are not falling through.
-  Immediate count_limit = Immediate(0x1F);
+  const Immediate& count_limit = Immediate(0x1F);
   // Check that the count is not larger than what the hardware can handle.
   // For shifting right a Smi the result is the same for all numbers
   // >= count_limit.
diff --git a/runtime/vm/intrinsifier_mips.cc b/runtime/vm/intrinsifier_mips.cc
new file mode 100644
index 0000000..bd4d751
--- /dev/null
+++ b/runtime/vm/intrinsifier_mips.cc
@@ -0,0 +1,408 @@
+// 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.
+
+#include "vm/globals.h"  // Needed here to get TARGET_ARCH_MIPS.
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/intrinsifier.h"
+
+namespace dart {
+
+bool Intrinsifier::ObjectArray_Allocate(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Array_getLength(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::ImmutableArray_getLength(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::ImmutableArray_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GArray_Allocate(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GrowableArray_getLength(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GrowableArray_getCapacity(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GrowableArray_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GrowableArray_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GrowableArray_setLength(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GrowableArray_setData(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::GrowableArray_add(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::ByteArrayBase_getLength(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int8Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int8Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint8Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint8Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::UintClamped8Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint8ClampedArray_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int16Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint16Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int32Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint32Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Int64Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Uint64Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float32Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float32Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float64Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Float64Array_setIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::ExternalUint8Array_getIndexed(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_addFromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_add(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_subFromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_sub(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_mulFromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_mul(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_modulo(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_truncDivide(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_negate(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_bitAndFromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_bitAnd(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_bitOrFromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_bitOr(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_bitXorFromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_bitXor(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_shl(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_lessThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_greaterThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_lessEqualThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_greaterEqualThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_equal(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Integer_sar(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Smi_bitNegate(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_greaterThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_greaterEqualThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_lessThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_equal(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_lessEqualThan(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_add(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_mul(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_sub(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_div(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_mulFromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_fromInteger(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_getIsNaN(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_getIsNegative(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Double_toInt(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Math_sqrt(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Math_sin(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Math_cos(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::Object_equal(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::String_getHashCode(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::String_getLength(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::String_charCodeAt(Assembler* assembler) {
+  return false;
+}
+
+
+bool Intrinsifier::String_getIsEmpty(Assembler* assembler) {
+  return false;
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
index 2460256..855a316 100644
--- a/runtime/vm/intrinsifier_x64.cc
+++ b/runtime/vm/intrinsifier_x64.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -45,7 +45,7 @@
   __ cmpq(RDI, Immediate(0));
   __ j(LESS, &fall_through);
   // Check for maximum allowed length.
-  const Immediate max_len =
+  const Immediate& max_len =
       Immediate(reinterpret_cast<int64_t>(Smi::New(Array::kMaxElements)));
   __ cmpq(RDI, max_len);
   __ j(GREATER, &fall_through);
@@ -117,7 +117,7 @@
   // RCX: new object end address.
   // RDI: iterator which initially points to the start of the variable
   // data area to be initialized.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ leaq(RDI, FieldAddress(RAX, sizeof(RawArray)));
   Label done;
@@ -394,7 +394,8 @@
   // Compare length with capacity.
   __ cmpq(RCX, FieldAddress(RDX, Array::length_offset()));
   __ j(EQUAL, &fall_through, Assembler::kNearJump);  // Must grow data.
-  const Immediate value_one = Immediate(reinterpret_cast<int64_t>(Smi::New(1)));
+  const Immediate& value_one =
+      Immediate(reinterpret_cast<int64_t>(Smi::New(1)));
   // len = len + 1;
   __ addq(FieldAddress(RAX, GrowableObjectArray::length_offset()), value_one);
   __ movq(RAX, Address(RSP, + 1 * kWordSize));  // Value
@@ -402,7 +403,7 @@
   __ StoreIntoObject(RDX,
                      FieldAddress(RDX, RCX, TIMES_4, Array::data_offset()),
                      RAX);
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<int64_t>(Object::null()));
   __ movq(RAX, raw_null);
   __ ret();
@@ -1133,7 +1134,7 @@
 bool Intrinsifier::Integer_sar(Assembler* assembler) {
   Label fall_through, shift_count_ok;
   TestBothArgumentsSmis(assembler, &fall_through);
-  Immediate count_limit = Immediate(0x3F);
+  const Immediate& count_limit = Immediate(0x3F);
   // Check that the count is not larger than what the hardware can handle.
   // For shifting right a Smi the result is the same for all numbers
   // >= count_limit.
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index f76e292..72aa5cd 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -282,7 +282,7 @@
       gc_prologue_callbacks_(),
       gc_epilogue_callbacks_(),
       deopt_cpu_registers_copy_(NULL),
-      deopt_xmm_registers_copy_(NULL),
+      deopt_fpu_registers_copy_(NULL),
       deopt_frame_copy_(NULL),
       deopt_frame_copy_size_(0),
       deferred_doubles_(NULL),
@@ -432,7 +432,7 @@
     return &ICData::ZoneHandle();
   }
   ICData& ic_data_handle = ICData::ZoneHandle();
-  ic_data_handle ^= array_handle.At(deopt_id);
+  ic_data_handle |= array_handle.At(deopt_id);
   return &ic_data_handle;
 }
 
@@ -457,7 +457,7 @@
   const int func_len = class_functions.IsNull() ? 0 : class_functions.Length();
   for (int j = 0; j < func_len; j++) {
     Function& function = Function::Handle();
-    function ^= class_functions.At(j);
+    function |= class_functions.At(j);
     if (function.usage_counter() > 0) {
       functions->Add(&function);
     }
@@ -474,7 +474,7 @@
   Library& library = Library::Handle();
   GrowableArray<const Function*> invoked_functions;
   for (int i = 0; i < libraries.Length(); i++) {
-    library ^= libraries.At(i);
+    library |= libraries.At(i);
     Class& cls = Class::Handle();
     ClassDictionaryIterator iter(library);
     while (iter.HasNext()) {
@@ -483,7 +483,7 @@
     }
     Array& anon_classes = Array::Handle(library.raw_ptr()->anonymous_classes_);
     for (int i = 0; i < library.raw_ptr()->num_anonymous_; i++) {
-      cls ^= anon_classes.At(i);
+      cls |= anon_classes.At(i);
       AddFunctionsFromClass(cls, &invoked_functions);
     }
   }
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 597ecea..f79bd4f 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -300,12 +300,12 @@
     ASSERT((value == NULL) || (deopt_cpu_registers_copy_ == NULL));
     deopt_cpu_registers_copy_ = value;
   }
-  double* deopt_xmm_registers_copy() const {
-    return deopt_xmm_registers_copy_;
+  double* deopt_fpu_registers_copy() const {
+    return deopt_fpu_registers_copy_;
   }
-  void set_deopt_xmm_registers_copy(double* value) {
-    ASSERT((value == NULL) || (deopt_xmm_registers_copy_ == NULL));
-    deopt_xmm_registers_copy_ = value;
+  void set_deopt_fpu_registers_copy(double* value) {
+    ASSERT((value == NULL) || (deopt_fpu_registers_copy_ == NULL));
+    deopt_fpu_registers_copy_ = value;
   }
   intptr_t* deopt_frame_copy() const { return deopt_frame_copy_; }
   void SetDeoptFrameCopy(intptr_t* value, intptr_t size) {
@@ -378,7 +378,7 @@
 
   // Deoptimization support.
   intptr_t* deopt_cpu_registers_copy_;
-  double* deopt_xmm_registers_copy_;
+  double* deopt_fpu_registers_copy_;
   intptr_t* deopt_frame_copy_;
   intptr_t deopt_frame_copy_size_;
   DeferredDouble* deferred_doubles_;
diff --git a/runtime/vm/locations.cc b/runtime/vm/locations.cc
index 21f8423..49db8ae 100644
--- a/runtime/vm/locations.cc
+++ b/runtime/vm/locations.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -103,7 +103,7 @@
   switch (kind()) {
     case kInvalid: return "?";
     case kRegister: return Assembler::RegisterName(reg());
-    case kXmmRegister: return Assembler::XmmRegisterName(xmm_reg());
+    case kFpuRegister: return Assembler::FpuRegisterName(fpu_reg());
     case kStackSlot: return "S";
     case kDoubleStackSlot: return "DS";
     case kUnallocated:
@@ -114,7 +114,7 @@
           return "P";
         case kRequiresRegister:
           return "R";
-        case kRequiresXmmRegister:
+        case kRequiresFpuRegister:
           return "DR";
         case kWritableRegister:
           return "WR";
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index 8ab272f..fcd9c81 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -63,15 +63,22 @@
     // register code.
     kRegister = 6,
 
-    // XmmRegister location represents a fixed xmm register.  Payload contains
+    // FpuRegister location represents a fixed fpu register.  Payload contains
     // its code.
-    kXmmRegister = 7,
+    kFpuRegister = 7,
   };
 
   Location() : value_(kInvalidLocation) {
     ASSERT(IsInvalid());
   }
 
+  Location(const Location& other) : ValueObject(), value_(other.value_) { }
+
+  Location& operator=(const Location& other) {
+    value_ = other.value_;
+    return *this;
+  }
+
   bool IsInvalid() const {
     return value_ == kInvalidLocation;
   }
@@ -98,7 +105,7 @@
     kAny,
     kPrefersRegister,
     kRequiresRegister,
-    kRequiresXmmRegister,
+    kRequiresFpuRegister,
     kWritableRegister,
     kSameAsFirstInput,
   };
@@ -128,8 +135,8 @@
     return UnallocatedLocation(kRequiresRegister);
   }
 
-  static Location RequiresXmmRegister() {
-    return UnallocatedLocation(kRequiresXmmRegister);
+  static Location RequiresFpuRegister() {
+    return UnallocatedLocation(kRequiresFpuRegister);
   }
 
   static Location WritableRegister() {
@@ -169,7 +176,7 @@
     return RegisterField::decode(payload());
   }
 
-  // XMM registers and double spill slots can contain either doubles
+  // FPU registers and double spill slots can contain either doubles
   // or 64-bit integers.
   enum Representation {
     kDouble,
@@ -177,24 +184,24 @@
   };
 
   Representation representation() const {
-    ASSERT(IsXmmRegister() || IsDoubleStackSlot());
+    ASSERT(IsFpuRegister() || IsDoubleStackSlot());
     return RepresentationField::decode(payload());
   }
 
-  // XmmRegister locations.
-  static Location XmmRegisterLocation(XmmRegister reg, Representation rep) {
+  // FpuRegister locations.
+  static Location FpuRegisterLocation(FpuRegister reg, Representation rep) {
     uword payload =
-        XmmRegisterField::encode(reg) | RepresentationField::encode(rep);
-    return Location(kXmmRegister, payload);
+        FpuRegisterField::encode(reg) | RepresentationField::encode(rep);
+    return Location(kFpuRegister, payload);
   }
 
-  bool IsXmmRegister() const {
-    return kind() == kXmmRegister;
+  bool IsFpuRegister() const {
+    return kind() == kFpuRegister;
   }
 
-  XmmRegister xmm_reg() const {
-    ASSERT(IsXmmRegister());
-    return XmmRegisterField::decode(payload());
+  FpuRegister fpu_reg() const {
+    ASSERT(IsFpuRegister());
+    return FpuRegisterField::decode(payload());
   }
 
   static bool IsMachineRegisterKind(Kind kind) {
@@ -207,8 +214,8 @@
     if (kind == kRegister) {
       return RegisterLocation(static_cast<Register>(reg));
     } else {
-      ASSERT(kind == kXmmRegister);
-      return XmmRegisterLocation(static_cast<XmmRegister>(reg), rep);
+      ASSERT(kind == kFpuRegister);
+      return FpuRegisterLocation(static_cast<FpuRegister>(reg), rep);
     }
   }
 
@@ -304,7 +311,7 @@
   typedef BitField<Policy, 0, 3> PolicyField;
 
   // Layout for register locations payload. The representation bit is only used
-  // for XmmRegister and unused for Register.
+  // for FpuRegister and unused for Register.
   static const intptr_t kBitsForRepresentation = 1;
   static const intptr_t kBitsForRegister =
       kBitsForPayload - kBitsForRepresentation;
@@ -314,9 +321,9 @@
   typedef BitField<Register,
                    kBitsForRepresentation,
                    kBitsForRegister> RegisterField;
-  typedef BitField<XmmRegister,
+  typedef BitField<FpuRegister,
                    kBitsForRepresentation,
-                   kBitsForRegister> XmmRegisterField;
+                   kBitsForRegister> FpuRegisterField;
 
   // Layout for stack slots. The representation bit is only used for
   // DoubleStackSlot and unused for StackSlot.
@@ -337,25 +344,25 @@
 
 class RegisterSet : public ValueObject {
  public:
-  RegisterSet() : cpu_registers_(0), xmm_registers_(0) {
+  RegisterSet() : cpu_registers_(0), fpu_registers_(0) {
     ASSERT(kNumberOfCpuRegisters < (kWordSize * kBitsPerByte));
-    ASSERT(kNumberOfXmmRegisters < (kWordSize * kBitsPerByte));
+    ASSERT(kNumberOfFpuRegisters < (kWordSize * kBitsPerByte));
   }
 
 
   void Add(Location loc) {
     if (loc.IsRegister()) {
       cpu_registers_ |= (1 << loc.reg());
-    } else if (loc.IsXmmRegister()) {
-      xmm_registers_ |= (1 << loc.xmm_reg());
+    } else if (loc.IsFpuRegister()) {
+      fpu_registers_ |= (1 << loc.fpu_reg());
     }
   }
 
   void Remove(Location loc) {
     if (loc.IsRegister()) {
       cpu_registers_ &= ~(1 << loc.reg());
-    } else if (loc.IsXmmRegister()) {
-      xmm_registers_ &= ~(1 << loc.xmm_reg());
+    } else if (loc.IsFpuRegister()) {
+      fpu_registers_ &= ~(1 << loc.fpu_reg());
     }
   }
 
@@ -363,14 +370,14 @@
     return (cpu_registers_ & (1 << reg)) != 0;
   }
 
-  bool ContainsXmmRegister(XmmRegister xmm_reg) {
-    return (xmm_registers_ & (1 << xmm_reg)) != 0;
+  bool ContainsFpuRegister(FpuRegister fpu_reg) {
+    return (fpu_registers_ & (1 << fpu_reg)) != 0;
   }
 
-  intptr_t xmm_regs_count() {
+  intptr_t fpu_regs_count() {
     intptr_t count = 0;
-    for (intptr_t reg_idx = 0; reg_idx < kNumberOfXmmRegisters; reg_idx++) {
-      if (ContainsXmmRegister(static_cast<XmmRegister>(reg_idx))) {
+    for (intptr_t reg_idx = 0; reg_idx < kNumberOfFpuRegisters; reg_idx++) {
+      if (ContainsFpuRegister(static_cast<FpuRegister>(reg_idx))) {
         count++;
       }
     }
@@ -379,7 +386,7 @@
 
  private:
   intptr_t cpu_registers_;
-  intptr_t xmm_registers_;
+  intptr_t fpu_registers_;
 
   DISALLOW_COPY_AND_ASSIGN(RegisterSet);
 };
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 40fc1b7..c53878b 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -515,9 +515,8 @@
 
 // Make unused space in an object whose type has been transformed safe
 // for traversing during GC.
-// The unused part of the transformed object is marked as an Array
-// object or a regular Object so that it can be traversed during garbage
-// collection.
+// The unused part of the transformed object is marked as an Int8Array
+// object.
 void Object::MakeUnusedSpaceTraversable(const Object& obj,
                                         intptr_t original_size,
                                         intptr_t used_size) {
@@ -528,29 +527,17 @@
     intptr_t leftover_size = original_size - used_size;
 
     uword addr = RawObject::ToAddr(obj.raw()) + used_size;
-    if (leftover_size >= Array::InstanceSize(0)) {
-      // As we have enough space to use an array object, update the leftover
-      // space as an Array object.
-      RawArray* raw = reinterpret_cast<RawArray*>(RawObject::FromAddr(addr));
-      uword tags = 0;
-      tags = RawObject::SizeTag::update(leftover_size, tags);
-      tags = RawObject::ClassIdTag::update(kArrayCid, tags);
-      raw->ptr()->tags_ = tags;
-      intptr_t leftover_len =
-          ((leftover_size - Array::InstanceSize(0)) / kWordSize);
-      ASSERT(Array::InstanceSize(leftover_len) == leftover_size);
-      raw->ptr()->tags_ = tags;
-      raw->ptr()->length_ = Smi::New(leftover_len);
-    } else {
-      // Update the leftover space as a basic object.
-      ASSERT(leftover_size == Object::InstanceSize());
-      RawObject* raw =
-          reinterpret_cast<RawObject*>(RawObject::FromAddr(addr));
-      uword tags = 0;
-      tags = RawObject::SizeTag::update(leftover_size, tags);
-      tags = RawObject::ClassIdTag::update(kInstanceCid, tags);
-      raw->ptr()->tags_ = tags;
-    }
+    ASSERT(Int8Array::InstanceSize(0) == Object::InstanceSize());
+    // Update the leftover space as an Int8Array object.
+    RawInt8Array* raw =
+        reinterpret_cast<RawInt8Array*>(RawObject::FromAddr(addr));
+    uword tags = 0;
+    tags = RawObject::SizeTag::update(leftover_size, tags);
+    tags = RawObject::ClassIdTag::update(kInt8ArrayCid, tags);
+    raw->ptr()->tags_ = tags;
+    intptr_t leftover_len = (leftover_size - Int8Array::InstanceSize(0));
+    ASSERT(Int8Array::InstanceSize(leftover_len) == leftover_size);
+    raw->ptr()->length_ = Smi::New(leftover_len);
   }
 }
 
@@ -968,6 +955,15 @@
   if (!error.IsNull()) {
     return error.raw();
   }
+  const Script& collection_dev_script =
+      Script::Handle(Bootstrap::LoadCollectionDevScript(false));
+  const Library& collection_dev_lib =
+      Library::Handle(Library::CollectionDevLibrary());
+  ASSERT(!collection_dev_lib.IsNull());
+  error = Bootstrap::Compile(collection_dev_lib, collection_dev_script);
+  if (!error.IsNull()) {
+    return error.raw();
+  }
   const Script& math_script = Script::Handle(Bootstrap::LoadMathScript(false));
   const Library& math_lib = Library::Handle(Library::MathLibrary());
   ASSERT(!math_lib.IsNull());
@@ -1200,6 +1196,32 @@
 }
 
 
+void Object::CheckHandle() const {
+#if defined(DEBUG)
+  if (raw_ != Object::null()) {
+    if ((reinterpret_cast<uword>(raw_) & kSmiTagMask) == kSmiTag) {
+      ASSERT(vtable() == Smi::handle_vtable_);
+      return;
+    }
+    intptr_t cid = raw_->GetClassId();
+    if (cid >= kNumPredefinedCids) {
+      cid = kInstanceCid;
+    }
+    ASSERT(vtable() == builtin_vtables_[cid]);
+    Isolate* isolate = Isolate::Current();
+    if (FLAG_verify_handles) {
+      Heap* isolate_heap = isolate->heap();
+      Heap* vm_isolate_heap = Dart::vm_isolate()->heap();
+      ASSERT(isolate_heap->Contains(RawObject::ToAddr(raw_)) ||
+             vm_isolate_heap->Contains(RawObject::ToAddr(raw_)));
+    }
+    ASSERT(builtin_vtables_[cid] ==
+           isolate->class_table()->At(cid)->ptr()->handle_vtable_);
+  }
+#endif
+}
+
+
 RawObject* Object::Allocate(intptr_t cls_id,
                             intptr_t size,
                             Heap::Space space) {
@@ -1428,7 +1450,7 @@
   const Array& field_array = Array::Handle(fields());
   Field& field = Field::Handle();
   for (intptr_t i = 0; i < field_array.Length(); ++i) {
-    field ^= field_array.At(i);
+    field |= field_array.At(i);
     if (!field.is_static()) {
       return true;
     }
@@ -1436,6 +1458,7 @@
   return false;
 }
 
+
 void Class::SetFunctions(const Array& value) const {
   ASSERT(!value.IsNull());
 #if defined(DEBUG)
@@ -1443,7 +1466,7 @@
   Function& func = Function::Handle();
   intptr_t len = value.Length();
   for (intptr_t i = 0; i < len; i++) {
-    func ^= value.At(i);
+    func |= value.At(i);
     ASSERT(func.Owner() == raw());
   }
 #endif
@@ -1451,6 +1474,14 @@
 }
 
 
+void Class::AddFunction(const Function& function) const {
+  const Array& arr = Array::Handle(functions());
+  const Array& new_arr = Array::Handle(Array::Grow(arr, arr.Length() + 1));
+  new_arr.SetAt(arr.Length(), function);
+  SetFunctions(new_arr);
+}
+
+
 void Class::AddClosureFunction(const Function& function) const {
   GrowableObjectArray& closures =
       GrowableObjectArray::Handle(raw_ptr()->closure_functions_);
@@ -1475,7 +1506,7 @@
   intptr_t best_fit_token_pos = -1;
   intptr_t best_fit_index = -1;
   for (intptr_t i = 0; i < num_closures; i++) {
-    closure ^= closures.At(i);
+    closure |= closures.At(i);
     ASSERT(!closure.IsNull());
     if ((closure.token_pos() <= token_pos) &&
         (token_pos < closure.end_token_pos()) &&
@@ -1486,7 +1517,7 @@
   }
   closure = Function::null();
   if (best_fit_index >= 0) {
-    closure ^= closures.At(best_fit_index);
+    closure |= closures.At(best_fit_index);
   }
   return closure.raw();
 }
@@ -1643,7 +1674,7 @@
   Field& field = Field::Handle();
   intptr_t len = flds.Length();
   for (intptr_t i = 0; i < len; i++) {
-    field ^= flds.At(i);
+    field |= flds.At(i);
     // Offset is computed only for instance fields.
     if (!field.is_static()) {
       ASSERT(field.Offset() == 0);
@@ -1699,7 +1730,7 @@
   const GrowableObjectArray& new_functions = GrowableObjectArray::Handle(
       GrowableObjectArray::New(orig_len));
   for (intptr_t i = 0; i < orig_len; i++) {
-    orig_func ^= orig_list.At(i);
+    orig_func |= orig_list.At(i);
     member_name = orig_func.name();
     func = patch.LookupFunction(member_name);
     if (func.IsNull()) {
@@ -1714,7 +1745,7 @@
     }
   }
   for (intptr_t i = 0; i < patch_len; i++) {
-    func ^= patch_list.At(i);
+    func |= patch_list.At(i);
     func.set_owner(patch_class);
     new_functions.Add(func);
   }
@@ -1732,7 +1763,7 @@
   Field& orig_field = Field::Handle();
   new_list = Array::New(patch_len + orig_len);
   for (intptr_t i = 0; i < patch_len; i++) {
-    field ^= patch_list.At(i);
+    field |= patch_list.At(i);
     field.set_owner(*this);
     member_name = field.name();
     // TODO(iposva): Verify non-public fields only.
@@ -1745,7 +1776,7 @@
     new_list.SetAt(i, field);
   }
   for (intptr_t i = 0; i < orig_len; i++) {
-    field ^= orig_list.At(i);
+    field |= orig_list.At(i);
     new_list.SetAt(patch_len + i, field);
   }
   SetFields(new_list);
@@ -1760,7 +1791,7 @@
   Field& field = Field::Handle();
   intptr_t len = value.Length();
   for (intptr_t i = 0; i < len; i++) {
-    field ^= value.At(i);
+    field |= value.At(i);
     ASSERT(field.owner() == raw());
   }
 #endif
@@ -2204,6 +2235,16 @@
 }
 
 
+RawFunction* Class::LookupDynamicFunctionAllowPrivate(
+    const String& name) const {
+  Function& function = Function::Handle(LookupFunctionAllowPrivate(name));
+  if (function.IsNull() || !function.IsDynamicFunction()) {
+    return Function::null();
+  }
+  return function.raw();
+}
+
+
 RawFunction* Class::LookupStaticFunction(const String& name) const {
   Function& function = Function::Handle(LookupFunction(name));
   if (function.IsNull() || !function.IsStaticFunction()) {
@@ -2213,6 +2254,15 @@
 }
 
 
+RawFunction* Class::LookupStaticFunctionAllowPrivate(const String& name) const {
+  Function& function = Function::Handle(LookupFunctionAllowPrivate(name));
+  if (function.IsNull() || !function.IsStaticFunction()) {
+    return Function::null();
+  }
+  return function.raw();
+}
+
+
 RawFunction* Class::LookupConstructor(const String& name) const {
   Function& function = Function::Handle(LookupFunction(name));
   if (function.IsNull() || !function.IsConstructor()) {
@@ -2233,6 +2283,7 @@
 }
 
 
+// Returns true if 'prefix' and 'accessor_name' match 'name'.
 static bool MatchesAccessorName(const String& name,
                                 const char* prefix,
                                 intptr_t prefix_length,
@@ -2266,16 +2317,49 @@
     return Function::null();
   }
   Function& function = Function::Handle(isolate, Function::null());
+  const intptr_t len = funcs.Length();
+  if (name.IsSymbol()) {
+    // Quick Symbol compare.
+    NoGCScope no_gc;
+    for (intptr_t i = 0; i < len; i++) {
+      function |= funcs.At(i);
+      if (function.name() == name.raw()) {
+        return function.raw();
+      }
+    }
+  } else {
+    String& function_name = String::Handle(isolate, String::null());
+    for (intptr_t i = 0; i < len; i++) {
+      function |= funcs.At(i);
+      function_name |= function.name();
+      if (function_name.Equals(name)) {
+        return function.raw();
+      }
+    }
+  }
+  // No function found.
+  return Function::null();
+}
+
+
+RawFunction* Class::LookupFunctionAllowPrivate(const String& name) const {
+  Isolate* isolate = Isolate::Current();
+  ASSERT(name.IsOneByteString());
+  Array& funcs = Array::Handle(isolate, functions());
+  if (funcs.IsNull()) {
+    // This can occur, e.g., for Null classes.
+    return Function::null();
+  }
+  Function& function = Function::Handle(isolate, Function::null());
   String& function_name = String::Handle(isolate, String::null());
   intptr_t len = funcs.Length();
   for (intptr_t i = 0; i < len; i++) {
-    function ^= funcs.At(i);
-    function_name ^= function.name();
+    function |= funcs.At(i);
+    function_name |= function.name();
     if (OneByteString::EqualsIgnoringPrivateKey(function_name, name)) {
       return function.raw();
     }
   }
-
   // No function found.
   return Function::null();
 }
@@ -2300,8 +2384,8 @@
   String& function_name = String::Handle(isolate, String::null());
   intptr_t len = funcs.Length();
   for (intptr_t i = 0; i < len; i++) {
-    function ^= funcs.At(i);
-    function_name ^= function.name();
+    function |= funcs.At(i);
+    function_name |= function.name();
     if (MatchesAccessorName(function_name, prefix, prefix_length, name)) {
       return function.raw();
     }
@@ -2323,7 +2407,7 @@
   Array& funcs = Array::Handle(functions());
   intptr_t len = funcs.Length();
   for (intptr_t i = 0; i < len; i++) {
-    func ^= funcs.At(i);
+    func |= funcs.At(i);
     if ((func.token_pos() <= token_pos) &&
         (token_pos <= func.end_token_pos())) {
       return func.raw();
@@ -2372,8 +2456,8 @@
   String& field_name = String::Handle(isolate, String::null());
   intptr_t len = flds.Length();
   for (intptr_t i = 0; i < len; i++) {
-    field ^= flds.At(i);
-    field_name ^= field.name();
+    field |= flds.At(i);
+    field_name |= field.name();
     if (OneByteString::EqualsIgnoringPrivateKey(field_name, name)) {
       return field.raw();
     }
@@ -2924,7 +3008,7 @@
   // Last element of the array is the number of used elements.
   intptr_t table_size = table.Length() - 1;
   Smi& used = Smi::Handle(isolate);
-  used ^= table.At(table_size);
+  used |= table.At(table_size);
   intptr_t used_elements = used.Value() + 1;
   used = Smi::New(used_elements);
   table.SetAt(table_size, used);
@@ -3220,6 +3304,21 @@
 }
 
 
+RawFunction* Function::extracted_method_closure() const {
+  ASSERT(kind() == RawFunction::kMethodExtractor);
+  const Object& obj = Object::Handle(raw_ptr()->data_);
+  ASSERT(obj.IsFunction());
+  return Function::Cast(obj).raw();
+}
+
+
+void Function::set_extracted_method_closure(const Function& value) const {
+  ASSERT(kind() == RawFunction::kMethodExtractor);
+  ASSERT(raw_ptr()->data_ == Object::null());
+  set_data(value);
+}
+
+
 RawFunction* Function::parent_function() const {
   if (IsClosureFunction()) {
     const Object& obj = Object::Handle(raw_ptr()->data_);
@@ -3412,7 +3511,7 @@
 RawString* Function::ParameterNameAt(intptr_t index) const {
   const Array& parameter_names = Array::Handle(raw_ptr()->parameter_names_);
   String& parameter_name = String::Handle();
-  parameter_name ^= parameter_names.At(index);
+  parameter_name |= parameter_names.At(index);
   return parameter_name.raw();
 }
 
@@ -3631,13 +3730,13 @@
   String& argument_name = String::Handle();
   String& parameter_name = String::Handle();
   for (int i = 0; i < num_named_arguments; i++) {
-    argument_name ^= argument_names.At(i);
+    argument_name |= argument_names.At(i);
     ASSERT(argument_name.IsSymbol());
     bool found = false;
     const int num_positional_args = num_arguments - num_named_arguments;
     const int num_parameters = NumParameters();
     for (int j = num_positional_args; !found && (j < num_parameters); j++) {
-      parameter_name ^= ParameterNameAt(j);
+      parameter_name |= ParameterNameAt(j);
       ASSERT(argument_name.IsSymbol());
       if (argument_name.Equals(parameter_name)) {
         found = true;
@@ -3997,9 +4096,9 @@
   // Set closure function's context scope.
   ContextScope& context_scope = ContextScope::Handle();
   if (is_static()) {
-    context_scope ^= ContextScope::New(0);
+    context_scope |= ContextScope::New(0);
   } else {
-    context_scope ^= LocalScope::CreateImplicitClosureScope(*this);
+    context_scope |= LocalScope::CreateImplicitClosureScope(*this);
   }
   closure_function.set_context_scope(context_scope);
 
@@ -4309,6 +4408,9 @@
     case RawFunction::kConstImplicitGetter:
       kind_str = " const-getter";
       break;
+    case RawFunction::kMethodExtractor:
+      kind_str = " method-extractor";
+      break;
     default:
       UNREACHABLE();
   }
@@ -5110,7 +5212,7 @@
       const Array& symbols = Array::Handle(isolate,
                                            object_store->keyword_symbols());
       ASSERT(!symbols.IsNull());
-      str ^= symbols.At(kind - Token::kFirstKeyword);
+      str |= symbols.At(kind - Token::kFirstKeyword);
       ASSERT(!str.IsNull());
       return str.raw();
     }
@@ -5493,7 +5595,7 @@
   // Insert the object at the empty slot.
   dict.SetAt(index, obj);
   Smi& used = Smi::Handle();
-  used ^= dict.At(dict_size);
+  used |= dict.At(dict_size);
   intptr_t used_elements = used.Value() + 1;  // One more element added.
   used = Smi::New(used_elements);
   dict.SetAt(dict_size, used);  // Update used count.
@@ -5517,7 +5619,7 @@
     Namespace& ns = Namespace::Handle();
     Object& obj = Object::Handle();
     for (int i = 0; i < exports.Length(); i++) {
-      ns ^= exports.At(i);
+      ns |= exports.At(i);
       obj = ns.Lookup(name);
       if (!obj.IsNull()) {
         return obj.raw();
@@ -5599,7 +5701,7 @@
       }
       bool is_unique = true;
       for (int i = 0; i < scripts.Length(); i++) {
-        script_obj ^= scripts.At(i);
+        script_obj |= scripts.At(i);
         if (script_obj.raw() == owner_script.raw()) {
           // We already have a reference to this script.
           is_unique = false;
@@ -5627,7 +5729,7 @@
   String& script_url = String::Handle();
   intptr_t num_scripts = scripts.Length();
   for (int i = 0; i < num_scripts; i++) {
-    script ^= scripts.At(i);
+    script |= scripts.At(i);
     script_url = script.url();
     if (script_url.Equals(url)) {
       return script.raw();
@@ -5681,7 +5783,7 @@
   Array& anon_classes = Array::Handle(this->raw_ptr()->anonymous_classes_);
   intptr_t num_anonymous = raw_ptr()->num_anonymous_;
   for (int i = 0; i < num_anonymous; i++) {
-    cls ^= anon_classes.At(i);
+    cls |= anon_classes.At(i);
     ASSERT(!cls.IsNull());
     if (script.raw() == cls.script()) {
       func = cls.LookupFunctionAtToken(token_pos);
@@ -5730,10 +5832,10 @@
   Namespace& import = Namespace::Handle();
   Object& obj = Object::Handle();
   for (intptr_t j = 0; j < this->num_imports(); j++) {
-    import ^= imports.At(j);
+    import |= imports.At(j);
     obj = import.Lookup(name);
     if (!obj.IsNull() && obj.IsField()) {
-      field ^= obj.raw();
+      field |= obj.raw();
       return field.raw();
     }
   }
@@ -5752,7 +5854,7 @@
   }
   if (!obj.IsNull()) {
     if (obj.IsField()) {
-      field ^= obj.raw();
+      field |= obj.raw();
       return field.raw();
     }
   }
@@ -5779,10 +5881,10 @@
   Namespace& import = Namespace::Handle();
   Object& obj = Object::Handle();
   for (intptr_t j = 0; j < this->num_imports(); j++) {
-    import ^= imports.At(j);
+    import |= imports.At(j);
     obj = import.Lookup(name);
     if (!obj.IsNull() && obj.IsFunction()) {
-      function ^= obj.raw();
+      function |= obj.raw();
       return function.raw();
     }
   }
@@ -5817,7 +5919,7 @@
   const Array& imports = Array::Handle(this->imports());
   Namespace& import = Namespace::Handle();
   for (intptr_t j = 0; j < this->num_imports(); j++) {
-    import ^= imports.At(j);
+    import |= imports.At(j);
     obj = import.Lookup(name);
     if (!obj.IsNull()) {
       return obj.raw();
@@ -5906,7 +6008,7 @@
   }
   const Array& import_list = Array::Handle(imports());
   Namespace& import = Namespace::Handle();
-  import ^= import_list.At(index);
+  import |= import_list.At(index);
   return import.raw();
 }
 
@@ -6052,6 +6154,11 @@
   const Library& math_lib = Library::Handle(Library::MathLibrary());
   const Namespace& math_ns = Namespace::Handle(
       Namespace::New(math_lib, Array::Handle(), Array::Handle()));
+  Library::InitCollectionDevLibrary(isolate);
+  const Library& collection_dev_lib =
+      Library::Handle(Library::CollectionDevLibrary());
+  const Namespace& collection_dev_ns = Namespace::Handle(
+      Namespace::New(collection_dev_lib, Array::Handle(), Array::Handle()));
   Library::InitCollectionLibrary(isolate);
   const Library& collection_lib =
       Library::Handle(Library::CollectionLibrary());
@@ -6059,6 +6166,7 @@
       Namespace::New(collection_lib, Array::Handle(), Array::Handle()));
   core_lib.AddImport(math_ns);
   core_lib.AddImport(collection_ns);
+  core_lib.AddImport(collection_dev_ns);
   isolate->object_store()->set_root_library(Library::Handle());
 
   // Hook up predefined classes without setting their library pointers. These
@@ -6076,11 +6184,24 @@
   const Library& math_lib = Library::Handle(Library::MathLibrary());
   const Namespace& math_ns = Namespace::Handle(
       Namespace::New(math_lib, Array::Handle(), Array::Handle()));
+  const Library& collection_dev_lib =
+      Library::Handle(Library::CollectionDevLibrary());
+  const Namespace& collection_dev_ns = Namespace::Handle(
+      Namespace::New(collection_dev_lib, Array::Handle(), Array::Handle()));
   lib.AddImport(math_ns);
+  lib.AddImport(collection_dev_ns);
   isolate->object_store()->set_collection_library(lib);
 }
 
 
+void Library::InitCollectionDevLibrary(Isolate* isolate) {
+  const String& url = String::Handle(Symbols::New("dart:collection-dev"));
+  const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
+  lib.Register();
+  isolate->object_store()->set_collection_dev_library(lib);
+}
+
+
 void Library::InitMathLibrary(Isolate* isolate) {
   const String& url = String::Handle(Symbols::New("dart:math"));
   const Library& lib = Library::Handle(Library::NewLibraryHelper(url, true));
@@ -6168,7 +6289,7 @@
   GrowableObjectArray& libs = GrowableObjectArray::Handle(
       isolate, isolate->object_store()->libraries());
   for (int i = 0; i < libs.Length(); i++) {
-    lib ^= libs.At(i);
+    lib |= libs.At(i);
     lib_url = lib.url();
     if (lib_url.Equals(url)) {
       return lib.raw();
@@ -6191,8 +6312,8 @@
   Library& lib = Library::Handle();
   String& lib_url = String::Handle();
   for (int i = 0; i < libs.Length(); i++) {
-    lib ^= libs.At(i);
-    lib_url ^= lib.url();
+    lib |= libs.At(i);
+    lib_url |= lib.url();
     lib_key = lib_url.Hash();
     if (lib_key == key) {
       return true;
@@ -6202,11 +6323,27 @@
 }
 
 
+static bool IsPrivate(const String& name) {
+  if (ShouldBePrivate(name)) return true;
+  // Factory names: List._fromLiteral.
+  for (intptr_t i = 1; i < name.Length() - 1; i++) {
+    if (name.CharAt(i) == '.') {
+      if (name.CharAt(i + 1) == '_') {
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+
+// Cannot handle qualified names properly as it only appends private key to
+// the end (e.g. _Alfa.foo -> _Alfa.foo@...).
 RawString* Library::PrivateName(const String& name) const {
-  ASSERT(ShouldBePrivate(name));
+  ASSERT(IsPrivate(name));
   // ASSERT(strchr(name, '@') == NULL);
   String& str = String::Handle();
-  str ^= name.raw();
+  str |= name.raw();
   str = String::Concat(str, String::Handle(this->private_key()));
   str = Symbols::New(str);
   return str.raw();
@@ -6220,7 +6357,7 @@
   ASSERT(!libs.IsNull());
   if ((0 <= index) && (index < libs.Length())) {
     Library& lib = Library::Handle();
-    lib ^= libs.At(index);
+    lib |= libs.At(index);
     return lib.raw();
   }
   return Library::null();
@@ -6253,6 +6390,11 @@
 }
 
 
+RawLibrary* Library::CollectionDevLibrary() {
+  return Isolate::Current()->object_store()->collection_dev_library();
+}
+
+
 RawLibrary* Library::MathLibrary() {
   return Isolate::Current()->object_store()->math_library();
 }
@@ -6292,7 +6434,7 @@
   if ((index >= 0) || (index < num_imports())) {
     const Array& imports = Array::Handle(this->imports());
     Namespace& import = Namespace::Handle();
-    import ^= imports.At(index);
+    import |= imports.At(index);
     return import.library();
   }
   return Library::null();
@@ -6340,7 +6482,7 @@
   Object& obj = Object::Handle();
   Namespace& import = Namespace::Handle();
   for (intptr_t i = 0; i < num_imports(); i++) {
-    import ^= imports.At(i);
+    import |= imports.At(i);
     obj = import.Lookup(class_name);
     if (!obj.IsNull() && obj.IsClass()) {
       // TODO(hausner):
@@ -6414,7 +6556,7 @@
     String& hidden = String::Handle();
     intptr_t num_names = names.Length();
     for (intptr_t i = 0; i < num_names; i++) {
-      hidden ^= names.At(i);
+      hidden |= names.At(i);
       if (name.Equals(hidden)) {
         return true;
       }
@@ -6427,7 +6569,7 @@
     String& shown = String::Handle();
     intptr_t num_names = names.Length();
     for (intptr_t i = 0; i < num_names; i++) {
-      shown ^= names.At(i);
+      shown |= names.At(i);
       if (name.Equals(shown)) {
         return false;
       }
@@ -6486,10 +6628,10 @@
   Library& lib = Library::Handle();
   Class& cls = Class::Handle();
   for (int i = 0; i < libs.Length(); i++) {
-    lib ^= libs.At(i);
+    lib |= libs.At(i);
     ClassDictionaryIterator it(lib);
     while (it.HasNext()) {
-      cls ^= it.GetNextClass();
+      cls |= it.GetNextClass();
       error = Compiler::CompileAllFunctions(cls);
       if (!error.IsNull()) {
         return error.raw();
@@ -6497,7 +6639,7 @@
     }
     Array& anon_classes = Array::Handle(lib.raw_ptr()->anonymous_classes_);
     for (int i = 0; i < lib.raw_ptr()->num_anonymous_; i++) {
-      cls ^= anon_classes.At(i);
+      cls |= anon_classes.At(i);
       error = Compiler::CompileAllFunctions(cls);
       if (!error.IsNull()) {
         return error.raw();
@@ -6826,7 +6968,7 @@
   const Array& names = Array::Handle(raw_ptr()->names_);
   ASSERT(Length() == names.Length());
   String& name = String::Handle();
-  name ^= names.At(var_index);
+  name |= names.At(var_index);
   return name.raw();
 }
 
@@ -6884,43 +7026,68 @@
 
 
 intptr_t ExceptionHandlers::Length() const {
-  return Smi::Value(raw_ptr()->length_);
+  return raw_ptr()->length_;
 }
 
 
-void ExceptionHandlers::SetLength(intptr_t value) const {
-  // This is only safe because we create a new Smi, which does not cause
-  // heap allocation.
-  raw_ptr()->length_ = Smi::New(value);
+void ExceptionHandlers::SetHandlerInfo(intptr_t try_index,
+                                       intptr_t outer_try_index,
+                                       intptr_t handler_pc) const {
+  ASSERT((try_index >= 0) && (try_index < Length()));
+  RawExceptionHandlers::HandlerInfo* info = &raw_ptr()->data_[try_index];
+  info->outer_try_index = outer_try_index;
+  info->handler_pc = handler_pc;
+}
+
+void ExceptionHandlers::GetHandlerInfo(
+                            intptr_t try_index,
+                            RawExceptionHandlers::HandlerInfo* info) const {
+  ASSERT((try_index >= 0) && (try_index < Length()));
+  ASSERT(info != NULL);
+  RawExceptionHandlers::HandlerInfo* data = &raw_ptr()->data_[try_index];
+  info->outer_try_index = data->outer_try_index;
+  info->handler_pc = data->handler_pc;
 }
 
 
-intptr_t ExceptionHandlers::TryIndex(intptr_t index) const {
-  return *(EntryAddr(index, kTryIndexEntry));
+intptr_t ExceptionHandlers::HandlerPC(intptr_t try_index) const {
+  ASSERT((try_index >= 0) && (try_index < Length()));
+  return raw_ptr()->data_[try_index].handler_pc;
 }
 
 
-void ExceptionHandlers::SetTryIndex(intptr_t index, intptr_t value) const {
-  *(EntryAddr(index, kTryIndexEntry)) = value;
+intptr_t ExceptionHandlers::OuterTryIndex(intptr_t try_index) const {
+  ASSERT((try_index >= 0) && (try_index < Length()));
+  return raw_ptr()->data_[try_index].outer_try_index;
 }
 
 
-intptr_t ExceptionHandlers::HandlerPC(intptr_t index) const {
-  return *(EntryAddr(index, kHandlerPcEntry));
+void ExceptionHandlers::SetHandledTypes(intptr_t try_index,
+                                        const Array& handled_types) const {
+  ASSERT((try_index >= 0) && (try_index < Length()));
+  const Array& handled_types_data =
+      Array::Handle(raw_ptr()->handled_types_data_);
+  handled_types_data.SetAt(try_index, handled_types);
 }
 
 
-void ExceptionHandlers::SetHandlerPC(intptr_t index,
-                                     intptr_t value) const {
-  *(EntryAddr(index, kHandlerPcEntry)) = value;
+RawArray* ExceptionHandlers::GetHandledTypes(intptr_t try_index) const {
+  ASSERT((try_index >= 0) && (try_index < Length()));
+  Array& array = Array::Handle(raw_ptr()->handled_types_data_);
+  array ^= array.At(try_index);
+  return array.raw();
+}
+
+
+void ExceptionHandlers::set_handled_types_data(const Array& value) const {
+  StorePointer(&raw_ptr()->handled_types_data_, value.raw());
 }
 
 
 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) {
   ASSERT(Object::exception_handlers_class() != Class::null());
-  if (num_handlers < 0 || num_handlers > kMaxElements) {
-    // This should be caught before we reach here.
-    FATAL1("Fatal error in ExceptionHandlers::New: "
+  if (num_handlers < 0 || num_handlers >= kMaxHandlers) {
+    FATAL1("Fatal error in ExceptionHandlers::New(): "
            "invalid num_handlers %"Pd"\n",
            num_handlers);
   }
@@ -6932,8 +7099,10 @@
                                       Heap::kOld);
     NoGCScope no_gc;
     result ^= raw;
-    result.SetLength(num_handlers);
+    result.raw_ptr()->length_ = num_handlers;
   }
+  const Array& handled_types_data = Array::Handle(Array::New(num_handlers));
+  result.set_handled_types_data(handled_types_data);
   return result.raw();
 }
 
@@ -6942,22 +7111,50 @@
   if (Length() == 0) {
     return "No exception handlers\n";
   }
+  Array& handled_types = Array::Handle();
+  Type& type = Type::Handle();
+  RawExceptionHandlers::HandlerInfo info;
   // First compute the buffer size required.
-  const char* kFormat = "%"Pd" => %#"Px"\n";
+  const char* kFormat = "%"Pd" => %#"Px"  (%"Pd" types) (outer %"Pd")\n";
+  const char* kFormat2 = "  %d. %s\n";
   intptr_t len = 1;  // Trailing '\0'.
   for (intptr_t i = 0; i < Length(); i++) {
-    len += OS::SNPrint(NULL, 0, kFormat, TryIndex(i), HandlerPC(i));
+    GetHandlerInfo(i, &info);
+    handled_types = GetHandledTypes(i);
+    ASSERT(!handled_types.IsNull());
+    intptr_t num_types = handled_types.Length();
+    len += OS::SNPrint(NULL, 0, kFormat,
+                       i,
+                       info.handler_pc,
+                       num_types,
+                       info.outer_try_index);
+    for (int k = 0; k < num_types; k++) {
+      type ^= handled_types.At(k);
+      ASSERT(!type.IsNull());
+      len += OS::SNPrint(NULL, 0, kFormat2, k, type.ToCString());
+    }
   }
   // Allocate the buffer.
   char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len);
   // Layout the fields in the buffer.
-  intptr_t index = 0;
+  intptr_t num_chars = 0;
   for (intptr_t i = 0; i < Length(); i++) {
-    index += OS::SNPrint((buffer + index),
-                         (len - index),
-                         kFormat,
-                         TryIndex(i),
-                         HandlerPC(i));
+    GetHandlerInfo(i, &info);
+    handled_types = GetHandledTypes(i);
+    intptr_t num_types = handled_types.Length();
+    num_chars += OS::SNPrint((buffer + num_chars),
+                             (len - num_chars),
+                             kFormat,
+                             i,
+                             info.handler_pc,
+                             num_types,
+                             info.outer_try_index);
+    for (int k = 0; k < num_types; k++) {
+      type ^= handled_types.At(k);
+      num_chars += OS::SNPrint((buffer + num_chars),
+                               (len - num_chars),
+                               kFormat2, k, type.ToCString());
+    }
   }
   return buffer;
 }
@@ -7104,7 +7301,7 @@
 
 intptr_t Code::Comments::PCOffsetAt(intptr_t idx) const {
   Smi& result = Smi::Handle();
-  result ^= comments_.At(idx * kNumberOfEntries + kPCOffsetEntry);
+  result |= comments_.At(idx * kNumberOfEntries + kPCOffsetEntry);
   return result.Value();
 }
 
@@ -7117,7 +7314,7 @@
 
 RawString* Code::Comments::CommentAt(intptr_t idx) const {
   String& result = String::Handle();
-  result ^= comments_.At(idx * kNumberOfEntries + kCommentEntry);
+  result |= comments_.At(idx * kNumberOfEntries + kCommentEntry);
   return result.raw();
 }
 
@@ -7184,7 +7381,7 @@
   for (intptr_t i = 0; i < array.Length(); i += kSCallTableEntryLength) {
     if (array.At(i) == raw_code_offset) {
       Function& function = Function::Handle();
-      function ^= array.At(i + kSCallTableFunctionEntry);
+      function |= array.At(i + kSCallTableFunctionEntry);
       return function.raw();
     }
   }
@@ -7469,7 +7666,7 @@
   *maps = stackmaps();
   *map = Stackmap::null();
   for (intptr_t i = 0; i < maps->Length(); i++) {
-    *map ^= maps->At(i);
+    *map |= maps->At(i);
     ASSERT(!map->IsNull());
     if (map->PC() == pc) {
       return map->raw();  // We found a stack map for this frame.
@@ -7784,10 +7981,10 @@
   intptr_t data_pos = index * TestEntryLength();
   Smi& smi = Smi::Handle();
   for (intptr_t i = 0; i < num_args_tested(); i++) {
-    smi ^= data.At(data_pos++);
+    smi |= data.At(data_pos++);
     class_ids->Add(smi.Value());
   }
-  (*target) ^= data.At(data_pos++);
+  (*target) |= data.At(data_pos++);
 }
 
 
@@ -7800,9 +7997,9 @@
   const Array& data = Array::Handle(ic_data());
   intptr_t data_pos = index * TestEntryLength();
   Smi& smi = Smi::Handle();
-  smi ^= data.At(data_pos);
+  smi |= data.At(data_pos);
   *class_id = smi.Value();
-  *target ^= data.At(data_pos + 1);
+  *target |= data.At(data_pos + 1);
 }
 
 
@@ -7819,7 +8016,7 @@
   const Array& data = Array::Handle(ic_data());
   const intptr_t data_pos = index * TestEntryLength();
   Smi& smi = Smi::Handle();
-  smi ^= data.At(data_pos);
+  smi |= data.At(data_pos);
   return smi.Value();
 }
 
@@ -7837,7 +8034,7 @@
   const intptr_t data_pos = index * TestEntryLength() +
       CountIndexFor(num_args_tested());
   Smi& smi = Smi::Handle();
-  smi ^= data.At(data_pos);
+  smi |= data.At(data_pos);
   return smi.Value();
 }
 
@@ -7933,6 +8130,19 @@
 }
 
 
+bool ICData::HasReceiverClassId(intptr_t class_id) const {
+  ASSERT(num_args_tested() > 0);
+  const intptr_t len = NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
+    const intptr_t test_class_id = GetReceiverClassIdAt(i);
+    if (test_class_id == class_id) {
+      return true;
+    }
+  }
+  return false;
+}
+
+
 // Returns true if all targets are the same.
 // TODO(srdjan): if targets are native use their C_function to compare.
 bool ICData::HasOneTarget() const {
@@ -8056,9 +8266,9 @@
 
     // Rehash the valid entries.
     for (intptr_t i = 0; i < old_capacity; ++i) {
-      class_id ^= GetClassId(old_buckets, i);
+      class_id |= GetClassId(old_buckets, i);
       if (class_id.Value() != kIllegalCid) {
-        target ^= GetTargetFunction(old_buckets, i);
+        target |= GetTargetFunction(old_buckets, i);
         Insert(class_id, target);
       }
     }
@@ -8076,7 +8286,7 @@
   Smi& probe = Smi::Handle();
   intptr_t i = index;
   do {
-    probe ^= GetClassId(backing_array, i);
+    probe |= GetClassId(backing_array, i);
     if (probe.Value() == kIllegalCid) {
       SetEntry(backing_array, i, class_id, target);
       set_filled_entry_count(filled_entry_count() + 1);
@@ -8151,12 +8361,12 @@
   Array& data = Array::Handle(cache());
   intptr_t data_pos = ix * kTestEntryLength;
   Smi& instance_class_id_handle = Smi::Handle();
-  instance_class_id_handle ^= data.At(data_pos + kInstanceClassId);
+  instance_class_id_handle |= data.At(data_pos + kInstanceClassId);
   *instance_class_id = instance_class_id_handle.Value();
   *instance_type_arguments ^= data.At(data_pos + kInstanceTypeArguments);
   *instantiator_type_arguments ^=
       data.At(data_pos + kInstantiatorTypeArguments);
-  *test_result ^= data.At(data_pos + kTestResult);
+  *test_result |= data.At(data_pos + kTestResult);
 }
 
 
@@ -9472,7 +9682,7 @@
   if (IsSmi()) return raw();
   if (IsMint()) {
     Mint& mint = Mint::Handle();
-    mint ^= raw();
+    mint |= raw();
     if (Smi::IsValid64(mint.value())) {
       return Smi::New(mint.value());
     } else {
@@ -9481,7 +9691,7 @@
   }
   ASSERT(IsBigint());
   Bigint& big_value = Bigint::Handle();
-  big_value ^= raw();
+  big_value |= raw();
   if (BigintOperations::FitsIntoSmi(big_value)) {
     return BigintOperations::ToSmi(big_value);
   } else if (BigintOperations::FitsIntoMint(big_value)) {
@@ -9502,8 +9712,8 @@
   if (IsSmi() && other.IsSmi()) {
     Smi& left_smi = Smi::Handle();
     Smi& right_smi = Smi::Handle();
-    left_smi ^= raw();
-    right_smi ^= other.raw();
+    left_smi |= raw();
+    right_smi |= other.raw();
     const intptr_t left_value = left_smi.Value();
     const intptr_t right_value = right_smi.Value();
     switch (operation) {
@@ -9600,8 +9810,8 @@
   if (IsSmi() && other.IsSmi()) {
     Smi& op1 = Smi::Handle();
     Smi& op2 = Smi::Handle();
-    op1 ^= raw();
-    op2 ^= other.raw();
+    op1 |= raw();
+    op2 |= other.raw();
     intptr_t result = 0;
     switch (kind) {
       case Token::kBIT_AND:
@@ -9795,7 +10005,7 @@
   Mint& canonical_value = Mint::Handle();
   intptr_t index = 0;
   while (index < constants_len) {
-    canonical_value ^= constants.At(index);
+    canonical_value |= constants.At(index);
     if (canonical_value.IsNull()) {
       break;
     }
@@ -9949,7 +10159,7 @@
   Double& canonical_value = Double::Handle();
   intptr_t index = 0;
   while (index < constants_len) {
-    canonical_value ^= constants.At(index);
+    canonical_value |= constants.At(index);
     if (canonical_value.IsNull()) {
       break;
     }
@@ -9995,16 +10205,16 @@
   ASSERT(!IsNull());
   if (IsSmi()) {
     Smi& smi = Smi::Handle();
-    smi ^= raw();
+    smi |= raw();
     return BigintOperations::NewFromSmi(smi);
   } else if (IsMint()) {
     Mint& mint = Mint::Handle();
-    mint ^= raw();
+    mint |= raw();
     return BigintOperations::NewFromInt64(mint.value());
   } else {
     ASSERT(IsBigint());
     Bigint& big = Bigint::Handle();
-    big ^= raw();
+    big |= raw();
     ASSERT(!BigintOperations::FitsIntoSmi(big));
     return big.raw();
   }
@@ -10082,7 +10292,7 @@
   Bigint& canonical_value = Bigint::Handle();
   intptr_t index = 0;
   while (index < constants_len) {
-    canonical_value ^= constants.At(index);
+    canonical_value |= constants.At(index);
     if (canonical_value.IsNull()) {
       break;
     }
@@ -10180,17 +10390,6 @@
 };
 
 
-intptr_t String::Hash() const {
-  intptr_t result = Smi::Value(raw_ptr()->hash_);
-  if (result != 0) {
-    return result;
-  }
-  result = String::Hash(*this, 0, this->Length());
-  this->SetHash(result);
-  return result;
-}
-
-
 intptr_t String::Hash(const String& str, intptr_t begin_index, intptr_t len) {
   ASSERT(begin_index >= 0);
   ASSERT(len >= 0);
@@ -10489,10 +10688,10 @@
   String& result = String::Handle();
   intptr_t char_size = str.CharSize();
   if (char_size == kOneByteChar) {
-    result ^= OneByteString::New(len, space);
+    result |= OneByteString::New(len, space);
   } else {
     ASSERT(char_size == kTwoByteChar);
-    result ^= TwoByteString::New(len, space);
+    result |= TwoByteString::New(len, space);
   }
   String::Copy(result, 0, str, 0, len);
   return result.raw();
@@ -10661,7 +10860,7 @@
   String& str = String::Handle();
   intptr_t char_size = kOneByteChar;
   for (intptr_t i = 0; i < strings_len; i++) {
-    str ^= strings.At(i);
+    str |= strings.At(i);
     result_len += str.Length();
     char_size = Utils::Maximum(char_size, str.CharSize());
   }
@@ -10709,9 +10908,9 @@
     }
   }
   if (is_one_byte_string) {
-    result ^= OneByteString::New(length, space);
+    result |= OneByteString::New(length, space);
   } else {
-    result ^= TwoByteString::New(length, space);
+    result |= TwoByteString::New(length, space);
   }
   String::Copy(result, 0, str, begin_index, length);
   return result.raw();
@@ -11073,7 +11272,7 @@
   intptr_t strings_len = strings.Length();
   intptr_t pos = 0;
   for (intptr_t i = 0; i < strings_len; i++) {
-    str ^= strings.At(i);
+    str |= strings.At(i);
     intptr_t str_len = str.Length();
     String::Copy(result, pos, str, 0, str_len);
     pos += str_len;
@@ -11242,7 +11441,7 @@
   intptr_t strings_len = strings.Length();
   intptr_t pos = 0;
   for (intptr_t i = 0; i < strings_len; i++) {
-    str ^= strings.At(i);
+    str |= strings.At(i);
     intptr_t str_len = str.Length();
     String::Copy(result, pos, str, 0, str_len);
     pos += str_len;
@@ -12426,7 +12625,7 @@
 RawJSRegExp* JSRegExp::FromDataStartAddress(void* data) {
   JSRegExp& regexp = JSRegExp::Handle();
   intptr_t addr = reinterpret_cast<intptr_t>(data) - sizeof(RawJSRegExp);
-  regexp ^= RawObject::FromAddr(addr);
+  regexp |= RawObject::FromAddr(addr);
   return regexp.raw();
 }
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 4d70090..2df948e 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -33,6 +33,12 @@
 class LocalScope;
 class Symbols;
 
+#if defined(DEBUG)
+#define CHECK_HANDLE() CheckHandle();
+#else
+#define CHECK_HANDLE()
+#endif
+
 #define OBJECT_IMPLEMENTATION(object, super)                                   \
  public:  /* NOLINT */                                                         \
   Raw##object* raw() const { return reinterpret_cast<Raw##object*>(raw_); }    \
@@ -44,6 +50,10 @@
     initializeHandle(this, value);                                             \
     ASSERT(IsNull() || Is##object());                                          \
   }                                                                            \
+  void operator|=(RawObject* value) {                                          \
+    raw_ = value;                                                              \
+    CHECK_HANDLE();                                                            \
+  }                                                                            \
   static object& Handle(Isolate* isolate, Raw##object* raw_ptr) {              \
     object* obj =                                                              \
         reinterpret_cast<object*>(VMHandles::AllocateHandle(isolate));         \
@@ -366,6 +376,7 @@
   }
 
   inline void SetRaw(RawObject* value);
+  void CheckHandle() const;
 
   cpp_vtable vtable() const { return bit_copy<cpp_vtable>(*this); }
   void set_vtable(cpp_vtable value) { *vtable_address() = value; }
@@ -699,15 +710,19 @@
 
   RawArray* functions() const { return raw_ptr()->functions_; }
   void SetFunctions(const Array& value) const;
+  void AddFunction(const Function& function) const;
 
   void AddClosureFunction(const Function& function) const;
   RawFunction* LookupClosureFunction(intptr_t token_pos) const;
 
   RawFunction* LookupDynamicFunction(const String& name) const;
+  RawFunction* LookupDynamicFunctionAllowPrivate(const String& name) const;
   RawFunction* LookupStaticFunction(const String& name) const;
+  RawFunction* LookupStaticFunctionAllowPrivate(const String& name) const;
   RawFunction* LookupConstructor(const String& name) const;
   RawFunction* LookupFactory(const String& name) const;
   RawFunction* LookupFunction(const String& name) const;
+  RawFunction* LookupFunctionAllowPrivate(const String& name) const;
   RawFunction* LookupGetterFunction(const String& name) const;
   RawFunction* LookupSetterFunction(const String& name) const;
   RawFunction* LookupFunctionAtToken(intptr_t token_pos) const;
@@ -1195,6 +1210,13 @@
   RawCode* closure_allocation_stub() const;
   void set_closure_allocation_stub(const Code& value) const;
 
+  void set_extracted_method_closure(const Function& function) const;
+  RawFunction* extracted_method_closure() const;
+
+  bool IsMethodExtractor() const {
+    return kind() == RawFunction::kMethodExtractor;
+  }
+
   // Returns true iff an implicit closure function has been created
   // for this function.
   bool HasImplicitClosureFunction() const {
@@ -1237,6 +1259,7 @@
       case RawFunction::kSetterFunction:
       case RawFunction::kImplicitGetter:
       case RawFunction::kImplicitSetter:
+      case RawFunction::kMethodExtractor:
         return true;
       case RawFunction::kClosureFunction:
       case RawFunction::kConstructor:
@@ -2041,6 +2064,7 @@
   static void InitASyncLibrary(Isolate* isolate);
   static void InitCoreLibrary(Isolate* isolate);
   static void InitCollectionLibrary(Isolate* isolate);
+  static void InitCollectionDevLibrary(Isolate* isolate);
   static void InitMathLibrary(Isolate* isolate);
   static void InitIsolateLibrary(Isolate* isolate);
   static void InitMirrorsLibrary(Isolate* isolate);
@@ -2050,6 +2074,7 @@
   static RawLibrary* ASyncLibrary();
   static RawLibrary* CoreLibrary();
   static RawLibrary* CollectionLibrary();
+  static RawLibrary* CollectionDevLibrary();
   static RawLibrary* MathLibrary();
   static RawLibrary* IsolateLibrary();
   static RawLibrary* MirrorsLibrary();
@@ -2391,29 +2416,21 @@
 
 
 class ExceptionHandlers : public Object {
- private:
-  // Describes the layout of exception handler data.
-  enum {
-    kTryIndexEntry = 0,  // Try block index associated with handler.
-    kHandlerPcEntry,  // PC value of handler.
-    kNumberOfEntries
-  };
-
  public:
   intptr_t Length() const;
 
-  intptr_t TryIndex(intptr_t index) const;
-  intptr_t HandlerPC(intptr_t index) const;
+  void GetHandlerInfo(intptr_t try_index,
+                      RawExceptionHandlers::HandlerInfo* info) const;
 
-  void SetHandlerEntry(intptr_t index,
-                       intptr_t try_index,
-                       intptr_t handler_pc) const {
-    SetTryIndex(index, try_index);
-    SetHandlerPC(index, handler_pc);
-  }
+  intptr_t HandlerPC(intptr_t try_index) const;
+  intptr_t OuterTryIndex(intptr_t try_index) const;
 
-  static const intptr_t kBytesPerElement = (kNumberOfEntries * kWordSize);
-  static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
+  void SetHandlerInfo(intptr_t try_index,
+                      intptr_t outer_try_index,
+                      intptr_t handler_pc) const;
+
+  RawArray* GetHandledTypes(intptr_t try_index) const;
+  void SetHandledTypes(intptr_t try_index, const Array& handled_types) const;
 
   static intptr_t InstanceSize() {
     ASSERT(sizeof(RawExceptionHandlers) == OFFSET_OF(RawExceptionHandlers,
@@ -2421,9 +2438,9 @@
     return 0;
   }
   static intptr_t InstanceSize(intptr_t len) {
-    ASSERT(0 <= len && len <= kMaxElements);
     return RoundedAllocationSize(
-        sizeof(RawExceptionHandlers) + (len * kBytesPerElement));
+        sizeof(RawExceptionHandlers) +
+            (len * sizeof(RawExceptionHandlers::HandlerInfo)));
   }
 
   static RawExceptionHandlers* New(intptr_t num_handlers);
@@ -2432,17 +2449,12 @@
   // exception handler table to visit objects if any in the table.
 
  private:
-  void SetTryIndex(intptr_t index, intptr_t value) const;
-  void SetHandlerPC(intptr_t index, intptr_t value) const;
+  // Pick somewhat arbitrary maximum number of exception handlers
+  // for a function. This value is used to catch potentially
+  // malicious code.
+  static const intptr_t kMaxHandlers = 1024 * 1024;
 
-  void SetLength(intptr_t value) const;
-
-  intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const {
-    ASSERT((index >=0) && (index < Length()));
-    intptr_t data_index = (index * kNumberOfEntries) + entry_offset;
-    return &raw_ptr()->data_[data_index];
-  }
-
+  void set_handled_types_data(const Array& value) const;
   HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object);
   friend class Class;
 };
@@ -2977,6 +2989,7 @@
   bool AllTargetsHaveSameOwner(intptr_t owner_cid) const;
   bool AllReceiversAreNumbers() const;
   bool HasOneTarget() const;
+  bool HasReceiverClassId(intptr_t class_id) const;
 
   static RawICData* New(const Function& caller_function,
                         const String& target_name,
@@ -3900,7 +3913,16 @@
   intptr_t Length() const { return Smi::Value(raw_ptr()->length_); }
   static intptr_t length_offset() { return OFFSET_OF(RawString, length_); }
 
-  virtual intptr_t Hash() const;
+  intptr_t Hash() const {
+    intptr_t result = Smi::Value(raw_ptr()->hash_);
+    if (result != 0) {
+      return result;
+    }
+    result = String::Hash(*this, 0, this->Length());
+    this->SetHash(result);
+    return result;
+  }
+
   static intptr_t hash_offset() { return OFFSET_OF(RawString, hash_); }
   static intptr_t Hash(const String& str, intptr_t begin_index, intptr_t len);
   static intptr_t Hash(const uint8_t* characters, intptr_t len);
diff --git a/runtime/vm/object_mips_test.cc b/runtime/vm/object_mips_test.cc
new file mode 100644
index 0000000..ef10b2d
--- /dev/null
+++ b/runtime/vm/object_mips_test.cc
@@ -0,0 +1,40 @@
+// 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.
+
+#include "platform/assert.h"
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/assembler.h"
+#include "vm/object.h"
+#include "vm/unit_test.h"
+
+namespace dart {
+
+#define __ assembler->
+
+
+// Generate a simple dart code sequence.
+// This is used to test Code and Instruction object creation.
+void GenerateIncrement(Assembler* assembler) {
+  __ Unimplemented("GenerateIncrement");
+}
+
+
+// Generate a dart code sequence that embeds a string object in it.
+// This is used to test Embedded String objects in the instructions.
+void GenerateEmbedStringInCode(Assembler* assembler, const char* str) {
+  __ Unimplemented("GenerateEmbedStringInCode");
+}
+
+
+// Generate a dart code sequence that embeds a smi object in it.
+// This is used to test Embedded Smi objects in the instructions.
+void GenerateEmbedSmiInCode(Assembler* assembler, intptr_t value) {
+  __ Unimplemented("GenerateEmbedSmiInCode");
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index c44d966..0d847da 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -115,6 +115,8 @@
   }
   ASSERT(this->stack_overflow() == Instance::null());
   ASSERT(this->out_of_memory() == Instance::null());
+  // TODO(regis): Reenable this code for arm and mips when possible.
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
   Object& result = Object::Handle();
 
   result = Exceptions::Create(Exceptions::kStackOverflow,
@@ -129,6 +131,7 @@
     return false;
   }
   set_out_of_memory(Instance::Cast(result));
+#endif
   return true;
 }
 
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 97c8221..bf98064 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -377,6 +377,13 @@
     collection_library_ = value.raw();
   }
 
+  RawLibrary* collection_dev_library() const {
+    return collection_dev_library_;
+  }
+  void set_collection_dev_library(const Library& value) {
+    collection_dev_library_ = value.raw();
+  }
+
   RawLibrary* math_library() const {
     return math_library_;
   }
@@ -564,6 +571,7 @@
   RawLibrary* core_library_;
   RawLibrary* core_impl_library_;
   RawLibrary* collection_library_;
+  RawLibrary* collection_dev_library_;
   RawLibrary* math_library_;
   RawLibrary* isolate_library_;
   RawLibrary* mirrors_library_;
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index aec86a2..93d7ec8 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -1759,8 +1759,9 @@
 
   // Test the MakeArray functionality to make sure the resulting array
   // object is properly setup.
-  // 1. Should produce an array of length 2 and a remainder array of length 1.
+  // 1. Should produce an array of length 2 and a left over int8 array.
   Array& new_array = Array::Handle();
+  Int8Array& left_over_array = Int8Array::Handle();
   Object& obj = Object::Handle();
   uword addr = 0;
   intptr_t used_size = 0;
@@ -1781,11 +1782,11 @@
   EXPECT_EQ(2, new_array.Length());
   addr += used_size;
   obj = RawObject::FromAddr(addr);
-  EXPECT(obj.IsArray());
-  new_array ^= obj.raw();
-  EXPECT_EQ(0, new_array.Length());
+  EXPECT(obj.IsInt8Array());
+  left_over_array ^= obj.raw();
+  EXPECT_EQ((2 * kWordSize), left_over_array.Length());
 
-  // 2. Should produce an array of length 3 and a remainder object.
+  // 2. Should produce an array of length 3 and a left over int8 array.
   array = GrowableObjectArray::New(kArrayLen);
   EXPECT_EQ(kArrayLen, array.Capacity());
   EXPECT_EQ(0, array.Length());
@@ -1802,9 +1803,11 @@
   EXPECT_EQ(3, new_array.Length());
   addr += used_size;
   obj = RawObject::FromAddr(addr);
-  EXPECT(!obj.IsArray());
+  EXPECT(obj.IsInt8Array());
+  left_over_array ^= obj.raw();
+  EXPECT_EQ(0, left_over_array.Length());
 
-  // 3. Should produce an array of length 1 and a remainder array of length 2.
+  // 3. Should produce an array of length 1 and a left over int8 array.
   array = GrowableObjectArray::New(kArrayLen + 3);
   EXPECT_EQ((kArrayLen + 3), array.Capacity());
   EXPECT_EQ(0, array.Length());
@@ -1821,9 +1824,9 @@
   EXPECT_EQ(1, new_array.Length());
   addr += used_size;
   obj = RawObject::FromAddr(addr);
-  EXPECT(obj.IsArray());
-  new_array ^= obj.raw();
-  EXPECT_EQ(4, new_array.Length());
+  EXPECT(obj.IsInt8Array());
+  left_over_array ^= obj.raw();
+  EXPECT_EQ((6 * kWordSize), left_over_array.Length());
 }
 
 
@@ -2488,17 +2491,17 @@
       new LocalScope(parent_scope, local_scope_function_level, 0);
 
   const Type& dynamic_type = Type::ZoneHandle(Type::DynamicType());
-  const String& a = String::ZoneHandle(String::New("a"));
+  const String& a = String::ZoneHandle(Symbols::New("a"));
   LocalVariable* var_a =
       new LocalVariable(Scanner::kDummyTokenIndex, a, dynamic_type);
   parent_scope->AddVariable(var_a);
 
-  const String& b = String::ZoneHandle(String::New("b"));
+  const String& b = String::ZoneHandle(Symbols::New("b"));
   LocalVariable* var_b =
       new LocalVariable(Scanner::kDummyTokenIndex, b, dynamic_type);
   local_scope->AddVariable(var_b);
 
-  const String& c = String::ZoneHandle(String::New("c"));
+  const String& c = String::ZoneHandle(Symbols::New("c"));
   LocalVariable* var_c =
       new LocalVariable(Scanner::kDummyTokenIndex, c, dynamic_type);
   parent_scope->AddVariable(var_c);
@@ -2728,16 +2731,14 @@
 
 
 TEST_CASE(ExceptionHandlers) {
-  const int kNumEntries = 6;
+  const int kNumEntries = 4;
   // Add an exception handler table to the code.
   ExceptionHandlers& exception_handlers = ExceptionHandlers::Handle();
   exception_handlers ^= ExceptionHandlers::New(kNumEntries);
-  exception_handlers.SetHandlerEntry(0, 10, 20);
-  exception_handlers.SetHandlerEntry(1, 20, 30);
-  exception_handlers.SetHandlerEntry(2, 30, 40);
-  exception_handlers.SetHandlerEntry(3, 10, 40);
-  exception_handlers.SetHandlerEntry(4, 10, 80);
-  exception_handlers.SetHandlerEntry(5, 80, 150);
+  exception_handlers.SetHandlerInfo(0, -1, 20);
+  exception_handlers.SetHandlerInfo(1, 0, 30);
+  exception_handlers.SetHandlerInfo(2, -1, 40);
+  exception_handlers.SetHandlerInfo(3, 1, 150);
 
   extern void GenerateIncrement(Assembler* assembler);
   Assembler _assembler_;
@@ -2750,10 +2751,14 @@
   const ExceptionHandlers& handlers =
       ExceptionHandlers::Handle(code.exception_handlers());
   EXPECT_EQ(kNumEntries, handlers.Length());
-  EXPECT_EQ(10, handlers.TryIndex(0));
+  RawExceptionHandlers::HandlerInfo info;
+  handlers.GetHandlerInfo(0, &info);
+  EXPECT_EQ(-1, handlers.OuterTryIndex(0));
+  EXPECT_EQ(-1, info.outer_try_index);
   EXPECT_EQ(20, handlers.HandlerPC(0));
-  EXPECT_EQ(80, handlers.TryIndex(5));
-  EXPECT_EQ(150, handlers.HandlerPC(5));
+  EXPECT_EQ(20, info.handler_pc);
+  EXPECT_EQ(1, handlers.OuterTryIndex(3));
+  EXPECT_EQ(150, handlers.HandlerPC(3));
 }
 
 
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index 3c7495b..2e6d12e 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -250,7 +250,8 @@
 word OS::ActivationFrameAlignment() {
 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
   const int kMinimumAlignment = 16;
-#elif defined(TARGET_ARCH_ARM)
+#elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS)
+  // TODO(regis): Verify alignment constraints on MIPS.
   const int kMinimumAlignment = 8;
 #else
 #error Unsupported architecture.
@@ -268,7 +269,8 @@
 word OS::PreferredCodeAlignment() {
 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
   const int kMinimumAlignment = 16;
-#elif defined(TARGET_ARCH_ARM)
+#elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS)
+  // TODO(regis): Verify alignment constraints on MIPS.
   const int kMinimumAlignment = 16;
 #else
 #error Unsupported architecture.
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index aacdda0..4077274 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -29,10 +29,6 @@
 DEFINE_FLAG(bool, silent_warnings, false, "Silence warnings.");
 DEFINE_FLAG(bool, warn_legacy_map_literal, false,
             "Warning on legacy map literal syntax (single type argument)");
-DEFINE_FLAG(bool, strict_function_literals, false,
-            "enforce new function literal rules");
-DEFINE_FLAG(bool, fail_legacy_abstract, false,
-            "error on explicit use of abstract on class members");
 
 static void CheckedModeHandler(bool value) {
   FLAG_enable_asserts = value;
@@ -368,14 +364,14 @@
 
 String* Parser::CurrentLiteral() const {
   String& result = String::ZoneHandle();
-  result ^= tokens_iterator_.CurrentLiteral();
+  result |= tokens_iterator_.CurrentLiteral();
   return &result;
 }
 
 
 RawDouble* Parser::CurrentDoubleLiteral() const {
   LiteralToken& token = LiteralToken::Handle();
-  token ^= tokens_iterator_.CurrentToken();
+  token |= tokens_iterator_.CurrentToken();
   ASSERT(token.kind() == Token::kDOUBLE);
   return reinterpret_cast<RawDouble*>(token.value());
 }
@@ -383,7 +379,7 @@
 
 RawInteger* Parser::CurrentIntegerLiteral() const {
   LiteralToken& token = LiteralToken::Handle();
-  token ^= tokens_iterator_.CurrentToken();
+  token |= tokens_iterator_.CurrentToken();
   ASSERT(token.kind() == Token::kINTEGER);
   return reinterpret_cast<RawInteger*>(token.value());
 }
@@ -630,7 +626,7 @@
   bool has_constructor() const {
     Function& func = Function::Handle();
     for (int i = 0; i < functions_.Length(); i++) {
-      func ^= functions_.At(i);
+      func |= functions_.At(i);
       if (func.kind() == RawFunction::kConstructor) {
         return true;
       }
@@ -664,7 +660,7 @@
     String& test_name = String::Handle();
     Field& field = Field::Handle();
     for (int i = 0; i < fields_.Length(); i++) {
-      field ^= fields_.At(i);
+      field |= fields_.At(i);
       test_name = field.name();
       if (name.Equals(test_name)) {
         return &field;
@@ -681,7 +677,7 @@
     String& test_name = String::Handle();
     Function& func = Function::Handle();
     for (int i = 0; i < functions_.Length(); i++) {
-      func ^= functions_.At(i);
+      func |= functions_.At(i);
       test_name = func.name();
       if (name.Equals(test_name)) {
         return &func;
@@ -756,6 +752,9 @@
     case RawFunction::kConstImplicitGetter:
       node_sequence = parser.ParseStaticConstGetter(func);
       break;
+    case RawFunction::kMethodExtractor:
+      node_sequence = parser.ParseMethodExtractor(func);
+      break;
     default:
       UNREACHABLE();
   }
@@ -984,6 +983,37 @@
 }
 
 
+SequenceNode* Parser::ParseMethodExtractor(const Function& func) {
+  TRACE_PARSER("ParseMethodExtractor");
+  ParamList params;
+
+  const intptr_t ident_pos = func.token_pos();
+  ASSERT(func.token_pos() == 0);
+  ASSERT(current_class().raw() == func.Owner());
+  params.AddReceiver(ReceiverType(ident_pos));
+  ASSERT(func.num_fixed_parameters() == 1);  // Receiver.
+  ASSERT(!func.HasOptionalParameters());
+
+  // Build local scope for function and populate with the formal parameters.
+  OpenFunctionBlock(func);
+  AddFormalParamsToScope(&params, current_block_->scope);
+
+  // Receiver is local 0.
+  LocalVariable* receiver = current_block_->scope->VariableAt(0);
+  LoadLocalNode* load_receiver = new LoadLocalNode(ident_pos, receiver);
+
+  ClosureNode* closure = new ClosureNode(
+      ident_pos,
+      Function::ZoneHandle(func.extracted_method_closure()),
+      load_receiver,
+      NULL);
+
+  ReturnNode* return_node = new ReturnNode(ident_pos, closure);
+  current_block_->statements->Add(return_node);
+  return CloseBlock();
+}
+
+
 void Parser::SkipBlock() {
   ASSERT(CurrentToken() == Token::kLBRACE);
   GrowableArray<Token::Kind> token_stack(8);
@@ -1333,6 +1363,13 @@
 }
 
 
+static const String& PrivateCoreLibName(const String& str) {
+  const Library& core_lib = Library::Handle(Library::CoreLibrary());
+  const String& private_name = String::ZoneHandle(core_lib.PrivateName(str));
+  return private_name;
+}
+
+
 StaticCallNode* Parser::BuildInvocationMirrorAllocation(
     intptr_t call_pos,
     const String& function_name,
@@ -1361,7 +1398,8 @@
       Class::Handle(LookupCoreClass(Symbols::InvocationMirror()));
   ASSERT(!mirror_class.IsNull());
   const Function& allocation_function = Function::ZoneHandle(
-      mirror_class.LookupStaticFunction(Symbols::AllocateInvocationMirror()));
+      mirror_class.LookupStaticFunction(
+          PrivateCoreLibName(Symbols::AllocateInvocationMirror())));
   ASSERT(!allocation_function.IsNull());
   return new StaticCallNode(call_pos, allocation_function, arguments);
 }
@@ -1728,7 +1766,7 @@
   Field& field = Field::Handle();
   SequenceNode* initializers = current_block_->statements;
   for (int field_num = 0; field_num < fields.Length(); field_num++) {
-    field ^= fields.At(field_num);
+    field |= fields.At(field_num);
     if (field.is_static() || !field.is_final()) {
       continue;
     }
@@ -1760,10 +1798,10 @@
   Field& f = Field::Handle();
   const intptr_t saved_pos = TokenPos();
   for (int i = 0; i < fields.Length(); i++) {
-    f ^= fields.At(i);
+    f |= fields.At(i);
     if (!f.is_static() && f.has_initializer()) {
       Field& field = Field::ZoneHandle();
-      field ^= fields.At(i);
+      field |= fields.At(i);
       if (field.is_final()) {
         // Final fields with initializer expression may not be initialized
         // again by constructors. Remember that this field is already
@@ -2859,14 +2897,6 @@
   TRACE_PARSER("ParseClassMemberDefinition");
   MemberDesc member;
   current_member_ = &member;
-  if ((CurrentToken() == Token::kABSTRACT) &&
-      (LookaheadToken(1) != Token::kLPAREN)) {
-    if (FLAG_fail_legacy_abstract) {
-      ErrorMsg("illegal use of abstract");
-    }
-    ConsumeToken();
-    member.has_abstract = true;
-  }
   if ((CurrentToken() == Token::kEXTERNAL) &&
       (LookaheadToken(1) != Token::kLPAREN)) {
     ConsumeToken();
@@ -3108,7 +3138,7 @@
       ErrorMsg(classname_pos, "'%s' is already defined",
                class_name.ToCString());
     }
-    cls ^= obj.raw();
+    cls |= obj.raw();
     if (is_patch) {
       String& patch = String::Handle(
           String::Concat(Symbols::PatchSpace(), class_name));
@@ -4730,25 +4760,10 @@
   result_type = Type::DynamicType();
 
   intptr_t ident_pos = TokenPos();
-  if (FLAG_strict_function_literals) {
-    if (is_literal) {
-      ASSERT(CurrentToken() == Token::kLPAREN);
-      function_name = &Symbols::AnonymousClosure();
-    } else {
-      if (CurrentToken() == Token::kVOID) {
-        ConsumeToken();
-        result_type = Type::VoidType();
-      } else if ((CurrentToken() == Token::kIDENT) &&
-                 (LookaheadToken(1) != Token::kLPAREN)) {
-        result_type = ParseType(ClassFinalizer::kCanonicalize);
-      }
-      ident_pos = TokenPos();
-      variable_name = ExpectIdentifier("function name expected");
-      function_name = variable_name;
-    }
+  if (is_literal) {
+    ASSERT(CurrentToken() == Token::kLPAREN);
+    function_name = &Symbols::AnonymousClosure();
   } else {
-    // TODO(hausner) remove this block once support for old-style function
-    // literals is gone.
     if (CurrentToken() == Token::kVOID) {
       ConsumeToken();
       result_type = Type::VoidType();
@@ -4757,16 +4772,8 @@
       result_type = ParseType(ClassFinalizer::kCanonicalize);
     }
     ident_pos = TokenPos();
-    if (IsIdentifier()) {
-      variable_name = CurrentLiteral();
-      function_name = variable_name;
-      ConsumeToken();
-    } else {
-      if (!is_literal) {
-        ErrorMsg("function name expected");
-      }
-      function_name = &Symbols::AnonymousClosure();
-    }
+    variable_name = ExpectIdentifier("function name expected");
+    function_name = variable_name;
   }
 
   if (CurrentToken() != Token::kLPAREN) {
@@ -5173,46 +5180,18 @@
 
 
 bool Parser::IsFunctionLiteral() {
-  // TODO(hausner): Remove code block that supports old-style function
-  // literals.
-  if (FLAG_strict_function_literals) {
-    if (CurrentToken() != Token::kLPAREN || !allow_function_literals_) {
-      return false;
-    }
-    const intptr_t saved_pos = TokenPos();
-    bool is_function_literal = false;
-    SkipToMatchingParenthesis();
-    if ((CurrentToken() == Token::kLBRACE) ||
-        (CurrentToken() == Token::kARROW)) {
-      is_function_literal = true;
-    }
-    SetPosition(saved_pos);
-    return is_function_literal;
-  } else {
-    if (!allow_function_literals_) {
-      return false;
-    }
-    const intptr_t saved_pos = TokenPos();
-    bool is_function_literal = false;
-    if (IsIdentifier() && (LookaheadToken(1) == Token::kLPAREN)) {
-      ConsumeToken();  // Consume function identifier.
-    } else if (TryParseReturnType()) {
-      if (!IsIdentifier()) {
-        SetPosition(saved_pos);
-        return false;
-      }
-      ConsumeToken();  // Comsume function identifier.
-    }
-    if (CurrentToken() == Token::kLPAREN) {
-      SkipToMatchingParenthesis();
-      if ((CurrentToken() == Token::kLBRACE) ||
-          (CurrentToken() == Token::kARROW)) {
-        is_function_literal = true;
-      }
-    }
-    SetPosition(saved_pos);
-    return is_function_literal;
+  if (CurrentToken() != Token::kLPAREN || !allow_function_literals_) {
+    return false;
   }
+  const intptr_t saved_pos = TokenPos();
+  bool is_function_literal = false;
+  SkipToMatchingParenthesis();
+  if ((CurrentToken() == Token::kLBRACE) ||
+      (CurrentToken() == Token::kARROW)) {
+    is_function_literal = true;
+  }
+  SetPosition(saved_pos);
+  return is_function_literal;
 }
 
 
@@ -5408,7 +5387,7 @@
             TokenPos(), Integer::ZoneHandle(Integer::New(TokenPos()))));
         current_block_->statements->Add(
             MakeStaticCall(Symbols::FallThroughError(),
-                           Symbols::ThrowNew(),
+                           PrivateCoreLibName(Symbols::ThrowNew()),
                            arguments));
       }
       break;
@@ -5752,7 +5731,7 @@
   arguments->Add(new LiteralNode(end,
       Integer::ZoneHandle(Integer::New(end))));
   return MakeStaticCall(Symbols::AssertionError(),
-                        Symbols::ThrowNew(),
+                        PrivateCoreLibName(Symbols::ThrowNew()),
                         arguments);
 }
 
@@ -5969,6 +5948,8 @@
   const intptr_t handler_pos = TokenPos();
   OpenBlock();  // Start the catch block sequence.
   current_block_->scope->AddLabel(end_catch_label);
+  const GrowableObjectArray& handler_types =
+      GrowableObjectArray::Handle(GrowableObjectArray::New());
   while ((CurrentToken() == Token::kCATCH) || IsLiteral("on")) {
     const intptr_t catch_pos = TokenPos();
     CatchParamDesc exception_param;
@@ -6061,11 +6042,26 @@
           catch_pos, Token::kIS, exception_var, exception_type);
       current_block_->statements->Add(
           new IfNode(catch_pos, type_cond_expr, catch_handler, NULL));
+
+      // Do not add uninstantiated types (e.g. type parameter T or
+      // generic type List<T>), since the debugger won't be able to
+      // instantiate it when walking the stack.
+      // This means that the debugger is not able to determine whether
+      // an exception is caught if the catch clause uses generic types.
+      // It will report the exception as uncaught when in fact it might
+      // be caught and handled when we unwind the stack.
+      if (exception_param.type->IsInstantiated()) {
+        handler_types.Add(*exception_param.type);
+      }
     } else {
       // No exception type exists in the catch specifier so execute the
       // catch handler code unconditionally.
       current_block_->statements->Add(catch_handler);
       generic_catch_seen = true;
+      // This catch clause will handle all exceptions. We can safely forget
+      // all previous catch clause types.
+      handler_types.SetLength(0);
+      handler_types.Add(*exception_param.type);
     }
     SequenceNode* catch_clause = CloseBlock();
 
@@ -6118,11 +6114,13 @@
                       new LoadLocalNode(handler_pos, catch_excp_var),
                       new LoadLocalNode(handler_pos, catch_trace_var)));
   }
-  CatchClauseNode* catch_block = new CatchClauseNode(handler_pos,
-                                                     catch_handler_list,
-                                                     context_var,
-                                                     catch_excp_var,
-                                                     catch_trace_var);
+  CatchClauseNode* catch_block =
+      new CatchClauseNode(handler_pos,
+                          catch_handler_list,
+                          Array::ZoneHandle(Array::MakeArray(handler_types)),
+                          context_var,
+                          catch_excp_var,
+                          catch_trace_var);
 
   // Now create the try/catch ast node and return it. If there is a label
   // on the try/catch, close the block that's embedding the try statement
@@ -6580,7 +6578,9 @@
   const Error& error = Error::Handle(type.malformed_error());
   arguments->Add(new LiteralNode(type_pos, String::ZoneHandle(
       Symbols::New(error.ToErrorCString()))));
-  return MakeStaticCall(Symbols::TypeError(), Symbols::ThrowNew(), arguments);
+  return MakeStaticCall(Symbols::TypeError(),
+                        PrivateCoreLibName(Symbols::ThrowNew()),
+                        arguments);
 }
 
 
@@ -6610,7 +6610,7 @@
   // List existingArgumentNames.
   arguments->Add(new LiteralNode(call_pos, Array::ZoneHandle()));
   return MakeStaticCall(Symbols::NoSuchMethodError(),
-                        Symbols::ThrowNew(),
+                        PrivateCoreLibName(Symbols::ThrowNew()),
                         arguments);
 }
 
@@ -7113,7 +7113,7 @@
         // canonicalized strings.
         ASSERT(CurrentLiteral()->IsSymbol());
         for (int i = 0; i < names.Length(); i++) {
-          arg_name ^= names.At(i);
+          arg_name |= names.At(i);
           if (CurrentLiteral()->Equals(arg_name)) {
             ErrorMsg("duplicate named argument");
           }
@@ -7402,7 +7402,7 @@
           if (primary_node->primary().IsClass()) {
             // If the primary node referred to a class we are loading a
             // qualified static field.
-            cls ^= primary_node->primary().raw();
+            cls |= primary_node->primary().raw();
           }
         }
         if (cls.IsNull()) {
@@ -8135,7 +8135,7 @@
     intptr_t num_imports = library_.num_imports();
     Object& imported_obj = Object::Handle();
     for (int i = 0; i < num_imports; i++) {
-      import ^= library_.ImportAt(i);
+      import |= library_.ImportAt(i);
       imported_obj = LookupNameInImport(import, name);
       if (!imported_obj.IsNull()) {
         const Library& lib = Library::Handle(import.library());
@@ -8238,7 +8238,7 @@
   Object& resolved_obj = Object::Handle();
   const Array& imports = Array::Handle(prefix.imports());
   for (intptr_t i = 0; i < prefix.num_imports(); i++) {
-    import ^= imports.At(i);
+    import |= imports.At(i);
     resolved_obj = LookupNameInImport(import, name);
     if (!resolved_obj.IsNull()) {
       obj = resolved_obj.raw();
@@ -8579,7 +8579,8 @@
         Class::Handle(LookupCoreClass(Symbols::List()));
     ASSERT(!factory_class.IsNull());
     const Function& factory_method = Function::ZoneHandle(
-        factory_class.LookupFactory(Symbols::ListLiteralFactory()));
+        factory_class.LookupFactory(
+            PrivateCoreLibName(Symbols::ListLiteralFactory())));
     ASSERT(!factory_method.IsNull());
     if (!type_arguments.IsNull() &&
         !type_arguments.IsInstantiated() &&
@@ -8791,7 +8792,7 @@
     constr_args->Add(new LiteralNode(literal_pos, key_value_array));
     const Function& map_constr =
         Function::ZoneHandle(immutable_map_class.LookupConstructor(
-            Symbols::ImmutableMapConstructor()));
+            PrivateCoreLibName(Symbols::ImmutableMapConstructor())));
     ASSERT(!map_constr.IsNull());
     const Object& constructor_result = Object::Handle(
         EvaluateConstConstructorCall(immutable_map_class,
@@ -8811,7 +8812,8 @@
         Class::Handle(LookupCoreClass(Symbols::Map()));
     ASSERT(!factory_class.IsNull());
     const Function& factory_method = Function::ZoneHandle(
-        factory_class.LookupFactory(Symbols::MapLiteralFactory()));
+        factory_class.LookupFactory(
+            PrivateCoreLibName(Symbols::MapLiteralFactory())));
     ASSERT(!factory_method.IsNull());
     if (!map_type_arguments.IsNull() &&
         !map_type_arguments.IsInstantiated() &&
@@ -9024,7 +9026,7 @@
     arguments->Add(new LiteralNode(
         TokenPos(), String::ZoneHandle(type_class_name.raw())));
     return MakeStaticCall(Symbols::AbstractClassInstantiationError(),
-                          Symbols::ThrowNew(),
+                          PrivateCoreLibName(Symbols::ThrowNew()),
                           arguments);
   }
   String& error_message = String::Handle();
@@ -9119,7 +9121,8 @@
   const Class& cls = Class::Handle(LookupCoreClass(Symbols::StringBase()));
   ASSERT(!cls.IsNull());
   const Function& func =
-      Function::Handle(cls.LookupStaticFunction(Symbols::Interpolate()));
+      Function::Handle(cls.LookupStaticFunction(
+          PrivateCoreLibName(Symbols::Interpolate())));
   ASSERT(!func.IsNull());
 
   // Build the array of literal values to interpolate.
@@ -9135,7 +9138,7 @@
 
   // Call interpolation function.
   String& concatenated = String::ZoneHandle();
-  concatenated ^= DartEntry::InvokeStatic(func, interpolate_arg);
+  concatenated |= DartEntry::InvokeStatic(func, interpolate_arg);
   if (concatenated.IsUnhandledException()) {
     ErrorMsg("Exception thrown in Parser::Interpolate");
   }
@@ -9211,7 +9214,7 @@
         new ArgumentListNode(values->token_pos());
     interpolate_arg->Add(values);
     primary = MakeStaticCall(Symbols::StringBase(),
-                             Symbols::Interpolate(),
+                             PrivateCoreLibName(Symbols::Interpolate()),
                              interpolate_arg);
   }
   return primary;
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 1b117b4..5fa2eca 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -394,6 +394,7 @@
   SequenceNode* ParseInstanceGetter(const Function& func);
   SequenceNode* ParseInstanceSetter(const Function& func);
   SequenceNode* ParseStaticConstGetter(const Function& func);
+  SequenceNode* ParseMethodExtractor(const Function& func);
 
   void ChainNewBlock(LocalScope* outer_scope);
   void OpenBlock();
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 534c38c..de55c74 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -226,7 +226,7 @@
       case kExceptionHandlersCid: {
         const RawExceptionHandlers* raw_handlers =
             reinterpret_cast<const RawExceptionHandlers*>(this);
-        intptr_t num_handlers = Smi::Value(raw_handlers->ptr()->length_);
+        intptr_t num_handlers = raw_handlers->ptr()->length_;
         instance_size = ExceptionHandlers::InstanceSize(num_handlers);
         break;
       }
@@ -523,9 +523,10 @@
 intptr_t RawExceptionHandlers::VisitExceptionHandlersPointers(
     RawExceptionHandlers* raw_obj, ObjectPointerVisitor* visitor) {
   RawExceptionHandlers* obj = raw_obj->ptr();
-  intptr_t length = Smi::Value(obj->length_);
-  visitor->VisitPointer(reinterpret_cast<RawObject**>(&obj->length_));
-  return ExceptionHandlers::InstanceSize(length);
+  intptr_t len = obj->length_;
+  visitor->VisitPointer(
+      reinterpret_cast<RawObject**>(&obj->handled_types_data_));
+  return ExceptionHandlers::InstanceSize(len);
 }
 
 
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index f720e97..078e07e 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -540,9 +540,11 @@
     kImplicitGetter,     // represents an implicit getter for fields.
     kImplicitSetter,     // represents an implicit setter for fields.
     kConstImplicitGetter,  // represents an implicit const getter for fields.
+    kMethodExtractor,  // converts method into implicit closure on the receiver.
   };
 
  private:
+  friend class Class;
   RAW_HEAP_OBJECT_IMPLEMENTATION(Function);
 
   RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->name_); }
@@ -858,12 +860,25 @@
 
 
 class RawExceptionHandlers : public RawObject {
+ public:
+  // The index into the ExceptionHandlers table corresponds to
+  // the try_index of the handler.
+  struct HandlerInfo {
+    intptr_t outer_try_index;  // Try block index of enclosing try block.
+    intptr_t handler_pc;       // PC value of handler.
+  };
+ private:
   RAW_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers);
 
-  RawSmi* length_;  // Number of exception handler entries.
+  // Number of exception handler entries.
+  intptr_t length_;
 
-  // Variable length data follows here.
-  intptr_t data_[0];
+  // Array with [length_] entries. Each entry is an array of all handled
+  // exception types.
+  RawArray* handled_types_data_;
+
+  // Exception handler info of length [length_].
+  HandlerInfo data_[0];
 };
 
 
@@ -1297,6 +1312,8 @@
 
   // Variable length data follows here.
   int8_t data_[0];
+
+  friend class Object;
 };
 
 
diff --git a/runtime/vm/resolver.cc b/runtime/vm/resolver.cc
index 23d46b4..8b60ea3 100644
--- a/runtime/vm/resolver.cc
+++ b/runtime/vm/resolver.cc
@@ -8,6 +8,7 @@
 #include "vm/isolate.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
+#include "vm/symbols.h"
 
 namespace dart {
 
@@ -71,6 +72,47 @@
 }
 
 
+// Method extractors are used to create implicit closures from methods.
+// When an expression obj.M is evaluated for the first time and receiver obj
+// does not have a getter called M but has a method called M then an extractor
+// is created and injected as a getter (under the name get:M) into the class
+// ownining method M.
+static RawFunction* CreateMethodExtractor(const String& getter_name,
+                                          const Function& method) {
+  const Function& closure_function =
+      Function::Handle(method.ImplicitClosureFunction());
+
+  const Class& owner = Class::Handle(closure_function.Owner());
+  Function& extractor = Function::Handle(
+    Function::New(String::Handle(Symbols::New(getter_name)),
+                  RawFunction::kMethodExtractor,
+                  false,  // Not static.
+                  false,  // Not const.
+                  false,  // Not abstract.
+                  false,  // Not external.
+                  owner,
+                  0));  // No token position.
+
+  // Initialize signature: receiver is a single fixed parameter.
+  const intptr_t kNumParameters = 1;
+  extractor.set_num_fixed_parameters(kNumParameters);
+  extractor.SetNumOptionalParameters(0, 0);
+  extractor.set_parameter_types(Array::Handle(Array::New(kNumParameters,
+                                                         Heap::kOld)));
+  extractor.set_parameter_names(Array::Handle(Array::New(kNumParameters,
+                                                         Heap::kOld)));
+  extractor.SetParameterTypeAt(0, Type::Handle(Type::DynamicType()));
+  extractor.SetParameterNameAt(0, Symbols::This());
+  extractor.set_result_type(Type::Handle(Type::DynamicType()));
+
+  extractor.set_extracted_method_closure(closure_function);
+
+  owner.AddFunction(extractor);
+
+  return extractor.raw();
+}
+
+
 RawFunction* Resolver::ResolveDynamicAnyArgs(
     const Class& receiver_class,
     const String& function_name) {
@@ -80,14 +122,30 @@
               function_name.ToCString(),
               String::Handle(cls.Name()).ToCString());
   }
+
+  const bool is_getter = Field::IsGetterName(function_name);
+  String& field_name = String::Handle();
+  if (is_getter) {
+    field_name |= Field::NameFromGetter(function_name);
+  }
+
   // Now look for an instance function whose name matches function_name
   // in the class.
-  Function& function =
-      Function::Handle(cls.LookupDynamicFunction(function_name));
-  while (function.IsNull()) {
+  Function& function = Function::Handle();
+  while (function.IsNull() && !cls.IsNull()) {
+    function |= cls.LookupDynamicFunction(function_name);
+
+    // Getter invocation might actually be a method extraction.
+    if (is_getter && function.IsNull()) {
+      function |= cls.LookupDynamicFunction(field_name);
+      if (!function.IsNull()) {
+        // We were looking for the getter but found a method with the same name.
+        // Create a method extractor and return it.
+        function |= CreateMethodExtractor(function_name, function);
+      }
+    }
+
     cls = cls.SuperClass();
-    if (cls.IsNull()) break;
-    function = cls.LookupDynamicFunction(function_name);
   }
   return function.raw();
 }
@@ -105,7 +163,7 @@
     // Check if we are referring to a top level function.
     const Object& object = Object::Handle(library.LookupObject(function_name));
     if (!object.IsNull() && object.IsFunction()) {
-      function ^= object.raw();
+      function |= object.raw();
       if (!function.AreValidArguments(num_arguments, argument_names, NULL)) {
         if (FLAG_trace_resolving) {
           String& error_message = String::Handle();
diff --git a/runtime/vm/runtime_entry_mips.cc b/runtime/vm/runtime_entry_mips.cc
new file mode 100644
index 0000000..4d5a0d2
--- /dev/null
+++ b/runtime/vm/runtime_entry_mips.cc
@@ -0,0 +1,18 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/runtime_entry.h"
+
+namespace dart {
+
+void RuntimeEntry::Call(Assembler* assembler) const {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/scanner.cc b/runtime/vm/scanner.cc
index 5c589e0..6dae332 100644
--- a/runtime/vm/scanner.cc
+++ b/runtime/vm/scanner.cc
@@ -312,7 +312,7 @@
       if (char_pos == ident_length) {
         if (keywords_[i].keyword_symbol == NULL) {
           String& symbol = String::ZoneHandle();
-          symbol ^= keyword_symbol_table_.At(i);
+          symbol |= keyword_symbol_table_.At(i);
           ASSERT(!symbol.IsNull());
           keywords_[i].keyword_symbol = &symbol;
         }
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index 42614f0..d5bf92a 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -294,9 +294,11 @@
 
 
 LocalVariable* LocalScope::LocalLookupVariable(const String& name) const {
+  ASSERT(name.IsSymbol());
   for (intptr_t i = 0; i < variables_.length(); i++) {
     LocalVariable* var = variables_[i];
-    if (var->name().Equals(name) && !var->is_invisible_) {
+    ASSERT(var->name().IsSymbol());
+    if ((var->name().raw() == name.raw()) && !var->is_invisible_) {
       return var;
     }
   }
diff --git a/runtime/vm/scopes_test.cc b/runtime/vm/scopes_test.cc
index 9f4fdb3..6ef2172 100644
--- a/runtime/vm/scopes_test.cc
+++ b/runtime/vm/scopes_test.cc
@@ -12,18 +12,18 @@
 TEST_CASE(LocalScope) {
   // Allocate a couple of local variables first.
   const Type& dynamic_type = Type::ZoneHandle(Type::DynamicType());
-  const String& a = String::ZoneHandle(String::New("a"));
+  const String& a = String::ZoneHandle(Symbols::New("a"));
   LocalVariable* var_a =
       new LocalVariable(Scanner::kDummyTokenIndex, a, dynamic_type);
   LocalVariable* inner_var_a =
       new LocalVariable(Scanner::kDummyTokenIndex, a, dynamic_type);
-  const String& b = String::ZoneHandle(String::New("b"));
+  const String& b = String::ZoneHandle(Symbols::New("b"));
   LocalVariable* var_b =
       new LocalVariable(Scanner::kDummyTokenIndex, b, dynamic_type);
-  const String& c = String::ZoneHandle(String::New("c"));
+  const String& c = String::ZoneHandle(Symbols::New("c"));
   LocalVariable* var_c =
       new LocalVariable(Scanner::kDummyTokenIndex, c, dynamic_type);
-  const String& L = String::ZoneHandle(String::New("L"));
+  const String& L = String::ZoneHandle(Symbols::New("L"));
   SourceLabel* label_L =
       new SourceLabel(Scanner::kDummyTokenIndex, L, SourceLabel::kFor);
 
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index e52aa8f..8fb425a 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -152,27 +152,17 @@
     return false;  // Stub frames do not have exception handlers.
   }
 
-  // First try to find pc descriptor for the current pc.
-  intptr_t try_index = -1;
+  // Find pc descriptor for the current pc.
   const PcDescriptors& descriptors =
       PcDescriptors::Handle(code.pc_descriptors());
   for (intptr_t i = 0; i < descriptors.Length(); i++) {
     if ((static_cast<uword>(descriptors.PC(i)) == pc()) &&
         (descriptors.TryIndex(i) != -1)) {
-      try_index = descriptors.TryIndex(i);
-      break;
-    }
-  }
-  if (try_index != -1) {
-    // We found a pc descriptor, now try to see if we have an
-    // exception catch handler for this try index.
-    const ExceptionHandlers& handlers =
-        ExceptionHandlers::Handle(code.exception_handlers());
-    for (intptr_t j = 0; j < handlers.Length(); j++) {
-      if (handlers.TryIndex(j) == try_index) {
-        *handler_pc = handlers.HandlerPC(j);
-        return true;
-      }
+      const intptr_t try_index = descriptors.TryIndex(i);
+      const ExceptionHandlers& handlers =
+          ExceptionHandlers::Handle(code.exception_handlers());
+      *handler_pc = handlers.HandlerPC(try_index);
+      return true;
     }
   }
   return false;
@@ -325,7 +315,7 @@
     index_ += 1;
     intptr_t deopt_instr = deopt_info_.Instruction(cur_index);
     ASSERT(deopt_instr != DeoptInstr::kRetBeforeAddress);
-    if ((deopt_instr == DeoptInstr::kRetAfterAddress)) {
+    if (deopt_instr == DeoptInstr::kRetAfterAddress) {
       intptr_t deopt_from_index = deopt_info_.FromIndex(cur_index);
       *pc = DeoptInstr::GetRetAfterAddress(deopt_from_index,
                                            object_table_,
diff --git a/runtime/vm/stack_frame_mips.cc b/runtime/vm/stack_frame_mips.cc
new file mode 100644
index 0000000..500a8e6
--- /dev/null
+++ b/runtime/vm/stack_frame_mips.cc
@@ -0,0 +1,47 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/stack_frame.h"
+
+namespace dart {
+
+intptr_t StackFrame::PcAddressOffsetFromSp() {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+uword StackFrame::GetCallerFp() const {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+uword StackFrame::GetCallerSp() const {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+intptr_t EntryFrame::ExitLinkOffset() {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
+void StackFrameIterator::SetupLastExitFrameData() {
+  UNIMPLEMENTED();
+}
+
+
+void StackFrameIterator::SetupNextExitFrameData() {
+  UNIMPLEMENTED();
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index b942c17..dfd8aa9b 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -45,7 +45,7 @@
 
 
 #define STUB_CODE_GENERATE(name)                                               \
-  code ^= Generate("_stub_"#name, StubCode::Generate##name##Stub);             \
+  code |= Generate("_stub_"#name, StubCode::Generate##name##Stub);             \
   name##_entry_ = new StubEntry("_stub_"#name, code);
 
 
@@ -107,7 +107,7 @@
     Assembler assembler;
     const char* name = cls.ToCString();
     StubCode::GenerateAllocationStubForClass(&assembler, cls);
-    stub ^= Code::FinalizeCode(name, &assembler);
+    stub |= Code::FinalizeCode(name, &assembler);
     cls.set_allocation_stub(stub);
     if (FLAG_disassemble_stubs) {
       OS::Print("Code for allocation stub '%s': {\n", name);
@@ -126,7 +126,7 @@
     Assembler assembler;
     const char* name = func.ToCString();
     StubCode::GenerateAllocationStubForClosure(&assembler, func);
-    stub ^= Code::FinalizeCode(name, &assembler);
+    stub |= Code::FinalizeCode(name, &assembler);
     func.set_closure_allocation_stub(stub);
     if (FLAG_disassemble_stubs) {
       OS::Print("Code for closure allocation stub '%s': {\n", name);
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 8498944..50c189b 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -11,13 +11,13 @@
 
 namespace dart {
 
-void StubCode::GenerateDartCallToRuntimeStub(Assembler* assembler) {
-  __ Unimplemented("DartCallToRuntime stub");
+void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
+  __ Unimplemented("CallToRuntime stub");
 }
 
 
-void StubCode::GenerateStubCallToRuntimeStub(Assembler* assembler) {
-  __ Unimplemented("StubCallToRuntime stub");
+void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) {
+  __ Unimplemented("PrintStopMessage stub");
 }
 
 
@@ -36,8 +36,13 @@
 }
 
 
-void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
-  __ Unimplemented("MegamorphicLookup stub");
+void StubCode::GenerateInstanceFunctionLookupStub(Assembler* assembler) {
+  __ Unimplemented("InstanceFunctionLookup stub");
+}
+
+
+void StubCode::GenerateDeoptimizeLazyStub(Assembler* assembler) {
+  __ Unimplemented("DeoptimizeLazy stub");
 }
 
 
@@ -46,6 +51,11 @@
 }
 
 
+void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) {
+  __ Unimplemented("MegamorphicMiss stub");
+}
+
+
 void StubCode::GenerateAllocateArrayStub(Assembler* assembler) {
   __ Unimplemented("AllocateArray stub");
 }
@@ -66,6 +76,11 @@
 }
 
 
+void StubCode::GenerateUpdateStoreBufferStub(Assembler* assembler) {
+  __ Unimplemented("UpdateStoreBuffer stub");
+}
+
+
 void StubCode::GenerateAllocationStubForClass(Assembler* assembler,
                                               const Class& cls) {
   __ Unimplemented("AllocateObject stub");
@@ -83,6 +98,23 @@
 }
 
 
+void StubCode::GenerateOptimizedUsageCounterIncrement(Assembler* assembler) {
+  __ Unimplemented("OptimizedUsageCounterIncrement stub");
+}
+
+
+void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
+                                             Register temp_reg) {
+  __ Unimplemented("UsageCounterIncrement stub");
+}
+
+
+void StubCode::GenerateNArgsCheckInlineCacheStub(Assembler* assembler,
+                                                 intptr_t num_args) {
+  __ Unimplemented("NArgsCheckInlineCache stub");
+}
+
+
 void StubCode::GenerateOneArgCheckInlineCacheStub(Assembler* assembler) {
   __ Unimplemented("GenerateOneArgCheckInlineCacheStub stub");
 }
@@ -93,26 +125,67 @@
 }
 
 
+void StubCode::GenerateThreeArgsCheckInlineCacheStub(Assembler* assembler) {
+  __ Unimplemented("GenerateThreeArgsCheckInlineCacheStub stub");
+}
+
+
+void StubCode::GenerateOneArgOptimizedCheckInlineCacheStub(
+    Assembler* assembler) {
+  GenerateOptimizedUsageCounterIncrement(assembler);
+  GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
+
+
+void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub(
+    Assembler* assembler) {
+  GenerateOptimizedUsageCounterIncrement(assembler);
+  GenerateNArgsCheckInlineCacheStub(assembler, 2);
+}
+
+
+void StubCode::GenerateThreeArgsOptimizedCheckInlineCacheStub(
+    Assembler* assembler) {
+  GenerateOptimizedUsageCounterIncrement(assembler);
+  GenerateNArgsCheckInlineCacheStub(assembler, 3);
+}
+
+
+void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) {
+  GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
+
+
+void StubCode::GenerateMegamorphicCallStub(Assembler* assembler) {
+  GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
+
+
 void StubCode::GenerateBreakpointStaticStub(Assembler* assembler) {
   __ Unimplemented("BreakpointStatic stub");
 }
 
+
 void StubCode::GenerateBreakpointReturnStub(Assembler* assembler) {
   __ Unimplemented("BreakpointReturn stub");
 }
 
+
 void StubCode::GenerateBreakpointDynamicStub(Assembler* assembler) {
   __ Unimplemented("BreakpointDynamic stub");
 }
 
+
 void StubCode::GenerateSubtype1TestCacheStub(Assembler* assembler) {
   __ Unimplemented("Subtype1TestCache Stub");
 }
 
+
 void StubCode::GenerateSubtype2TestCacheStub(Assembler* assembler) {
   __ Unimplemented("Subtype2TestCache Stub");
 }
 
+
 void StubCode::GenerateSubtype3TestCacheStub(Assembler* assembler) {
   __ Unimplemented("Subtype3TestCache Stub");
 }
@@ -138,6 +211,21 @@
   __ Unimplemented("JumpToErrorHandler Stub");
 }
 
+
+void StubCode::GenerateEqualityWithNullArgStub(Assembler* assembler) {
+  __ Unimplemented("EqualityWithNullArg stub");
+}
+
+
+void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) {
+  __ Unimplemented("OptimizeFunction stub");
+}
+
+
+void StubCode::GenerateIdenticalWithNumberCheckStub(Assembler* assembler) {
+  __ Unimplemented("IdenticalWithNumberCheck stub");
+}
+
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 45c714e..bc47212 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -81,7 +81,7 @@
   __ movl(ECX, Address(CTX, Isolate::top_context_offset()));
 
   // Reset Context pointer in Isolate structure.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movl(Address(CTX, Isolate::top_context_offset()), raw_null);
 
@@ -171,7 +171,7 @@
   __ movl(EDI, Address(CTX, Isolate::top_context_offset()));
 
   // Reset Context pointer in Isolate structure.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movl(Address(CTX, Isolate::top_context_offset()), raw_null);
 
@@ -186,7 +186,7 @@
 // Input parameters:
 //   EDX: arguments descriptor array.
 void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushl(EDX);  // Preserve arguments descriptor array.
@@ -207,7 +207,7 @@
 // (invalid because its function was optimized or deoptimized).
 // EDX: arguments descriptor array.
 void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   // Create a stub frame as we are pushing some objects on the stack before
   // calling into the runtime.
@@ -229,7 +229,7 @@
 //   EDX: smi-tagged argument count, may be zero.
 // Uses EAX, EBX, ECX, EDX.
 static void PushArgumentsArray(Assembler* assembler, intptr_t arg_offset) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
   // Allocate array to store arguments of caller.
@@ -264,7 +264,7 @@
 void StubCode::GenerateInstanceFunctionLookupStub(Assembler* assembler) {
   AssemblerMacros::EnterStubFrame(assembler);
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ pushl(raw_null);  // Space for the return value.
 
@@ -434,7 +434,7 @@
   __ pushl(ECX);
   __ pushl(EDX);
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Instructions::null()));
   __ pushl(raw_null);  // Space for the result of the runtime call.
   __ pushl(EAX);  // Pass receiver.
@@ -470,7 +470,7 @@
 // The newly allocated object is returned in EAX.
 void StubCode::GenerateAllocateArrayStub(Assembler* assembler) {
   Label slow_case;
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
   if (FLAG_inline_alloc) {
@@ -607,7 +607,7 @@
 //       when trying to resolve the call.
 // Uses EDI.
 void StubCode::GenerateCallClosureFunctionStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
   // Load num_args.
@@ -835,7 +835,7 @@
 // EAX: new allocated RawContext object.
 // EBX and EDX are destroyed.
 void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   if (FLAG_inline_alloc) {
     const Class& context_class = Class::ZoneHandle(Object::context_class());
@@ -908,7 +908,7 @@
     // EBX: Isolate, not an object.
     __ movl(FieldAddress(EAX, Context::isolate_offset()), EBX);
 
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     // Setup the parent field.
     // EAX: new object.
@@ -1019,7 +1019,7 @@
                                               const Class& cls) {
   const intptr_t kObjectTypeArgumentsOffset = 2 * kWordSize;
   const intptr_t kInstantiatorTypeArgumentsOffset = 1 * kWordSize;
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   // The generated code is different if the class is parameterized.
   const bool is_cls_parameterized =
@@ -1112,7 +1112,7 @@
     __ movl(Address(EAX, Instance::tags_offset()), Immediate(tags));
 
     // Initialize the remaining words of the object.
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
     // EAX: new object start.
@@ -1193,7 +1193,7 @@
 // Uses EAX, EBX, ECX, EDX as temporary registers.
 void StubCode::GenerateAllocationStubForClosure(Assembler* assembler,
                                                 const Function& func) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   ASSERT(func.IsClosureFunction());
   const bool is_implicit_static_closure =
@@ -1350,7 +1350,7 @@
 void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
   // The target function was not found, so invoke method
   // "dynamic noSuchMethod(InvocationMirror invocation)".
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movl(EDI, FieldAddress(EDX, ArgumentsDescriptor::count_offset()));
   __ movl(EAX, Address(EBP, EDI, TIMES_2, kWordSize));  // Get receiver.
@@ -1534,7 +1534,7 @@
   __ j(NOT_EQUAL, &loop, Assembler::kNearJump);
 
   // IC miss.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   // Compute address of arguments (first read number of arguments from
   // arguments descriptor array and then compute address on the stack).
@@ -1696,7 +1696,7 @@
   // calling into the runtime.
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushl(EDX);  // Preserve arguments descriptor.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ pushl(raw_null);  // Room for result.
   __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry);
@@ -1775,7 +1775,7 @@
   const intptr_t kInstantiatorTypeArgumentsInBytes = 1 * kWordSize;
   const intptr_t kInstanceOffsetInBytes = 2 * kWordSize;
   const intptr_t kCacheOffsetInBytes = 3 * kWordSize;
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movl(EAX, Address(ESP, kInstanceOffsetInBytes));
   if (n > 1) {
@@ -2023,7 +2023,7 @@
 // EDI: function to be reoptimized.
 // EDX: argument descriptor (preserved).
 void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushl(EDX);
diff --git a/runtime/vm/stub_code_ia32_test.cc b/runtime/vm/stub_code_ia32_test.cc
index 222fd0f..19ca0f1 100644
--- a/runtime/vm/stub_code_ia32_test.cc
+++ b/runtime/vm/stub_code_ia32_test.cc
@@ -71,7 +71,7 @@
       *CreateFunction("Test_CallRuntimeStubCode"), &_assembler_));
   const Function& function = RegisterFakeFunction(kName, code);
   Smi& result = Smi::Handle();
-  result ^= DartEntry::InvokeStatic(function, Object::empty_array());
+  result |= DartEntry::InvokeStatic(function, Object::empty_array());
   EXPECT_EQ((value1 - value2), result.Value());
 }
 
@@ -106,7 +106,7 @@
       *CreateFunction("Test_CallLeafRuntimeStubCode"), &_assembler_));
   const Function& function = RegisterFakeFunction(kName, code);
   Smi& result = Smi::Handle();
-  result ^= DartEntry::InvokeStatic(function, Object::empty_array());
+  result |= DartEntry::InvokeStatic(function, Object::empty_array());
   EXPECT_EQ((value1 + value2), result.Value());
 }
 
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
new file mode 100644
index 0000000..a782ec5
--- /dev/null
+++ b/runtime/vm/stub_code_mips.cc
@@ -0,0 +1,231 @@
+// 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.
+
+#include "vm/globals.h"
+#if defined(TARGET_ARCH_MIPS)
+
+#include "vm/stub_code.h"
+
+#define __ assembler->
+
+namespace dart {
+
+void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
+  __ Unimplemented("CallToRuntime stub");
+}
+
+
+void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) {
+  __ Unimplemented("PrintStopMessage stub");
+}
+
+
+void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) {
+  __ Unimplemented("CallNativeCFunction stub");
+}
+
+
+void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) {
+  __ Unimplemented("CallStaticFunction stub");
+}
+
+
+void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) {
+  __ Unimplemented("FixCallersTarget stub");
+}
+
+
+void StubCode::GenerateInstanceFunctionLookupStub(Assembler* assembler) {
+  __ Unimplemented("InstanceFunctionLookup stub");
+}
+
+
+void StubCode::GenerateDeoptimizeLazyStub(Assembler* assembler) {
+  __ Unimplemented("DeoptimizeLazy stub");
+}
+
+
+void StubCode::GenerateDeoptimizeStub(Assembler* assembler) {
+  __ Unimplemented("Deoptimize stub");
+}
+
+
+void StubCode::GenerateMegamorphicMissStub(Assembler* assembler) {
+  __ Unimplemented("MegamorphicMiss stub");
+}
+
+
+void StubCode::GenerateAllocateArrayStub(Assembler* assembler) {
+  __ Unimplemented("AllocateArray stub");
+}
+
+
+void StubCode::GenerateCallClosureFunctionStub(Assembler* assembler) {
+  __ Unimplemented("CallClosureFunction stub");
+}
+
+
+void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) {
+  __ Unimplemented("InvokeDartCode stub");
+}
+
+
+void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
+  __ Unimplemented("AllocateContext stub");
+}
+
+
+void StubCode::GenerateUpdateStoreBufferStub(Assembler* assembler) {
+  __ Unimplemented("UpdateStoreBuffer stub");
+}
+
+
+void StubCode::GenerateAllocationStubForClass(Assembler* assembler,
+                                              const Class& cls) {
+  __ Unimplemented("AllocateObject stub");
+}
+
+
+void StubCode::GenerateAllocationStubForClosure(Assembler* assembler,
+                                                const Function& func) {
+  __ Unimplemented("AllocateClosure stub");
+}
+
+
+void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
+  __ Unimplemented("CallNoSuchMethodFunction stub");
+}
+
+
+void StubCode::GenerateOptimizedUsageCounterIncrement(Assembler* assembler) {
+  __ Unimplemented("OptimizedUsageCounterIncrement stub");
+}
+
+
+void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
+                                             Register temp_reg) {
+  __ Unimplemented("UsageCounterIncrement stub");
+}
+
+
+void StubCode::GenerateNArgsCheckInlineCacheStub(Assembler* assembler,
+                                                 intptr_t num_args) {
+  __ Unimplemented("NArgsCheckInlineCache stub");
+}
+
+
+void StubCode::GenerateOneArgCheckInlineCacheStub(Assembler* assembler) {
+  __ Unimplemented("GenerateOneArgCheckInlineCacheStub stub");
+}
+
+
+void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) {
+  __ Unimplemented("GenerateTwoArgsCheckInlineCacheStub stub");
+}
+
+
+void StubCode::GenerateThreeArgsCheckInlineCacheStub(Assembler* assembler) {
+  __ Unimplemented("GenerateThreeArgsCheckInlineCacheStub stub");
+}
+
+
+void StubCode::GenerateOneArgOptimizedCheckInlineCacheStub(
+    Assembler* assembler) {
+  GenerateOptimizedUsageCounterIncrement(assembler);
+  GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
+
+
+void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub(
+    Assembler* assembler) {
+  GenerateOptimizedUsageCounterIncrement(assembler);
+  GenerateNArgsCheckInlineCacheStub(assembler, 2);
+}
+
+
+void StubCode::GenerateThreeArgsOptimizedCheckInlineCacheStub(
+    Assembler* assembler) {
+  GenerateOptimizedUsageCounterIncrement(assembler);
+  GenerateNArgsCheckInlineCacheStub(assembler, 3);
+}
+
+
+void StubCode::GenerateClosureCallInlineCacheStub(Assembler* assembler) {
+  GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
+
+
+void StubCode::GenerateMegamorphicCallStub(Assembler* assembler) {
+  GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
+
+
+void StubCode::GenerateBreakpointStaticStub(Assembler* assembler) {
+  __ Unimplemented("BreakpointStatic stub");
+}
+
+
+void StubCode::GenerateBreakpointReturnStub(Assembler* assembler) {
+  __ Unimplemented("BreakpointReturn stub");
+}
+
+
+void StubCode::GenerateBreakpointDynamicStub(Assembler* assembler) {
+  __ Unimplemented("BreakpointDynamic stub");
+}
+
+
+void StubCode::GenerateSubtype1TestCacheStub(Assembler* assembler) {
+  __ Unimplemented("Subtype1TestCache Stub");
+}
+
+
+void StubCode::GenerateSubtype2TestCacheStub(Assembler* assembler) {
+  __ Unimplemented("Subtype2TestCache Stub");
+}
+
+
+void StubCode::GenerateSubtype3TestCacheStub(Assembler* assembler) {
+  __ Unimplemented("Subtype3TestCache Stub");
+}
+
+
+// Return the current stack pointer address, used to stack alignment
+// checks.
+void StubCode::GenerateGetStackPointerStub(Assembler* assembler) {
+  __ Unimplemented("GetStackPointer Stub");
+}
+
+
+// Jump to the exception handler.
+// No Result.
+void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) {
+  __ Unimplemented("JumpToExceptionHandler Stub");
+}
+
+
+// Jump to the error handler.
+// No Result.
+void StubCode::GenerateJumpToErrorHandlerStub(Assembler* assembler) {
+  __ Unimplemented("JumpToErrorHandler Stub");
+}
+
+
+void StubCode::GenerateEqualityWithNullArgStub(Assembler* assembler) {
+  __ Unimplemented("EqualityWithNullArg stub");
+}
+
+
+void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) {
+  __ Unimplemented("OptimizeFunction stub");
+}
+
+
+void StubCode::GenerateIdenticalWithNumberCheckStub(Assembler* assembler) {
+  __ Unimplemented("IdenticalWithNumberCheck stub");
+}
+
+}  // namespace dart
+
+#endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 659c7ec..70d9c36 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -82,7 +82,7 @@
   __ movq(RBX, Address(CTX, Isolate::top_context_offset()));
 
   // Reset Context pointer in Isolate structure.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movq(Address(CTX, Isolate::top_context_offset()), raw_null);
 
@@ -170,7 +170,7 @@
   __ movq(R8, Address(CTX, Isolate::top_context_offset()));
 
   // Reset Context pointer in Isolate structure.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movq(Address(CTX, Isolate::top_context_offset()), raw_null);
 
@@ -185,7 +185,7 @@
 // Input parameters:
 //   R10: arguments descriptor array.
 void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushq(R10);  // Preserve arguments descriptor array.
@@ -206,7 +206,7 @@
 // (invalid because its function was optimized or deoptimized).
 // R10: arguments descriptor array.
 void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushq(R10);  // Preserve arguments descriptor array.
@@ -225,7 +225,7 @@
 // Input parameters:
 //   R10: smi-tagged argument count, may be zero.
 static void PushArgumentsArray(Assembler* assembler, intptr_t arg_offset) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
   // Allocate array to store arguments of caller.
@@ -259,7 +259,7 @@
 void StubCode::GenerateInstanceFunctionLookupStub(Assembler* assembler) {
   AssemblerMacros::EnterStubFrame(assembler);
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ pushq(raw_null);  // Space for the return value.
 
@@ -430,7 +430,7 @@
   __ pushq(RBX);
   __ pushq(R10);
 
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Instructions::null()));
   __ pushq(raw_null);  // Space for the result of the runtime call.
   __ pushq(RAX);  // Receiver.
@@ -465,7 +465,7 @@
 // The newly allocated object is returned in RAX.
 void StubCode::GenerateAllocateArrayStub(Assembler* assembler) {
   Label slow_case;
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
   if (FLAG_inline_alloc) {
@@ -596,7 +596,7 @@
 //       called, the stub accesses the closure from this location directly
 //       when trying to resolve the call.
 void StubCode::GenerateCallClosureFunctionStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
   // Load num_args.
@@ -823,7 +823,7 @@
 // Output:
 // RAX: new allocated RawContext object.
 void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   if (FLAG_inline_alloc) {
     const Class& context_class = Class::ZoneHandle(Object::context_class());
@@ -899,7 +899,7 @@
     // R13: Isolate, not an object.
     __ movq(FieldAddress(RAX, Context::isolate_offset()), R13);
 
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
     // Setup the parent field.
     // RAX: new object.
@@ -1002,7 +1002,7 @@
                                               const Class& cls) {
   const intptr_t kObjectTypeArgumentsOffset = 2 * kWordSize;
   const intptr_t kInstantiatorTypeArgumentsOffset = 1 * kWordSize;
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   // The generated code is different if the class is parameterized.
   const bool is_cls_parameterized =
@@ -1098,7 +1098,7 @@
     __ movq(Address(RAX, Instance::tags_offset()), Immediate(tags));
 
     // Initialize the remaining words of the object.
-    const Immediate raw_null =
+    const Immediate& raw_null =
         Immediate(reinterpret_cast<intptr_t>(Object::null()));
 
     // RAX: new object start.
@@ -1177,7 +1177,7 @@
 //   RSP : points to return address.
 void StubCode::GenerateAllocationStubForClosure(Assembler* assembler,
                                                 const Function& func) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   ASSERT(func.IsClosureFunction());
   const bool is_implicit_static_closure =
@@ -1336,7 +1336,7 @@
 void StubCode::GenerateCallNoSuchMethodFunctionStub(Assembler* assembler) {
   // The target function was not found, so invoke method
   // "dynamic noSuchMethod(InvocationMirror invocation)".
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   __ movq(R13, FieldAddress(R10, ArgumentsDescriptor::count_offset()));
   __ movq(RAX, Address(RBP, R13, TIMES_4, kWordSize));  // Get receiver.
@@ -1517,7 +1517,7 @@
   __ j(NOT_EQUAL, &loop, Assembler::kNearJump);
 
   // IC miss.
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   // Compute address of arguments (first read number of arguments from
   // arguments descriptor array and then compute address on the stack).
@@ -1669,7 +1669,7 @@
 //  R10: Arguments descriptor array.
 //  TOS(0): return address (Dart code).
 void StubCode::GenerateBreakpointStaticStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushq(R10);  // Preserve arguments descriptor.
@@ -1740,7 +1740,7 @@
 // Result in RCX: null -> not found, otherwise result (true or false).
 static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
   ASSERT((1 <= n) && (n <= 3));
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   const intptr_t kInstantiatorTypeArgumentsInBytes = 1 * kWordSize;
   const intptr_t kInstanceOffsetInBytes = 2 * kWordSize;
@@ -1987,7 +1987,7 @@
 // RDI: function to be reoptimized.
 // R10: argument descriptor (preserved).
 void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) {
-  const Immediate raw_null =
+  const Immediate& raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushq(R10);
diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc
index b0e1480..0424891 100644
--- a/runtime/vm/symbols.cc
+++ b/runtime/vm/symbols.cc
@@ -110,7 +110,7 @@
                                       isolate->object_store()->symbol_table());
   intptr_t table_size_index = symbol_table.Length() - 1;
   dart::Smi& used = Smi::Handle();
-  used ^= symbol_table.At(table_size_index);
+  used |= symbol_table.At(table_size_index);
   return used.Value();
 }
 
@@ -182,14 +182,14 @@
   // First check if a symbol exists in the vm isolate for these characters.
   symbol_table = Dart::vm_isolate()->object_store()->symbol_table();
   intptr_t index = FindIndex(symbol_table, characters, len, hash);
-  symbol ^= symbol_table.At(index);
+  symbol |= symbol_table.At(index);
   if (symbol.IsNull()) {
     // Now try in the symbol table of the current isolate.
     symbol_table = isolate->object_store()->symbol_table();
     index = FindIndex(symbol_table, characters, len, hash);
     // Since we leave enough room in the table to guarantee, that we find an
     // empty spot, index is the insertion point if symbol is null.
-    symbol ^= symbol_table.At(index);
+    symbol |= symbol_table.At(index);
     if (symbol.IsNull()) {
       // Allocate new result string.
       symbol = (*new_string)(characters, len, Heap::kOld);
@@ -243,14 +243,14 @@
   // First check if a symbol exists in the vm isolate for these characters.
   symbol_table = Dart::vm_isolate()->object_store()->symbol_table();
   intptr_t index = FindIndex(symbol_table, str, begin_index, len, hash);
-  symbol ^= symbol_table.At(index);
+  symbol |= symbol_table.At(index);
   if (symbol.IsNull()) {
     // Now try in the symbol table of the current isolate.
     symbol_table = isolate->object_store()->symbol_table();
     index = FindIndex(symbol_table, str, begin_index, len, hash);
     // Since we leave enough room in the table to guarantee, that we find an
     // empty spot, index is the insertion point if symbol is null.
-    symbol ^= symbol_table.At(index);
+    symbol |= symbol_table.At(index);
     if (symbol.IsNull()) {
       if (str.IsOld() && begin_index == 0 && len == str.Length()) {
         // Reuse the incoming str as the symbol value.
@@ -285,14 +285,14 @@
     // First dump VM symbol table stats.
     symbol_table = Dart::vm_isolate()->object_store()->symbol_table();
     table_size = symbol_table.Length() - 1;
-    used ^= symbol_table.At(table_size);
+    used |= symbol_table.At(table_size);
     OS::Print("VM Isolate: Number of symbols : %"Pd"\n", used.Value());
     OS::Print("VM Isolate: Symbol table capacity : %"Pd"\n", table_size);
 
     // Now dump regular isolate symbol table stats.
     symbol_table = Isolate::Current()->object_store()->symbol_table();
     table_size = symbol_table.Length() - 1;
-    used ^= symbol_table.At(table_size);
+    used |= symbol_table.At(table_size);
     OS::Print("Isolate: Number of symbols : %"Pd"\n", used.Value());
     OS::Print("Isolate: Symbol table capacity : %"Pd"\n", table_size);
 
@@ -319,7 +319,7 @@
   String& element = String::Handle();
   dart::Object& new_element = Object::Handle();
   for (intptr_t i = 0; i < table_size; i++) {
-    element ^= symbol_table.At(i);
+    element |= symbol_table.At(i);
     if (!element.IsNull()) {
       intptr_t hash = element.Hash();
       intptr_t index = hash % new_table_size;
@@ -354,7 +354,7 @@
   symbol.SetCanonical();  // Mark object as being canonical.
   symbol_table.SetAt(index, symbol);  // Remember the new symbol.
   dart::Smi& used = Smi::Handle();
-  used ^= symbol_table.At(table_size);
+  used |= symbol_table.At(table_size);
   intptr_t used_elements = used.Value() + 1;  // One more element added.
   used = Smi::New(used_elements);
   symbol_table.SetAt(table_size, used);  // Update used count.
@@ -377,10 +377,10 @@
   intptr_t num_collisions = 0;
 
   String& symbol = String::Handle();
-  symbol ^= symbol_table.At(index);
+  symbol |= symbol_table.At(index);
   while (!symbol.IsNull() && !symbol.Equals(characters, len)) {
     index = (index + 1) % table_size;  // Move to next element.
-    symbol ^= symbol_table.At(index);
+    symbol |= symbol_table.At(index);
     num_collisions += 1;
   }
   if (FLAG_dump_symbol_stats) {
@@ -418,10 +418,10 @@
   intptr_t num_collisions = 0;
 
   String& symbol = String::Handle();
-  symbol ^= symbol_table.At(index);
+  symbol |= symbol_table.At(index);
   while (!symbol.IsNull() && !symbol.Equals(str, begin_index, len)) {
     index = (index + 1) % table_size;  // Move to next element.
-    symbol ^= symbol_table.At(index);
+    symbol |= symbol_table.At(index);
     num_collisions += 1;
   }
   if (FLAG_dump_symbol_stats) {
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index edd9e79..3fdc4b0 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -188,6 +188,10 @@
   V(SwitchExpr, ":switch_expr")                                                \
   V(TwoNewlines, "\n\n")                                                       \
   V(TwoSpaces, "  ")                                                           \
+  V(_instanceOf, "_instanceOf")                                                \
+  V(PrivateGetterPrefix, "get:_")                                              \
+  V(PrivateSetterPrefix, "set:_")                                              \
+
 
 // Contains a list of frequently used strings in a canonicalized form. This
 // list is kept in the vm_isolate in order to share the copy across isolates
diff --git a/runtime/vm/vm.gypi b/runtime/vm/vm.gypi
index df34375..6c887e7 100644
--- a/runtime/vm/vm.gypi
+++ b/runtime/vm/vm.gypi
@@ -10,6 +10,7 @@
     'corelib_cc_file': '<(SHARED_INTERMEDIATE_DIR)/corelib_gen.cc',
     'corelib_patch_cc_file': '<(SHARED_INTERMEDIATE_DIR)/corelib_patch_gen.cc',
     'collection_cc_file': '<(SHARED_INTERMEDIATE_DIR)/collection_gen.cc',
+    'collection_dev_cc_file': '<(SHARED_INTERMEDIATE_DIR)/collection_dev_gen.cc',
     'math_cc_file': '<(SHARED_INTERMEDIATE_DIR)/math_gen.cc',
     'math_patch_cc_file': '<(SHARED_INTERMEDIATE_DIR)/math_patch_gen.cc',
     'mirrors_cc_file': '<(SHARED_INTERMEDIATE_DIR)/mirrors_gen.cc',
@@ -89,6 +90,7 @@
         'generate_corelib_cc_file',
         'generate_corelib_patch_cc_file',
         'generate_collection_cc_file',
+        'generate_collection_dev_cc_file',
         'generate_math_cc_file',
         'generate_math_patch_cc_file',
         'generate_isolate_cc_file',
@@ -114,6 +116,7 @@
         '<(corelib_cc_file)',
         '<(corelib_patch_cc_file)',
         '<(collection_cc_file)',
+        '<(collection_dev_cc_file)',
         '<(math_cc_file)',
         '<(math_patch_cc_file)',
         '<(isolate_cc_file)',
@@ -353,6 +356,63 @@
       ]
     },
     {
+      'target_name': 'generate_collection_dev_cc_file',
+      'type': 'none',
+      'variables': {
+        'collection_dev_dart': '<(SHARED_INTERMEDIATE_DIR)/collection_dev_gen.dart',
+      },
+      'includes': [
+        # Load the shared collection_dev library sources.
+        '../../sdk/lib/collection_dev/collection_dev_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_collection_dev_dart',
+          'inputs': [
+            '../tools/concat_library.py',
+            '<@(_sources)',
+          ],
+          'outputs': [
+            '<(collection_dev_dart)',
+          ],
+          'action': [
+            'python',
+            '<@(_inputs)',
+            '--output', '<(collection_dev_dart)',
+          ],
+          'message': 'Generating ''<(collection_dev_dart)'' file.',
+        },
+        {
+          'action_name': 'generate_collection_dev_cc',
+          'inputs': [
+            '../tools/create_string_literal.py',
+            '<(builtin_in_cc_file)',
+            '<(collection_dev_dart)',
+          ],
+          'outputs': [
+            '<(collection_dev_cc_file)',
+          ],
+          'action': [
+            'python',
+            'tools/create_string_literal.py',
+            '--output', '<(collection_dev_cc_file)',
+            '--input_cc', '<(builtin_in_cc_file)',
+            '--include', 'vm/bootstrap.h',
+            '--var_name', 'dart::Bootstrap::collection_dev_source_',
+            '<(collection_dev_dart)',
+          ],
+          'message': 'Generating ''<(collection_dev_cc_file)'' file.'
+        },
+      ]
+    },
+    {
       'target_name': 'generate_math_cc_file',
       'type': 'none',
       'variables': {
diff --git a/runtime/vm/vm_sources.gypi b/runtime/vm/vm_sources.gypi
index 1425c95..a769c92 100644
--- a/runtime/vm/vm_sources.gypi
+++ b/runtime/vm/vm_sources.gypi
@@ -1,4 +1,4 @@
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+# 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.
 
@@ -12,15 +12,22 @@
     'assembler.cc',
     'assembler.h',
     'assembler_test.cc',
+    'assembler_arm.cc',
     'assembler_arm.h',
     'assembler_ia32.cc',
     'assembler_ia32.h',
     'assembler_ia32_test.cc',
     'assembler_macros.h',
+    'assembler_macros_arm.cc',
+    'assembler_macros_arm.h',
     'assembler_macros_ia32.cc',
     'assembler_macros_ia32.h',
+    'assembler_macros_mips.cc',
+    'assembler_macros_mips.h',
     'assembler_macros_x64.cc',
     'assembler_macros_x64.h',
+    'assembler_mips.cc',
+    'assembler_mips.h',
     'assembler_x64.cc',
     'assembler_x64.h',
     'assembler_x64_test.cc',
@@ -71,6 +78,7 @@
     'code_patcher_arm.cc',
     'code_patcher_ia32.cc',
     'code_patcher_ia32_test.cc',
+    'code_patcher_mips.cc',
     'code_patcher_x64.cc',
     'code_patcher_x64_test.cc',
     'compiler.h',
@@ -78,13 +86,15 @@
     'compiler_stats.h',
     'compiler_stats.cc',
     'compiler_test.cc',
-    'constants_ia32.h',
-    'constants_x64.h',
     'constants_arm.h',
+    'constants_ia32.h',
+    'constants_mips.h',
+    'constants_x64.h',
     'cpu.h',
-    'cpu_ia32.cc',
-    'cpu_x64.cc',
     'cpu_arm.cc',
+    'cpu_ia32.cc',
+    'cpu_mips.cc',
+    'cpu_x64.cc',
     'cpu_test.cc',
     'custom_isolate_test.cc',
     'dart.cc',
@@ -99,17 +109,19 @@
     'dart_entry_test.cc',
     'debugger.cc',
     'debugger.h',
-    'debugger_ia32.cc',
-    'debugger_x64.cc',
     'debugger_arm.cc',
+    'debugger_ia32.cc',
+    'debugger_mips.cc',
+    'debugger_x64.cc',
     'debugger_api_impl_test.cc',
     'deopt_instructions.cc',
     'deopt_instructions.h',
     'disassembler.cc',
     'disassembler.h',
-    'disassembler_ia32.cc',
-    'disassembler_x64.cc',
     'disassembler_arm.cc',
+    'disassembler_ia32.cc',
+    'disassembler_mips.cc',
+    'disassembler_x64.cc',
     'disassembler_test.cc',
     'debuginfo.h',
     'debuginfo_android.cc',
@@ -132,11 +144,9 @@
     'flow_graph_compiler.cc',
     'flow_graph_compiler.h',
     'flow_graph_compiler_arm.cc',
-    'flow_graph_compiler_arm.h',
     'flow_graph_compiler_ia32.cc',
-    'flow_graph_compiler_ia32.h',
+    'flow_graph_compiler_mips.cc',
     'flow_graph_compiler_x64.cc',
-    'flow_graph_compiler_x64.h',
     'flow_graph_inliner.cc',
     'flow_graph_inliner.h',
     'flow_graph_optimizer.cc',
@@ -174,21 +184,28 @@
     'il_printer.cc',
     'il_printer.h',
     'instructions.h',
+    'instructions_arm.cc',
+    'instructions_arm.h',
     'instructions_ia32.cc',
     'instructions_ia32.h',
     'instructions_ia32_test.cc',
+    'instructions_mips.cc',
+    'instructions_mips.h',
     'instructions_x64.cc',
     'instructions_x64.h',
     'instructions_x64_test.cc',
     'intermediate_language.cc',
     'intermediate_language.h',
+    'intermediate_language_arm.cc',
     'intermediate_language_ia32.cc',
+    'intermediate_language_mips.cc',
     'intermediate_language_x64.cc',
     'intermediate_language_test.cc',
     'intrinsifier.h',
     'intrinsifier.cc',
     'intrinsifier_arm.cc',
     'intrinsifier_ia32.cc',
+    'intrinsifier_mips.cc',
     'intrinsifier_x64.cc',
     'isolate.cc',
     'isolate.h',
@@ -223,6 +240,7 @@
     'object_test.cc',
     'object_arm_test.cc',
     'object_ia32_test.cc',
+    'object_mips_test.cc',
     'object_x64_test.cc',
     'object_store.cc',
     'object_store.h',
@@ -251,6 +269,7 @@
     'runtime_entry.h',
     'runtime_entry_arm.cc',
     'runtime_entry_ia32.cc',
+    'runtime_entry_mips.cc',
     'runtime_entry_x64.cc',
     'runtime_entry_test.cc',
     'scanner.cc',
@@ -268,6 +287,7 @@
     'stack_frame.cc',
     'stack_frame_arm.cc',
     'stack_frame_ia32.cc',
+    'stack_frame_mips.cc',
     'stack_frame_x64.cc',
     'stack_frame.h',
     'stack_frame_test.cc',
@@ -278,6 +298,7 @@
     'stub_code_arm.cc',
     'stub_code_ia32.cc',
     'stub_code_ia32_test.cc',
+    'stub_code_mips.cc',
     'stub_code_x64.cc',
     'stub_code_x64_test.cc',
     'symbols.cc',
diff --git a/sdk/lib/_internal/compiler/implementation/closure.dart b/sdk/lib/_internal/compiler/implementation/closure.dart
index 45a8107..e400f5c 100644
--- a/sdk/lib/_internal/compiler/implementation/closure.dart
+++ b/sdk/lib/_internal/compiler/implementation/closure.dart
@@ -71,6 +71,8 @@
   bool hasFixedBackendName() => true;
   String fixedBackendName() => name.slowToString();
 
+  DartType computeType(Compiler compiler) => compiler.types.dynamicType;
+
   String toString() => "ClosureFieldElement($name)";
 }
 
diff --git a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
index a03a00a..c805e1e 100644
--- a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
@@ -462,6 +462,13 @@
         if (result != null) return result;
       } else if (Elements.isClass(element) || Elements.isTypedef(element)) {
         return makeTypeConstant(element);
+      } else if (send.receiver != null) {
+        // Fall through to error handling.
+      } else if (!Elements.isUnresolved(element)
+                 && element.isVariable()
+                 && element.modifiers.isConst()) {
+        Constant result = handler.compileConstant(element);
+        if (result != null) return result; 
       }
       return signalNotCompileTimeConstant(send);
     } else if (send.isCall) {
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index 8f8e077..75a1eaa 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -594,6 +594,7 @@
         'dart/tests/compiler/dart2js_native');
     if (nativeTest
         || libraryName == 'dart:async'
+        || libraryName == 'dart:chrome'
         || libraryName == 'dart:mirrors'
         || libraryName == 'dart:math'
         || libraryName == 'dart:html'
diff --git a/sdk/lib/_internal/compiler/implementation/constant_system.dart b/sdk/lib/_internal/compiler/implementation/constant_system.dart
index 91808d4..0fff580 100644
--- a/sdk/lib/_internal/compiler/implementation/constant_system.dart
+++ b/sdk/lib/_internal/compiler/implementation/constant_system.dart
@@ -48,6 +48,8 @@
   BinaryOperation get subtract;
   BinaryOperation get truncatingDivide;
 
+  const ConstantSystem();
+
   Constant createInt(int i);
   Constant createDouble(double d);
   // We need a diagnostic node to report errors in case the string is malformed.
@@ -69,4 +71,10 @@
   bool isBool(Constant constant);
   /** Returns true if the [constant] is null at runtime. */
   bool isNull(Constant constant);
+
+  Operation lookupUnary(SourceString operator) {
+    if (operator == const SourceString('-')) return negate;
+    if (operator == const SourceString('~')) return bitNot;
+    return null;
+  }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/constant_system_dart.dart b/sdk/lib/_internal/compiler/implementation/constant_system_dart.dart
index 11ff830..6732b8c 100644
--- a/sdk/lib/_internal/compiler/implementation/constant_system_dart.dart
+++ b/sdk/lib/_internal/compiler/implementation/constant_system_dart.dart
@@ -335,7 +335,7 @@
  * that doesn't correctly implement Dart's semantics this constant system will
  * not return the correct values.
  */
-class DartConstantSystem implements ConstantSystem {
+class DartConstantSystem extends ConstantSystem {
   const add = const AddOperation();
   const bitAnd = const BitAndOperation();
   const bitNot = const BitNotOperation();
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
index 9896c91..2a49c2f 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
@@ -168,13 +168,26 @@
       if (type is TypedefType) return false;
       if (type is InterfaceType) {
         ClassElement element = type.element;
+        // TODO(kasperl): Deal with mixin applications.
+        if (element.isMixinApplication) continue;
         ClassNode node = element.parseNode(compiler);
         // Check class type args.
         processTypeArguments(element, node.typeParameters);
         // Check superclass type args.
         if (node.superclass != null) {
-          NodeList typeArguments = node.superclass.typeArguments;
-          processTypeArguments(element, node.superclass.typeArguments);
+          MixinApplication superMixin = node.superclass.asMixinApplication();
+          if (superMixin != null) {
+            for (Link<Node> link = superMixin.mixins.nodes;
+                 !link.isEmpty;
+                 link = link.tail) {
+              TypeAnnotation currentMixin = link.head;
+              processTypeArguments(element, currentMixin.typeArguments);
+            }
+          } else {
+            TypeAnnotation superclass = node.superclass;
+            NodeList typeArguments = superclass.typeArguments;
+            processTypeArguments(element, typeArguments);
+          }
         }
         // Check interfaces type args.
         for (Node interfaceNode in node.interfaces) {
@@ -297,7 +310,10 @@
       topLevelElements.add(element);
       processElement(element, elementAst);
     }
+
     addClass(classElement) {
+      // TODO(kasperl): Deal with mixin applications.
+      if (classElement.isMixinApplication) return;
       addTopLevel(classElement,
                   new ElementAst.forClassLike(parse(classElement)));
       classMembers.putIfAbsent(classElement, () => new Set());
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart
index 4c4547d..cd0f527 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart
@@ -117,6 +117,16 @@
   visitLiteralString(LiteralString node) => new LiteralString(
       node.token, node.dartString);
 
+  visitMixinApplication(MixinApplication node) => new MixinApplication(
+      visit(node.modifiers), visit(node.superclass), visit(node.mixins));
+
+  visitNamedMixinApplication(NamedMixinApplication node) =>
+      new NamedMixinApplication(node.name,
+                                node.typeParameters,
+                                node.mixinApplication,
+                                node.typedefKeyword,
+                                node.endToken);
+
   visitModifiers(Modifiers node) => new Modifiers(visit(node.nodes));
 
   visitNamedArgument(NamedArgument node) => new NamedArgument(
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 7890981..6b29922 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -28,7 +28,6 @@
                                          isUserDefinableOperator,
                                          isMinusOperator;
 
-
 const int STATE_NOT_STARTED = 0;
 const int STATE_STARTED = 1;
 const int STATE_DONE = 2;
@@ -169,7 +168,6 @@
   bool impliesType();
 
   Token position();
-  Token findMyName(Token token);
 
   CompilationUnitElement getCompilationUnit();
   LibraryElement getLibrary();
@@ -641,6 +639,7 @@
   int get resolutionState;
   SourceString get nativeTagInfo;
 
+  bool get isMixinApplication;
   bool get hasBackendMembers;
   bool get hasLocalScopeMembers;
 
@@ -672,6 +671,12 @@
   void addMember(Element element, DiagnosticListener listener);
   void addToScope(Element element, DiagnosticListener listener);
 
+  /**
+   * Add a synthetic nullary constructor if there are no other
+   * constructors.
+   */
+  void addDefaultConstructorIfNeeded(Compiler compiler);
+
   void addBackendMember(Element element);
   void reverseBackendMembers();
 
@@ -688,7 +693,6 @@
   Element lookupSuperInterfaceMember(SourceString memberName,
                                      LibraryElement fromLibrary);
 
-
   Element validateConstructorLookupResults(Selector selector,
                                            Element result,
                                            Element noMatch(Element));
@@ -709,6 +713,11 @@
   void forEachBackendMember(void f(Element member));
 }
 
+abstract class MixinApplicationElement extends ClassElement {
+  ClassElement get mixin;
+  void set mixin(ClassElement value);
+}
+
 abstract class LabelElement extends Element {
   Label get label;
   String get labelName;
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index fd0da9e..5fa9a3b0 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -377,35 +377,22 @@
 
   bool isAmbiguous() => true;
 }
-class ContainerElementX extends ElementX {
-  Link<Element> localMembers = const Link<Element>();
 
-  ContainerElementX(name, kind, enclosingElement)
-    : super(name, kind, enclosingElement);
+class ScopeX {
+  final Map<SourceString, Element> contents = new Map<SourceString, Element>();
 
-  void addMember(Element element, DiagnosticListener listener) {
-    localMembers = localMembers.prepend(element);
-  }
-}
+  bool get isEmpty => contents.isEmpty;
+  Iterable<Element> get values => contents.values;
 
-class ScopeContainerElementX extends ContainerElementX
-    implements ScopeContainerElement {
-  final Map<SourceString, Element> localScope;
-
-  ScopeContainerElementX(name, kind, enclosingElement)
-    : super(name, kind, enclosingElement),
-      localScope = new Map<SourceString, Element>();
-
-  void addMember(Element element, DiagnosticListener listener) {
-    super.addMember(element, listener);
-    addToScope(element, listener);
+  Element lookup(SourceString name) {
+    return contents[name];
   }
 
-  void addToScope(Element element, DiagnosticListener listener) {
+  void add(Element element, DiagnosticListener listener) {
     if (element.isAccessor()) {
-      addAccessorToScope(element, localScope[element.name], listener);
+      addAccessor(element, contents[element.name], listener);
     } else {
-      Element existing = localScope.putIfAbsent(element.name, () => element);
+      Element existing = contents.putIfAbsent(element.name, () => element);
       if (!identical(existing, element)) {
         // TODO(ahe): Do something similar to Resolver.reportErrorWithContext.
         listener.cancel('duplicate definition', token: element.position());
@@ -414,17 +401,8 @@
     }
   }
 
-  Element localLookup(SourceString elementName) {
-    Element result = localScope[elementName];
-    if (result == null && isPatch) {
-      ScopeContainerElementX element = origin;
-      result = element.localScope[elementName];
-    }
-    return result;
-  }
-
   /**
-   * Adds a definition for an [accessor] (getter or setter) to a container.
+   * Adds a definition for an [accessor] (getter or setter) to a scope.
    * The definition binds to an abstract field that can hold both a getter
    * and a setter.
    *
@@ -436,9 +414,9 @@
    * element, they are enclosed by the class or compilation unit, as is the
    * abstract field.
    */
-  void addAccessorToScope(Element accessor,
-                          Element existing,
-                          DiagnosticListener listener) {
+  void addAccessor(Element accessor,
+                   Element existing,
+                   DiagnosticListener listener) {
     void reportError(Element other) {
       // TODO(ahe): Do something similar to Resolver.reportErrorWithContext.
       listener.cancel('duplicate definition of ${accessor.name.slowToString()}',
@@ -473,14 +451,16 @@
       } else {
         field.setter = accessor;
       }
-      addToScope(field, listener);
+      add(field, listener);
     }
   }
 }
 
-class CompilationUnitElementX extends ContainerElementX implements CompilationUnitElement {
+class CompilationUnitElementX extends ElementX
+    implements CompilationUnitElement {
   final Script script;
   PartOf partTag;
+  Link<Element> localMembers = const Link<Element>();
 
   CompilationUnitElementX(Script script, LibraryElement library)
     : this.script = script,
@@ -492,7 +472,7 @@
 
   void addMember(Element element, DiagnosticListener listener) {
     // Keep a list of top level members.
-    super.addMember(element, listener);
+    localMembers = localMembers.prepend(element);
     // Provide the member to the library to build scope.
     if (enclosingElement.isPatch) {
       getImplementationLibrary().addMember(element, listener);
@@ -541,7 +521,7 @@
   bool get hasMembers => !localMembers.isEmpty;
 }
 
-class LibraryElementX extends ScopeContainerElementX implements LibraryElement {
+class LibraryElementX extends ElementX implements LibraryElement {
   final Uri uri;
   CompilationUnitElement entryCompilationUnit;
   Link<CompilationUnitElement> compilationUnits =
@@ -549,6 +529,8 @@
   Link<LibraryTag> tags = const Link<LibraryTag>();
   LibraryName libraryTag;
   bool canUseNative = false;
+  Link<Element> localMembers = const Link<Element>();
+  final ScopeX localScope = new ScopeX();
 
   /**
    * If this library is patched, [patch] points to the patch library.
@@ -628,6 +610,23 @@
     }
   }
 
+  void addMember(Element element, DiagnosticListener listener) {
+    localMembers = localMembers.prepend(element);
+    addToScope(element, listener);
+  }
+
+  void addToScope(Element element, DiagnosticListener listener) {
+    localScope.add(element, listener);
+  }
+
+  Element localLookup(SourceString elementName) {
+    Element result = localScope.lookup(elementName);
+    if (result == null && isPatch) {
+      result = origin.localLookup(elementName);
+    }
+    return result;
+  }
+
   /**
    * Returns [:true:] if the export scope has already been computed for this
    * library.
@@ -663,10 +662,10 @@
    * elements have been imported.
    */
   Element find(SourceString elementName) {
-    Element result = localScope[elementName];
+    Element result = localScope.lookup(elementName);
     if (result != null) return result;
     if (origin != null) {
-      result = origin.localScope[elementName];
+      result = origin.localScope.lookup(elementName);
       if (result != null) return result;
     }
     result = importScope[elementName];
@@ -683,7 +682,7 @@
   Element findLocal(SourceString elementName) {
     // TODO(johnniwinther): How to handle injected elements in the patch
     // library?
-    Element result = localScope[elementName];
+    Element result = localScope.lookup(elementName);
     if (result == null || result.getLibrary() != this) return null;
     return result;
   }
@@ -1306,9 +1305,9 @@
   }
 }
 
-abstract class ClassElementX extends ScopeContainerElementX
-    implements ClassElement {
+abstract class BaseClassElementX extends ElementX implements ClassElement {
   final int id;
+
   /**
    * The type of [:this:] for this class declaration.
    *
@@ -1352,24 +1351,33 @@
 
   Link<DartType> allSupertypes;
 
-  // Lazily applied patch of class members.
-  ClassElement patch = null;
-  ClassElement origin = null;
+  BaseClassElementX(SourceString name,
+                    Element enclosing,
+                    this.id,
+                    int initialState)
+      : supertypeLoadState = initialState,
+        resolutionState = initialState,
+        super(name, ElementKind.CLASS, enclosing);
 
-  ClassElementX(SourceString name, Element enclosing, this.id, int initialState)
-    : supertypeLoadState = initialState,
-      resolutionState = initialState,
-      super(name, ElementKind.CLASS, enclosing);
+  int get hashCode => id;
+  ClassElement get patch => super.patch;
+  ClassElement get origin => super.origin;
+  ClassElement get declaration => super.declaration;
+  ClassElement get implementation => super.implementation;
 
-  ClassNode parseNode(Compiler compiler);
+  bool get hasBackendMembers => !backendMembers.isEmpty;
 
   InterfaceType computeType(compiler) {
     if (thisType == null) {
       if (origin == null) {
-        ClassNode node = parseNode(compiler);
-        Link<DartType> parameters =
-            TypeDeclarationElementX.createTypeVariables(this,
-                                                        node.typeParameters);
+        Link<DartType> parameters = const Link<DartType>();
+        // TODO(kasperl): Figure out how to get the type parameters
+        // for a mixin application.
+        if (!isMixinApplication) {
+          ClassNode node = parseNode(compiler);
+          parameters = TypeDeclarationElementX.createTypeVariables(
+              this, node.typeParameters);
+        }
         thisType = new InterfaceType(this, parameters);
         if (parameters.isEmpty) {
           rawType = thisType;
@@ -1389,15 +1397,6 @@
     return thisType;
   }
 
-  bool get isPatched => patch != null;
-  bool get isPatch => origin != null;
-
-  ClassElement get declaration => super.declaration;
-  ClassElement get implementation => super.implementation;
-
-  bool get hasBackendMembers => !backendMembers.isEmpty;
-  bool get hasLocalScopeMembers => !localScope.isEmpty;
-
   /**
    * Return [:true:] if this element is the [:Object:] class for the [compiler].
    */
@@ -1413,6 +1412,15 @@
     return this;
   }
 
+  void addDefaultConstructorIfNeeded(Compiler compiler) {
+    if (hasConstructor) return;
+    FunctionElement constructor =
+        new SynthesizedConstructorElementX.forDefault(this, compiler);
+    setDefaultConstructor(constructor, compiler);
+  }
+
+  void setDefaultConstructor(FunctionElement constructor, Compiler compiler);
+
   void addBackendMember(Element member) {
     backendMembers = backendMembers.prepend(member);
   }
@@ -1438,7 +1446,6 @@
       }
     }
   }
-
   /**
    * Lookup super members for the class. This will ignore constructors.
    */
@@ -1584,14 +1591,6 @@
     return validateConstructorLookupResults(selector, result, noMatch);
   }
 
-  bool get hasConstructor {
-    // Search in scope to be sure we search patched constructors.
-    for (var element in localScope.values) {
-      if (element.isConstructor()) return true;
-    }
-    return false;
-  }
-
   Link<Element> get constructors {
     // TODO(ajohnsen): See if we can avoid this method at some point.
     Link<Element> result = const Link<Element>();
@@ -1679,10 +1678,6 @@
                   includeSuperMembers: includeSuperMembers);
   }
 
-  void forEachLocalMember(void f(Element member)) {
-    localMembers.reverse().forEach(f);
-  }
-
   void forEachBackendMember(void f(Element member)) {
     backendMembers.forEach(f);
   }
@@ -1716,7 +1711,58 @@
   void setNative(String name) {
     nativeTagInfo = new SourceString(name);
   }
-  int get hashCode => id;
+}
+
+abstract class ClassElementX extends BaseClassElementX {
+  // Lazily applied patch of class members.
+  ClassElement patch = null;
+  ClassElement origin = null;
+
+  Link<Element> localMembers = const Link<Element>();
+  final ScopeX localScope = new ScopeX();
+
+  ClassElementX(SourceString name, Element enclosing, int id, int initialState)
+      : super(name, enclosing, id, initialState);
+
+  ClassNode parseNode(Compiler compiler);
+
+  bool get isMixinApplication => false;
+  bool get isPatched => patch != null;
+  bool get isPatch => origin != null;
+  bool get hasLocalScopeMembers => !localScope.isEmpty;
+
+  void addMember(Element element, DiagnosticListener listener) {
+    localMembers = localMembers.prepend(element);
+    addToScope(element, listener);
+  }
+
+  void addToScope(Element element, DiagnosticListener listener) {
+    localScope.add(element, listener);
+  }
+
+  Element localLookup(SourceString elementName) {
+    Element result = localScope.lookup(elementName);
+    if (result == null && isPatch) {
+      result = origin.localLookup(elementName);
+    }
+    return result;
+  }
+
+  void forEachLocalMember(void f(Element member)) {
+    localMembers.reverse().forEach(f);
+  }
+
+  bool get hasConstructor {
+    // Search in scope to be sure we search patched constructors.
+    for (var element in localScope.values) {
+      if (element.isConstructor()) return true;
+    }
+    return false;
+  }
+
+  void setDefaultConstructor(FunctionElement constructor, Compiler compiler) {
+    addToScope(constructor, compiler);
+  }
 
   Scope buildScope() => new ClassScope(enclosingElement.buildScope(), this);
 
@@ -1731,6 +1777,53 @@
   }
 }
 
+class MixinApplicationElementX extends BaseClassElementX
+    implements MixinApplicationElement {
+  final Node cachedNode;
+
+  FunctionElement constructor;
+  ClassElement mixin;
+
+  // TODO(kasperl): The analyzer complains when I don't have these two
+  // fields. This is pretty weird. I cannot replace them with getters.
+  final ClassElement patch = null;
+  final ClassElement origin = null;
+
+  MixinApplicationElementX(SourceString name, Element enclosing, int id,
+                           this.cachedNode)
+      : super(name, enclosing, id, STATE_NOT_STARTED);
+
+  bool get isMixinApplication => true;
+  bool get hasConstructor => constructor != null;
+  bool get hasLocalScopeMembers => false;
+
+  Token position() => cachedNode.getBeginToken();
+
+  Node parseNode(DiagnosticListener listener) => cachedNode;
+
+  Element localLookup(SourceString name) {
+    if (this.name == name) return constructor;
+    if (mixin != null) return mixin.localLookup(name);
+  }
+
+  void forEachLocalMember(void f(Element member)) {
+    if (mixin != null) mixin.forEachLocalMember(f);
+  }
+
+  void addMember(Element element, DiagnosticListener listener) {
+    throw new UnsupportedError("cannot add member to $this");
+  }
+
+  void addToScope(Element element, DiagnosticListener listener) {
+    throw new UnsupportedError("cannot add to scope of $this");
+  }
+
+  void setDefaultConstructor(FunctionElement constructor, Compiler compiler) {
+    assert(!hasConstructor);
+    this.constructor = constructor;
+  }
+}
+
 class LabelElementX extends ElementX implements LabelElement {
 
   // We store the original label here so it can be returned by [parseNode].
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index d561670..8393b4c 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -485,6 +485,13 @@
   void registerDynamicInvocation(HInvokeDynamic node,
                                  Selector selector,
                                  HTypeMap types) {
+    if (selector.isClosureCall()) {
+      // We cannot use the current framework to do optimizations based
+      // on the 'call' selector because we are also generating closure
+      // calls during the emitter phase, which at this point, does not
+      // track parameter types, nor invalidates optimized methods.
+      return;
+    }
     HTypeList providedTypes =
         new HTypeList.fromDynamicInvocation(node, selector, types);
     if (!selectorTypeMap.containsKey(selector)) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart b/sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart
index b36c71c..30c8bc5 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart
@@ -141,7 +141,7 @@
  * Constant system following the semantics for Dart code that has been
  * compiled to JavaScript.
  */
-class JavaScriptConstantSystem implements ConstantSystem {
+class JavaScriptConstantSystem extends ConstantSystem {
   const int BITS31 = 0x8FFFFFFF;
   const int BITS32 = 0xFFFFFFFF;
   // The maximum integer value a double can represent without losing
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
index 52e73c5..c21d162 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
@@ -390,11 +390,14 @@
         $isolate[fieldName] = sentinelInProgress;
         try {
           result = $isolate[fieldName] = lazyValue();
-        } catch (e) {
-          if ($isolate[fieldName] === sentinelInProgress) {
-            $isolate[fieldName] = null;
+        } finally {
+""" // Use try-finally, not try-catch/throw as it destroys the stack trace.
+"""
+          if (result === sentinelUndefined) {
+            if ($isolate[fieldName] === sentinelInProgress) {
+              $isolate[fieldName] = null;
+            }
           }
-          throw e;
         }
       } else if (result === sentinelInProgress) {
         $cyclicThrow(staticName);
@@ -1749,7 +1752,8 @@
                           js.string(internalName),
                           new js.LiteralNumber('$type'),
                           new js.ArrayInitializer.from(
-                              parameters.mappedBy((param) => js.use(param.name)).toList()),
+                              parameters.mappedBy((param) => js.use(param.name))
+                                        .toList()),
                           new js.ArrayInitializer.from(argNames)])]);
       js.Expression function =
           new js.Fun(parameters,
@@ -1868,7 +1872,7 @@
     if (!compiler.codegenWorld.staticFunctionsNeedingGetter.contains(appMain)) {
       Selector selector = new Selector.callClosure(0);
       String invocationName = namer.invocationName(selector);
-      buffer.add("$mainAccess.$invocationName = $mainAccess");
+      buffer.add("$mainAccess.$invocationName = $mainAccess$N");
     }
     return "${namer.isolateAccess(isolateMain)}($mainAccess)";
   }
@@ -2064,7 +2068,7 @@
     instantiatedClasses =
         compiler.codegenWorld.instantiatedClasses.where(computeClassFilter())
             .toSet();
-    neededClasses = instantiatedClasses.toSet();
+    neededClasses = new Set<ClassElement>.from(instantiatedClasses);
     for (ClassElement element in instantiatedClasses) {
       for (ClassElement superclass = element.superclass;
           superclass != null;
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
index 42c2571..37286e8 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
@@ -178,7 +178,7 @@
     // is generated by string concatenation in applyFunction from
     // js_helper.dart.
     var proposedName = '$base\$$arity';
-    if (base == closureInvocationSelectorName) return proposedName;
+    if (name == closureInvocationSelectorName) return proposedName;
     return getMappedInstanceName(proposedName);
   }
 
@@ -200,7 +200,9 @@
       // We don't mangle the closure invoking function name because it
       // is generated by string concatenation in applyFunction from
       // js_helper.dart.
-      if (selector.isClosureCall()) return "$name$suffix";
+      if (selector.isCall() && name == closureInvocationSelectorName) {
+        return "${name.slowToString()}$suffix";
+      }
       String proposedName = privateName(selector.library, name);
       return getMappedInstanceName('$proposedName$suffix');
     }
diff --git a/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
index 372c4d4..1790162 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
@@ -162,15 +162,17 @@
 // Patch for List implementation.
 patch class List<E> {
   patch factory List([int length = 0]) {
+    // Explicit type test is necessary to protect Primitives.newGrowableList in
+    // unchecked mode.
     if ((length is !int) || (length < 0)) {
-      String lengthString = Error.safeToString(length);
-      throw new ArgumentError(
-          "Length must be a positive integer: $lengthString.");
+      throw new ArgumentError("Length must be a positive integer: $length.");
     }
     return Primitives.newGrowableList(length);
   }
 
   patch factory List.fixedLength(int length, {E fill: null}) {
+    // Explicit type test is necessary to protect Primitives.newFixedList in
+    // unchecked mode.
     if ((length is !int) || (length < 0)) {
       throw new ArgumentError("Length must be a positive integer: $length.");
     }
@@ -188,6 +190,8 @@
    * filled with [fill].
    */
   patch factory List.filled(int length, E fill) {
+    // Explicit type test is necessary to protect Primitives.newGrowableList in
+    // unchecked mode.
     if ((length is !int) || (length < 0)) {
       throw new ArgumentError("Length must be a positive integer: $length.");
     }
@@ -249,4 +253,6 @@
 }
 
 // Patch for 'identical' function.
-patch bool identical(Object a, Object b) => Primitives.identical(a, b);
+patch bool identical(Object a, Object b) {
+  return Primitives.identicalImplementation(a, b);
+}
diff --git a/sdk/lib/_internal/compiler/implementation/lib/foreign_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/foreign_helper.dart
index ccc9a4b..c2fd831 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/foreign_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/foreign_helper.dart
@@ -116,6 +116,20 @@
 dynamic DART_CLOSURE_TO_JS(Function function) {}
 
 /**
+ * Returns a raw reference to the JavaScript function which implements
+ * [function].
+ *
+ * Warning: this is dangerous, you should probably use
+ * [DART_CLOSURE_TO_JS] instead. The returned object is not a valid
+ * Dart closure, does not store the isolate context or arity.
+ *
+ * A valid example of where this can be used is as the second argument
+ * to V8's Error.captureStackTrace. See
+ * https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi.
+ */
+dynamic RAW_DART_FUNCTION_REF(Function function) {}
+
+/**
  * Sets the current isolate to [isolate].
  */
 void JS_SET_CURRENT_ISOLATE(var isolate) {}
diff --git a/sdk/lib/_internal/compiler/implementation/lib/isolate_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/isolate_helper.dart
index ee89270..b8f2870 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/isolate_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/isolate_helper.dart
@@ -162,10 +162,8 @@
     bool isWorkerDefined = globalWorker != null;
 
     isWorker = !isWindowDefined && globalPostMessageDefined;
-    supportsWorkers = false;
-    // TODO(7795): Enable web workers when Timers are supported.
-    // supportsWorkers = isWorker
-    //    || (isWorkerDefined && IsolateNatives.thisScript != null);
+    supportsWorkers = isWorker
+       || (isWorkerDefined && IsolateNatives.thisScript != null);
     fromCommandLine = !isWindowDefined && !isWorker;
   }
 
@@ -183,9 +181,14 @@
   }
 
 
-  /** Close the worker running this code if all isolates are done. */
+  /**
+   * Close the worker running this code if all isolates are done and
+   * there is no active timer.
+   */
   void maybeCloseWorker() {
-    if (isolates.isEmpty) {
+    if (isWorker
+        && isolates.isEmpty
+        && topEventLoop.activeTimerCount == 0) {
       mainManager.postMessage(_serializeMessage({'command': 'close'}));
     }
   }
@@ -209,8 +212,7 @@
   }
 
   /**
-   * Run [code] in the context of the isolate represented by [this]. Note this
-   * is called from JavaScript (see $wrap_call in corejs.dart).
+   * Run [code] in the context of the isolate represented by [this].
    */
   dynamic eval(Function code) {
     var old = _globalState.currentContext;
@@ -253,9 +255,10 @@
 
 /** Represent the event loop on a javascript thread (DOM or worker). */
 class _EventLoop {
-  Queue<_IsolateEvent> events;
+  final Queue<_IsolateEvent> events = new Queue<_IsolateEvent>();
+  int activeTimerCount = 0;
 
-  _EventLoop() : events = new Queue<_IsolateEvent>();
+  _EventLoop();
 
   void enqueue(isolate, fn, msg) {
     events.addLast(new _IsolateEvent(isolate, fn, msg));
@@ -266,26 +269,28 @@
     return events.removeFirst();
   }
 
+  void checkOpenReceivePortsFromCommandLine() {
+    if (_globalState.rootContext != null
+        && _globalState.isolates.containsKey(_globalState.rootContext.id)
+        && _globalState.fromCommandLine
+        && _globalState.rootContext.ports.isEmpty) {
+      // We want to reach here only on the main [_Manager] and only
+      // on the command-line.  In the browser the isolate might
+      // still be alive due to DOM callbacks, but the presumption is
+      // that on the command-line, no future events can be injected
+      // into the event queue once it's empty.  Node has setTimeout
+      // so this presumption is incorrect there.  We think(?) that
+      // in d8 this assumption is valid.
+      throw new Exception("Program exited with open ReceivePorts.");
+    }
+  }
+
   /** Process a single event, if any. */
   bool runIteration() {
     final event = dequeue();
     if (event == null) {
-      if (_globalState.isWorker) {
-        _globalState.maybeCloseWorker();
-      } else if (_globalState.rootContext != null &&
-                 _globalState.isolates.containsKey(
-                     _globalState.rootContext.id) &&
-                 _globalState.fromCommandLine &&
-                 _globalState.rootContext.ports.isEmpty) {
-        // We want to reach here only on the main [_Manager] and only
-        // on the command-line.  In the browser the isolate might
-        // still be alive due to DOM callbacks, but the presumption is
-        // that on the command-line, no future events can be injected
-        // into the event queue once it's empty.  Node has setTimeout
-        // so this presumption is incorrect there.  We think(?) that
-        // in d8 this assumption is valid.
-        throw new Exception("Program exited with open ReceivePorts.");
-      }
+      checkOpenReceivePortsFromCommandLine();
+      _globalState.maybeCloseWorker();
       return false;
     }
     event.process();
@@ -311,8 +316,7 @@
   }
 
   /**
-   * Call [_runHelper] but ensure that worker exceptions are propragated. Note
-   * this is called from JavaScript (see $wrap_call in corejs.dart).
+   * Call [_runHelper] but ensure that worker exceptions are propragated.
    */
   void run() {
     if (!_globalState.isWorker) {
@@ -381,10 +385,10 @@
 const String _SPAWNED_SIGNAL = "spawned";
 
 var globalThis = IsolateNatives.computeGlobalThis();
-var globalWindow = JS('', "#['window']", globalThis);
-var globalWorker = JS('', "#['Worker']", globalThis);
+var globalWindow = JS('', "#.window", globalThis);
+var globalWorker = JS('', "#.Worker", globalThis);
 bool globalPostMessageDefined =
-    JS('', "#['postMessage'] !== (void 0)", globalThis);
+    JS('', "#.postMessage !== (void 0)", globalThis);
 
 class IsolateNatives {
 
@@ -402,9 +406,11 @@
     // executed. The last one is the currently running script.
     for (var script in scripts) {
       var src = JS('String|Null', '# && #.src', script, script);
+      // Filter out the test controller script, and the Dart
+      // bootstrap script.
       if (src != null
           && !src.endsWith('test_controller.js')
-          && !new RegExp('client.dart\.js').hasMatch(src)) {
+          && !src.endsWith('dart.js')) {
         return src;
       }
     }
@@ -434,9 +440,17 @@
         _globalState.currentManagerId = msg['id'];
         Function entryPoint = _getJSFunctionFromName(msg['functionName']);
         var replyTo = _deserializeMessage(msg['replyTo']);
-        _globalState.topEventLoop.enqueue(new _IsolateContext(), function() {
+        var context = new _IsolateContext();
+        _globalState.topEventLoop.enqueue(context, function() {
           _startIsolate(entryPoint, replyTo);
         }, 'worker-start');
+        // Make sure we always have a current context in this worker.
+        // TODO(7907): This is currently needed because we're using
+        // Timers to implement Futures, and this isolate library
+        // implementation uses Futures. We should either stop using
+        // Futures in this library, or re-adapt if Futures get a
+        // different implementation.
+        _globalState.currentContext = context;
         _globalState.topEventLoop.run();
         break;
       case 'spawn-worker':
@@ -733,10 +747,15 @@
           'replyTo': replyTo});
 
       if (_globalState.isWorker) {
-        // communication from one worker to another go through the main worker:
+        // Communication from one worker to another go through the
+        // main worker.
         _globalState.mainManager.postMessage(workerMessage);
       } else {
-        _globalState.managers[_workerId].postMessage(workerMessage);
+        // Deliver the message only if the worker is still alive.
+        _ManagerStub manager = _globalState.managers[_workerId];
+        if (manager != null) {
+          manager.postMessage(workerMessage);
+        }
       }
     });
   }
@@ -1250,48 +1269,67 @@
 
 class TimerImpl implements Timer {
   final bool _once;
+  bool _inEventLoop = false;
   int _handle;
 
   TimerImpl(int milliseconds, void callback(Timer timer))
       : _once = true {
-    if (hasTimer() && !_globalState.isWorker) {
-      _handle = JS('int', '#.setTimeout(#, #)',
-                   globalThis,
-                   convertDartClosureToJS(() => callback(this), 0),
-                   milliseconds);
-    } else if (milliseconds != 0) {
-      throw new UnsupportedError("Non DOM isolate with timer greater than 0.");
-    } else {
+    if (milliseconds == 0 && (!hasTimer() || _globalState.isWorker)) {
       // This makes a dependency between the async library and the
       // event loop of the isolate library. The compiler makes sure
       // that the event loop is compiled if [Timer] is used.
+      // TODO(7907): In case of web workers, we need to use the event
+      // loop instead of setTimeout, to make sure the futures get executed in
+      // order.
       _globalState.topEventLoop.enqueue(_globalState.currentContext, () {
         callback(this); 
       }, 'timer');
+      _inEventLoop = true;
+    } else if (hasTimer()) {
+      _globalState.topEventLoop.activeTimerCount++;
+      void internalCallback() {
+        callback(this);
+        _handle = null;
+        _globalState.topEventLoop.activeTimerCount--;
+      }
+      _handle = JS('int', '#.setTimeout(#, #)',
+                   globalThis,
+                   convertDartClosureToJS(internalCallback, 0),
+                   milliseconds);
+    } else {
+      assert(milliseconds > 0);
+      throw new UnsupportedError("Timer greater than 0.");
     }
   }
 
   TimerImpl.repeating(int milliseconds, void callback(Timer timer))
       : _once = false {
-    if (hasTimer() && !_globalState.isWorker) {
+    if (hasTimer()) {
+      _globalState.topEventLoop.activeTimerCount++;
       _handle = JS('int', '#.setInterval(#, #)',
                    globalThis,
-                   convertDartClosureToJS(() => callback(this), 0),
+                   convertDartClosureToJS(() { callback(this); }, 0),
                    milliseconds);
     } else {
-      throw new UnsupportedError("Non DOM isolate with repeating timer.");
+      throw new UnsupportedError("Repeating timer.");
     }
   }
 
   void cancel() {
-    if (hasTimer() && !_globalState.isWorker) {
+    if (hasTimer()) {
+      if (_inEventLoop) {
+        throw new UnsupportedError("Timer in event loop cannot be canceled.");
+      }
+      if (_handle == null) return;
+      _globalState.topEventLoop.activeTimerCount--;
       if (_once) {
         JS('void', '#.clearTimeout(#)', globalThis, _handle);
       } else {
         JS('void', '#.clearInterval(#)', globalThis, _handle);
       }
+      _handle = null;
     } else {
-      throw new UnsupportedError("Canceling a timer on a non DOM isolate.");
+      throw new UnsupportedError("Canceling a timer.");
     }
   }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_array.dart b/sdk/lib/_internal/compiler/implementation/lib/js_array.dart
index 01ebc02..1c92f24 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_array.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_array.dart
@@ -33,8 +33,35 @@
     return JS('var', r'#.pop()', this);
   }
 
+  void remove(Object element) {
+    checkGrowable(this, 'remove');
+    for (int i = 0; i < this.length; i++) {
+      if (this[i] == element) {
+        JS('var', r'#.splice(#, 1)', this, i);
+        return;
+      }
+    }
+  }
+
+  void removeAll(Iterable elements) {
+    Collections.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    Collections.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(E element)) {
+    // This could, and should, be optimized.
+    Collections.removeMatching(this, test);
+  }
+
+  void reatainMatching(bool test(E element)) {
+    Collections.reatainMatching(this, test);
+  }
+
   Iterable<E> where(bool f(E element)) {
-    return new WhereIterable<E>(this, f);
+    return IterableMixinWorkaround.where(this, f);
   }
 
   void addAll(Collection<E> collection) {
@@ -53,11 +80,11 @@
   }
 
   void forEach(void f(E element)) {
-    return Collections.forEach(this, f);
+    return IterableMixinWorkaround.forEach(this, f);
   }
 
   List mappedBy(f(E element)) {
-    return new MappedList(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
   String join([String separator]) {
@@ -70,35 +97,35 @@
   }
 
   List<E> take(int n) {
-    return new ListView<E>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<E> takeWhile(bool test(E value)) {
-    return new TakeWhileIterable<E>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<E> skip(int n) {
-    return new ListView<E>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<E> skipWhile(bool test(E value)) {
-    return new SkipWhileIterable<E>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   reduce(initialValue, combine(previousValue, E element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   E firstMatching(bool test(E value), {E orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   E lastMatching(bool test(E value), {E orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   E singleMatching(bool test(E value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   E elementAt(int index) {
@@ -142,9 +169,9 @@
     throw new StateError("More than one element");
   }
 
-  E min([int compare(E a, E b)]) => Collections.min(this, compare);
+  E min([int compare(E a, E b)]) => IterableMixinWorkaround.min(this, compare);
 
-  E max([int compare(E a, E b)]) => Collections.max(this, compare);
+  E max([int compare(E a, E b)]) => IterableMixinWorkaround.max(this, compare);
 
   void removeRange(int start, int length) {
     checkGrowable(this, 'removeRange');
@@ -172,7 +199,7 @@
   }
 
   void setRange(int start, int length, List<E> from, [int startFrom = 0]) {
-    checkMutable(this, 'indexed set');
+    checkMutable(this, 'set range');
     if (length == 0) return;
     checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
     checkNull(length); // TODO(ahe): This is not specified but co19 tests it.
@@ -190,14 +217,13 @@
     Arrays.copy(from, startFrom, this, start, length);
   }
 
-  bool any(bool f(E element)) => Collections.any(this, f);
+  bool any(bool f(E element)) => IterableMixinWorkaround.any(this, f);
 
-  bool every(bool f(E element)) => Collections.every(this, f);
+  bool every(bool f(E element)) => IterableMixinWorkaround.every(this, f);
 
   void sort([int compare(E a, E b)]) {
     checkMutable(this, 'sort');
-    if (compare == null) compare = Comparable.compare;
-    coreSort(this, compare);
+    IterableMixinWorkaround.sortList(this, compare);
   }
 
   int indexOf(E element, [int start = 0]) {
@@ -248,6 +274,13 @@
     if (index >= length || index < 0) throw new RangeError.value(index);
     return JS('var', '#[#]', this, index);
   }
+
+  void operator []=(int index, E value) {
+    checkMutable(this, 'indexed set');
+    if (index is !int) throw new ArgumentError(index);
+    if (index >= length || index < 0) throw new RangeError.value(index);
+    JS('void', r'#[#] = #', this, index, value);
+  }
 }
 
 /** Iterator for JavaScript Arrays. */
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
index 3ca8fc0..838842e 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
@@ -5,6 +5,7 @@
 library _js_helper;
 
 import 'dart:collection';
+import 'dart:collection-dev';
 
 part 'constant_map.dart';
 part 'native_helper.dart';
@@ -12,22 +13,6 @@
 part 'string_helper.dart';
 
 // Performance critical helper methods.
-add(var a, var b) => (a is num && b is num)
-    ? JS('num', r'# + #', a, b)
-    : add$slow(a, b);
-
-sub(var a, var b) => (a is num && b is num)
-    ? JS('num', r'# - #', a, b)
-    : sub$slow(a, b);
-
-div(var a, var b) => (a is num && b is num)
-    ? JS('num', r'# / #', a, b)
-    : div$slow(a, b);
-
-mul(var a, var b) => (a is num && b is num)
-    ? JS('num', r'# * #', a, b)
-    : mul$slow(a, b);
-
 gt(var a, var b) => (a is num && b is num)
     ? JS('bool', r'# > #', a, b)
     : gt$slow(a, b);
@@ -60,39 +45,6 @@
     ? JS('bool', r'# <= #', a, b)
     : identical(le$slow(a, b), true);
 
-index(var a, var index) {
-  // The type test may cause a NoSuchMethodError to be thrown but
-  // that matches the specification of what the indexing operator is
-  // supposed to do.
-  bool isJsArrayOrString = JS('bool',
-      r'typeof # == "string" || #.constructor === Array',
-      a, a);
-  if (isJsArrayOrString) {
-    var key = JS('int', '# >>> 0', index);
-    if (identical(key, index) && key < JS('int', r'#.length', a)) {
-      return JS('var', r'#[#]', a, key);
-    }
-  }
-  return index$slow(a, index);
-}
-
-indexSet(var a, var index, var value) {
-  // The type test may cause a NoSuchMethodError to be thrown but
-  // that matches the specification of what the indexing operator is
-  // supposed to do.
-  bool isMutableJsArray = JS('bool',
-      r'#.constructor === Array && !#.immutable$list',
-      a, a);
-  if (isMutableJsArray) {
-    var key = JS('int', '# >>> 0', index);
-    if (identical(key, index) && key < JS('int', r'#.length', a)) {
-      JS('void', r'#[#] = #', a, key, value);
-      return;
-    }
-  }
-  indexSet$slow(a, index, value);
-}
-
 /**
  * Returns true if both arguments are numbers.
  *
@@ -114,56 +66,6 @@
   return value != null && JS('bool', r'#.constructor === Array', value);
 }
 
-add$slow(var a, var b) {
-  if (checkNumbers(a, b)) {
-    return JS('num', r'# + #', a, b);
-  }
-  return UNINTERCEPTED(a + b);
-}
-
-div$slow(var a, var b) {
-  if (checkNumbers(a, b)) {
-    return JS('num', r'# / #', a, b);
-  }
-  return UNINTERCEPTED(a / b);
-}
-
-mul$slow(var a, var b) {
-  if (checkNumbers(a, b)) {
-    return JS('num', r'# * #', a, b);
-  }
-  return UNINTERCEPTED(a * b);
-}
-
-sub$slow(var a, var b) {
-  if (checkNumbers(a, b)) {
-    return JS('num', r'# - #', a, b);
-  }
-  return UNINTERCEPTED(a - b);
-}
-
-mod(var a, var b) {
-  if (checkNumbers(a, b)) {
-    // Euclidean Modulo.
-    num result = JS('num', r'# % #', a, b);
-    if (result == 0) return 0;  // Make sure we don't return -0.0.
-    if (result > 0) return result;
-    if (JS('num', '#', b) < 0) {
-      return result - JS('num', '#', b);
-    } else {
-      return result + JS('num', '#', b);
-    }
-  }
-  return UNINTERCEPTED(a % b);
-}
-
-tdiv(var a, var b) {
-  if (checkNumbers(a, b)) {
-    return (JS('num', r'# / #', a, b)).truncate();
-  }
-  return UNINTERCEPTED(a ~/ b);
-}
-
 eq(var a, var b) {
   if (JS('bool', r'# == null', a)) return JS('bool', r'# == null', b);
   if (JS('bool', r'# == null', b)) return false;
@@ -220,106 +122,6 @@
   return UNINTERCEPTED(a <= b);
 }
 
-shl(var a, var b) {
-  // TODO(floitsch): inputs must be integers.
-  if (checkNumbers(a, b)) {
-    if (JS('num', '#', b) < 0) throw new ArgumentError(b);
-    // JavaScript only looks at the last 5 bits of the shift-amount. Shifting
-    // by 33 is hence equivalent to a shift by 1.
-    if (JS('bool', r'# > 31', b)) return 0;
-    return JS('num', r'(# << #) >>> 0', a, b);
-  }
-  return UNINTERCEPTED(a << b);
-}
-
-shr(var a, var b) {
-  // TODO(floitsch): inputs must be integers.
-  if (checkNumbers(a, b)) {
-    if (JS('num', '#', b) < 0) throw new ArgumentError(b);
-    if (JS('num', '#', a) > 0) {
-      // JavaScript only looks at the last 5 bits of the shift-amount. In JS
-      // shifting by 33 is hence equivalent to a shift by 1. Shortcut the
-      // computation when that happens.
-      if (JS('bool', r'# > 31', b)) return 0;
-      // Given that 'a' is positive we must not use '>>'. Otherwise a number
-      // that has the 31st bit set would be treated as negative and shift in
-      // ones.
-      return JS('num', r'# >>> #', a, b);
-    }
-    // For negative numbers we just clamp the shift-by amount. 'a' could be
-    // negative but not have its 31st bit set. The ">>" would then shift in
-    // 0s instead of 1s. Therefore we cannot simply return 0xFFFFFFFF.
-    if (JS('num', '#', b) > 31) b = 31;
-    return JS('num', r'(# >> #) >>> 0', a, b);
-  }
-  return UNINTERCEPTED(a >> b);
-}
-
-and(var a, var b) {
-  // TODO(floitsch): inputs must be integers.
-  if (checkNumbers(a, b)) {
-    return JS('num', r'(# & #) >>> 0', a, b);
-  }
-  return UNINTERCEPTED(a & b);
-}
-
-or(var a, var b) {
-  // TODO(floitsch): inputs must be integers.
-  if (checkNumbers(a, b)) {
-    return JS('num', r'(# | #) >>> 0', a, b);
-  }
-  return UNINTERCEPTED(a | b);
-}
-
-xor(var a, var b) {
-  // TODO(floitsch): inputs must be integers.
-  if (checkNumbers(a, b)) {
-    return JS('num', r'(# ^ #) >>> 0', a, b);
-  }
-  return UNINTERCEPTED(a ^ b);
-}
-
-not(var a) {
-  if (JS('bool', r'typeof # === "number"', a)) {
-    return JS('num', r'(~#) >>> 0', a);
-  }
-  return UNINTERCEPTED(~a);
-}
-
-neg(var a) {
-  if (JS('bool', r'typeof # === "number"', a)) return JS('num', r'-#', a);
-  return UNINTERCEPTED(-a);
-}
-
-index$slow(var a, var index) {
-  if (a is String || isJsArray(a)) {
-    if (index is !int) {
-      if (index is !num) throw new ArgumentError(index);
-      if (!identical(index.truncate(), index)) throw new ArgumentError(index);
-    }
-    if (index < 0 || index >= a.length) {
-      throw new RangeError.value(index);
-    }
-    return JS('', r'#[#]', a, index);
-  }
-  return UNINTERCEPTED(a[index]);
-}
-
-void indexSet$slow(var a, var index, var value) {
-  if (isJsArray(a)) {
-    if (index is !int) {
-      throw new ArgumentError(index);
-    }
-    if (index < 0 || index >= a.length) {
-      throw new RangeError.value(index);
-    }
-    checkMutable(a, 'indexed set');
-    JS('void', r'#[#] = #', a, index, value);
-    return;
-  }
-  UNINTERCEPTED(a[index] = value);
-}
-
 checkMutable(list, reason) {
   if (JS('bool', r'!!(#.immutable$list)', list)) {
     throw new UnsupportedError(reason);
@@ -561,16 +363,10 @@
   }
 
   static List newGrowableList(length) {
-    // TODO(sra): For good concrete type analysis we need the JS-type to
-    // specifically name the JavaScript Array implementation.  'List' matches
-    // all the dart:html types that implement List<T>.
     return JS('=List', r'new Array(#)', length);
   }
 
   static List newFixedList(length) {
-    // TODO(sra): For good concrete type analysis we need the JS-type to
-    // specifically name the JavaScript Array implementation.  'List' matches
-    // all the dart:html types that implement List<T>.
     var result = JS('=List', r'new Array(#)', length);
     JS('void', r'#.fixed$length = #', result, true);
     return result;
@@ -815,7 +611,7 @@
     return JS('var', r'$[#]', className);
   }
 
-  static bool identical(a, b) {
+  static bool identicalImplementation(a, b) {
     return JS('bool', '# == null', a)
       ? JS('bool', '# == null', b)
       : JS('bool', '# === #', a, b);
@@ -944,30 +740,86 @@
 }
 
 /**
- * Throws the given Dart object as an exception by wrapping it in a
- * proper JavaScript error object and then throwing that. That gives
- * us a reasonable stack trace on most JavaScript implementations. The
- * code in [unwrapException] deals with getting the original Dart
+ * Wrap the given Dart object and record a stack trace.
+ *
+ * The code in [unwrapException] deals with getting the original Dart
  * object out of the wrapper again.
  */
 $throw(ex) {
   if (ex == null) ex = const NullThrownError();
-  var jsError = JS('var', r'new Error()');
-  JS('void', r'#.name = #', jsError, ex);
-  JS('void', r'#.description = #', jsError, ex);
-  JS('void', r'#.dartException = #', jsError, ex);
-  JS('void', r'#.toString = #', jsError,
-     DART_CLOSURE_TO_JS(toStringWrapper));
-  JS('void', r'throw #', jsError);
+  var wrapper = new DartError(ex);
+
+  if (JS('bool', '!!Error.captureStackTrace')) {
+    // Use V8 API for recording a "fast" stack trace (this installs a
+    // "stack" property getter on [wrapper]).
+    JS('void', r'Error.captureStackTrace(#, #)',
+       wrapper, RAW_DART_FUNCTION_REF($throw));
+  } else {
+    // Otherwise, produce a stack trace and record it in the wrapper.
+    // This is a slower way to create a stack trace which works on
+    // some browsers, but may simply evaluate to null.
+    String stackTrace = JS('', 'new Error().stack');
+    JS('void', '#.stack = #', wrapper, stackTrace);
+  }
+  return wrapper;
 }
 
 /**
- * This method is installed as JavaScript toString method on exception
- * objects in [$throw]. So JavaScript 'this' binds to an instance of
- * JavaScript Error to which we have added a property 'dartException'
- * which holds a Dart object.
+ * Wrapper class for throwing exceptions.
  */
-toStringWrapper() => JS('', r'this.dartException').toString();
+class DartError {
+  /// The Dart object (or primitive JavaScript value) which was thrown is
+  /// attached to this object as a field named 'dartException'.  We do this
+  /// only in raw JS so that we can use the 'in' operator and so that the
+  /// minifier does not rename the field.  Therefore it is not declared as a
+  /// real field.
+
+  DartError(var dartException) {
+    JS('void', '#.dartException = #', this, dartException);
+    // Install a toString method that the JavaScript system will call
+    // to format uncaught exceptions.
+    JS('void', '#.toString = #', this, DART_CLOSURE_TO_JS(toStringWrapper));
+  }
+
+  /**
+   * V8/Chrome installs a property getter, "stack", when calling
+   * Error.captureStackTrace (see [$throw]). In [$throw], we make sure
+   * that this property is always set.
+   */
+  String get stack => JS('', '#.stack', this);
+
+  /**
+   * This method can be invoked by calling toString from
+   * JavaScript. See the constructor of this class.
+   *
+   * We only expect this method to be called (indirectly) by the
+   * browser when an uncaught exception occurs. Instance of this class
+   * should never escape into Dart code (except for [$throw] above).
+   */
+  String toString() {
+    // If Error.captureStackTrace is available, accessing stack from
+    // this method would cause recursion because the stack property
+    // (on this object) is actually a getter which calls toString on
+    // this object (via the wrapper installed in this class'
+    // constructor). Fortunately, both Chrome and d8 prints the stack
+    // trace and Chrome even applies source maps to the stack
+    // trace. Remeber, this method is only ever invoked by the browser
+    // when an uncaught exception occurs.
+    var dartException = JS('var', r'#.dartException', this);
+    if (JS('bool', '!!Error.captureStackTrace') || (stack == null)) {
+      return dartException.toString();
+    } else {
+      return '$dartException\n$stack';
+    }
+  }
+
+  /**
+   * This method is installed as JavaScript toString method on
+   * [DartError].  So JavaScript 'this' binds to an instance of
+   * DartError.
+   */
+  static toStringWrapper() => JS('', r'this').toString();
+}
 
 makeLiteralListConst(list) {
   JS('bool', r'#.immutable$list = #', list, true);
@@ -1035,6 +887,7 @@
       if (message.endsWith('is null') ||
           message.endsWith('is undefined') ||
           message.endsWith('is null or undefined') ||
+          message.endsWith('of undefined') ||
           message.endsWith('of null')) {
         return new NoSuchMethodError(null, '<unknown>', [], {});
       } else if (contains(message, ' has no method ') ||
@@ -1147,8 +1000,10 @@
   // executes.
   var currentIsolate = JS_CURRENT_ISOLATE();
 
+  // We use $0 and $1 to not clash with variable names used by the
+  // compiler and/or minifier.
   function = JS("var",
-                r"""function(a, b) { return #(#, #, #, a, b); }""",
+                r"""function($0, $1) { return #(#, #, #, $0, $1); }""",
                 DART_CLOSURE_TO_JS(invokeClosure),
                 closure,
                 JS_CURRENT_ISOLATE(),
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_number.dart b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
index c9f9dbf..e2ae4e8 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
@@ -141,7 +141,96 @@
     }
   }
 
-  int get hashCode => this & 0x1FFFFFFF;
+  int get hashCode => JS('int', '# & 0x1FFFFFFF', this);
+
+  num operator -() => JS('num', r'-#', this);
+
+  num operator +(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return JS('num', '# + #', this, other);
+  }
+
+  num operator -(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return JS('num', '# - #', this, other);
+  }
+
+  num operator /(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return JS('num', '# / #', this, other);
+  }
+
+  num operator *(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return JS('num', '# * #', this, other);
+  }
+
+  num operator %(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    // Euclidean Modulo.
+    num result = JS('num', r'# % #', this, other);
+    if (result == 0) return 0;  // Make sure we don't return -0.0.
+    if (result > 0) return result;
+    if (JS('num', '#', other) < 0) {
+      return result - JS('num', '#', other);
+    } else {
+      return result + JS('num', '#', other);
+    }
+  }
+
+  num operator ~/(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return (JS('num', r'# / #', this, other)).truncate();
+  }
+
+  // TODO(ngeoffray): Move the bit operations below to [JSInt] and
+  // make them take an int. Because this will make operations slower,
+  // we define these methods on number for now but we need to decide
+  // the grain at which we do the type checks.
+
+  num operator <<(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    if (JS('num', '#', other) < 0) throw new ArgumentError(other);
+    // JavaScript only looks at the last 5 bits of the shift-amount. Shifting
+    // by 33 is hence equivalent to a shift by 1.
+    if (JS('bool', r'# > 31', other)) return 0;
+    return JS('num', r'(# << #) >>> 0', this, other);
+  }
+
+  num operator >>(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    if (JS('num', '#', other) < 0) throw new ArgumentError(other);
+    if (JS('num', '#', this) > 0) {
+      // JavaScript only looks at the last 5 bits of the shift-amount. In JS
+      // shifting by 33 is hence equivalent to a shift by 1. Shortcut the
+      // computation when that happens.
+      if (JS('bool', r'# > 31', other)) return 0;
+      // Given that 'a' is positive we must not use '>>'. Otherwise a number
+      // that has the 31st bit set would be treated as negative and shift in
+      // ones.
+      return JS('num', r'# >>> #', this, other);
+    }
+    // For negative numbers we just clamp the shift-by amount. 'a' could be
+    // negative but not have its 31st bit set. The ">>" would then shift in
+    // 0s instead of 1s. Therefore we cannot simply return 0xFFFFFFFF.
+    if (JS('num', '#', other) > 31) other = 31;
+    return JS('num', r'(# >> #) >>> 0', this, other);
+  }
+
+  num operator &(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return JS('num', r'(# & #) >>> 0', this, other);    
+  }
+
+  num operator |(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return JS('num', r'(# | #) >>> 0', this, other);    
+  }
+
+  num operator ^(num other) {
+    if (other is !num) throw new ArgumentError(other);
+    return JS('num', r'(# ^ #) >>> 0', this, other);    
+  }
 }
 
 class JSInt extends JSNumber {
@@ -152,6 +241,8 @@
   bool get isOdd => (this & 1) == 1;
 
   Type get runtimeType => int;
+
+  int operator ~() => JS('int', r'(~#) >>> 0', this);
 }
 
 class JSDouble extends JSNumber {
diff --git a/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
index a41efdc..860e706 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
@@ -33,6 +33,7 @@
 String typeNameInOpera(obj) {
   String name = JS('String', '#', constructorNameFallback(obj));
   if (name == 'Window') return 'DOMWindow';
+  if (name == 'ApplicationCache') return 'DOMApplicationCache';
   return name;
 }
 
diff --git a/sdk/lib/_internal/compiler/implementation/library_loader.dart b/sdk/lib/_internal/compiler/implementation/library_loader.dart
index d7b538e..ccf513c 100644
--- a/sdk/lib/_internal/compiler/implementation/library_loader.dart
+++ b/sdk/lib/_internal/compiler/implementation/library_loader.dart
@@ -528,6 +528,16 @@
     pendingExportSet.addAll(library.getNonPrivateElementsInScope());
   }
 
+  void registerHandledExports(LibraryElement exportedLibraryElement,
+                              CombinatorFilter filter) {
+    assert(invariant(library, exportedLibraryElement.exportsHandled));
+    for (Element exportedElement in exportedLibraryElement.exports) {
+      if (!filter.exclude(exportedElement)) {
+        pendingExportSet.add(exportedElement);
+      }
+    }
+  }
+
   /**
    * Registers the compute export scope with the node library.
    */
@@ -685,12 +695,14 @@
                           LibraryElement loadedLibrary) {
     if (tag is Export) {
       // [loadedLibrary] is exported by [library].
+      LibraryDependencyNode exportingNode = nodeMap[library];
       if (loadedLibrary.exportsHandled) {
         // Export scope already computed on [loadedLibrary].
+        var combinatorFilter = new CombinatorFilter.fromTag(tag);
+        exportingNode.registerHandledExports(loadedLibrary, combinatorFilter);
         return;
       }
       LibraryDependencyNode exportedNode = nodeMap[loadedLibrary];
-      LibraryDependencyNode exportingNode = nodeMap[library];
       assert(invariant(loadedLibrary, exportedNode != null,
           message: "$loadedLibrary has not been registered"));
       assert(invariant(library, exportingNode != null,
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index 1e34e04..aeef672 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -386,7 +386,7 @@
    * Warning: do not call this method directly. It should only be
    * called by [resolveClass] and [ClassSupertypeResolver].
    */
-  void loadSupertypes(ClassElement cls, Node from) {
+  void loadSupertypes(ClassElement cls, Spannable from) {
     compiler.withCurrentElement(cls, () => measure(() {
       if (cls.supertypeLoadState == STATE_DONE) return;
       if (cls.supertypeLoadState == STATE_STARTED) {
@@ -404,8 +404,8 @@
       cls.supertypeLoadState = STATE_STARTED;
       compiler.withCurrentElement(cls, () {
         // TODO(ahe): Cache the node in cls.
-        cls.parseNode(compiler).accept(new ClassSupertypeResolver(compiler,
-                                                                  cls));
+        cls.parseNode(compiler).accept(
+            new ClassSupertypeResolver(compiler, cls));
         if (cls.supertypeLoadState != STATE_DONE) {
           cls.supertypeLoadState = STATE_DONE;
         }
@@ -454,7 +454,7 @@
       compiler.withCurrentElement(element, () => measure(() {
         assert(element.resolutionState == STATE_NOT_STARTED);
         element.resolutionState = STATE_STARTED;
-        ClassNode tree = element.parseNode(compiler);
+        Node tree = element.parseNode(compiler);
         loadSupertypes(element, tree);
 
         ClassResolverVisitor visitor =
@@ -2737,24 +2737,24 @@
     // resolve this class again.
     resolveTypeVariableBounds(node.typeParameters);
 
-    // Find super type.
-    DartType supertype = null;
+    // Setup the supertype for the element.
+    assert(element.supertype == null);
     if (node.superclass != null) {
-      supertype = typeResolver.resolveTypeAnnotation(node.superclass, scope,
-          element, onFailure: error);
-    }
-    if (supertype != null) {
-      if (identical(supertype.kind, TypeKind.MALFORMED_TYPE)) {
-        // Error has already been reported.
-      } else if (!identical(supertype.kind, TypeKind.INTERFACE)) {
-        // TODO(johnniwinther): Handle dynamic.
-        error(node.superclass.typeName, MessageKind.CLASS_NAME_EXPECTED, []);
-      } else if (isBlackListed(supertype)) {
-        error(node.superclass, MessageKind.CANNOT_EXTEND, [supertype]);
-      } else {
+      MixinApplication superMixin = node.superclass.asMixinApplication();
+      if (superMixin != null) {
+        DartType supertype = resolveSupertype(element, superMixin.superclass);
+        Link<Node> link = superMixin.mixins.nodes;
+        while (!link.isEmpty) {
+          supertype = applyMixin(supertype, visit(link.head));
+          link = link.tail;
+        }
         element.supertype = supertype;
+      } else {
+        element.supertype = resolveSupertype(element, node.superclass);
       }
     }
+
+    // If the super type isn't specified, we make it Object.
     final objectElement = compiler.objectClass;
     if (!identical(element, objectElement) && element.supertype == null) {
       if (objectElement == null) {
@@ -2765,6 +2765,7 @@
       }
       element.supertype = objectElement.computeType(compiler);
     }
+
     assert(element.interfaces == null);
     Link<DartType> interfaces = const Link<DartType>();
     for (Link<Node> link = node.interfaces.nodes;
@@ -2809,10 +2810,61 @@
     if (node.defaultClause != null) {
       element.defaultClass = visit(node.defaultClause);
     }
-    addDefaultConstructorIfNeeded(element);
+    element.addDefaultConstructorIfNeeded(compiler);
     return element.computeType(compiler);
   }
 
+  DartType visitMixinApplication(MixinApplication node) {
+    compiler.ensure(element != null);
+    compiler.ensure(element.resolutionState == STATE_STARTED);
+
+    // Generate anonymous mixin application elements for the
+    // intermediate mixin applications (excluding the last).
+    DartType supertype = resolveSupertype(element, node.superclass);
+    Link<Node> link = node.mixins.nodes;
+    while (!link.tail.isEmpty) {
+      supertype = applyMixin(supertype, visit(link.head));
+      link = link.tail;
+    }
+    doApplyMixinTo(element, supertype, visit(link.head));
+    return element.computeType(compiler);
+  }
+
+  DartType applyMixin(DartType supertype, DartType mixinType) {
+    String superName = supertype.name.slowToString();
+    String mixinName = mixinType.name.slowToString();
+    ClassElement mixinApplication = new MixinApplicationElementX(
+        new SourceString("${superName}_${mixinName}"),
+        element.getCompilationUnit(),
+        compiler.getNextFreeClassId(),
+        element.parseNode(compiler));
+    doApplyMixinTo(mixinApplication, supertype, mixinType);
+    mixinApplication.resolutionState = STATE_DONE;
+    mixinApplication.supertypeLoadState = STATE_DONE;
+    return mixinApplication.computeType(compiler);
+  }
+
+  void doApplyMixinTo(MixinApplicationElement mixinApplication,
+                      DartType supertype,
+                      DartType mixinType) {
+    assert(mixinApplication.supertype == null);
+    mixinApplication.supertype = supertype;
+
+    // The class that is the result of a mixin application implements
+    // the interface of the class that was mixed in.
+    Link<DartType> interfaces = const Link<DartType>();
+    interfaces = interfaces.prepend(mixinType);
+    assert(mixinApplication.interfaces == null);
+    mixinApplication.interfaces = interfaces;
+
+    assert(mixinApplication.mixin == null);
+    mixinApplication.mixin = mixinType.element;
+    mixinApplication.mixin.ensureResolved(compiler);
+    mixinApplication.addDefaultConstructorIfNeeded(compiler);
+    calculateAllSupertypes(mixinApplication);
+  }
+
+
   // TODO(johnniwinther): Remove when default class is no longer supported.
   DartType visitTypeAnnotation(TypeAnnotation node) {
     return visit(node.typeName);
@@ -2863,9 +2915,28 @@
     return e.computeType(compiler);
   }
 
+  DartType resolveSupertype(ClassElement cls, TypeAnnotation superclass) {
+    DartType supertype = typeResolver.resolveTypeAnnotation(
+        superclass, scope, cls, onFailure: error);
+    if (supertype != null) {
+      if (identical(supertype.kind, TypeKind.MALFORMED_TYPE)) {
+        // Error has already been reported.
+        return null;
+      } else if (!identical(supertype.kind, TypeKind.INTERFACE)) {
+        // TODO(johnniwinther): Handle dynamic.
+        error(superclass.typeName, MessageKind.CLASS_NAME_EXPECTED, []);
+        return null;
+      } else if (isBlackListed(supertype)) {
+        error(superclass, MessageKind.CANNOT_EXTEND, [supertype]);
+        return null;
+      }
+    }
+    return supertype;
+  }
+
   void calculateAllSupertypes(ClassElement cls) {
-    // TODO(karlklose): check if type arguments match, if a classelement occurs
-    //                  more than once in the supertypes.
+    // TODO(karlklose): Check if type arguments match, if a class
+    // element occurs more than once in the supertypes.
     if (cls.allSupertypes != null) return;
     final DartType supertype = cls.supertype;
     if (supertype != null) {
@@ -2903,17 +2974,6 @@
     }
   }
 
-  /**
-   * Add a synthetic nullary constructor if there are no other
-   * constructors.
-   */
-  void addDefaultConstructorIfNeeded(ClassElement element) {
-    if (element.hasConstructor) return;
-    FunctionElement constructor =
-        new SynthesizedConstructorElementX.forDefault(element, compiler);
-    element.addToScope(constructor, compiler);
-  }
-
   isBlackListed(DartType type) {
     LibraryElement lib = element.getLibrary();
     return
@@ -2945,6 +3005,12 @@
     element.ensureResolved(compiler);
   }
 
+  void visitNodeList(NodeList node) {
+    for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
+      link.head.accept(this);
+    }
+  }
+
   void visitClassNode(ClassNode node) {
     if (node.superclass == null) {
       if (!identical(classElement, compiler.objectClass)) {
@@ -2953,11 +3019,12 @@
     } else {
       node.superclass.accept(this);
     }
-    for (Link<Node> link = node.interfaces.nodes;
-         !link.isEmpty;
-         link = link.tail) {
-      link.head.accept(this);
-    }
+    visitNodeList(node.interfaces);
+  }
+
+  void visitMixinApplication(MixinApplication node) {
+    node.superclass.accept(this);
+    visitNodeList(node.mixins);
   }
 
   void visitTypeAnnotation(TypeAnnotation node) {
@@ -3225,6 +3292,12 @@
                                Diagnostic.ERROR);
       }
     }
+    if (element.isGetter() && (requiredParameterCount != 0
+                               || visitor.optionalParameterCount != 0)) {
+      compiler.reportMessage(compiler.spanFromSpannable(formalParameters),
+                             MessageKind.EXTRA_FORMALS.error([]),
+                             Diagnostic.ERROR);
+    }
     return new FunctionSignatureX(parameters,
                                   visitor.optionalParameters,
                                   requiredParameterCount,
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart b/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
index f3c1f88..e50729d 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
@@ -15,9 +15,9 @@
          FieldParameterElementX,
          VariableListElementX,
          FunctionSignatureX,
-         SynthesizedConstructorElementX,
          LabelElementX,
-         TargetElementX;
+         TargetElementX,
+         MixinApplicationElementX;
 import '../util/util.dart';
 import '../scanner/scannerlib.dart' show PartialMetadataAnnotation;
 
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/keyword.dart b/sdk/lib/_internal/compiler/implementation/scanner/keyword.dart
index 3a6db11..5d3c9a8 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/keyword.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/keyword.dart
@@ -38,6 +38,7 @@
       const Keyword("var"),
       const Keyword("void"),
       const Keyword("while"),
+      const Keyword("with"),
 
       // TODO(ahe): Don't think this is a reserved word.
       // See: http://dartbug.com/5579
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
index ad1a0e1..34408bf 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
@@ -163,6 +163,18 @@
   void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {
   }
 
+  void beginMixinApplication(Token token) {
+  }
+
+  void endMixinApplication() {
+  }
+
+  void beginNamedMixinApplication(Token token) {
+  }
+
+  void endNamedMixinApplication(Token typedefKeyword, Token endToken) {
+  }
+
   void beginHide(Token hideKeyword) {
   }
 
@@ -175,6 +187,12 @@
   void endIdentifierList(int count) {
   }
 
+  void beginTypeList(Token token) {
+  }
+
+  void endTypeList(int count) {
+  }
+
   void beginIfStatement(Token token) {
   }
 
@@ -702,6 +720,10 @@
     pushNode(makeNodeList(count, null, null, ","));
   }
 
+  void endTypeList(int count) {
+    pushNode(makeNodeList(count, null, null, ","));
+  }
+
   void endPart(Token partKeyword, Token semicolon) {
     StringNode uri = popLiteralString();
     addLibraryTag(new Part(partKeyword, uri));
@@ -750,7 +772,7 @@
     SourceString nativeTagInfo = native.checkForNativeClass(this);
     NodeList interfaces =
         makeNodeList(interfacesCount, implementsKeyword, null, ",");
-    TypeAnnotation supertype = popNode();
+    Node supertype = popNode();
     NodeList typeParameters = popNode();
     Identifier name = popNode();
     int id = idGenerator();
@@ -804,6 +826,24 @@
     rejectBuiltInIdentifier(name);
   }
 
+  void endNamedMixinApplication(Token typedefKeyword, Token endToken) {
+    MixinApplication mixinApplication = popNode();
+    NodeList typeVariables = popNode();
+    Identifier name = popNode();
+    int id = idGenerator();
+    Element enclosing = compilationUnitElement;
+    pushElement(new MixinApplicationElementX(
+        name.source, enclosing, id, mixinApplication));
+    rejectBuiltInIdentifier(name);
+  }
+
+  void endMixinApplication() {
+    NodeList mixins = popNode();
+    TypeAnnotation superclass = popNode();
+    Modifiers modifiers = popNode();
+    pushNode(new MixinApplication(modifiers, superclass, mixins));
+  }
+
   void handleVoidKeyword(Token token) {
     pushNode(new TypeAnnotation(new Identifier(token), null));
   }
@@ -1148,7 +1188,7 @@
     NodeList body = popNode();
     NodeList interfaces =
         makeNodeList(interfacesCount, implementsKeyword, null, ",");
-    TypeAnnotation supertype = popNode();
+    Node supertype = popNode();
     NodeList typeParameters = popNode();
     Identifier name = popNode();
     Modifiers modifiers = popNode();
@@ -1170,6 +1210,14 @@
                          typedefKeyword, endToken));
   }
 
+  void endNamedMixinApplication(Token typedefKeyword, Token endToken) {
+    Node mixinApplication = popNode();
+    NodeList typeParameters = popNode();
+    Identifier name = popNode();
+    pushNode(new NamedMixinApplication(name, typeParameters, mixinApplication,
+                                       typedefKeyword, endToken));
+  }
+
   void endInterface(int supertypeCount, Token interfaceKeyword,
                     Token extendsKeyword, Token endToken) {
     NodeList body = popNode();
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/parser.dart b/sdk/lib/_internal/compiler/implementation/scanner/parser.dart
index 64f712f..2909cc9 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/parser.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/parser.dart
@@ -52,7 +52,7 @@
     } else if ((identical(value, 'abstract')) || (identical(value, 'class'))) {
       return parseClass(token);
     } else if (identical(value, 'typedef')) {
-      return parseNamedFunctionAlias(token);
+      return parseTypedef(token);
     } else if (identical(value, '#')) {
       return parseScriptTags(token);
     } else if (identical(value, 'library')) {
@@ -161,6 +161,19 @@
     return token;
   }
 
+  /// type (, type)*
+  Token parseTypeList(Token token) {
+    listener.beginTypeList(token);
+    token = parseType(token);
+    int count = 1;
+    while (optional(',', token)) {
+      token = parseType(token.next);
+      count++;
+    }
+    listener.endTypeList(count);
+    return token;
+  }
+
   Token parsePartOrPartOf(Token token) {
     assert(optional('part', token));
     if (optional('of', token.next)) {
@@ -246,17 +259,36 @@
     return parseClassBody(token);
   }
 
-  Token parseNamedFunctionAlias(Token token) {
+  Token parseTypedef(Token token) {
     Token typedefKeyword = token;
-    listener.beginFunctionTypeAlias(token);
-    token = parseReturnTypeOpt(token.next);
-    token = parseIdentifier(token);
-    token = parseTypeVariablesOpt(token);
-    token = parseFormalParameters(token);
-    listener.endFunctionTypeAlias(typedefKeyword, token);
+    if (optional('=', peekAfterType(token.next))) {
+      listener.beginNamedMixinApplication(token);
+      token = parseIdentifier(token.next);
+      token = parseTypeVariablesOpt(token);
+      token = expect('=', token);
+      token = parseMixinApplication(token);
+      listener.endNamedMixinApplication(typedefKeyword, token);
+    } else {
+      listener.beginFunctionTypeAlias(token);
+      token = parseReturnTypeOpt(token.next);
+      token = parseIdentifier(token);
+      token = parseTypeVariablesOpt(token);
+      token = parseFormalParameters(token);
+      listener.endFunctionTypeAlias(typedefKeyword, token);
+    }
     return expect(';', token);
   }
 
+  Token parseMixinApplication(Token token) {
+    listener.beginMixinApplication(token);
+    token = parseModifiers(token);
+    token = parseType(token);
+    token = expect('with', token);
+    token = parseTypeList(token);
+    listener.endMixinApplication();
+    return token;
+  }
+
   Token parseReturnTypeOpt(Token token) {
     if (identical(token.stringValue, 'void')) {
       listener.handleVoidKeyword(token);
@@ -452,7 +484,12 @@
     Token extendsKeyword;
     if (optional('extends', token)) {
       extendsKeyword = token;
-      token = parseType(token.next);
+      if (optional('with', token.next.next)) {
+        // TODO(kasperl): Disallow modifiers here.
+        token = parseMixinApplication(token.next);
+      } else {
+        token = parseType(token.next);
+      }
     } else {
       extendsKeyword = null;
       listener.handleNoType(token);
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart b/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
index 8241b7f..841656b 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
@@ -14,7 +14,8 @@
          VariableElementX,
          VariableListElementX,
          ClassElementX,
-         MetadataAnnotationX;
+         MetadataAnnotationX,
+         MixinApplicationElementX;
 import '../dart2jslib.dart';
 import '../native_handler.dart' as native;
 import '../string_validator.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index e48d335..4d5745f 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -416,9 +416,10 @@
     });
     if (closureData.isClosure()) {
       // Inside closure redirect references to itself to [:this:].
-      builder.thisInstruction = new HThis(closureData.thisElement);
-      builder.graph.entry.addAtEntry(builder.thisInstruction);
-      updateLocal(closureData.closureElement, builder.thisInstruction);
+      HThis thisInstruction = new HThis(closureData.thisElement);
+      builder.graph.thisInstruction = thisInstruction;
+      builder.graph.entry.addAtEntry(thisInstruction);
+      updateLocal(closureData.closureElement, thisInstruction);
     } else if (element.isInstanceMember()
                || element.isGenerativeConstructor()) {
       // Once closures have been mapped to classes their instance members might
@@ -426,10 +427,11 @@
       // context.
       ClassElement cls = element.getEnclosingClass();
       DartType type = cls.computeType(builder.compiler);
-      builder.thisInstruction = new HThis(closureData.thisElement,
-                                          new HBoundedType.nonNull(type));
-      builder.graph.entry.addAtEntry(builder.thisInstruction);
-      directLocals[closureData.thisElement] = builder.thisInstruction;
+      HThis thisInstruction = new HThis(closureData.thisElement,
+                                        new HBoundedType.nonNull(type));
+      builder.graph.thisInstruction = thisInstruction;
+      builder.graph.entry.addAtEntry(thisInstruction);
+      directLocals[closureData.thisElement] = thisInstruction;
     }
 
     // If this method is an intercepted method, add the extra
@@ -926,7 +928,6 @@
   LocalsHandler localsHandler;
   HInstruction rethrowableException;
   Map<Element, HInstruction> parameters;
-  HInstruction thisInstruction;
   final RuntimeTypeInformation rti;
   HParameterValue lastAddedParameter;
 
@@ -1165,9 +1166,6 @@
     element = element.implementation;
     // TODO(floitsch): we should be able to inline inside lazy initializers.
     if (!currentElement.isFunction()) return false;
-    // TODO(floitsch): we should be able to inline getters, setters and
-    // constructor bodies.
-    if (!element.isFunction()) return false;
     // TODO(floitsch): find a cleaner way to know if the element is a function
     // containing nodes.
     // [PartialFunctionElement]s are [FunctionElement]s that have [Node]s.
@@ -1180,9 +1178,6 @@
     for (int i = 0; i < inliningStack.length; i++) {
       if (inliningStack[i].function == element) return false;
     }
-    // TODO(ngeoffray): Inlining currently does not work in the presence of
-    // private calls.
-    if (currentLibrary != element.getLibrary()) return false;
     PartialFunctionElement function = element;
     int sourceSize =
         function.endToken.charOffset - function.beginToken.charOffset;
@@ -2299,83 +2294,89 @@
     assert(!identical(op.token.kind, PLUS_TOKEN));
     HInstruction operand = pop();
 
-    HInstruction target =
-        new HStatic(interceptors.getPrefixOperatorInterceptor(op));
-    add(target);
-    HInvokeUnary result;
-    String value = op.source.stringValue;
-    switch (value) {
-      case "-": result = new HNegate(target, operand); break;
-      case "~": result = new HBitNot(target, operand); break;
-      default:
-        compiler.internalError('Unexpected unary operator: $value.', node: op);
-        break;
-    }
     // See if we can constant-fold right away. This avoids rewrites later on.
     if (operand is HConstant) {
+      UnaryOperation operation = constantSystem.lookupUnary(op.source);
       HConstant constant = operand;
-      Constant folded =
-          result.operation(constantSystem).fold(constant.constant);
+      Constant folded = operation.fold(constant.constant);
       if (folded != null) {
         stack.add(graph.addConstant(folded));
         return;
       }
     }
+
+    HInvokeDynamicMethod result =
+        buildInvokeDynamic(node, elements.getSelector(node), operand, []);
     pushWithPosition(result, node);
   }
 
-  void visitBinary(HInstruction left, Operator op, HInstruction right) {
+  void visitBinary(
+      HInstruction left, Operator op, HInstruction right, Send send) {
+    Selector selector = null;
+    // TODO(ngeoffray): The resolver creates these selectors already
+    // but does not put them on the [send] instruction.
+    switch (op.source.stringValue) {
+      case "+":
+      case "+=":
+      case "++":
+        selector = new Selector.binaryOperator(const SourceString('+'));
+        break;
+      case "-":
+      case "-=":
+      case "--":
+        selector = new Selector.binaryOperator(const SourceString('-'));
+        break;
+      case "*":
+      case "*=":
+        selector = new Selector.binaryOperator(const SourceString('*'));
+        break;
+      case "/":
+      case "/=":
+        selector = new Selector.binaryOperator(const SourceString('/'));
+        break;
+      case "~/":
+      case "~/=":
+        selector = new Selector.binaryOperator(const SourceString('~/'));
+        break;
+      case "%":
+      case "%=":
+        selector = new Selector.binaryOperator(const SourceString('%'));
+        break;
+      case "<<":
+      case "<<=":
+        selector = new Selector.binaryOperator(const SourceString('<<'));
+        break;
+      case ">>":
+      case ">>=":
+        selector = new Selector.binaryOperator(const SourceString('>>'));
+        break;
+      case "|":
+      case "|=":
+        selector = new Selector.binaryOperator(const SourceString('|'));
+        break;
+      case "&":
+      case "&=":
+        selector = new Selector.binaryOperator(const SourceString('&'));
+        break;
+      case "^":
+      case "^=":
+        selector = new Selector.binaryOperator(const SourceString('^'));
+        break;
+      default:
+        break;
+    }
+
+    if (selector != null) {
+      pushWithPosition(
+            buildInvokeDynamic(send, selector, left, [right]),
+            op);
+      return;
+    }
     Element element = interceptors.getOperatorInterceptor(op);
     assert(element != null);
     HInstruction target = new HStatic(element);
     add(target);
     switch (op.source.stringValue) {
-      case "+":
-      case "++":
-      case "+=":
-        pushWithPosition(new HAdd(target, left, right), op);
-        break;
-      case "-":
-      case "--":
-      case "-=":
-        pushWithPosition(new HSubtract(target, left, right), op);
-        break;
-      case "*":
-      case "*=":
-        pushWithPosition(new HMultiply(target, left, right), op);
-        break;
-      case "/":
-      case "/=":
-        pushWithPosition(new HDivide(target, left, right), op);
-        break;
-      case "~/":
-      case "~/=":
-        pushWithPosition(new HTruncatingDivide(target, left, right), op);
-        break;
-      case "%":
-      case "%=":
-        pushWithPosition(new HModulo(target, left, right), op);
-        break;
-      case "<<":
-      case "<<=":
-        pushWithPosition(new HShiftLeft(target, left, right), op);
-        break;
-      case ">>":
-      case ">>=":
-        pushWithPosition(new HShiftRight(target, left, right), op);
-        break;
-      case "|":
-      case "|=":
-        pushWithPosition(new HBitOr(target, left, right), op);
-        break;
-      case "&":
-      case "&=":
-        pushWithPosition(new HBitAnd(target, left, right), op);
-        break;
-      case "^":
-      case "^=":
-        pushWithPosition(new HBitXor(target, left, right), op);
-        break;
       case "==":
         pushWithPosition(new HEquals(target, left, right), op);
         break;
@@ -2427,14 +2428,8 @@
     return result;
   }
 
-  Set<ClassElement> getInterceptedClassesOn(Send send, Selector selector) {
+  Set<ClassElement> getInterceptedClassesOn(Selector selector) {
     if (!methodInterceptionEnabled) return null;
-    if (!backend.isInterceptorClass(currentElement.getEnclosingClass())
-        && send.receiver == null) {
-      // The call applies to [:this:] which can not be an interceptor
-      // object.
-      return null;
-    }
     return interceptors.getInterceptedClassesOn(selector);
   }
 
@@ -2449,8 +2444,7 @@
         : elements.getSelector(send.selector);
     assert(selector.isGetter());
     SourceString getterName = selector.name;
-    Set<ClassElement> interceptedClasses =
-        getInterceptedClassesOn(send, selector);
+    Set<ClassElement> interceptedClasses = getInterceptedClassesOn(selector);
 
     bool hasGetter = compiler.world.hasAnyUserDefinedGetter(selector);
     if (interceptedClasses != null) {
@@ -2484,6 +2478,12 @@
       } else if (element.isField() && isLazilyInitialized(element)) {
         push(new HLazyStatic(element));
       } else {
+        if (element.isGetter()) {
+          Selector selector = elements.getSelector(send);
+          if (tryInlineMethod(element, selector, const Link<Node>())) {
+            return;
+          }
+        }
         // TODO(5346): Try to avoid the need for calling [declaration] before
         // creating an [HStatic].
         push(new HStatic(element.declaration));
@@ -2518,8 +2518,7 @@
     assert(selector.isSetter());
     SourceString setterName = selector.name;
     bool hasSetter = compiler.world.hasAnyUserDefinedSetter(selector);
-    Set<ClassElement> interceptedClasses =
-        getInterceptedClassesOn(send, selector);
+    Set<ClassElement> interceptedClasses = getInterceptedClassesOn(selector);
     if (interceptedClasses != null) {
       // If we're using an interceptor class, emit a call to the
       // getInterceptor method and then the actual dynamic call on the
@@ -2578,11 +2577,6 @@
   HInstruction invokeInterceptor(Set<ClassElement> intercepted,
                                  HInstruction receiver,
                                  Send send) {
-    if (send != null
-        && backend.isInterceptorClass(currentElement.getEnclosingClass())
-        && send.receiver == null) {
-      return thisInstruction;
-    }
     HInterceptor interceptor = new HInterceptor(intercepted, receiver);
     add(interceptor);
     return interceptor;
@@ -2794,7 +2788,7 @@
       visit(node.argumentsNode);
       var right = pop();
       var left = pop();
-      visitBinary(left, op, right);
+      visitBinary(left, op, right, node);
     }
   }
 
@@ -2894,31 +2888,44 @@
     }
 
     Element element = elements[node];
+    bool isClosureCall = false;
     if (element != null && compiler.world.hasNoOverridingMember(element)) {
       if (tryInlineMethod(element, selector, node.arguments)) {
-        return;
+        if (element.isGetter()) {
+          // If the element is a getter, we are doing a closure call
+          // on what this getter returns.
+          assert(selector.isCall());
+          isClosureCall = true;
+        } else {
+          return;
+        }
       }
     }
 
-    HInstruction receiver;
-    if (node.receiver == null) {
-      receiver = localsHandler.readThis();
-    } else {
-      visit(node.receiver);
-      receiver = pop();
-    }
-
     List<HInstruction> inputs = <HInstruction>[];
-    Set<ClassElement> interceptedClasses =
-        getInterceptedClassesOn(node, selector);
-    if (interceptedClasses != null) {
-      inputs.add(invokeInterceptor(interceptedClasses, receiver, node));
+    if (isClosureCall) inputs.add(pop());
+
+    HInstruction receiver;
+    if (!isClosureCall) {
+      if (node.receiver == null) {
+        receiver = localsHandler.readThis();
+      } else {
+        visit(node.receiver);
+        receiver = pop();
+      }
     }
-    inputs.add(receiver);
 
     addDynamicSendArgumentsToList(node, inputs);
 
-    pushWithPosition(new HInvokeDynamicMethod(selector, inputs), node);
+    HInstruction invoke;
+    if (isClosureCall) {
+      Selector closureSelector = new Selector.callClosureFrom(selector);
+      invoke = new HInvokeClosure(closureSelector, inputs);
+    } else {
+      invoke = buildInvokeDynamic(node, selector, receiver, inputs);
+    }
+
+    pushWithPosition(invoke, node);
 
     if (isNotEquals) {
       HNot not = new HNot(popBoolified());
@@ -2941,7 +2948,8 @@
     var inputs = <HInstruction>[];
     inputs.add(closureTarget);
     addDynamicSendArgumentsToList(node, inputs);
-    pushWithPosition(new HInvokeClosure(selector, inputs), node);
+    Selector closureSelector = new Selector.callClosureFrom(selector);
+    pushWithPosition(new HInvokeClosure(closureSelector, inputs), node);
   }
 
   void registerForeignTypes(String specString) {
@@ -3079,16 +3087,16 @@
     }
   }
 
-  void handleForeignDartClosureToJs(Send node) {
+  FunctionSignature handleForeignRawFunctionRef(Send node, String name) {
     if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
-      compiler.cancel('Exactly one argument required',
+      compiler.cancel('"$name" requires exactly one argument',
                       node: node.argumentsNode);
     }
     Node closure = node.arguments.head;
     Element element = elements[closure];
     if (!Elements.isStaticOrTopLevelFunction(element)) {
       compiler.cancel(
-          'JS_TO_CLOSURE requires a static or top-level method',
+          '"$name" requires a static or top-level method',
           node: closure);
     }
     FunctionElement function = element;
@@ -3099,10 +3107,15 @@
     FunctionSignature params = implementation.computeSignature(compiler);
     if (params.optionalParameterCount != 0) {
       compiler.cancel(
-          'JS_TO_CLOSURE does not handle closure with optional parameters',
+          '"$name" does not handle closure with optional parameters',
           node: closure);
     }
     visit(closure);
+    return params;
+  }
+
+  void handleForeignDartClosureToJs(Send node, String name) {
+    FunctionSignature params = handleForeignRawFunctionRef(node, name);
     List<HInstruction> inputs = <HInstruction>[pop()];
     String invocationName = backend.namer.invocationName(
         new Selector.callClosure(params.requiredParameterCount));
@@ -3148,7 +3161,9 @@
     } else if (name == const SourceString('JS_CALL_IN_ISOLATE')) {
       handleForeignJsCallInIsolate(node);
     } else if (name == const SourceString('DART_CLOSURE_TO_JS')) {
-      handleForeignDartClosureToJs(node);
+      handleForeignDartClosureToJs(node, 'DART_CLOSURE_TO_JS');
+    } else if (name == const SourceString('RAW_DART_FUNCTION_REF')) {
+      handleForeignRawFunctionRef(node, 'RAW_DART_FUNCTION_REF');
     } else if (name == const SourceString('JS_SET_CURRENT_ISOLATE')) {
       handleForeignSetCurrentIsolate(node);
     } else if (name == const SourceString('JS_CREATE_ISOLATE')) {
@@ -3252,7 +3267,8 @@
       add(target);
       inputs = <HInstruction>[target];
       addDynamicSendArgumentsToList(node, inputs);
-      push(new HInvokeClosure(selector, inputs));
+      Selector closureSelector = new Selector.callClosureFrom(selector);
+      push(new HInvokeClosure(closureSelector, inputs));
     }
   }
 
@@ -3442,7 +3458,10 @@
     }
     compiler.ensure(!element.isGenerativeConstructor());
     if (element.isFunction()) {
-      if (tryInlineMethod(element, selector, node.arguments)) {
+      bool isIdenticalFunction = element == compiler.identicalFunction;
+
+      if (!isIdenticalFunction
+          && tryInlineMethod(element, selector, node.arguments)) {
         return;
       }
 
@@ -3459,7 +3478,7 @@
         return;
       }
 
-      if (identical(element, compiler.identicalFunction)) {
+      if (isIdenticalFunction) {
         pushWithPosition(new HIdentity(target, inputs[1], inputs[2]), node);
         return;
       }
@@ -3476,7 +3495,8 @@
       generateGetter(node, element);
       List<HInstruction> inputs = <HInstruction>[pop()];
       addDynamicSendArgumentsToList(node, inputs);
-      pushWithPosition(new HInvokeClosure(selector, inputs), node);
+      Selector closureSelector = new Selector.callClosureFrom(selector);
+      pushWithPosition(new HInvokeClosure(closureSelector, inputs), node);
     }
   }
 
@@ -3508,7 +3528,8 @@
       Selector selector = elements.getSelector(node);
       List<HInstruction> inputs = <HInstruction>[target];
       addDynamicSendArgumentsToList(node, inputs);
-      push(new HInvokeClosure(selector, inputs));
+      Selector closureSelector = new Selector.callClosureFrom(selector);
+      push(new HInvokeClosure(closureSelector, inputs));
     }
   }
 
@@ -3640,17 +3661,20 @@
     }
   }
 
-  HInvokeDynamicMethod buildInvokeDynamicWithOneArgument(
-      Node node, Selector selector, HInstruction receiver, HInstruction arg0) {
-    Set<ClassElement> interceptedClasses =
-        getInterceptedClassesOn(node, selector);
+  HInvokeDynamicMethod buildInvokeDynamic(Node node,
+                                          Selector selector,
+                                          HInstruction receiver,
+                                          List<HInstruction> arguments) {
+    Set<ClassElement> interceptedClasses = getInterceptedClassesOn(selector);
     List<HInstruction> inputs = <HInstruction>[];
-    if (interceptedClasses != null) {
+    bool isIntercepted = interceptedClasses != null;
+    if (isIntercepted) {
+      assert(!interceptedClasses.isEmpty);
       inputs.add(invokeInterceptor(interceptedClasses, receiver, node));
     }
     inputs.add(receiver);
-    inputs.add(arg0);
-    return new HInvokeDynamicMethod(selector, inputs);
+    inputs.addAll(arguments);
+    return new HInvokeDynamicMethod(selector, inputs, isIntercepted);
   }
 
   visitSendSet(SendSet node) {
@@ -3678,47 +3702,41 @@
       if (!methodInterceptionEnabled) {
         assert(identical(op.source.stringValue, '='));
         visitDynamicSend(node);
+      } else if (const SourceString("=") == op.source) {
+        visitDynamicSend(node);
+        HInvokeDynamicMethod method = pop();
+        // Push the value.
+        stack.add(method.inputs.last);
       } else {
-        HStatic target = new HStatic(
-            interceptors.getIndexAssignmentInterceptor());
-        add(target);
         visit(node.receiver);
         HInstruction receiver = pop();
         visit(node.argumentsNode);
-        if (const SourceString("=") == op.source) {
-          HInstruction value = pop();
-          HInstruction index = pop();
-          add(new HIndexAssign(target, receiver, index, value));
+        HInstruction value;
+        HInstruction index;
+        // Compound assignments are considered as being prefix.
+        bool isCompoundAssignment = op.source.stringValue.endsWith('=');
+        bool isPrefix = !node.isPostfix;
+        Element getter = elements[node.selector];
+        if (isCompoundAssignment) {
+          value = pop();
+          index = pop();
+        } else {
+          index = pop();
+          value = graph.addConstantInt(1, constantSystem);
+        }
+
+        HInvokeDynamicMethod left = buildInvokeDynamic(
+            node, new Selector.index(), receiver, [index]);
+        add(left);
+        visitBinary(left, op, value, node);
+        value = pop();
+        HInvokeDynamicMethod assign = buildInvokeDynamic(
+            node, new Selector.indexSet(), receiver, [index, value]);
+        add(assign);
+        if (isPrefix) {
           stack.add(value);
         } else {
-          HInstruction value;
-          HInstruction index;
-          bool isCompoundAssignment = op.source.stringValue.endsWith('=');
-          // Compound assignments are considered as being prefix.
-          bool isPrefix = !node.isPostfix;
-          Element getter = elements[node.selector];
-          if (isCompoundAssignment) {
-            value = pop();
-            index = pop();
-          } else {
-            index = pop();
-            value = graph.addConstantInt(1, constantSystem);
-          }
-
-          HInvokeDynamicMethod left = buildInvokeDynamicWithOneArgument(
-              node, new Selector.index(), receiver, index);
-          add(left);
-          Element opElement = elements[op];
-          visitBinary(left, op, value);
-          value = pop();
-          HInstruction assign = new HIndexAssign(
-              target, receiver, index, value);
-          add(assign);
-          if (isPrefix) {
-            stack.add(value);
-          } else {
-            stack.add(left);
-          }
+          stack.add(left);
         }
       }
     } else if (const SourceString("=") == op.source) {
@@ -3755,7 +3773,7 @@
       } else {
         right = graph.addConstantInt(1, constantSystem);
       }
-      visitBinary(left, op, right);
+      visitBinary(left, op, right, node);
       HInstruction operation = pop();
       assert(operation != null);
       if (Elements.isInstanceSend(node, elements)) {
@@ -4531,7 +4549,7 @@
     if (!isAborted()) endTryBlock = close(new HGoto());
     SubGraph bodyGraph = new SubGraph(startTryBlock, lastOpenedBlock);
     SubGraph catchGraph = null;
-    HParameterValue exception = null;
+    HLocalValue exception = null;
 
     if (!node.catchBlocks.isEmpty) {
       localsHandler = new LocalsHandler.from(savedLocals);
@@ -4541,7 +4559,7 @@
       // Note that the name of this element is irrelevant.
       Element element = new ElementX(
           const SourceString('exception'), ElementKind.PARAMETER, work.element);
-      exception = new HParameterValue(element);
+      exception = new HLocalValue(element);
       add(exception);
       HInstruction oldRethrowableException = rethrowableException;
       rethrowableException = exception;
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index 71f5650..bc20ed2 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -169,7 +169,6 @@
   final Set<HInstruction> controlFlowOperators;
   final Map<Element, ElementAction> breakAction;
   final Map<Element, ElementAction> continueAction;
-  final Map<Element, String> parameterNames;
   final List<js.Parameter> parameters;
 
   js.Block currentContainer;
@@ -214,7 +213,6 @@
     : this.work = work,
       this.types =
           (work.compilationContext as JavaScriptItemCompilationContext).types,
-      parameterNames = new LinkedHashMap<Element, String>(),
       declaredLocals = new Set<String>(),
       collectedVariableDeclarations = new OrderedSet<String>(),
       currentContainer = new js.Block.empty(),
@@ -226,7 +224,6 @@
       breakAction = new Map<Element, ElementAction>(),
       continueAction = new Map<Element, ElementAction>();
 
-  LibraryElement get currentLibrary => work.element.getLibrary();
   Compiler get compiler => backend.compiler;
   NativeEmitter get nativeEmitter => backend.emitter.nativeEmitter;
   CodegenEnqueuer get world => backend.compiler.enqueuer.codegen;
@@ -359,8 +356,7 @@
         compiler,
         intervalBuilder.liveInstructions,
         intervalBuilder.liveIntervals,
-        generateAtUseSite,
-        parameterNames);
+        generateAtUseSite);
     allocator.visitGraph(graph);
     variableNames = allocator.names;
     shouldGroupVarDeclarations = allocator.names.numberOfVariables > 1;
@@ -668,6 +664,9 @@
         needsAssignment = false;
       }
     }
+    if (instruction is HLocalValue) {
+      needsAssignment = false;
+    }
 
     if (needsAssignment &&
         !instruction.isControlFlow() && variableNames.hasName(instruction)) {
@@ -800,9 +799,8 @@
     js.Catch catchPart = null;
     js.Block finallyPart = null;
     if (info.catchBlock != null) {
-      HParameterValue exception = info.catchVariable;
+      HLocalValue exception = info.catchVariable;
       String name = variableNames.getName(exception);
-      parameterNames[exception.sourceElement] = name;
       js.VariableDeclaration decl = new js.VariableDeclaration(name);
       js.Block catchBlock = generateStatementsInNewBlock(info.catchBlock);
       catchPart = new js.Catch(decl, catchBlock);
@@ -1259,6 +1257,13 @@
   }
 
   visitInvokeBinary(HInvokeBinary node, String op) {
+    use(node.left);
+    js.Expression jsLeft = pop();
+    use(node.right);
+    push(new js.Binary(op, jsLeft, pop()), node);
+  }
+
+  visitRelational(HRelational node, String op) {
     if (node.isBuiltin(types)) {
       use(node.left);
       js.Expression jsLeft = pop();
@@ -1273,25 +1278,21 @@
   // shift operator to achieve this.
   visitBitInvokeBinary(HBinaryBitOp node, String op) {
     visitInvokeBinary(node, op);
-    if (node.isBuiltin(types) && requiresUintConversion(node)) {
+    if (requiresUintConversion(node)) {
       push(new js.Binary(">>>", pop(), new js.LiteralNumber("0")), node);
     }
   }
 
   visitInvokeUnary(HInvokeUnary node, String op) {
-    if (node.isBuiltin(types)) {
-      use(node.operand);
-      push(new js.Prefix(op, pop()), node);
-    } else {
-      visitInvokeStatic(node);
-    }
+    use(node.operand);
+    push(new js.Prefix(op, pop()), node);
   }
 
   // We want the outcome of bit-operations to be positive. We use the unsigned
   // shift operator to achieve this.
   visitBitInvokeUnary(HInvokeUnary node, String op) {
     visitInvokeUnary(node, op);
-    if (node.isBuiltin(types) && requiresUintConversion(node)) {
+    if (requiresUintConversion(node)) {
       push(new js.Binary(">>>", pop(), new js.LiteralNumber("0")), node);
     }
   }
@@ -1336,24 +1337,18 @@
   visitDivide(HDivide node)         => visitInvokeBinary(node, '/');
   visitMultiply(HMultiply node)     => visitInvokeBinary(node, '*');
   visitSubtract(HSubtract node)     => visitInvokeBinary(node, '-');
-  // Truncating divide does not have a JS equivalent.
-  visitTruncatingDivide(HTruncatingDivide node) => visitInvokeStatic(node);
-  // Modulo cannot be mapped to the native operator (different semantics).
-  visitModulo(HModulo node)                     => visitInvokeStatic(node);
-
   visitBitAnd(HBitAnd node)         => visitBitInvokeBinary(node, '&');
   visitBitNot(HBitNot node)         => visitBitInvokeUnary(node, '~');
   visitBitOr(HBitOr node)           => visitBitInvokeBinary(node, '|');
   visitBitXor(HBitXor node)         => visitBitInvokeBinary(node, '^');
-  visitShiftRight(HShiftRight node) => visitBitInvokeBinary(node, '>>');
   visitShiftLeft(HShiftLeft node)   => visitBitInvokeBinary(node, '<<');
 
   visitNegate(HNegate node)         => visitInvokeUnary(node, '-');
 
-  visitLess(HLess node)                 => visitInvokeBinary(node, '<');
-  visitLessEqual(HLessEqual node)       => visitInvokeBinary(node, '<=');
-  visitGreater(HGreater node)           => visitInvokeBinary(node, '>');
-  visitGreaterEqual(HGreaterEqual node) => visitInvokeBinary(node, '>=');
+  visitLess(HLess node)                 => visitRelational(node, '<');
+  visitLessEqual(HLessEqual node)       => visitRelational(node, '<=');
+  visitGreater(HGreater node)           => visitRelational(node, '>');
+  visitGreaterEqual(HGreaterEqual node) => visitRelational(node, '>=');
 
   visitBoolify(HBoolify node) {
     assert(node.inputs.length == 1);
@@ -1653,11 +1648,6 @@
                         visitArguments(node.inputs)),
          node);
     world.registerDynamicInvocation(call.name, call);
-    // A closure can also be invoked through [HInvokeDynamicMethod] by
-    // explicitly calling the [:call:] method. Therefore, we must also
-    // register types here to let the backend invalidate wrong
-    // optimizations.
-    backend.registerDynamicInvocation(node, call, types);
   }
 
   visitInvokeStatic(HInvokeStatic node) {
@@ -1896,18 +1886,24 @@
       };
       HRelational relational = input;
       BinaryOperation operation = relational.operation(backend.constantSystem);
-      visitInvokeBinary(input, inverseOperator[operation.name.stringValue]);
+      visitRelational(input, inverseOperator[operation.name.stringValue]);
     } else {
       use(input);
       push(new js.Prefix("!", pop()));
     }
   }
 
-  visitParameterValue(HParameterValue node) => visitLocalValue(node);
+  visitParameterValue(HParameterValue node) {
+    assert(!isGenerateAtUseSite(node));
+    String name = variableNames.getName(node);
+    parameters.add(new js.Parameter(name));
+    declaredLocals.add(name);
+  }
 
   visitLocalValue(HLocalValue node) {
-    assert(isGenerateAtUseSite(node));
-    push(new js.VariableUse(variableNames.getName(node)), node);
+    assert(!isGenerateAtUseSite(node));
+    String name = variableNames.getName(node);
+    collectedVariableDeclarations.add(name);
   }
 
   visitPhi(HPhi node) {
@@ -2143,17 +2139,13 @@
   }
 
   void visitIndexAssign(HIndexAssign node) {
-    if (node.isBuiltin(types)) {
-      use(node.inputs[1]);
-      js.Expression receiver = pop();
-      use(node.inputs[2]);
-      js.Expression index = pop();
-      use(node.inputs[3]);
-      push(new js.Assignment(new js.PropertyAccess(receiver, index), pop()),
-           node);
-    } else {
-      visitInvokeStatic(node);
-    }
+    use(node.receiver);
+    js.Expression receiver = pop();
+    use(node.index);
+    js.Expression index = pop();
+    use(node.value);
+    push(new js.Assignment(new js.PropertyAccess(receiver, index), pop()),
+         node);
   }
 
   void checkInt(HInstruction input, String cmp) {
@@ -2510,12 +2502,6 @@
   int maxBailoutParameters;
 
   HBasicBlock beginGraph(HGraph graph) {
-    // Declare the parameter names only for the optimized version. The
-    // unoptimized version has different parameters.
-    parameterNames.forEach((Element element, String name) {
-      parameters.add(new js.Parameter(name));
-      declaredLocals.add(name);
-    });
     return graph.entry;
   }
 
@@ -2792,6 +2778,11 @@
     }
   }
 
+  visitParameterValue(HParameterValue node) {
+    // Nothing to do, parameters are dealt with specially in a bailout
+    // method.
+  }
+
   bool visitAndOrInfo(HAndOrBlockInformation info) => false;
 
   bool visitIfInfo(HIfBlockInformation info) {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
index d7c8547..01543cb 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
@@ -34,7 +34,8 @@
     if (!generateAtUseSite.contains(input)
         && !input.isCodeMotionInvariant()
         && input.usedBy.length == 1
-        && input is !HPhi) {
+        && input is !HPhi
+        && input is !HLocalValue) {
       expectedInputs.add(input);
     }
   }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart b/sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart
new file mode 100644
index 0000000..06e8d64
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart
@@ -0,0 +1,478 @@
+// 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.
+
+part of ssa;
+
+/**
+ * [InvokeDynamicSpecializer] and its subclasses are helpers to
+ * optimize intercepted dynamic calls. It knows what input types
+ * would be beneficial for performance, and how to change a invoke
+ * dynamic to a builtin instruction (e.g. HIndex, HBitNot).
+ */
+class InvokeDynamicSpecializer {
+  const InvokeDynamicSpecializer();
+
+  HType computeDesiredTypeForInput(HInvokeDynamicMethod instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    return HType.UNKNOWN;
+  }
+
+  HType computeTypeFromInputTypes(HInvokeDynamicMethod instruction,
+                                  HTypeMap types,
+                                  Compiler compiler) {
+    return HType.UNKNOWN;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    return null;
+  }
+
+  Operation operation(ConstantSystem constantSystem) => null;
+
+  static InvokeDynamicSpecializer lookupSpecializer(Selector selector) {
+    if (selector.kind == SelectorKind.INDEX) {
+      return selector.name == const SourceString('[]')
+          ? const IndexSpecializer()
+          : const IndexAssignSpecializer();
+    } else if (selector.kind == SelectorKind.OPERATOR) {
+      if (selector.name == const SourceString('unary-')) {
+        return const UnaryNegateSpecializer();
+      } else if (selector.name == const SourceString('~')) {
+        return const BitNotSpecializer();
+      } else if (selector.name == const SourceString('+')) {
+        return const AddSpecializer();
+      } else if (selector.name == const SourceString('-')) {
+        return const SubtractSpecializer();
+      } else if (selector.name == const SourceString('*')) {
+        return const MultiplySpecializer();
+      } else if (selector.name == const SourceString('/')) {
+        return const DivideSpecializer();
+      } else if (selector.name == const SourceString('~/')) {
+        return const TruncatingDivideSpecializer();
+      } else if (selector.name == const SourceString('%')) {
+        return const ModuloSpecializer();
+      } else if (selector.name == const SourceString('>>')) {
+        return const ShiftRightSpecializer();
+      } else if (selector.name == const SourceString('<<')) {
+        return const ShiftLeftSpecializer();
+      } else if (selector.name == const SourceString('&')) {
+        return const BitAndSpecializer();
+      } else if (selector.name == const SourceString('|')) {
+        return const BitOrSpecializer();
+      } else if (selector.name == const SourceString('^')) {
+        return const BitXorSpecializer();
+      }
+    }
+    return const InvokeDynamicSpecializer();
+  }
+}
+
+class IndexAssignSpecializer extends InvokeDynamicSpecializer {
+  const IndexAssignSpecializer();
+
+  HType computeDesiredTypeForInput(HInvokeDynamicMethod instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    HInstruction index = instruction.inputs[2];
+    if (input == instruction.inputs[1] &&
+        (index.isTypeUnknown(types) || index.isNumber(types))) {
+      return HType.MUTABLE_ARRAY;
+    }
+    // The index should be an int when the receiver is a string or array.
+    // However it turns out that inserting an integer check in the optimized
+    // version is cheaper than having another bailout case. This is true,
+    // because the integer check will simply throw if it fails.
+    return HType.UNKNOWN;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    if (instruction.inputs[1].isMutableArray(types)) {
+      return new HIndexAssign(instruction.inputs[1],
+                              instruction.inputs[2],
+                              instruction.inputs[3]);
+    }
+    return null;
+  }
+}
+
+class IndexSpecializer extends InvokeDynamicSpecializer {
+  const IndexSpecializer();
+
+  HType computeDesiredTypeForInput(HInvokeDynamicMethod instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    HInstruction index = instruction.inputs[2];
+    if (input == instruction.inputs[1] &&
+        (index.isTypeUnknown(types) || index.isNumber(types))) {
+      return HType.INDEXABLE_PRIMITIVE;
+    }
+    // The index should be an int when the receiver is a string or array.
+    // However it turns out that inserting an integer check in the optimized
+    // version is cheaper than having another bailout case. This is true,
+    // because the integer check will simply throw if it fails.
+    return HType.UNKNOWN;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    if (instruction.inputs[1].isIndexablePrimitive(types)) {
+      return new HIndex(instruction.inputs[1], instruction.inputs[2]);
+    }
+    return null;
+  }
+}
+
+class BitNotSpecializer extends InvokeDynamicSpecializer {
+  const BitNotSpecializer();
+
+  UnaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.bitNot;
+  }
+
+  HType computeDesiredTypeForInput(HInvokeDynamicMethod instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    if (input == instruction.inputs[1]) {
+      HType propagatedType = types[instruction];
+      if (propagatedType.isUnknown() || propagatedType.isNumber()) {
+        return HType.INTEGER;
+      }
+    }
+    return HType.UNKNOWN;
+  }
+
+  HType computeTypeFromInputTypes(HInvokeDynamicMethod instruction,
+                                  HTypeMap types,
+                                  Compiler compiler) {
+    // All bitwise operations on primitive types either produce an
+    // integer or throw an error.
+    if (instruction.inputs[1].isPrimitive(types)) return HType.INTEGER;
+    return HType.UNKNOWN;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    HInstruction input = instruction.inputs[1];
+    if (input.isNumber(types)) return new HBitNot(input);
+    return null;
+  }
+}
+
+class UnaryNegateSpecializer extends InvokeDynamicSpecializer {
+  const UnaryNegateSpecializer();
+
+  UnaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.negate;
+  }
+
+  HType computeDesiredTypeForInput(HInvokeDynamicMethod instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    if (input == instruction.inputs[1]) {
+      HType propagatedType = types[instruction];
+      // If the outgoing type should be a number (integer, double or both) we
+      // want the outgoing type to be the input too.
+      // If we don't know the outgoing type we try to make it a number.
+      if (propagatedType.isNumber()) return propagatedType;
+      if (propagatedType.isUnknown()) return HType.NUMBER;
+    }
+    return HType.UNKNOWN;
+  }
+
+  HType computeTypeFromInputTypes(HInvokeDynamicMethod instruction,
+                                  HTypeMap types,
+                                  Compiler compiler) {
+    HType operandType = types[instruction.inputs[1]];
+    if (operandType.isNumber()) return operandType;
+    return HType.UNKNOWN;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    HInstruction input = instruction.inputs[1];
+    if (input.isNumber(types)) return new HNegate(input);
+    return null;
+  }
+}
+
+abstract class BinaryArithmeticSpecializer extends InvokeDynamicSpecializer {
+  const BinaryArithmeticSpecializer();
+
+  HType computeTypeFromInputTypes(HInvokeDynamicMethod instruction,
+                                  HTypeMap types,
+                                  Compiler compiler) {
+    HInstruction left = instruction.inputs[1];
+    HInstruction right = instruction.inputs[2];
+    if (left.isInteger(types) && right.isInteger(types)) return HType.INTEGER;
+    if (left.isNumber(types)) {
+      if (left.isDouble(types) || right.isDouble(types)) return HType.DOUBLE;
+      return HType.NUMBER;
+    }
+    return HType.UNKNOWN;
+  }
+
+  HType computeDesiredTypeForInput(HInvokeDynamicMethod instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    if (input == instruction.inputs[0]) return HType.UNKNOWN;
+
+    HType propagatedType = types[instruction];
+    // If the desired output type should be an integer we want to get two
+    // integers as arguments.
+    if (propagatedType.isInteger()) return HType.INTEGER;
+    // If the outgoing type should be a number we can get that if both inputs
+    // are numbers. If we don't know the outgoing type we try to make it a
+    // number.
+    if (propagatedType.isUnknown() || propagatedType.isNumber()) {
+      return HType.NUMBER;
+    }
+    // Even if the desired outgoing type is not a number we still want the
+    // second argument to be a number if the first one is a number. This will
+    // not help for the outgoing type, but at least the binary arithmetic
+    // operation will not have type problems.
+    // TODO(floitsch): normally we shouldn't request a number, but simply
+    // throw an ArgumentError if it isn't. This would be similar
+    // to the array case.
+    HInstruction left = instruction.inputs[1];
+    HInstruction right = instruction.inputs[2];
+    if (input == right && left.isNumber(types)) return HType.NUMBER;
+    return HType.UNKNOWN;
+  }
+
+  bool isBuiltin(HInvokeDynamicMethod instruction, HTypeMap types) {
+    return instruction.inputs[1].isNumber(types)
+        && instruction.inputs[2].isNumber(types);
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    if (isBuiltin(instruction, types)) {
+      return newBuiltinVariant(instruction.inputs[1], instruction.inputs[2]);
+    }
+    return null;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right);
+}
+
+class AddSpecializer extends BinaryArithmeticSpecializer {
+  const AddSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.add;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HAdd(left, right);
+  }
+}
+
+class DivideSpecializer extends BinaryArithmeticSpecializer {
+  const DivideSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.divide;
+  }
+
+  HType computeTypeFromInputTypes(HInstruction instruction,
+                                  HTypeMap types,
+                                  Compiler compiler) {
+    HInstruction left = instruction.inputs[1];
+    if (left.isNumber(types)) return HType.DOUBLE;
+    return HType.UNKNOWN;
+  }
+
+  HType computeDesiredTypeForInput(HInstruction instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    if (input == instruction.inputs[0]) return HType.UNKNOWN;
+    // A division can never return an integer. So don't ask for integer inputs.
+    if (instruction.isInteger(types)) return HType.UNKNOWN;
+    return super.computeDesiredTypeForInput(
+        instruction, input, types, compiler);
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HDivide(left, right);
+  }
+}
+
+class ModuloSpecializer extends BinaryArithmeticSpecializer {
+  const ModuloSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.modulo;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    // Modulo cannot be mapped to the native operator (different semantics).    
+    return null;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    throw 'Modulo has no builtin variant';
+  }
+}
+
+class MultiplySpecializer extends BinaryArithmeticSpecializer {
+  const MultiplySpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.multiply;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HMultiply(left, right);
+  }
+}
+
+class SubtractSpecializer extends BinaryArithmeticSpecializer {
+  const SubtractSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.subtract;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HSubtract(left, right);
+  }
+}
+
+class TruncatingDivideSpecializer extends BinaryArithmeticSpecializer {
+  const TruncatingDivideSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.truncatingDivide;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    // Truncating divide does not have a JS equivalent.    
+    return null;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    throw 'Truncating divide has no builtin variant';
+  }
+}
+
+abstract class BinaryBitOpSpecializer extends BinaryArithmeticSpecializer {
+  const BinaryBitOpSpecializer();
+
+  HType computeTypeFromInputTypes(HInvokeDynamicMethod instruction,
+                                  HTypeMap types,
+                                  Compiler compiler) {
+    // All bitwise operations on primitive types either produce an
+    // integer or throw an error.
+    HInstruction left = instruction.inputs[1];
+    if (left.isPrimitive(types)) return HType.INTEGER;
+    return HType.UNKNOWN;
+  }
+
+  HType computeDesiredTypeForInput(HInvokeDynamicMethod instruction,
+                                   HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    if (input == instruction.inputs[0]) return HType.UNKNOWN;
+    HType propagatedType = types[instruction];
+    // If the outgoing type should be a number we can get that only if both
+    // inputs are integers. If we don't know the outgoing type we try to make
+    // it an integer.
+    if (propagatedType.isUnknown() || propagatedType.isNumber()) {
+      return HType.INTEGER;
+    }
+    return HType.UNKNOWN;
+  }
+}
+
+class ShiftLeftSpecializer extends BinaryBitOpSpecializer {
+  const ShiftLeftSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.shiftLeft;
+  }
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    HInstruction left = instruction.inputs[1];
+    HInstruction right = instruction.inputs[2];
+    if (!left.isNumber(types) || !right.isConstantInteger()) return null;
+    HConstant rightConstant = right;
+    IntConstant intConstant = rightConstant.constant;
+    int count = intConstant.value;
+    if (count >= 0 && count <= 31) {
+      return newBuiltinVariant(left, right);
+    }
+    return null;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HShiftLeft(left, right);
+  }
+}
+
+class ShiftRightSpecializer extends BinaryBitOpSpecializer {
+  const ShiftRightSpecializer();
+
+  HInstruction tryConvertToBuiltin(HInvokeDynamicMethod instruction,
+                                   HTypeMap types) {
+    // Shift right cannot be mapped to the native operator easily.    
+    return null;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    throw 'Shift right has no builtin variant';
+  }
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.shiftRight;
+  }
+}
+
+class BitOrSpecializer extends BinaryBitOpSpecializer {
+  const BitOrSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.bitOr;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HBitOr(left, right);
+  }
+}
+
+class BitAndSpecializer extends BinaryBitOpSpecializer {
+  const BitAndSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.bitAnd;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HBitAnd(left, right);
+  }
+}
+
+class BitXorSpecializer extends BinaryBitOpSpecializer {
+  const BitXorSpecializer();
+
+  BinaryOperation operation(ConstantSystem constantSystem) {
+    return constantSystem.bitXor;
+  }
+
+  HInstruction newBuiltinVariant(HInstruction left, HInstruction right) {
+    return new HBitXor(left, right);
+  }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
index e380d89..7d7e8f3 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
@@ -48,7 +48,6 @@
   R visitLocalSet(HLocalSet node);
   R visitLocalValue(HLocalValue node);
   R visitLoopBranch(HLoopBranch node);
-  R visitModulo(HModulo node);
   R visitMultiply(HMultiply node);
   R visitNegate(HNegate node);
   R visitNot(HNot node);
@@ -57,7 +56,6 @@
   R visitRangeConversion(HRangeConversion node);
   R visitReturn(HReturn node);
   R visitShiftLeft(HShiftLeft node);
-  R visitShiftRight(HShiftRight node);
   R visitStatic(HStatic node);
   R visitStaticStore(HStaticStore node);
   R visitStringConcat(HStringConcat node);
@@ -65,7 +63,6 @@
   R visitSwitch(HSwitch node);
   R visitThis(HThis node);
   R visitThrow(HThrow node);
-  R visitTruncatingDivide(HTruncatingDivide node);
   R visitTry(HTry node);
   R visitTypeGuard(HTypeGuard node);
   R visitTypeConversion(HTypeConversion node);
@@ -122,6 +119,7 @@
 class HGraph {
   HBasicBlock entry;
   HBasicBlock exit;
+  HThis thisInstruction;
   bool isRecursiveMethod = false;
   bool calledInLoop = false;
   final List<HBasicBlock> blocks;
@@ -258,14 +256,14 @@
   visitBinaryArithmetic(HBinaryArithmetic node) => visitInvokeBinary(node);
   visitBinaryBitOp(HBinaryBitOp node) => visitBinaryArithmetic(node);
   visitInvoke(HInvoke node) => visitInstruction(node);
-  visitInvokeBinary(HInvokeBinary node) => visitInvokeStatic(node);
+  visitInvokeBinary(HInvokeBinary node) => visitInstruction(node);
   visitInvokeDynamic(HInvokeDynamic node) => visitInvoke(node);
   visitInvokeDynamicField(HInvokeDynamicField node) => visitInvokeDynamic(node);
-  visitInvokeUnary(HInvokeUnary node) => visitInvokeStatic(node);
+  visitInvokeUnary(HInvokeUnary node) => visitInstruction(node);
   visitConditionalBranch(HConditionalBranch node) => visitControlFlow(node);
   visitControlFlow(HControlFlow node) => visitInstruction(node);
   visitFieldAccess(HFieldAccess node) => visitInstruction(node);
-  visitRelational(HRelational node) => visitInvokeBinary(node);
+  visitRelational(HRelational node) => visitInvokeStatic(node);
 
   visitAdd(HAdd node) => visitBinaryArithmetic(node);
   visitBailoutTarget(HBailoutTarget node) => visitInstruction(node);
@@ -293,7 +291,7 @@
   visitIdentity(HIdentity node) => visitRelational(node);
   visitIf(HIf node) => visitConditionalBranch(node);
   visitIndex(HIndex node) => visitInstruction(node);
-  visitIndexAssign(HIndexAssign node) => visitInvokeStatic(node);
+  visitIndexAssign(HIndexAssign node) => visitInstruction(node);
   visitIntegerCheck(HIntegerCheck node) => visitCheck(node);
   visitInterceptor(HInterceptor node) => visitInstruction(node);
   visitInvokeClosure(HInvokeClosure node)
@@ -315,7 +313,6 @@
   visitLocalSet(HLocalSet node) => visitFieldSet(node);
   visitLocalValue(HLocalValue node) => visitInstruction(node);
   visitLoopBranch(HLoopBranch node) => visitConditionalBranch(node);
-  visitModulo(HModulo node) => visitBinaryArithmetic(node);
   visitNegate(HNegate node) => visitInvokeUnary(node);
   visitNot(HNot node) => visitInstruction(node);
   visitPhi(HPhi node) => visitInstruction(node);
@@ -323,7 +320,6 @@
   visitParameterValue(HParameterValue node) => visitLocalValue(node);
   visitRangeConversion(HRangeConversion node) => visitCheck(node);
   visitReturn(HReturn node) => visitControlFlow(node);
-  visitShiftRight(HShiftRight node) => visitBinaryBitOp(node);
   visitShiftLeft(HShiftLeft node) => visitBinaryBitOp(node);
   visitSubtract(HSubtract node) => visitBinaryArithmetic(node);
   visitSwitch(HSwitch node) => visitControlFlow(node);
@@ -333,7 +329,6 @@
   visitThis(HThis node) => visitParameterValue(node);
   visitThrow(HThrow node) => visitControlFlow(node);
   visitTry(HTry node) => visitControlFlow(node);
-  visitTruncatingDivide(HTruncatingDivide node) => visitBinaryArithmetic(node);
   visitTypeGuard(HTypeGuard node) => visitCheck(node);
   visitIs(HIs node) => visitInstruction(node);
   visitTypeConversion(HTypeConversion node) => visitCheck(node);
@@ -777,12 +772,9 @@
   static const int INTERCEPTOR_TYPECODE = 4;
   static const int ADD_TYPECODE = 5;
   static const int DIVIDE_TYPECODE = 6;
-  static const int MODULO_TYPECODE = 7;
   static const int MULTIPLY_TYPECODE = 8;
   static const int SUBTRACT_TYPECODE = 9;
-  static const int TRUNCATING_DIVIDE_TYPECODE = 10;
   static const int SHIFT_LEFT_TYPECODE = 11;
-  static const int SHIFT_RIGHT_TYPECODE = 12;
   static const int BIT_OR_TYPECODE = 13;
   static const int BIT_AND_TYPECODE = 14;
   static const int BIT_XOR_TYPECODE = 15;
@@ -1175,14 +1167,14 @@
 
 class HBailoutTarget extends HInstruction {
   final int state;
-  bool isEnabled = false;
+  bool isEnabled = true;
   HBailoutTarget(this.state) : super(<HInstruction>[]);
   void prepareGvn(HTypeMap types) {
     assert(!hasSideEffects(types));
     setUseGvn();
   }
 
-  bool isControlFlow() => true;
+  bool isControlFlow() => isEnabled;
   bool isJsStatement(HTypeMap types) => isEnabled;
 
   accept(HVisitor visitor) => visitor.visitBailoutTarget(this);
@@ -1210,7 +1202,6 @@
   HType get guaranteedType => isEnabled ? guardedType : HType.UNKNOWN;
 
   bool isControlFlow() => true;
-
   bool isJsStatement(HTypeMap types) => isEnabled;
 
   accept(HVisitor visitor) => visitor.visitTypeGuard(this);
@@ -1316,40 +1307,39 @@
 
 class HInvokeClosure extends HInvokeDynamic {
   HInvokeClosure(Selector selector, List<HInstruction> inputs)
-    : super(selector, null, inputs);
+    : super(selector, null, inputs) {
+    assert(selector.isClosureCall());
+  }
   accept(HVisitor visitor) => visitor.visitInvokeClosure(this);
 }
 
 class HInvokeDynamicMethod extends HInvokeDynamic {
-  HInvokeDynamicMethod(Selector selector, List<HInstruction> inputs)
-    : super(selector, null, inputs);
+  final InvokeDynamicSpecializer specializer;
+  HInvokeDynamicMethod(Selector selector,
+                       List<HInstruction> inputs,
+                       [bool isIntercepted = false])
+    : super(selector, null, inputs),
+      specializer = isIntercepted
+          ? InvokeDynamicSpecializer.lookupSpecializer(selector)
+          : const InvokeDynamicSpecializer();
   String toString() => 'invoke dynamic method: $selector';
   accept(HVisitor visitor) => visitor.visitInvokeDynamicMethod(this);
 
   bool isIndexOperatorOnIndexablePrimitive(HTypeMap types) {
     return isInterceptorCall
         && selector.kind == SelectorKind.INDEX
+        && selector.name == const SourceString('[]')
         && inputs[1].isIndexablePrimitive(types);
   }
 
   HType computeDesiredTypeForInput(HInstruction input,
                                    HTypeMap types,
                                    Compiler compiler) {
-    // TODO(ngeoffray): Move this logic into a different class that
-    // will know what type it wants for a given selector.
-    if (selector.kind != SelectorKind.INDEX) return HType.UNKNOWN;
-    if (!isInterceptorCall) return HType.UNKNOWN;
+    return specializer.computeDesiredTypeForInput(this, input, types, compiler);
+  }
 
-    HInstruction index = inputs[2];
-    if (input == inputs[1] &&
-        (index.isTypeUnknown(types) || index.isNumber(types))) {
-      return HType.INDEXABLE_PRIMITIVE;
-    }
-    // The index should be an int when the receiver is a string or array.
-    // However it turns out that inserting an integer check in the optimized
-    // version is cheaper than having another bailout case. This is true,
-    // because the integer check will simply throw if it fails.
-    return HType.UNKNOWN;
+  HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
+    return specializer.computeTypeFromInputTypes(this, types, compiler);
   }
 }
 
@@ -1555,80 +1545,35 @@
   accept(HVisitor visitor) => visitor.visitForeignNew(this);
 }
 
-abstract class HInvokeBinary extends HInvokeStatic {
-  HInvokeBinary(HStatic target, HInstruction left, HInstruction right)
-      : super(<HInstruction>[target, left, right]);
+abstract class HInvokeBinary extends HInstruction {
+  HInvokeBinary(HInstruction left, HInstruction right)
+      : super(<HInstruction>[left, right]);
 
-  HInstruction get left => inputs[1];
-  HInstruction get right => inputs[2];
+  HInstruction get left => inputs[0];
+  HInstruction get right => inputs[1];
 
   BinaryOperation operation(ConstantSystem constantSystem);
-  isBuiltin(HTypeMap types);
 }
 
 abstract class HBinaryArithmetic extends HInvokeBinary {
-  HBinaryArithmetic(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HBinaryArithmetic(HInstruction left, HInstruction right) : super(left, right);
 
   void prepareGvn(HTypeMap types) {
     clearAllSideEffects();
-    // An arithmetic expression can take part in global value
-    // numbering and do not have any side-effects if we know that all
-    // inputs are numbers.
-    if (isBuiltin(types)) {
-      setUseGvn();
-    } else {
-      setAllSideEffects();
-    }
+    setUseGvn();
   }
 
-  bool isBuiltin(HTypeMap types)
-      => left.isNumber(types) && right.isNumber(types);
-
   HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
     if (left.isInteger(types) && right.isInteger(types)) return HType.INTEGER;
-    if (left.isNumber(types)) {
-      if (left.isDouble(types) || right.isDouble(types)) return HType.DOUBLE;
-      return HType.NUMBER;
-    }
-    return HType.UNKNOWN;
-  }
-
-  HType computeDesiredTypeForNonTargetInput(HInstruction input,
-                                            HTypeMap types,
-                                            Compiler compiler) {
-    HType propagatedType = types[this];
-    // If the desired output type should be an integer we want to get two
-    // integers as arguments.
-    if (propagatedType.isInteger()) return HType.INTEGER;
-    // If the outgoing type should be a number we can get that if both inputs
-    // are numbers. If we don't know the outgoing type we try to make it a
-    // number.
-    if (propagatedType.isUnknown() || propagatedType.isNumber()) {
-      return HType.NUMBER;
-    }
-    // Even if the desired outgoing type is not a number we still want the
-    // second argument to be a number if the first one is a number. This will
-    // not help for the outgoing type, but at least the binary arithmetic
-    // operation will not have type problems.
-    // TODO(floitsch): normally we shouldn't request a number, but simply
-    // throw an ArgumentError if it isn't. This would be similar
-    // to the array case.
-    if (input == right && left.isNumber(types)) return HType.NUMBER;
-    return HType.UNKNOWN;
-  }
-
-  HType computeLikelyType(HTypeMap types, Compiler compiler) {
-    if (left.isTypeUnknown(types)) return HType.NUMBER;
-    return HType.UNKNOWN;
+    if (left.isDouble(types)) return HType.DOUBLE;
+    return HType.NUMBER;
   }
 
   BinaryOperation operation(ConstantSystem constantSystem);
 }
 
 class HAdd extends HBinaryArithmetic {
-  HAdd(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HAdd(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitAdd(this);
 
   BinaryOperation operation(ConstantSystem constantSystem)
@@ -1639,22 +1584,10 @@
 }
 
 class HDivide extends HBinaryArithmetic {
-  HDivide(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HDivide(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitDivide(this);
 
-  HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
-    if (left.isNumber(types)) return HType.DOUBLE;
-    return HType.UNKNOWN;
-  }
-
-  HType computeDesiredTypeForNonTargetInput(HInstruction input,
-                                            HTypeMap types,
-                                            Compiler compiler) {
-    // A division can never return an integer. So don't ask for integer inputs.
-    if (isInteger(types)) return HType.UNKNOWN;
-    return super.computeDesiredTypeForNonTargetInput(input, types, compiler);
-  }
+  HType get guaranteedType => HType.DOUBLE;
 
   BinaryOperation operation(ConstantSystem constantSystem)
       => constantSystem.divide;
@@ -1663,21 +1596,8 @@
   bool dataEquals(HInstruction other) => true;
 }
 
-class HModulo extends HBinaryArithmetic {
-  HModulo(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
-  accept(HVisitor visitor) => visitor.visitModulo(this);
-
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.modulo;
-  int typeCode() => HInstruction.MODULO_TYPECODE;
-  bool typeEquals(other) => other is HModulo;
-  bool dataEquals(HInstruction other) => true;
-}
-
 class HMultiply extends HBinaryArithmetic {
-  HMultiply(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HMultiply(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitMultiply(this);
 
   BinaryOperation operation(ConstantSystem operations)
@@ -1688,8 +1608,7 @@
 }
 
 class HSubtract extends HBinaryArithmetic {
-  HSubtract(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HSubtract(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitSubtract(this);
 
   BinaryOperation operation(ConstantSystem constantSystem)
@@ -1722,66 +1641,17 @@
   String toString() => "HSwitch cases = $inputs";
 }
 
-class HTruncatingDivide extends HBinaryArithmetic {
-  HTruncatingDivide(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
-  accept(HVisitor visitor) => visitor.visitTruncatingDivide(this);
-
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.truncatingDivide;
-  int typeCode() => HInstruction.TRUNCATING_DIVIDE_TYPECODE;
-  bool typeEquals(other) => other is HTruncatingDivide;
-  bool dataEquals(HInstruction other) => true;
-}
-
-
 // TODO(floitsch): Should HBinaryArithmetic really be the super class of
 // HBinaryBitOp?
 abstract class HBinaryBitOp extends HBinaryArithmetic {
-  HBinaryBitOp(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
-
-  HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
-    // All bitwise operations on primitive types either produce an
-    // integer or throw an error.
-    if (left.isPrimitive(types)) return HType.INTEGER;
-    return HType.UNKNOWN;
-  }
-
-  HType computeDesiredTypeForNonTargetInput(HInstruction input,
-                                            HTypeMap types,
-                                            Compiler compiler) {
-    HType propagatedType = types[this];
-    // If the outgoing type should be a number we can get that only if both
-    // inputs are integers. If we don't know the outgoing type we try to make
-    // it an integer.
-    if (propagatedType.isUnknown() || propagatedType.isNumber()) {
-      return HType.INTEGER;
-    }
-    return HType.UNKNOWN;
-  }
-
-  HType computeLikelyType(HTypeMap types, Compiler compiler) {
-    if (left.isTypeUnknown(types)) return HType.INTEGER;
-    return HType.UNKNOWN;
-  }
+  HBinaryBitOp(HInstruction left, HInstruction right) : super(left, right);
+  HType get guaranteedType => HType.INTEGER;
 }
 
 class HShiftLeft extends HBinaryBitOp {
-  HShiftLeft(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HShiftLeft(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitShiftLeft(this);
 
-  // Shift left cannot be mapped to the native operator unless the
-  // shift count is guaranteed to be an integer in the [0,31] range.
-  bool isBuiltin(HTypeMap types) {
-    if (!left.isNumber(types) || !right.isConstantInteger()) return false;
-    HConstant rightConstant = right;
-    IntConstant intConstant = rightConstant.constant;
-    int count = intConstant.value;
-    return count >= 0 && count <= 31;
-  }
-
   BinaryOperation operation(ConstantSystem constantSystem)
       => constantSystem.shiftLeft;
   int typeCode() => HInstruction.SHIFT_LEFT_TYPECODE;
@@ -1789,24 +1659,8 @@
   bool dataEquals(HInstruction other) => true;
 }
 
-class HShiftRight extends HBinaryBitOp {
-  HShiftRight(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
-  accept(HVisitor visitor) => visitor.visitShiftRight(this);
-
-  // Shift right cannot be mapped to the native operator easily.
-  bool isBuiltin(HTypeMap types) => false;
-
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.shiftRight;
-  int typeCode() => HInstruction.SHIFT_RIGHT_TYPECODE;
-  bool typeEquals(other) => other is HShiftRight;
-  bool dataEquals(HInstruction other) => true;
-}
-
 class HBitOr extends HBinaryBitOp {
-  HBitOr(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HBitOr(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitBitOr(this);
 
   BinaryOperation operation(ConstantSystem constantSystem)
@@ -1817,8 +1671,7 @@
 }
 
 class HBitAnd extends HBinaryBitOp {
-  HBitAnd(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HBitAnd(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitBitAnd(this);
 
   BinaryOperation operation(ConstantSystem constantSystem)
@@ -1829,8 +1682,7 @@
 }
 
 class HBitXor extends HBinaryBitOp {
-  HBitXor(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+  HBitXor(HInstruction left, HInstruction right) : super(left, right);
   accept(HVisitor visitor) => visitor.visitBitXor(this);
 
   BinaryOperation operation(ConstantSystem constantSystem)
@@ -1840,53 +1692,27 @@
   bool dataEquals(HInstruction other) => true;
 }
 
-abstract class HInvokeUnary extends HInvokeStatic {
-  HInvokeUnary(HStatic target, HInstruction input)
-      : super(<HInstruction>[target, input]);
+abstract class HInvokeUnary extends HInstruction {
+  HInvokeUnary(HInstruction input) : super(<HInstruction>[input]);
 
-  HInstruction get operand => inputs[1];
+  HInstruction get operand => inputs[0];
 
   void prepareGvn(HTypeMap types) {
     clearAllSideEffects();
-    // A unary arithmetic expression can take part in global value
-    // numbering and does not have any side-effects if its input is a
-    // number.
-    if (isBuiltin(types)) {
-      setUseGvn();
-    } else {
-      setAllSideEffects();
-    }
+    setUseGvn();
   }
 
-  bool isBuiltin(HTypeMap types) => operand.isNumber(types);
-
-  HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
-    HType operandType = types[operand];
-    if (operandType.isNumber()) return operandType;
-    return HType.UNKNOWN;
-  }
-
-  HType computeDesiredTypeForNonTargetInput(HInstruction input,
-                                            HTypeMap types,
-                                            Compiler compiler) {
-    HType propagatedType = types[this];
-    // If the outgoing type should be a number (integer, double or both) we
-    // want the outgoing type to be the input too.
-    // If we don't know the outgoing type we try to make it a number.
-    if (propagatedType.isNumber()) return propagatedType;
-    if (propagatedType.isUnknown()) return HType.NUMBER;
-    return HType.UNKNOWN;
-  }
-
-  HType computeLikelyType(HTypeMap types, Compiler compiler) => HType.NUMBER;
-
   UnaryOperation operation(ConstantSystem constantSystem);
 }
 
 class HNegate extends HInvokeUnary {
-  HNegate(HStatic target, HInstruction input) : super(target, input);
+  HNegate(HInstruction input) : super(input);
   accept(HVisitor visitor) => visitor.visitNegate(this);
 
+  HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
+    return types[operand];
+  }
+
   UnaryOperation operation(ConstantSystem constantSystem)
       => constantSystem.negate;
   int typeCode() => HInstruction.NEGATE_TYPECODE;
@@ -1895,28 +1721,10 @@
 }
 
 class HBitNot extends HInvokeUnary {
-  HBitNot(HStatic target, HInstruction input) : super(target, input);
+  HBitNot(HInstruction input) : super(input);
   accept(HVisitor visitor) => visitor.visitBitNot(this);
-
-  HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
-    // All bitwise operations on primitive types either produce an
-    // integer or throw an error.
-    if (operand.isPrimitive(types)) return HType.INTEGER;
-    return HType.UNKNOWN;
-  }
-
-  HType computeDesiredTypeForNonTargetInput(HInstruction input,
-                                            HTypeMap types,
-                                            Compiler compiler) {
-    HType propagatedType = types[this];
-    // Bit operations only work on integers. If there is no desired output
-    // type or if it as a number we want to get an integer as input.
-    if (propagatedType.isUnknown() || propagatedType.isNumber()) {
-      return HType.INTEGER;
-    }
-    return HType.UNKNOWN;
-  }
-
+  
+  HType get guaranteedType => HType.INTEGER;
   UnaryOperation operation(ConstantSystem constantSystem)
       => constantSystem.bitNot;
   int typeCode() => HInstruction.BIT_NOT_TYPECODE;
@@ -1959,7 +1767,7 @@
 }
 
 class HTry extends HControlFlow {
-  HParameterValue exception;
+  HLocalValue exception;
   HBasicBlock catchBlock;
   HBasicBlock finallyBlock;
   HTry() : super(const <HInstruction>[]);
@@ -2082,7 +1890,6 @@
   }
   toString() => 'local ${sourceElement.name}';
   accept(HVisitor visitor) => visitor.visitLocalValue(this);
-  bool isCodeMotionInvariant() => true;
 }
 
 class HParameterValue extends HLocalValue {
@@ -2098,6 +1905,7 @@
   }
   toString() => 'this';
   accept(HVisitor visitor) => visitor.visitThis(this);
+  bool isCodeMotionInvariant() => true;
 }
 
 class HPhi extends HInstruction {
@@ -2190,10 +1998,10 @@
   accept(HVisitor visitor) => visitor.visitPhi(this);
 }
 
-abstract class HRelational extends HInvokeBinary {
+abstract class HRelational extends HInvokeStatic {
   bool usesBoolifiedInterceptor = false;
   HRelational(HStatic target, HInstruction left, HInstruction right)
-      : super(target, left, right);
+      : super(<HInstruction>[target, left, right]);
 
   void prepareGvn(HTypeMap types) {
     clearAllSideEffects();
@@ -2221,7 +2029,7 @@
                                             HTypeMap types,
                                             Compiler compiler) {
     HType propagatedType = types[this];
-    // For all relational operations exept HEquals, we expect to get numbers
+    // For all relational operations except HEquals, we expect to get numbers
     // only. With numbers the outgoing type is a boolean. If something else
     // is desired, then numbers are incorrect, though.
     if (propagatedType.isUnknown() || propagatedType.isBoolean()) {
@@ -2236,6 +2044,11 @@
 
   bool isBuiltin(HTypeMap types)
       => left.isNumber(types) && right.isNumber(types);
+
+  HInstruction get left => inputs[1];
+  HInstruction get right => inputs[2];      
+
+  BinaryOperation operation(ConstantSystem constantSystem);
 }
 
 class HEquals extends HRelational {
@@ -2409,6 +2222,24 @@
     setUseGvn();
   }
 
+  HType computeDesiredTypeForInput(HInstruction input,
+                                   HTypeMap types,
+                                   Compiler compiler) {
+    if (interceptedClasses.length != 1) return HType.UNKNOWN;
+    // If the only class being intercepted is of type number, we
+    // make this interceptor call say it wants that class as input.
+    Element interceptor = interceptedClasses.toList()[0];
+    JavaScriptBackend backend = compiler.backend;
+    if (interceptor == backend.jsNumberClass) {
+      return HType.NUMBER;
+    } else if (interceptor == backend.jsIntClass) {
+      return HType.INTEGER;
+    } else if (interceptor == backend.jsDoubleClass) {
+      return HType.DOUBLE;
+    }
+    return HType.UNKNOWN;
+  }
+
   int typeCode() => HInstruction.INTERCEPTOR_TYPECODE;
   bool typeEquals(other) => other is HInterceptor;
   bool dataEquals(HInterceptor other) {
@@ -2485,48 +2316,22 @@
   bool dataEquals(HIndex other) => true;
 }
 
-class HIndexAssign extends HInvokeStatic {
-  HIndexAssign(HStatic target,
-               HInstruction receiver,
+class HIndexAssign extends HInstruction {
+  HIndexAssign(HInstruction receiver,
                HInstruction index,
                HInstruction value)
-      : super(<HInstruction>[target, receiver, index, value]);
-  toString() => 'index assign operator';
+      : super(<HInstruction>[receiver, index, value]);
+  String toString() => 'index assign operator';
   accept(HVisitor visitor) => visitor.visitIndexAssign(this);
 
-  HInstruction get receiver => inputs[1];
-  HInstruction get index => inputs[2];
-  HInstruction get value => inputs[3];
+  HInstruction get receiver => inputs[0];
+  HInstruction get index => inputs[1];
+  HInstruction get value => inputs[2];
 
   void prepareGvn(HTypeMap types) {
     clearAllSideEffects();
-    if (isBuiltin(types)) {
-      setChangesIndex();
-    } else {
-      setAllSideEffects();
-    }
+    setChangesIndex();
   }
-
-  // Note, that we don't have a computeTypeFromInputTypes, since [HIndexAssign]
-  // is never used as input.
-
-  HType computeDesiredTypeForNonTargetInput(HInstruction input,
-                                            HTypeMap types,
-                                            Compiler compiler) {
-    if (input == receiver &&
-        (index.isTypeUnknown(types) || index.isNumber(types))) {
-      return HType.MUTABLE_ARRAY;
-    }
-    // The index should be an int when the receiver is a string or array.
-    // However it turns out that inserting an integer check in the optimized
-    // version is cheaper than having another bailout case. This is true,
-    // because the integer check will simply throw if it fails.
-    return HType.UNKNOWN;
-  }
-
-  bool isBuiltin(HTypeMap types)
-      => receiver.isMutableArray(types) && index.isInteger(types);
-  bool isJsStatement(HTypeMap types) => !isBuiltin(types);
 }
 
 class HIs extends HInstruction {
@@ -2909,7 +2714,7 @@
 
 class HTryBlockInformation implements HStatementInformation {
   final HStatementInformation body;
-  final HParameterValue catchVariable;
+  final HLocalValue catchVariable;
   final HStatementInformation catchBlock;
   final HStatementInformation finallyBlock;
   HTryBlockInformation(this.body,
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 0af7a42..769b3ef 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -97,7 +97,10 @@
       // In order to generate correct code for the bailout version, we did not
       // propagate types from the instruction to the type guard. We do it
       // now to be able to optimize further.
-      work.guards.forEach((HTypeGuard guard) { guard.isEnabled = true; });
+      work.guards.forEach((HTypeGuard guard) {
+        guard.bailoutTarget.isEnabled = false;
+        guard.isEnabled = true;
+      });
       // We also need to insert range and integer checks for the type
       // guards. Now that they claim to have a certain type, some
       // depending instructions might become builtin (like native array
@@ -197,14 +200,18 @@
   }
 
   HInstruction visitInvokeUnary(HInvokeUnary node) {
-    HInstruction operand = node.operand;
+    HInstruction folded =
+        foldUnary(node.operation(constantSystem), node.operand);
+    return folded != null ? folded : node;
+  }
+
+  HInstruction foldUnary(UnaryOperation operation, HInstruction operand) {
     if (operand is HConstant) {
-      UnaryOperation operation = node.operation(constantSystem);
       HConstant receiver = operand;
       Constant folded = operation.fold(receiver.constant);
       if (folded != null) return graph.addConstant(folded);
     }
-    return node;
+    return null;
   }
 
   HInstruction handleInterceptorCall(HInvokeDynamicMethod node) {
@@ -228,12 +235,21 @@
           node.selector, node.inputs.getRange(1, node.inputs.length - 1));
     }
 
-    Selector selector = node.selector;
-
-    if (node.isIndexOperatorOnIndexablePrimitive(types)) {
-      return new HIndex(node.inputs[1], node.inputs[2]);
+    // Try constant folding the instruction.
+    Operation operation = node.specializer.operation(constantSystem);
+    if (operation != null) {
+      HInstruction instruction = node.inputs.length == 2
+          ? foldUnary(operation, node.inputs[1])
+          : foldBinary(operation, node.inputs[1], node.inputs[2]);
+      if (instruction != null) return instruction;
     }
 
+    // Try converting the instruction to a builtin instruction.
+    HInstruction instruction =
+        node.specializer.tryConvertToBuiltin(node, types);
+    if (instruction != null) return instruction;
+
+    Selector selector = node.selector;
     SourceString selectorName = selector.name;
     Element target;
     if (input.isExtendableArray(types)) {
@@ -350,24 +366,24 @@
     return node;
   }
 
-  HInstruction visitIndexAssign(HIndexAssign node) {
-    if (!node.receiver.canBePrimitive(types)) {
-      Selector selector = new Selector.indexSet();
-      return fromPrimitiveInstructionToDynamicInvocation(node, selector);
-    }
-    return node;
-  }
-
-  HInstruction visitInvokeBinary(HInvokeBinary node) {
-    HInstruction left = node.left;
-    HInstruction right = node.right;
-    BinaryOperation operation = node.operation(constantSystem);
+  HInstruction foldBinary(BinaryOperation operation,
+                          HInstruction left,
+                          HInstruction right) {
     if (left is HConstant && right is HConstant) {
       HConstant op1 = left;
       HConstant op2 = right;
       Constant folded = operation.fold(op1.constant, op2.constant);
       if (folded != null) return graph.addConstant(folded);
     }
+    return null;
+  }
+
+  HInstruction visitInvokeBinary(HInvokeBinary node) {
+    HInstruction left = node.left;
+    HInstruction right = node.right;
+    BinaryOperation operation = node.operation(constantSystem);
+    HConstant folded = foldBinary(operation, left, right);
+    if (folded != null) return folded;
 
     if (!left.canBePrimitive(types)
         && operation.isUserDefinable()
@@ -416,7 +432,7 @@
     return super.visitRelational(node);
   }
 
-  HInstruction handleIdentityCheck(HInvokeBinary node) {
+  HInstruction handleIdentityCheck(HRelational node) {
     HInstruction left = node.left;
     HInstruction right = node.right;
     HType leftType = types[left];
@@ -753,6 +769,9 @@
     }
 
     if (constantInterceptor == null) return node;
+    if (constantInterceptor == work.element.getEnclosingClass()) {
+      return graph.thisInstruction;
+    }
 
     Constant constant = new ConstructedConstant(
         constantInterceptor.computeType(compiler), <Constant>[]);
@@ -832,7 +851,6 @@
     }
     index = insertBoundsCheck(node, node.receiver, index);
     node.changeUse(node.index, index);
-    assert(node.isBuiltin(types));
   }
 
   void visitInvokeDynamicMethod(HInvokeDynamicMethod node) {
@@ -1484,8 +1502,20 @@
 
   void visitInterceptor(HInterceptor interceptor) {
     HInstruction receiver = interceptor.receiver;
+    JavaScriptBackend backend = compiler.backend;
     for (var user in receiver.usedBy) {
       if (user is HInterceptor && interceptor.dominates(user)) {
+        Set<ClassElement> otherIntercepted = user.interceptedClasses;
+        // If the dominated interceptor intercepts the int class or
+        // the double class, we make sure these classes are also being
+        // intercepted by the dominating interceptor. Otherwise, the
+        // dominating interceptor could just intercept the number
+        // class and therefore not implement the methods in the int or
+        // double class.
+        if (otherIntercepted.contains(backend.jsIntClass)
+            || otherIntercepted.contains(backend.jsDoubleClass)) {
+          interceptor.interceptedClasses.addAll(user.interceptedClasses);
+        }
         user.interceptedClasses = interceptor.interceptedClasses;
       }
     }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart b/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
index 0053023..1e57acb 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
@@ -29,6 +29,7 @@
 part 'builder.dart';
 part 'codegen.dart';
 part 'codegen_helpers.dart';
+part 'invoke_dynamic_specializers.dart';
 part 'js_names.dart';
 part 'nodes.dart';
 part 'optimize.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
index 0b46840..adb9dd8 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
@@ -225,15 +225,24 @@
     return "Boolify: ${temporaryId(node.inputs[0])}";
   }
 
-  String visitAdd(HAdd node) => visitInvokeStatic(node);
+  String handleBinaryArithmetic(HBinaryArithmetic node, String op) {
+    String left = temporaryId(node.left);
+    String right= temporaryId(node.right);
+    return '$left $op $right';
+  }
 
-  String visitBitAnd(HBitAnd node) => visitInvokeStatic(node);
+  String visitAdd(HAdd node) => handleBinaryArithmetic(node, '+');
 
-  String visitBitNot(HBitNot node) => visitInvokeStatic(node);
+  String visitBitAnd(HBitAnd node) => handleBinaryArithmetic(node, '&');
 
-  String visitBitOr(HBitOr node) => visitInvokeStatic(node);
+  String visitBitNot(HBitNot node) {
+    String operand = temporaryId(node.operand);
+    return "~$operand";
+  }
 
-  String visitBitXor(HBitXor node) => visitInvokeStatic(node);
+  String visitBitOr(HBitOr node) => handleBinaryArithmetic(node, '|');
+
+  String visitBitXor(HBitXor node) => handleBinaryArithmetic(node, '^');
 
   String visitBoundsCheck(HBoundsCheck node) {
     String lengthId = temporaryId(node.length);
@@ -259,7 +268,7 @@
     return "Continue: (B${target.id})";
   }
 
-  String visitDivide(HDivide node) => visitInvokeStatic(node);
+  String visitDivide(HDivide node) => handleBinaryArithmetic(node, '/');
 
   String visitEquals(HEquals node) => visitInvokeStatic(node);
 
@@ -312,7 +321,12 @@
     return "Index: $receiver[$index]";
   }
 
-  String visitIndexAssign(HIndexAssign node) => visitInvokeStatic(node);
+  String visitIndexAssign(HIndexAssign node) {
+    String receiver = temporaryId(node.receiver);
+    String index = temporaryId(node.index);
+    String value = temporaryId(node.value);
+    return "IndexAssign: $receiver[$index] = $value";
+  }
 
   String visitIntegerCheck(HIntegerCheck node) {
     String value = temporaryId(node.value);
@@ -389,11 +403,12 @@
     return "While ($conditionId): (B${bodyBlock.id}) then (B${exitBlock.id})";
   }
 
-  String visitModulo(HModulo node) => visitInvokeStatic(node);
+  String visitMultiply(HMultiply node) => handleBinaryArithmetic(node, '*');
 
-  String visitMultiply(HMultiply node) => visitInvokeStatic(node);
-
-  String visitNegate(HNegate node) => visitInvokeStatic(node);
+  String visitNegate(HNegate node) {
+    String operand = temporaryId(node.operand);
+    return "-$operand";
+  }
 
   String visitNot(HNot node) => "Not: ${temporaryId(node.inputs[0])}";
 
@@ -418,9 +433,7 @@
 
   String visitReturn(HReturn node) => "Return ${temporaryId(node.inputs[0])}";
 
-  String visitShiftLeft(HShiftLeft node) => visitInvokeStatic(node);
-
-  String visitShiftRight(HShiftRight node) => visitInvokeStatic(node);
+  String visitShiftLeft(HShiftLeft node) => handleBinaryArithmetic(node, '<<');
 
   String visitStatic(HStatic node)
       => "Static ${node.element.name.slowToString()}";
@@ -439,7 +452,7 @@
     return "StringConcat: $leftId + $rightId";
   }
 
-  String visitSubtract(HSubtract node) => visitInvokeStatic(node);
+  String visitSubtract(HSubtract node) => handleBinaryArithmetic(node, '-');
 
   String visitSwitch(HSwitch node) {
     StringBuffer buf = new StringBuffer();
@@ -461,10 +474,6 @@
 
   String visitThrow(HThrow node) => "Throw ${temporaryId(node.inputs[0])}";
 
-  String visitTruncatingDivide(HTruncatingDivide node) {
-    return visitInvokeStatic(node);
-  }
-
   String visitExitTry(HExitTry node) {
     return "Exit try";
   }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart b/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
index 31d511a..ee0f1a1 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
@@ -41,13 +41,14 @@
   }
 
   void considerForArgumentTypeOptimization(HInstruction instruction) {
-    if (instruction is !HBinaryArithmetic) return;
     // Update the pending optimizations map based on the potentially
     // new types of the operands. If the operand types no longer allow
     // us to optimize, we remove the pending optimization.
-    HBinaryArithmetic arithmetic = instruction;
-    HInstruction left = arithmetic.left;
-    HInstruction right = arithmetic.right;
+    if (instruction is !HInvokeDynamicMethod) return;
+    HInvokeDynamicMethod invoke = instruction;
+    if (instruction.specializer is !BinaryArithmeticSpecializer) return;
+    HInstruction left = instruction.inputs[1];
+    HInstruction right = instruction.inputs[2];
     if (left.isNumber(types) && !right.isNumber(types)) {
       pendingOptimizations[instruction] = () {
         // This callback function is invoked after we're done
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart b/sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart
index 2aa36a9..b7ab115 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart
@@ -392,22 +392,19 @@
     return swapTemp;
   }
 
-  VariableNames(Map<Element, String> parameterNames)
+  VariableNames()
     : ownName = new Map<HInstruction, String>(),
       copyHandlers = new Map<HBasicBlock, CopyHandler>(),
       allUsedNames = new Set<String>(),
-      swapTemp = computeFreshWithPrefix("t", parameterNames),
-      stateName = computeFreshWithPrefix("state", parameterNames);
+      swapTemp = computeFreshWithPrefix("t"),
+      stateName = computeFreshWithPrefix("state");
 
   int get numberOfVariables => allUsedNames.length;
 
   /** Returns a fresh variable with the given prefix. */
-  static String computeFreshWithPrefix(String prefix,
-                                       Map<Element, String> parameterNames) {
-    Set<String> parameters = new Set<String>.from(parameterNames.values);
+  static String computeFreshWithPrefix(String prefix) {
     String name = '${prefix}0';
     int i = 1;
-    while (parameters.contains(name)) name = '$prefix${i++}';
     return name;
   }
 
@@ -443,14 +440,12 @@
   final VariableNames names;
   final Compiler compiler;
   final Set<String> usedNames;
-  final Map<Element, String> parameterNames;
   final List<String> freeTemporaryNames;
   int temporaryIndex = 0;
   static final RegExp regexp = new RegExp('t[0-9]+');
 
   VariableNamer(LiveEnvironment environment,
                 this.names,
-                this.parameterNames,
                 this.compiler)
     : usedNames = new Set<String>(),
       freeTemporaryNames = new List<String>() {
@@ -516,13 +511,7 @@
       if (name != null) return addAllocatedName(instruction, name);
     }
 
-    if (instruction is HParameterValue
-        && instruction.sourceElement.enclosingElement.isNative()) {
-      // The dom/html libraries have inline JS code that reference	
-      // parameter names directly. Long-term such code will be rejected.
-      // Now, just don't mangle the parameter name.
-      name = instruction.sourceElement.name.slowToString();
-    } else if (instruction.sourceElement != null) {
+    if (instruction.sourceElement != null) {
       name = allocateWithHint(instruction.sourceElement.name.slowToString());
     } else {
       // We could not find an element for the instruction. If the
@@ -539,9 +528,6 @@
   }
 
   String addAllocatedName(HInstruction instruction, String name) {
-    if (instruction is HParameterValue) {
-      parameterNames[instruction.sourceElement] = name;
-    }
     usedNames.add(name);
     names.addNameUsed(name);
     names.ownName[instruction] = name;
@@ -584,17 +570,14 @@
   final Map<HBasicBlock, LiveEnvironment> liveInstructions;
   final Map<HInstruction, LiveInterval> liveIntervals;
   final Set<HInstruction> generateAtUseSite;
-  final Map<Element, String> parameterNames;
 
   final VariableNames names;
 
   SsaVariableAllocator(this.compiler,
                        this.liveInstructions,
                        this.liveIntervals,
-                       this.generateAtUseSite,
-                       parameterNames)
-    : this.names = new VariableNames(parameterNames),
-      this.parameterNames = parameterNames;
+                       this.generateAtUseSite)
+    : this.names = new VariableNames();
 
   void visitGraph(HGraph graph) {
     visitDominatorTree(graph);
@@ -602,7 +585,7 @@
 
   void visitBasicBlock(HBasicBlock block) {
     VariableNamer namer = new VariableNamer(
-        liveInstructions[block], names, parameterNames, compiler);
+        liveInstructions[block], names, compiler);
 
     block.forEachPhi((HPhi phi) {
       handlePhi(phi, namer);
@@ -618,11 +601,8 @@
    * have no users or that are generated at use site does not need a name.
    */
   bool needsName(HInstruction instruction) {
-    // TODO(ngeoffray): locals/parameters are being generated at use site,
-    // but we need a name for them. We should probably not make
-    // them generate at use site to make things simpler.
     if (instruction is HThis) return false;
-    if (instruction is HLocalValue) return true;
+    if (instruction is HParameterValue) return true;
     if (instruction.usedBy.isEmpty) return false;
     if (generateAtUseSite.contains(instruction)) return false;
     // A [HCheck] instruction that has control flow needs a name only if its
diff --git a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
index f317de4..2d49054 100644
--- a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
@@ -48,8 +48,10 @@
   R visitLiteralString(LiteralString node) => visitStringNode(node);
   R visitStringJuxtaposition(StringJuxtaposition node) => visitStringNode(node);
   R visitLoop(Loop node) => visitStatement(node);
+  R visitMixinApplication(MixinApplication node) => visitNode(node);
   R visitModifiers(Modifiers node) => visitNode(node);
   R visitNamedArgument(NamedArgument node) => visitExpression(node);
+  R visitNamedMixinApplication(NamedMixinApplication node) => visitNode(node);
   R visitNewExpression(NewExpression node) => visitExpression(node);
   R visitNodeList(NodeList node) => visitNode(node);
   R visitOperator(Operator node) => visitIdentifier(node);
@@ -144,7 +146,7 @@
   ContinueStatement asContinueStatement() => null;
   DoWhile asDoWhile() => null;
   EmptyStatement asEmptyStatement() => null;
-  Export AsExport() => null;
+  Export asExport() => null;
   Expression asExpression() => null;
   ExpressionStatement asExpressionStatement() => null;
   For asFor() => null;
@@ -153,10 +155,10 @@
   FunctionExpression asFunctionExpression() => null;
   Identifier asIdentifier() => null;
   If asIf() => null;
-  Import AsImport() => null;
+  Import asImport() => null;
   Label asLabel() => null;
   LabeledStatement asLabeledStatement() => null;
-  LibraryName AsLibraryName() => null;
+  LibraryName asLibraryName() => null;
   LiteralBool asLiteralBool() => null;
   LiteralDouble asLiteralDouble() => null;
   LiteralInt asLiteralInt() => null;
@@ -165,13 +167,14 @@
   LiteralMapEntry asLiteralMapEntry() => null;
   LiteralNull asLiteralNull() => null;
   LiteralString asLiteralString() => null;
+  MixinApplication asMixinApplication() => null;
   Modifiers asModifiers() => null;
   NamedArgument asNamedArgument() => null;
   NodeList asNodeList() => null;
   Operator asOperator() => null;
   ParenthesizedExpression asParenthesizedExpression() => null;
-  Part AsPart() => null;
-  PartOf AsPartOf() => null;
+  Part asPart() => null;
+  PartOf asPartOf() => null;
   Return asReturn() => null;
   ScriptTag asScriptTag() => null;
   Send asSend() => null;
@@ -198,7 +201,7 @@
 class ClassNode extends Node {
   final Modifiers modifiers;
   final Identifier name;
-  final TypeAnnotation superclass;
+  final Node superclass;
   final NodeList interfaces;
   final NodeList typeParameters;
   final NodeList body;
@@ -235,6 +238,54 @@
   Token getEndToken() => endToken;
 }
 
+class MixinApplication extends Node {
+  final Modifiers modifiers;
+  final TypeAnnotation superclass;
+  final NodeList mixins;
+
+  MixinApplication(this.modifiers, this.superclass, this.mixins);
+
+  MixinApplication asMixinApplication() => this;
+
+  accept(Visitor visitor) => visitor.visitMixinApplication(this);
+
+  visitChildren(Visitor visitor) {
+    if (modifiers != null) modifiers.accept(visitor);
+    if (superclass != null) superclass.accept(visitor);
+    if (mixins != null) mixins.accept(visitor);
+  }
+
+  Token getBeginToken() => superclass.getBeginToken();
+  Token getEndToken() => mixins.getEndToken();
+}
+
+// TODO(kasperl): Let this share some structure with the typedef for function
+// type aliases?
+class NamedMixinApplication extends Node {
+  final Identifier name;
+  final NodeList typeParameters;
+  final MixinApplication mixinApplication;
+
+  final Token typedefKeyword;
+  final Token endToken;
+
+  NamedMixinApplication(this.name, this.typeParameters, this.mixinApplication,
+                        this.typedefKeyword, this.endToken);
+
+  NamedMixinApplication asNamedMixinApplication() => this;
+
+  accept(Visitor visitor) => visitor.visitNamedMixinApplication(this);
+
+  visitChildren(Visitor visitor) {
+    name.accept(visitor);
+    if (typeParameters != null) typeParameters.accept(visitor);
+    mixinApplication.accept(visitor);
+  }
+
+  Token getBeginToken() => typedefKeyword;
+  Token getEndToken() => endToken;
+}
+
 abstract class Expression extends Node {
   Expression();
 
diff --git a/sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart b/sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart
index 683ab5a..129c637 100644
--- a/sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart
+++ b/sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart
@@ -263,6 +263,10 @@
         {"value" : node.token.slowToString()});
   }
 
+  visitMixinApplication(MixinApplication node) {
+    visitNodeWithChildren(node, "MixinApplication");
+  }
+
   visitModifiers(Modifiers node) {
     visitNodeWithChildren(node, "Modifiers");
   }
@@ -271,6 +275,10 @@
     visitNodeWithChildren(node, "NamedArgument");
   }
 
+  visitNamedMixinApplication(NamedMixinApplication node) {
+    visitNodeWithChildren(node, "NamedMixinApplication");
+  }
+
   visitNewExpression(NewExpression node) {
     visitNodeWithChildren(node, "NewExpression");
   }
diff --git a/sdk/lib/_internal/compiler/implementation/tree/unparser.dart b/sdk/lib/_internal/compiler/implementation/tree/unparser.dart
index 69c5375..4a0e6e7 100644
--- a/sdk/lib/_internal/compiler/implementation/tree/unparser.dart
+++ b/sdk/lib/_internal/compiler/implementation/tree/unparser.dart
@@ -81,6 +81,27 @@
     unparseClassWithBody(node, node.body.nodes);
   }
 
+  visitMixinApplication(MixinApplication node) {
+    if (!node.modifiers.nodes.isEmpty) {
+      visit(node.modifiers);
+      sb.add(' ');
+    }
+    visit(node.superclass);
+    sb.add(' with ');
+    visit(node.mixins);
+  }
+
+  visitNamedMixinApplication(NamedMixinApplication node) {
+    sb.add('typedef ');
+    visit(node.name);
+    if (node.typeParameters != null) {
+      visit(node.typeParameters);
+    }
+    sb.add(' = ');
+    visit(node.mixinApplication);
+    sb.add(';');
+  }
+
   visitConditional(Conditional node) {
     visit(node.condition);
     add(node.questionToken.value);
diff --git a/sdk/lib/_internal/compiler/implementation/typechecker.dart b/sdk/lib/_internal/compiler/implementation/typechecker.dart
index b89ce75..4c49b74 100644
--- a/sdk/lib/_internal/compiler/implementation/typechecker.dart
+++ b/sdk/lib/_internal/compiler/implementation/typechecker.dart
@@ -800,6 +800,14 @@
     fail(node);
   }
 
+  DartType visitMixinApplication(MixinApplication node) {
+    fail(node);
+  }
+
+  DartType visitNamedMixinApplication(NamedMixinApplication node) {
+    fail(node);
+  }
+
   DartType visitDoWhile(DoWhile node) {
     StatementType bodyType = analyze(node.body);
     checkCondition(node.condition);
diff --git a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
index eb5f364..fae1650 100644
--- a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
@@ -32,6 +32,7 @@
   final ClassElement element;
 
   ClassBaseType(this.element);
+
   bool operator ==(BaseType other) {
     if (identical(this, other)) return true;
     if (other is! ClassBaseType) return false;
@@ -194,14 +195,15 @@
 class ConcreteTypeCartesianProduct
     extends Iterable<ConcreteTypesEnvironment> {
   final ConcreteTypesInferrer inferrer;
-  final BaseType baseTypeOfThis;
+  final ClassElement typeOfThis;
   final Map<Element, ConcreteType> concreteTypes;
-  ConcreteTypeCartesianProduct(this.inferrer, this.baseTypeOfThis,
+  ConcreteTypeCartesianProduct(this.inferrer, this.typeOfThis,
                                this.concreteTypes);
   Iterator get iterator => concreteTypes.isEmpty
-      ? [new ConcreteTypesEnvironment(inferrer, baseTypeOfThis)].iterator
-      : new ConcreteTypeCartesianProductIterator(inferrer, baseTypeOfThis,
-                                                 concreteTypes);
+      ? [new ConcreteTypesEnvironment(inferrer, new ClassBaseType(typeOfThis))]
+            .iterator
+      : new ConcreteTypeCartesianProductIterator(inferrer,
+            new ClassBaseType(typeOfThis), concreteTypes);
   String toString() {
     List<ConcreteTypesEnvironment> cartesianProduct =
         new List<ConcreteTypesEnvironment>.from(this);
@@ -647,7 +649,7 @@
    * of [receiverType].
    */
   ConcreteType getSendReturnType(FunctionElement function,
-                                 BaseType receiverType,
+                                 ClassElement receiverType,
                                  ArgumentsTypes argumentsTypes) {
     ConcreteType result = emptyConcreteType;
     Map<Element, ConcreteType> argumentMap =
@@ -656,6 +658,7 @@
     if (argumentMap == null) {
       return emptyConcreteType;
     }
+
     argumentMap.forEach(augmentParameterType);
     ConcreteTypeCartesianProduct product =
         new ConcreteTypeCartesianProduct(this, receiverType, argumentMap);
@@ -675,62 +678,81 @@
                                                 ArgumentsTypes argumentsTypes) {
     final Map<Element, ConcreteType> result = new Map<Element, ConcreteType>();
     final FunctionSignature signature = function.computeSignature(compiler);
-    // too many arguments
+
+    // guard 1: too many arguments
     if (argumentsTypes.length > signature.parameterCount) {
       return null;
     }
-    // not enough arguments
+    // guard 2: not enough arguments
     if (argumentsTypes.positional.length < signature.requiredParameterCount) {
       return null;
     }
-    final HasNextIterator<ConcreteType> remainingPositionalArguments =
-        new HasNextIterator<ConcreteType>(argumentsTypes.positional.iterator);
+    // guard 3: too many positional arguments
+    if (signature.optionalParametersAreNamed &&
+        argumentsTypes.positional.length > signature.requiredParameterCount) {
+      return null;
+    }
+
+    handleLeftoverOptionalParameter(Element parameter) {
+      // TODO(polux): use default value whenever available
+      // TODO(polux): add a marker to indicate whether an argument was provided
+      //     in order to handle "?parameter" tests
+      result[parameter] = singletonConcreteType(const NullBaseType());
+    }
+
+    final Iterator<ConcreteType> remainingPositionalArguments =
+        argumentsTypes.positional.iterator;
     // we attach each positional parameter to its corresponding positional
     // argument
     for (Link<Element> requiredParameters = signature.requiredParameters;
-         !requiredParameters.isEmpty;
-         requiredParameters = requiredParameters.tail) {
+        !requiredParameters.isEmpty;
+        requiredParameters = requiredParameters.tail) {
       final Element requiredParameter = requiredParameters.head;
-      // we know next() is defined because of the guard above
-      result[requiredParameter] = remainingPositionalArguments.next();
+      // we know moveNext() succeeds because of guard 2
+      remainingPositionalArguments.moveNext();
+      result[requiredParameter] = remainingPositionalArguments.current;
     }
-    // we attach the remaining positional arguments to their corresponding
-    // named arguments
-    Link<Element> remainingNamedParameters = signature.optionalParameters;
-    while (remainingPositionalArguments.hasNext) {
-      final Element namedParameter = remainingNamedParameters.head;
-      result[namedParameter] = remainingPositionalArguments.next();
-      // we know tail is defined because of the guard above
-      remainingNamedParameters = remainingNamedParameters.tail;
+    if (signature.optionalParametersAreNamed) {
+      // we build a map out of the remaining named parameters
+      Link<Element> remainingOptionalParameters = signature.optionalParameters;
+      final Map<SourceString, Element> leftOverNamedParameters =
+          new Map<SourceString, Element>();
+      for (;
+           !remainingOptionalParameters.isEmpty;
+           remainingOptionalParameters = remainingOptionalParameters.tail) {
+        final Element namedParameter = remainingOptionalParameters.head;
+        leftOverNamedParameters[namedParameter.name] = namedParameter;
+      }
+      // we attach the named arguments to their corresponding optional
+      // parameters
+      for (Identifier identifier in argumentsTypes.named.keys) {
+        final ConcreteType concreteType = argumentsTypes.named[identifier];
+        SourceString source = identifier.source;
+        final Element namedParameter = leftOverNamedParameters[source];
+        // unexisting or already used named parameter
+        if (namedParameter == null) return null;
+        result[namedParameter] = concreteType;
+        leftOverNamedParameters.remove(source);
+      }
+      leftOverNamedParameters.forEach((_, Element parameter) {
+        handleLeftoverOptionalParameter(parameter);
+      });
+    } else { // optional parameters are positional
+      // we attach the remaining positional arguments to their corresponding
+      // optional parameters
+      Link<Element> remainingOptionalParameters = signature.optionalParameters;
+      while (remainingPositionalArguments.moveNext()) {
+        final Element optionalParameter = remainingOptionalParameters.head;
+        result[optionalParameter] = remainingPositionalArguments.current;
+        // we know tail is defined because of guard 1
+        remainingOptionalParameters = remainingOptionalParameters.tail;
+      }
+      for (;
+           !remainingOptionalParameters.isEmpty;
+           remainingOptionalParameters = remainingOptionalParameters.tail) {
+        handleLeftoverOptionalParameter(remainingOptionalParameters.head);
+      }
     }
-    // we build a map out of the remaining named parameters
-    final Map<SourceString, Element> leftOverNamedParameters =
-        new Map<SourceString, Element>();
-    for (;
-         !remainingNamedParameters.isEmpty;
-         remainingNamedParameters = remainingNamedParameters.tail) {
-      final Element namedParameter = remainingNamedParameters.head;
-      leftOverNamedParameters[namedParameter.name] = namedParameter;
-    }
-    // we attach the named arguments to their corresponding named paramaters
-    // (we don't use foreach because we want to be able to return early)
-    for (Identifier identifier in argumentsTypes.named.keys) {
-      final ConcreteType concreteType = argumentsTypes.named[identifier];
-      SourceString source = identifier.source;
-      final Element namedParameter = leftOverNamedParameters[source];
-      // unexisting or already used named parameter
-      if (namedParameter == null) return null;
-      result[namedParameter] = concreteType;
-      leftOverNamedParameters.remove(source);
-    };
-    // we use null for each unused named parameter
-    // TODO(polux): use default value whenever available
-    // TODO(polux): add a marker to indicate whether an argument was provided
-    //     in order to handle "?parameter" tests
-    leftOverNamedParameters.forEach((_, Element namedParameter) {
-      result[namedParameter] =
-          singletonConcreteType(const NullBaseType());
-    });
     return result;
   }
 
@@ -815,7 +837,7 @@
           new Selector.callDefaultConstructor(enclosingClass.getLibrary()));
         final superClassConcreteType = singletonConcreteType(
             new ClassBaseType(enclosingClass));
-        getSendReturnType(target, new ClassBaseType(enclosingClass),
+        getSendReturnType(target, enclosingClass,
             new ArgumentsTypes(new List(), new Map()));
       }
     }
@@ -1051,8 +1073,7 @@
       // exceptions for instance, we need to do it by uncommenting the following
       // line.
       // inferrer.addCaller(setter, currentMethod);
-      BaseType baseReceiverType = new ClassBaseType(receiver.enclosingElement);
-      inferrer.getSendReturnType(setter, baseReceiverType,
+      inferrer.getSendReturnType(setter, receiver.enclosingElement,
           new ArgumentsTypes([argumentType], new Map()));
     }
     return argumentType;
@@ -1062,7 +1083,7 @@
                               SourceString name) {
     ConcreteType receiverType = analyze(receiver);
 
-    void augmentField(BaseType baseReceiverType, Element member) {
+    void augmentField(ClassElement receiverType, Element member) {
       if (member.isField()) {
         inferrer.augmentFieldType(member, argumentType);
       } else if (member.isAbstractField()){
@@ -1074,7 +1095,7 @@
         // exceptions for instance, we need to do it by uncommenting the
         // following line.
         // inferrer.addCaller(setter, currentMethod);
-        inferrer.getSendReturnType(setter, baseReceiverType,
+        inferrer.getSendReturnType(setter, receiverType,
             new ArgumentsTypes([argumentType], new Map()));
       }
       // since this is a sendSet we ignore non-fields
@@ -1083,9 +1104,8 @@
     if (receiverType.isUnkown()) {
       for (Element member in inferrer.getMembersByName(name)) {
         if (!(member.isField() || member.isAbstractField())) continue;
-        Element classElem = member.getEnclosingClass();
-        BaseType baseReceiverType = new ClassBaseType(classElem);
-        augmentField(baseReceiverType, member);
+        Element cls = member.getEnclosingClass();
+        augmentField(cls, member);
       }
     } else {
       for (BaseType baseReceiverType in receiverType.baseTypes) {
@@ -1093,7 +1113,7 @@
         ClassBaseType baseReceiverClassType = baseReceiverType;
         Element member = baseReceiverClassType.element.lookupMember(name);
         if (member != null) {
-          augmentField(baseReceiverClassType, member);
+          augmentField(baseReceiverClassType.element, member);
         }
       }
     }
@@ -1197,8 +1217,8 @@
     Element constructor = elements[node.send];
     inferrer.addCaller(constructor, currentMethod);
     ClassElement cls = constructor.enclosingElement;
-    return inferrer.getSendReturnType(constructor,
-        new ClassBaseType(cls), analyzeArguments(node.send.arguments));
+    return inferrer.getSendReturnType(constructor, cls,
+                                      analyzeArguments(node.send.arguments));
   }
 
   ConcreteType visitLiteralList(LiteralList node) {
@@ -1366,11 +1386,11 @@
     return inferrer.getFieldType(field);
   }
 
-  ConcreteType analyzeGetterSend(BaseType baseReceiverType,
+  ConcreteType analyzeGetterSend(ClassElement receiverType,
                                  FunctionElement getter) {
       inferrer.addCaller(getter, currentMethod);
       return inferrer.getSendReturnType(getter,
-                                        baseReceiverType,
+                                        receiverType,
                                         new ArgumentsTypes([], new Map()));
   }
 
@@ -1388,9 +1408,8 @@
           return analyzeFieldRead(element);
         } else {
           assert(element.isGetter());
-          ClassBaseType baseReceiverType =
-              new ClassBaseType(element.enclosingElement);
-          return analyzeGetterSend(baseReceiverType, element);
+          ClassElement receiverType = element.enclosingElement;
+          return analyzeGetterSend(receiverType, element);
         }
       }
     } else {
@@ -1398,7 +1417,7 @@
       assert(node.receiver != null);
 
       ConcreteType result = inferrer.emptyConcreteType;
-      void augmentResult(BaseType baseReceiverType, Element member) {
+      void augmentResult(ClassElement baseReceiverType, Element member) {
         if (member.isField()) {
           result = inferrer.union(result, analyzeFieldRead(member));
         } else if (member.isAbstractField()){
@@ -1417,18 +1436,18 @@
             inferrer.getMembersByName(node.selector.asIdentifier().source);
         for (Element member in members) {
           if (!(member.isField() || member.isAbstractField())) continue;
-          Element classElement = member.getEnclosingClass();
-          ClassBaseType baseReceiverType = new ClassBaseType(classElement);
-          augmentResult(baseReceiverType, member);
+          Element cls = member.getEnclosingClass();
+          augmentResult(cls, member);
         }
       } else {
         for (BaseType baseReceiverType in receiverType.baseTypes) {
           if (!baseReceiverType.isNull()) {
             ClassBaseType classBaseType = baseReceiverType;
-            Element getterOrField = classBaseType.element
-                .lookupMember(node.selector.asIdentifier().source);
+            ClassElement cls = classBaseType.element;
+            Element getterOrField =
+                cls.lookupMember(node.selector.asIdentifier().source);
             if (getterOrField != null) {
-              augmentResult(baseReceiverType, getterOrField);
+              augmentResult(cls, getterOrField);
             }
           }
         }
@@ -1455,26 +1474,23 @@
         if (!element.isFunction()) continue;
         FunctionElement method = element;
         inferrer.addCaller(method, currentMethod);
-        Element classElem = method.enclosingElement;
-        ClassBaseType baseReceiverType = new ClassBaseType(classElem);
+        Element cls = method.enclosingElement;
         result = inferrer.union(
             result,
-            inferrer.getSendReturnType(method,baseReceiverType,
-                                       argumentsTypes));
+            inferrer.getSendReturnType(method, cls, argumentsTypes));
       }
 
     } else {
       for (BaseType baseReceiverType in receiverType.baseTypes) {
         if (!baseReceiverType.isNull()) {
           ClassBaseType classBaseReceiverType = baseReceiverType;
-          FunctionElement method = classBaseReceiverType.element.lookupMember(
-              canonicalizedMethodName);
+          ClassElement cls = classBaseReceiverType.element;
+          FunctionElement method = cls.lookupMember(canonicalizedMethodName);
           if (method != null) {
             inferrer.addCaller(method, currentMethod);
             result = inferrer.union(
                 result,
-                inferrer.getSendReturnType(method, baseReceiverType,
-                                           argumentsTypes));
+                inferrer.getSendReturnType(method, cls, argumentsTypes));
           }
         }
       }
diff --git a/sdk/lib/_internal/compiler/implementation/universe/universe.dart b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
index 02a0b82..3619f47 100644
--- a/sdk/lib/_internal/compiler/implementation/universe/universe.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
@@ -215,6 +215,10 @@
   bool isGetter() => identical(kind, SelectorKind.GETTER);
   bool isSetter() => identical(kind, SelectorKind.SETTER);
   bool isCall() => identical(kind, SelectorKind.CALL);
+  bool isClosureCall() {
+    SourceString callName = Compiler.CALL_OPERATOR_NAME;
+    return isCall() && name == callName;
+  }
 
   bool isIndex() => identical(kind, SelectorKind.INDEX) && argumentCount == 1;
   bool isIndexSet() => identical(kind, SelectorKind.INDEX) && argumentCount == 2;
@@ -226,10 +230,6 @@
   /** Check whether this is a call to 'assert'. */
   bool isAssert() => isCall() && identical(name.stringValue, "assert");
 
-  /** Check whether this is a closure invocation call. */
-  bool isClosureCall() =>
-      isCall() && identical(name.stringValue, Compiler.CALL_OPERATOR_NAME);
-
   int get hashCode => argumentCount + 1000 * namedArguments.length;
   int get namedArgumentCount => namedArguments.length;
   int get positionalArgumentCount => argumentCount - namedArgumentCount;
diff --git a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
index 9b51ff4..9d906b7 100644
--- a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
+++ b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
@@ -34,7 +34,6 @@
 
 
 // TODO(rnystrom): Use "package:" URL (#4968).
-part 'src/dartdoc/comment_map.dart';
 part 'src/dartdoc/nav.dart';
 part 'src/dartdoc/utils.dart';
 
@@ -1836,20 +1835,7 @@
       if (filename.endsWith('appcache.manifest')) {
         return;
       }
-      // TODO(johnniwinther): If [outputDir] has trailing slashes, [filename]
-      // contains double (back)slashes for files in the immediate [toCache]
-      // directory. These are not handled by [relativeTo] thus
-      // wrongfully producing the path `/foo.html` for a file `foo.html` in
-      // [toCache].
-      //
-      // This can be handled in two ways. 1) By ensuring that
-      // [Directory.fromPath] does not receive a path with a trailing slash, or
-      // better, by making [Directory.fromPath] handle such trailing slashes.
-      // 2) By ensuring that [filePath] does not have double slashes before
-      // calling [relativeTo], or better, by making [relativeTo] handle double
-      // slashes correctly.
-      Path filePath = new Path(filename).canonicalize();
-      Path relativeFilePath = filePath.relativeTo(outputDir);
+      Path relativeFilePath = new Path(filename).relativeTo(outputDir);
       write("$relativeFilePath\n");
     };
     toCacheLister.onDone = (done) => endFile();
diff --git a/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
deleted file mode 100644
index 7c8bd59..0000000
--- a/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of dartdoc;
-
-/**
- * The cached lookup-table to associate doc comments with spans. The outer map
- * is from filenames to doc comments in that file. The inner map maps from the
- * token positions to doc comments. Each position is the starting offset of the
- * next non-comment token *following* the doc comment. For example, the position
- * for this comment would be the position of the "class" token below.
- */
-class CommentMap {
-  /**
-   * Maps from (filename, pos) to doc comment preceding the token at that
-   * position.
-   */
-  Map<String, Map<int, String>> _comments;
-
-  /** Doc comments before `library` directives. */
-  Map<String, String> _libraryComments;
-
-  CommentMap()
-    : _comments = <String, Map<int, String>>{},
-      _libraryComments = <String, String>{};
-
-  /**
-   * Finds the doc comment preceding the given source span, if there is one.
-   *
-   * If a comment is returned, it is guaranteed to be non-empty.
-   */
-  String find(SourceLocation span) {
-    if (span == null) return null;
-
-    _ensureFileParsed(span);
-    String comment = _comments[span.sourceUri.toString()][span.offset];
-    assert(comment == null || !comment.trim().isEmpty);
-    return comment;
-  }
-
-  /**
-   * Finds the doc comment associated with the `library` directive for the
-   * given file.
-   *
-   * If a comment is returned, it is guaranteed to be non-empty.
-   */
-  String findLibrary(SourceLocation source) {
-    _ensureFileParsed(source);
-    String comment = _libraryComments[source.sourceUri.toString()];
-    assert(comment == null || !comment.trim().isEmpty);
-    return comment;
-  }
-
-  _ensureFileParsed(SourceLocation source) {
-    _comments.putIfAbsent(source.sourceUri.toString(), () =>
-        _parseComments(source));
-  }
-
-  _parseComments(SourceLocation source) {
-    final comments = new Map<int, String>();
-
-    final scanner = new dart2js.StringScanner(source.sourceText,
-                                              includeComments: true);
-    var lastComment = null;
-
-    var token = scanner.tokenize();
-    while (token.kind != dart2js.EOF_TOKEN) {
-      if (token.kind == dart2js.COMMENT_TOKEN) {
-        final text = token.slowToString();
-        if (text.startsWith('/**')) {
-          // Remember that we've encountered a doc comment.
-          lastComment = stripComment(token.slowToString());
-        } else if (text.startsWith('///')) {
-          var line = text.substring(3);
-          // Allow a leading space.
-          if (line.startsWith(' ')) line = line.substring(1);
-          if (lastComment == null) {
-            lastComment = line;
-          } else {
-            lastComment = '$lastComment\n$line';
-          }
-        }
-      } else if (token.stringValue == 'library' && lastComment != null) {
-        // Look for `library` to find the library comment.
-        _libraryComments[source.sourceUri.toString()] = lastComment;
-        lastComment = null;
-      } else if (lastComment != null) {
-        if (!lastComment.trim().isEmpty) {
-          // We haven't attached the last doc comment to something yet, so stick
-          // it to this token.
-          comments[token.charOffset] = lastComment;
-        }
-        lastComment = null;
-      }
-      token = token.next;
-    }
-
-    return comments;
-  }
-
-  /**
-   * Pulls the raw text out of a doc comment (i.e. removes the comment
-   * characters).
-   */
-  stripComment(String comment) {
-    StringBuffer buf = new StringBuffer();
-
-    for (var line in comment.split('\n')) {
-      line = line.trim();
-      if (line.startsWith('/**')) line = line.substring(3);
-      if (line.endsWith('*/')) line = line.substring(0, line.length - 2);
-      line = line.trim();
-      if (line.startsWith('* ')) {
-        line = line.substring(2);
-      } else if (line.startsWith('*')) {
-        line = line.substring(1);
-      }
-
-      buf.add(line);
-      buf.add('\n');
-    }
-
-    return buf.toString();
-  }
-}
diff --git a/sdk/lib/_internal/dartdoc/test/comment_map_test.dart b/sdk/lib/_internal/dartdoc/test/comment_map_test.dart
deleted file mode 100644
index 3d6c4c9..0000000
--- a/sdk/lib/_internal/dartdoc/test/comment_map_test.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// Unit tests for comment map.
-library commentMapTests;
-
-import 'dart:uri';
-import 'dart:mirrors';
-
-import '../../compiler/implementation/scanner/scannerlib.dart' as dart2js;
-
-// TODO(rnystrom): Better path to unittest.
-import '../../../../../pkg/unittest/lib/unittest.dart';
-
-// TODO(rnystrom): Use "package:" URL (#4968).
-part '../lib/src/dartdoc/comment_map.dart';
-
-class FakeSourceLocation implements SourceLocation {
-  Uri get sourceUri => new Uri('file:///tmp/test.dart');
-  int get offset => 69;
-  String get sourceText => """
-    /// Testing
-    ///     var testing = 'this is source code';
-    get foo => 'bar';
-  """;
-}
-
-main() {
-  test('triple slashed comments retain newlines', () {
-    Commentmap cm = new CommentMap();
-    var comment = cm.find(new FakeSourceLocation());
-    expect(
-      comment,
-      equals("Testing\n    var testing = 'this is source code';")
-    );
-  });
-}
diff --git a/sdk/lib/_internal/libraries.dart b/sdk/lib/_internal/libraries.dart
index 709bf8a..d5c747e 100644
--- a/sdk/lib/_internal/libraries.dart
+++ b/sdk/lib/_internal/libraries.dart
@@ -26,8 +26,17 @@
       "async/async.dart",
       dart2jsPatchPath: "_internal/compiler/implementation/lib/async_patch.dart"),
 
+  "chrome": const LibraryInfo(
+      "chrome/dartium/chrome_dartium.dart",
+      category: "Client",
+      dart2jsPath: "chrome/dart2js/chrome_dart2js.dart",
+      documented: false,
+      implementation: true), // Not really, just hiding it for now.
+
   "collection": const LibraryInfo("collection/collection.dart"),
 
+  "collection-dev": const LibraryInfo("collection_dev/collection_dev.dart"),
+
   "core": const LibraryInfo(
       "core/core.dart",
       dart2jsPatchPath: "_internal/compiler/implementation/lib/core_patch.dart"),
diff --git a/sdk/lib/async/async_error.dart b/sdk/lib/async/async_error.dart
index 065630d..fc46e32 100644
--- a/sdk/lib/async/async_error.dart
+++ b/sdk/lib/async/async_error.dart
@@ -9,7 +9,7 @@
  */
 class AsyncError {
   /** The actual error thrown by the computation. */
-  final Object error;
+  final error;
   /** Stack trace corresponding to the error, if available. */
   final Object stackTrace;
   /** Asynchronous error leading to this error, if error handling fails. */
@@ -17,8 +17,8 @@
 
   // TODO(lrn): When possible, combine into one constructor with both optional
   // positional and named arguments.
-  AsyncError(Object this.error, [Object this.stackTrace]): cause = null;
-  AsyncError.withCause(Object this.error, Object this.stackTrace, this.cause);
+  AsyncError(this.error, [this.stackTrace]): cause = null;
+  AsyncError.withCause(this.error, this.stackTrace, this.cause);
 
   void _writeOn(StringBuffer buffer) {
     buffer.add("'");
diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart
index b92bfd4..6b332e6 100644
--- a/sdk/lib/async/future_impl.dart
+++ b/sdk/lib/async/future_impl.dart
@@ -30,12 +30,8 @@
     } else {
       asyncError = new AsyncError(error, stackTrace);
     }
-    // Never complete an error in the same cycle. Otherwise users might
-    // not have a chance to register their error-handlers.
-    new Timer(0, (_) {
-      _FutureImpl future = this.future;
-      future._setError(asyncError);
-    });
+    _FutureImpl future = this.future;
+    future._setError(asyncError);
   }
 }
 
@@ -69,13 +65,20 @@
   static const int _INCOMPLETE = 0;
   static const int _VALUE = 1;
   static const int _ERROR = 2;
+  static const int _UNHANDLED_ERROR = 4;
 
   /** Whether the future is complete, and as what. */
   int _state = _INCOMPLETE;
 
   bool get _isComplete => _state != _INCOMPLETE;
   bool get _hasValue => _state == _VALUE;
-  bool get _hasError => _state == _ERROR;
+  bool get _hasError => (_state & _ERROR) != 0;
+  bool get _hasUnhandledError => (_state & _UNHANDLED_ERROR) != 0;
+
+  void _clearUnhandledError() {
+    // Works because _UNHANDLED_ERROR is highest bit in use.
+    _state &= ~_UNHANDLED_ERROR;
+  }
 
   /**
    * Either the result, or a list of listeners until the future completes.
@@ -105,11 +108,11 @@
     } else {
       asyncError = new AsyncError(error, stackTrace);
     }
-    new Timer(0, (_) { _setError(asyncError); });
+    _setError(asyncError);
   }
 
   factory _FutureImpl.wait(Iterable<Future> futures) {
-    // TODO(ajohnsen): can we do better wrt the generic type T?
+    // TODO(ajohnsen): can we do better wrt. the generic type T?
     if (futures.isEmpty) {
       return new Future<List>.immediate(const []);
     }
@@ -175,20 +178,22 @@
     if (!_isComplete) {
       _addListener(whenFuture);
     } else if (_hasValue) {
+      T value = _resultOrListeners;
       new Timer(0, (_) {
-        T value = _resultOrListeners;
         whenFuture._sendValue(value);
       });
     } else {
       assert(_hasError);
+      _clearUnhandledError();
+      AsyncError error = _resultOrListeners;
       new Timer(0, (_) {
-        AsyncError error = _resultOrListeners;
         whenFuture._sendError(error);
       });
     }
     return whenFuture;
   }
 
+  /** Handle a late listener on a completed future with a value. */
   Future _handleValue(onValue(var value)) {
     assert(_hasValue);
     _ThenFuture thenFuture = new _ThenFuture(onValue);
@@ -197,8 +202,10 @@
     return thenFuture;
   }
 
+  /** Handle a late listener on a completed future with an error. */
   Future _handleError(onError(AsyncError error), bool test(error)) {
     assert(_hasError);
+    _clearUnhandledError();
     AsyncError error = _resultOrListeners;
     _CatchErrorFuture errorFuture = new _CatchErrorFuture(onError, test);
     new Timer(0, (_) { errorFuture._sendError(error); });
@@ -208,7 +215,7 @@
   Stream<T> asStream() => new Stream.fromFuture(this);
 
   void _setValue(T value) {
-    if (_state != _INCOMPLETE) throw new StateError("Future already completed");
+    if (_isComplete) throw new StateError("Future already completed");
     _FutureListener listeners = _removeListeners();
     _state = _VALUE;
     _resultOrListeners = value;
@@ -226,15 +233,33 @@
     _state = _ERROR;
     _resultOrListeners = error;
     if (listeners == null) {
-      error.throwDelayed();
+      _scheduleUnhandledError();
       return;
     }
-    while (listeners != null) {
+    do {
       _FutureListener listener = listeners;
       listeners = listener._nextListener;
       listener._nextListener = null;
       listener._sendError(error);
-    }
+    } while (listeners != null);
+  }
+
+  void _scheduleUnhandledError() {
+    _state |= _UNHANDLED_ERROR;
+    // Wait for the rest of the current event's duration to see
+    // if a subscriber is added to handle the error.
+    new Timer(0, (_) {
+      if (_hasUnhandledError) {
+        // No error handler has been added since the error was set.
+        _clearUnhandledError();
+        AsyncError error = _resultOrListeners;
+        print("Uncaught Error: ${error.error}");
+        if (stackTrace != null) {
+          print("Stack Trace:\n${error.stackTrace}\n");
+        }
+        throw error.error;
+      }
+    });
   }
 
   void _addListener(_FutureListener listener) {
@@ -453,7 +478,6 @@
       _setError(new AsyncError(e, s));
       return;
     }
-
     _setValue(value);
   }
 
@@ -469,8 +493,7 @@
         return;
       }
     } on AsyncError catch (e) {
-      _setError(e);
-      return;
+      error = e;
     } catch (e, s) {
       error = new AsyncError.withCause(e, s, error);
     }
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index 407a689..8fd9272 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -8,11 +8,56 @@
 // Core Stream types
 // -------------------------------------------------------------------
 
+/**
+ * A source of asynchronous data events.
+ *
+ * A Stream provides a sequence of events. Each event is either a data event or
+ * an error event, representing the result of a single computation. When the
+ * Stream is exhausted, it may send a single "done" event.
+ *
+ * You can [listen] on a stream to receive the events it sends. When you listen,
+ * you receive a [StreamSubscription] object that can be used to stop listening,
+ * or to temporarily pause events from the stream.
+ *
+ * When an event is fired, all listeners at that time are informed.
+ * If a listener is added or removed while an event is being fired, the change
+ * will only take effect after the event is completely fired.
+ *
+ * Streams always respect "pause" requests. If necessary they need to buffer
+ * their input, but often, and preferably, they can simply request their input
+ * to pause too.
+ *
+ * There are two kinds of streams: Single-subscription streams and
+ * multi-subscription streams.
+ *
+ * A single-subscription stream allows only a single listener in its entire
+ * life-cycle. It holds back events until it gets a listener, and it exhausts
+ * itself when the listener is unsubscribed, even if the stream wasn't done.
+ *
+ * Single-subscription streams are generally used for streaming parts of
+ * contiguous data like file I/O.
+ *
+ * A multi-subscription stream allows any number of listeners, and it fires
+ * its events when they are ready, whether there are listeners or not.
+ *
+ * Multi-subscription streams are used for independent events/observers.
+ *
+ * The default implementation of [isSingleSubscription] and
+ * [asMultiSubscriptionStream] are assuming this is a single-subscription stream
+ * and a multi-subscription stream inheriting from [Stream] must override these
+ * to return [:false:] and [:this:] respectively.
+ */
 abstract class Stream<T> {
   Stream();
 
+  /**
+   * Creates a new single-subscription stream from the future.
+   *
+   * When the future completes, the stream will fire one event, either
+   * data or error, and then close with a done-event.
+   */
   factory Stream.fromFuture(Future<T> future) {
-    _StreamImpl<T> stream = new _MultiStreamImpl<T>();
+    _StreamImpl<T> stream = new _SingleStreamImpl<T>();
     future.then((value) {
         stream._add(value);
         stream._close();
@@ -28,11 +73,14 @@
    * Creates a single-subscription stream that gets its data from [data].
    */
   factory Stream.fromIterable(Iterable<T> data) {
-    return new _IterableSingleStreamImpl<T>(data);
+    _PendingEvents iterableEvents = new _IterablePendingEvents<T>(data);
+    return new _GeneratedSingleStreamImpl<T>(iterableEvents);
   }
 
-  /** Whether the stream is a single-subscription stream. */
-  bool get isSingleSubscription;
+  /**
+   * Whether the stream is a single-subscription stream.
+   */
+  bool get isSingleSubscription => true;
 
   /**
    * Returns a multi-subscription stream that produces the same events as this.
@@ -44,7 +92,9 @@
    *
    * If this stream is already multi-subscriber, it is returned unmodified.
    */
-  Stream<T> asMultiSubscriberStream();
+  Stream<T> asMultiSubscriberStream() {
+    return new _SingleStreamMultiplexer<T>(this);
+  }
 
   /**
    * Stream that outputs events from the [sources] in cyclic order.
@@ -99,7 +149,7 @@
    * but it only sends the data events that satisfy the [test].
    */
   Stream<T> where(bool test(T event)) {
-    return this.transform(new WhereTransformer<T>(test));
+    return new WhereStream<T>(this, test);
   }
 
   /**
@@ -107,7 +157,7 @@
    * to a new value using the [convert] function.
    */
   Stream mappedBy(convert(T event)) {
-    return this.transform(new MapTransformer<T, dynamic>(convert));
+    return new MapStream<T, dynamic>(this, convert);
   }
 
   /**
@@ -125,7 +175,7 @@
    */
    // TODO(lrn): Say what to do if you want to convert the error to a value.
   Stream<T> handleError(void handle(AsyncError error), { bool test(error) }) {
-    return this.transform(new HandleErrorTransformer<T>(handle, test));
+    return new HandleErrorStream<T>(this, handle, test);
   }
 
   /**
@@ -137,8 +187,7 @@
    * in order.
    */
   Stream expand(Iterable convert(T value)) {
-    return this.transform(
-        new ExpandTransformer<T, dynamic>(convert));
+    return new ExpandStream<T, dynamic>(this, convert);
   }
 
   /**
@@ -343,10 +392,10 @@
   }
 
   /**
-   * Finds the least element in the stream.
+   * Finds the largest element in the stream.
    *
    * If the stream is empty, the result is [:null:].
-   * Otherwise the result is an value from the stream that is not greater
+   * Otherwise the result is an value from the stream that is not smaller
    * than any other value from the stream (according to [compare], which must
    * be a [Comparator]).
    *
@@ -440,7 +489,7 @@
    * so will the returned stream.
    */
   Stream<T> take(int count) {
-    return this.transform(new TakeTransformer<T>(count));
+    return new TakeStream(this, count);
   }
 
   /**
@@ -452,14 +501,14 @@
    * a value that [test] doesn't accept.
    */
   Stream<T> takeWhile(bool test(T value)) {
-    return this.transform(new TakeWhileTransformer<T>(test));
+    return new TakeWhileStream(this, test);
   }
 
   /**
    * Skips the first [count] data events from this stream.
    */
   Stream<T> skip(int count) {
-    return this.transform(new SkipTransformer<T>(count));
+    return new SkipStream(this, count);
   }
 
   /**
@@ -471,7 +520,7 @@
    * event data, the returned stream will have the same events as this stream.
    */
   Stream<T> skipWhile(bool test(T value)) {
-    return this.transform(new SkipWhileTransformer<T>(test));
+    return new SkipWhileStream(this, test);
   }
 
   /**
@@ -484,7 +533,7 @@
    * omitted, the '==' operator on the last provided data element is used.
    */
   Stream<T> distinct([bool equals(T previous, T next)]) {
-    return this.transform(new DistinctTransformer<T>(equals));
+    return new DistinctStream(this, equals);
   }
 
   /**
@@ -733,7 +782,7 @@
 /**
  * A control object for the subscription on a [Stream].
  *
- * When you subscribe on a [Stream] using [Stream.subscribe],
+ * When you subscribe on a [Stream] using [Stream.listen],
  * a [StreamSubscription] object is returned. This object
  * is used to later unsubscribe again, or to temporarily pause
  * the stream's events.
@@ -760,7 +809,9 @@
    * Request that the stream pauses events until further notice.
    *
    * If [resumeSignal] is provided, the stream will undo the pause
-   * when the future completes in any way.
+   * when the future completes. If the future completes with an error,
+   * it will not be handled!
+   *
    * A call to [resume] will also undo a pause.
    *
    * If the subscription is paused more than once, an equal number
@@ -840,7 +891,7 @@
    * If a parameter is omitted, a default handler is used that forwards the
    * event directly to the sink.
    *
-   * Pauses on the are forwarded to the input stream as well.
+   * Pauses on the returned stream are forwarded to the input stream as well.
    */
   factory StreamTransformer.from({
       void onData(S data, StreamSink<T> sink),
diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart
index cf49a17..98a45783 100644
--- a/sdk/lib/async/stream_controller.dart
+++ b/sdk/lib/async/stream_controller.dart
@@ -16,24 +16,10 @@
  * its [stream].
  * This class can be used to create a simple stream that others
  * can listen on, and to push events to that stream.
- * For more specialized streams, the [createStream] method can be
- * overridden to return a specialization of [ControllerStream], and
- * other public methods can be overridden too (but it's recommended
- * that the overriding method calls its super method).
  *
- * A [StreamController] may have zero or more subscribers.
- *
- * If it has subscribers, it may also be paused by any number of its
- * subscribers. When paused, all incoming events are queued. It is the
- * responsibility of the user of this stream to prevent incoming events when
- * the controller is paused. When there are no pausing subscriptions left,
- * either due to them resuming, or due to the pausing subscriptions
- * unsubscribing, events are resumed.
- *
- * When "close" is invoked (but not necessarily when the done event is fired,
- * depending on pause state) the stream controller is closed.
- * When the done event is fired to a subscriber, the subscriber is automatically
- * unsubscribed.
+ * It's possible to check whether the stream is paused or not, and whether
+ * it has subscribers or not, as well as getting a callback when either of
+ * these change.
  */
 class StreamController<T> extends Stream<T> implements StreamSink<T> {
   _StreamImpl<T> _stream;
@@ -42,7 +28,7 @@
   /**
    * A controller with a [stream] that supports multiple subscribers.
    */
-  StreamController() {
+  StreamController.multiSubscription() {
     _stream = new _MultiControllerStream<T>(onSubscriptionStateChange,
                                             onPauseStateChange);
   }
@@ -51,13 +37,15 @@
    * The controller will buffer all incoming events until the subscriber is
    * registered.
    */
-  StreamController.singleSubscription() {
+  StreamController() {
     _stream = new _SingleControllerStream<T>(onSubscriptionStateChange,
                                              onPauseStateChange);
   }
 
   bool get isSingleSubscription => _stream.isSingleSubscription;
 
+  Stream<T> asMultiSubscriptionStream() => _stream.asMultiSubscriptionStream();
+
   StreamSubscription listen(void onData(T data),
                             { void onError(AsyncError error),
                               void onDone(),
@@ -87,10 +75,10 @@
   /**
    * Send or enqueue an error event.
    *
-   * If [error] is not an [AsyncError], [exception] and an optional [stackTrace]
+   * If [error] is not an [AsyncError], [error] and an optional [stackTrace]
    * is combined into an [AsyncError] and sent this stream's listeners.
    *
-   * Itherwise, if [error] is an [AsyncError], it is used directly as the
+   * Otherwise, if [error] is an [AsyncError], it is used directly as the
    * error object reported to listeners, and the [stackTrace] is ignored.
    *
    * If a subscription has requested to be unsubscribed on errors,
diff --git a/sdk/lib/async/stream_impl.dart b/sdk/lib/async/stream_impl.dart
index fe66c2e..0ca98e1 100644
--- a/sdk/lib/async/stream_impl.dart
+++ b/sdk/lib/async/stream_impl.dart
@@ -9,7 +9,7 @@
 /// Initial and default state where the stream can receive and send events.
 const int _STREAM_OPEN = 0;
 /// The stream has received a request to complete, but hasn't done so yet.
-/// No further events can be aded to the stream.
+/// No further events can be added to the stream.
 const int _STREAM_CLOSED = 1;
 /// The stream has completed and will no longer receive or send events.
 /// Also counts as closed. The stream must not be paused when it's completed.
@@ -57,7 +57,7 @@
    * stored here.
    * Also supports scheduling the events for later execution.
    */
-  _StreamImplEvents _pendingEvents;
+  _PendingEvents _pendingEvents;
 
   // ------------------------------------------------------------------
   // Stream interface.
@@ -204,6 +204,8 @@
 
   void _startFiring() {
     assert(!_isFiring);
+    assert(_hasSubscribers);
+    assert(!_isPaused);
     // This sets the _STREAM_FIRING bit and toggles the _STREAM_EVENT_ID
     // bit. All current subscribers will now have a _LISTENER_EVENT_ID
     // that doesn't match _STREAM_EVENT_ID, and they will receive the
@@ -214,6 +216,8 @@
   void _endFiring() {
     assert(_isFiring);
     _state ^= _STREAM_FIRING;
+    if (_isPaused) _onPauseStateChange();
+    if (!_hasSubscribers) _onSubscriptionStateChange();
   }
 
   /**
@@ -236,7 +240,7 @@
     if (resumeSignal != null) {
       resumeSignal.whenComplete(() { this._resume(listener, true); });
     }
-    if (!wasPaused) {
+    if (!wasPaused && !_isFiring) {
       _onPauseStateChange();
     }
   }
@@ -248,18 +252,24 @@
     assert(_isPaused);
     _decrementPauseCount(listener);
     if (!_isPaused) {
-      _onPauseStateChange();
+      if (!_isFiring) _onPauseStateChange();
       if (_hasPendingEvent) {
         // If we can fire events now, fire any pending events right away.
         if (fromEvent && !_isFiring) {
           _handlePendingEvents();
         } else {
-          _pendingEvents.schedule(this);
+          _schedulePendingEvents();
         }
       }
     }
   }
 
+  /** Schedule pending events to be executed. */
+  void _schedulePendingEvents() {
+    assert(_hasPendingEvent);
+    _pendingEvents.schedule(this);
+  }
+
   /** Create a subscription object. Called by [subcribe]. */
   _StreamSubscriptionImpl<T> _createSubscription(
       void onData(T data),
@@ -316,15 +326,16 @@
   /** Add a pending event at the end of the pending event queue. */
   void _addPendingEvent(_DelayedEvent event) {
     if (_pendingEvents == null) _pendingEvents = new _StreamImplEvents();
-    _pendingEvents.add(event);
+    _StreamImplEvents events = _pendingEvents;
+    events.add(event);
   }
 
   /** Fire any pending events until the pending event queue. */
   void _handlePendingEvents() {
-    _StreamImplEvents events = _pendingEvents;
+    _PendingEvents events = _pendingEvents;
     if (events == null) return;
     while (!events.isEmpty && !_isPaused) {
-      events.removeFirst().perform(this);
+      events.handleNext(this);
     }
   }
 
@@ -383,7 +394,6 @@
       }
     });
     assert(!_hasSubscribers);
-    _onSubscriptionStateChange();
   }
 }
 
@@ -420,14 +430,8 @@
 class _SingleStreamImpl<T> extends _StreamImpl<T> {
   _StreamListener _subscriber = null;
 
-  Stream<T> asMultiSubscriberStream() {
-    return new _SingleStreamMultiplexer<T>(this);
-  }
-
-  bool get isSingleSubscription => true;
-
   /** Whether one or more active subscribers have requested a pause. */
-  bool get _isPaused => !_hasSubscribers || super._isPaused;
+  bool get _isPaused => (!_hasSubscribers && !_isComplete) || super._isPaused;
 
   /** Whether there is currently a subscriber on this [Stream]. */
   bool get _hasSubscribers => _subscriber != null;
@@ -455,9 +459,7 @@
     subscription._setSubscribed(0);
     _onSubscriptionStateChange();
     if (_hasPendingEvent) {
-      new Timer(0, (_) {
-        _handlePendingEvents();
-      });
+      _schedulePendingEvents();
     }
   }
 
@@ -479,16 +481,20 @@
       return;
     }
     _subscriber = null;
-    int timesPaused = subscriber._setUnsubscribed();
-    _updatePauseCount(-timesPaused);
-    if (timesPaused > 0) {
-      _onPauseStateChange();
+    // Unsubscribing a paused subscription also cancels its pauses.
+    int subscriptionPauseCount = subscriber._setUnsubscribed();
+    _updatePauseCount(-subscriptionPauseCount);
+    if (!_isFiring) {
+      if (subscriptionPauseCount > 0) {
+        _onPauseStateChange();
+      }
+      _onSubscriptionStateChange();
     }
-    _onSubscriptionStateChange();
   }
 
   void _forEachSubscriber(
       void action(_StreamListener<T> subscription)) {
+    assert(!_isPaused);
     _StreamListener subscription = _subscriber;
     assert(subscription != null);
     _startFiring();
@@ -538,10 +544,10 @@
     _nextLink = _previousLink = this;
   }
 
-  Stream<T> asMultiSubscriberStream() => this;
-
   bool get isSingleSubscription => false;
 
+  Stream<T> asMultiSubscriberStream() => this;
+
   // ------------------------------------------------------------------
   // Helper functions that can be overridden in subclasses.
 
@@ -594,8 +600,6 @@
       }
     }
     _endFiring();
-    if (_isPaused) _onPauseStateChange();
-    if (!_hasSubscribers) _onSubscriptionStateChange();
   }
 
   void _addListener(_StreamListener listener) {
@@ -654,53 +658,62 @@
 }
 
 
-/** Abstract superclass for streams that generate their own events. */
-abstract class _GeneratedSingleStreamImpl<T> extends _SingleStreamImpl<T> {
-  bool _isHandlingPendingEvents = false;
-  bool get _hasPendingEvent => !_isClosed;
-
+/** Stream that generates its own events. */
+class _GeneratedSingleStreamImpl<T> extends _SingleStreamImpl<T> {
   /**
-   * Generate one (or possibly more) new events.
+   * Initializes the stream to have only the events provided by [events].
    *
-   * The events should be added to the stream using [_add], [_signalError] and
-   * [_close].
+   * A [_PendingEvents] implementation provides events that are handled
+   * by calling [_PendingEvents.handleNext] with the [_StreamImpl].
    */
-  void _generateNextEvent();
+  _GeneratedSingleStreamImpl(_PendingEvents events) {
+    _pendingEvents = events;
+    _setClosed();  // Closed for input since all events are already pending.
+  }
 
-  void _handlePendingEvents() {
-    // Avoid reentry from _add/_signalError/_close potentially called
-    // from _generateNextEvent.
-    if (_isHandlingPendingEvents) return;
-    _isHandlingPendingEvents = true;
-    while (!_isPaused && !_isClosed) {
-      // Call super's handle event in case _generateNextEvent generates
-      // more than one event, and the following ones are delayed.
-      super._handlePendingEvents();
-      if (!_isPaused && !_isClosed) {
-        _generateNextEvent();
-      }
-    }
-    _isHandlingPendingEvents = false;
+  void _add(T value) {
+    throw new UnsupportedError("Cannot inject events into generated stream");
+  }
+
+  void _signalError(AsyncError value) {
+    throw new UnsupportedError("Cannot inject events into generated stream");
+  }
+
+  void _close() {
+    throw new UnsupportedError("Cannot inject events into generated stream");
   }
 }
 
 
-/** Stream that gets its events from an [Iterable]. */
-class _IterableSingleStreamImpl<T> extends _GeneratedSingleStreamImpl<T> {
-  Iterator<T> _iterator;
+/** Pending events object that gets its events from an [Iterable]. */
+class _IterablePendingEvents<T> extends _PendingEvents {
+  final Iterator<T> _iterator;
+  /**
+   * Whether there are no more events to be sent.
+   *
+   * This starts out as [:false:] since there is always at least
+   * a 'done' event to be sent.
+   */
+  bool _isDone = false;
 
-  _IterableSingleStreamImpl(Iterable<T> data) : _iterator = data.iterator;
+  _IterablePendingEvents(Iterable<T> data) : _iterator = data.iterator;
 
-  void _generateNextEvent() {
+  bool get isEmpty => _isDone;
+
+  void handleNext(_StreamImpl<T> stream) {
+    if (_isDone) throw new StateError("No events pending.");
     try {
-      if (_iterator.moveNext()) {
-        _add(_iterator.current);
-        return;
+      _isDone = !_iterator.moveNext();
+      if (!_isDone) {
+        stream._sendData(_iterator.current);
+      } else {
+        stream._sendDone();
       }
     } catch (e, s) {
-      _signalError(new AsyncError(e, s));
+      stream._sendError(new AsyncError(e, s));
+      stream._sendDone();
+      _isDone = true;
     }
-    _close();
   }
 }
 
@@ -918,7 +931,15 @@
   }
 }
 
-abstract class _StreamListener<T> extends _InternalLink {
+/** Abstract type for an internal interface for sending events. */
+abstract class _StreamOutputSink<T> {
+  _sendData(T data);
+  _sendError(AsyncError error);
+  _sendDone();
+}
+
+abstract class _StreamListener<T> extends _InternalLink
+                                  implements _StreamOutputSink<T> {
   final _StreamImpl _source;
   int _state = _LISTENER_UNSUBSCRIBED;
 
@@ -988,12 +1009,8 @@
   _sendDone();
 }
 
-/** Class holding pending events for a [_StreamImpl]. */
-class _StreamImplEvents {
-  /// Single linked list of [_DelayedEvent] objects.
-  _DelayedEvent firstPendingEvent = null;
-  /// Last element in the list of pending events. New events are added after it.
-  _DelayedEvent lastPendingEvent = null;
+/** Superclass for provider of pending events. */
+abstract class _PendingEvents {
   /**
    * Timer set when pending events are scheduled for execution.
    *
@@ -1003,7 +1020,7 @@
    */
   Timer scheduleTimer = null;
 
-  bool get isEmpty => lastPendingEvent == null;
+  bool get isEmpty;
 
   bool get isScheduled => scheduleTimer != null;
 
@@ -1021,6 +1038,21 @@
     scheduleTimer = null;
   }
 
+  void handleNext(_StreamImpl stream);
+}
+
+
+/** Class holding pending events for a [_StreamImpl]. */
+class _StreamImplEvents extends _PendingEvents {
+  /// Single linked list of [_DelayedEvent] objects.
+  _DelayedEvent firstPendingEvent = null;
+  /// Last element in the list of pending events. New events are added after it.
+  _DelayedEvent lastPendingEvent = null;
+
+  bool get isEmpty => lastPendingEvent == null;
+
+  bool get isScheduled => scheduleTimer != null;
+
   void add(_DelayedEvent event) {
     if (lastPendingEvent == null) {
       firstPendingEvent = lastPendingEvent = event;
@@ -1029,14 +1061,14 @@
     }
   }
 
-  _DelayedEvent removeFirst() {
+  void handleNext(_StreamImpl stream) {
     if (isScheduled) cancelSchedule();
     _DelayedEvent event = firstPendingEvent;
     firstPendingEvent = event.next;
     if (firstPendingEvent == null) {
       lastPendingEvent = null;
     }
-    return event;
+    event.perform(stream);
   }
 }
 
diff --git a/sdk/lib/async/stream_pipe.dart b/sdk/lib/async/stream_pipe.dart
index 0b4b6ab..d145d1f 100644
--- a/sdk/lib/async/stream_pipe.dart
+++ b/sdk/lib/async/stream_pipe.dart
@@ -38,136 +38,178 @@
 
 
 /**
- * A [StreamTransformer] that forwards events and subscriptions.
+ * A [Stream] that forwards subscriptions to another stream.
  *
- * By default this transformer subscribes to [_source] and forwards all events
- * to [_stream]. It does not subscribe to [_source] until there is a subscriber,
- * on [_stream] and unsubscribes again when there are no subscribers left.
- *
- * The events are passed through the [_handleData], [_handleError] and
- * [_handleDone] methods. Subclasses are supposed to add handling of some of
- * the events by overriding these methods.
+ * This stream implements [Stream], but forwards all subscriptions
+ * to an underlying stream, and wraps the returned subscription to
+ * modify the events on the way.
  *
  * This class is intended for internal use only.
  */
+abstract class _ForwardingStream<S, T> extends Stream<T> {
+  final Stream<S> _source;
+
+  _ForwardingStream(this._source);
+
+  bool get isSingleSubscription => _source.isSingleSubscription;
+
+  StreamSubscription listen(void onData(T value),
+                            { void onError(AsyncError error),
+                              void onDone(),
+                              bool unsubscribeOnError }) {
+    if (onData == null) onData = _nullDataHandler;
+    if (onError == null) onError = _nullErrorHandler;
+    if (onDone == null) onDone = _nullDoneHandler;
+    unsubscribeOnError = identical(true, unsubscribeOnError);
+    StreamSubscription subscription =
+        new _ForwardingStreamSubscription<S, T>(
+            this, onData, onError, onDone, unsubscribeOnError);
+    return subscription;
+  }
+
+  // Override the following methods in subclasses to change the behavior.
+
+  void _handleData(S data, _StreamOutputSink<T> sink) {
+    var outputData = data;
+    sink._sendData(outputData);
+  }
+
+  void _handleError(AsyncError error, _StreamOutputSink<T> sink) {
+    sink._sendError(error);
+  }
+
+  void _handleDone(_StreamOutputSink<T> sink) {
+    sink._sendDone();
+  }
+}
+
 /**
- *
- * Handles backwards propagation of subscription and pause.
+ * Abstract superclass for subscriptions that forward to other subscriptions.
  */
-class _ForwardingStreamTransformer<S, T> implements StreamTransformer<S, T> {
-  Stream<T> _stream;
-  Stream<S> _source;
+class _ForwardingStreamSubscription<S, T>
+    implements StreamSubscription<T>, _StreamOutputSink<T> {
+  final _ForwardingStream<S, T> _stream;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  var /* _DataHandler<T> */ _onData;
+  _ErrorHandler _onError;
+  _DoneHandler _onDone;
+
   StreamSubscription<S> _subscription;
 
-  Stream<T> _createOutputStream() {
-    if (_source.isSingleSubscription) {
-      return new _ForwardingSingleStream<T>(this);
-    }
-    return new _ForwardingMultiStream<T>(this);
+  _ForwardingStreamSubscription(this._stream,
+                                this._onData,
+                                this._onError,
+                                this._onDone,
+                                bool unsubscribeOnError) {
+    _subscription =
+        _stream._source.listen(_handleData,
+                               onError: _handleError,
+                               onDone: _handleDone,
+                               unsubscribeOnError: unsubscribeOnError);
   }
 
-  Stream<T> bind(Stream<S> source) {
-    if (_source != null) {
-      throw new StateError("Transformer source already bound");
+  // StreamSubscription interface.
+
+  void onData(void handleData(T event)) {
+    if (handleData == null) {
+      handleData = _StreamSubscriptionImpl._nullDataHandler;
     }
-    _source = source;
-    _stream = _createOutputStream();
-    return _stream;
+    _onData = handleData;
   }
 
-  void _onPauseStateChange(bool isPaused) {
-    if (isPaused) {
-      if (_subscription != null) {
-        _subscription.pause();
-      }
-    } else {
-      if (_subscription != null) {
-        _subscription.resume();
-      }
+  void onError(void handleError(AsyncError error)) {
+    if (handleError == null) {
+      handleError = _StreamSubscriptionImpl._nullErrorHandler;
     }
+    _onError = handleError;
   }
 
-  /**
-    * Subscribe or unsubscribe on [_source] depending on whether
-    * [_stream] has subscribers.
-    */
-  void _onSubscriptionStateChange(bool hasSubscribers) {
-    if (hasSubscribers) {
-      assert(_subscription == null);
-      _subscription = _source.listen(this._handleData,
-                                     onError: this._handleError,
-                                     onDone: this._handleDone);
-    } else {
-      // TODO(lrn): Check why this can happen.
-      if (_subscription == null) return;
+  void onDone(void handleDone()) {
+    if (handleDone == null) {
+      handleDone = _StreamSubscriptionImpl._nullDoneHandler;
+    }
+    _onDone = handleDone;
+  }
+
+  void pause([Future resumeSignal]) {
+    if (_subscription == null) {
+      throw new StateError("Subscription has been unsubscribed");
+    }
+    _subscription.pause(resumeSignal);
+  }
+
+  void resume() {
+    if (_subscription == null) {
+      throw new StateError("Subscription has been unsubscribed");
+    }
+    _subscription.resume();
+  }
+
+  void cancel() {
+    if (_subscription == null) {
+      throw new StateError("Subscription has been unsubscribed");
+    }
+    _subscription.cancel();
+    _subscription = null;
+  }
+
+  // _StreamOutputSink interface. Sends data to this subscription.
+
+  void _sendData(T data) {
+    _onData(data);
+  }
+
+  void _sendError(AsyncError error) {
+    _onError(error);
+  }
+
+  void _sendDone() {
+    // If the transformation sends a done signal, we stop the subscription.
+    if (_subscription != null) {
       _subscription.cancel();
       _subscription = null;
     }
+    _onDone();
   }
 
-  void _handleData(S inputEvent) {
-    var outputEvent = inputEvent;
-    _stream._add(outputEvent);
+  // Methods used as listener on source subscription.
+
+  void _handleData(S data) {
+    _stream._handleData(data, this);
   }
 
   void _handleError(AsyncError error) {
-    _stream._signalError(error);
+    _stream._handleError(error, this);
   }
 
   void _handleDone() {
-    _stream._close();
+    _stream._handleDone(this);
   }
 }
 
-class _ForwardingMultiStream<T> extends _MultiStreamImpl<T> {
-  _ForwardingStreamTransformer _transformer;
-  _ForwardingMultiStream(this._transformer);
-
-  _onSubscriptionStateChange() {
-    _transformer._onSubscriptionStateChange(_hasSubscribers);
-  }
-
-  _onPauseStateChange() {
-    _transformer._onPauseStateChange(_isPaused);
-  }
-}
-
-class _ForwardingSingleStream<T> extends _SingleStreamImpl<T> {
-  _ForwardingStreamTransformer _transformer;
-  _ForwardingSingleStream(this._transformer);
-
-  _onSubscriptionStateChange() {
-    _transformer._onSubscriptionStateChange(_hasSubscribers);
-  }
-
-  _onPauseStateChange() {
-    _transformer._onPauseStateChange(_isPaused);
-  }
-}
-
-
 // -------------------------------------------------------------------
 // Stream transformers used by the default Stream implementation.
 // -------------------------------------------------------------------
 
 typedef bool _Predicate<T>(T value);
 
-class WhereTransformer<T> extends _ForwardingStreamTransformer<T, T> {
+class WhereStream<T> extends _ForwardingStream<T, T> {
   final _Predicate<T> _test;
 
-  WhereTransformer(bool test(T value))
-      : this._test = test;
+  WhereStream(Stream<T> source, bool test(T value))
+      : _test = test, super(source);
 
-  void _handleData(T inputEvent) {
+  void _handleData(T inputEvent, _StreamOutputSink<T> sink) {
     bool satisfies;
     try {
       satisfies = _test(inputEvent);
     } catch (e, s) {
-      _stream._signalError(_asyncError(e, s));
+      sink._sendError(_asyncError(e, s));
       return;
     }
     if (satisfies) {
-      _stream._add(inputEvent);
+      sink._sendData(inputEvent);
     }
   }
 }
@@ -178,42 +220,42 @@
 /**
  * A stream pipe that converts data events before passing them on.
  */
-class MapTransformer<S, T> extends _ForwardingStreamTransformer<S, T> {
+class MapStream<S, T> extends _ForwardingStream<S, T> {
   final _Transformation _transform;
 
-  MapTransformer(T transform(S event))
-      : this._transform = transform;
+  MapStream(Stream<S> source, T transform(S event))
+      : this._transform = transform, super(source);
 
-  void _handleData(S inputEvent) {
+  void _handleData(S inputEvent, _StreamOutputSink<T> sink) {
     T outputEvent;
     try {
       outputEvent = _transform(inputEvent);
     } catch (e, s) {
-      _stream._signalError(_asyncError(e, s));
+      sink._sendError(_asyncError(e, s));
       return;
     }
-    _stream._add(outputEvent);
+    sink._sendData(outputEvent);
   }
 }
 
 /**
  * A stream pipe that converts data events before passing them on.
  */
-class ExpandTransformer<S, T> extends _ForwardingStreamTransformer<S, T> {
+class ExpandStream<S, T> extends _ForwardingStream<S, T> {
   final _Transformation<S, Iterable<T>> _expand;
 
-  ExpandTransformer(Iterable<T> expand(S event))
-      : this._expand = expand;
+  ExpandStream(Stream<S> source, Iterable<T> expand(S event))
+      : this._expand = expand, super(source);
 
-  void _handleData(S inputEvent) {
+  void _handleData(S inputEvent, _StreamOutputSink<T> sink) {
     try {
       for (T value in _expand(inputEvent)) {
-        _stream._add(value);
+        sink._sendData(value);
       }
     } catch (e, s) {
       // If either _expand or iterating the generated iterator throws,
       // we abort the iteration.
-      _stream._signalError(_asyncError(e, s));
+      sink._sendError(_asyncError(e, s));
     }
   }
 }
@@ -226,20 +268,22 @@
  * A stream pipe that converts or disposes error events
  * before passing them on.
  */
-class HandleErrorTransformer<T> extends _ForwardingStreamTransformer<T, T> {
+class HandleErrorStream<T> extends _ForwardingStream<T, T> {
   final _ErrorTransformation _transform;
   final _ErrorTest _test;
 
-  HandleErrorTransformer(void transform(AsyncError event), bool test(error))
-      : this._transform = transform, this._test = test;
+  HandleErrorStream(Stream<T> source,
+                    void transform(AsyncError event),
+                    bool test(error))
+      : this._transform = transform, this._test = test, super(source);
 
-  void _handleError(AsyncError error) {
+  void _handleError(AsyncError error, _StreamOutputSink<T> sink) {
     bool matches = true;
     if (_test != null) {
       try {
         matches = _test(error.error);
       } catch (e, s) {
-        _stream._signalError(_asyncError(e, s, error));
+        sink._sendError(_asyncError(e, s, error));
         return;
       }
     }
@@ -247,11 +291,141 @@
       try {
         _transform(error);
       } catch (e, s) {
-        _stream._signalError(_asyncError(e, s, error));
+        sink._sendError(_asyncError(e, s, error));
         return;
       }
     } else {
-      _stream._signalError(error);
+      sink._sendError(error);
+    }
+  }
+}
+
+
+class TakeStream<T> extends _ForwardingStream<T, T> {
+  int _remaining;
+
+  TakeStream(Stream<T> source, int count)
+      : this._remaining = count, super(source) {
+    // This test is done early to avoid handling an async error
+    // in the _handleData method.
+    if (count is! int) throw new ArgumentError(count);
+  }
+
+  void _handleData(T inputEvent, _StreamOutputSink<T> sink) {
+    if (_remaining > 0) {
+      sink._sendData(inputEvent);
+      _remaining -= 1;
+      if (_remaining == 0) {
+        // Closing also unsubscribes all subscribers, which unsubscribes
+        // this from source.
+        sink._sendDone();
+      }
+    }
+  }
+}
+
+
+class TakeWhileStream<T> extends _ForwardingStream<T, T> {
+  final _Predicate<T> _test;
+
+  TakeWhileStream(Stream<T> source, bool test(T value))
+      : this._test = test, super(source);
+
+  void _handleData(T inputEvent, _StreamOutputSink<T> sink) {
+    bool satisfies;
+    try {
+      satisfies = _test(inputEvent);
+    } catch (e, s) {
+      sink._sendError(_asyncError(e, s));
+      // The test didn't say true. Didn't say false either, but we stop anyway.
+      sink._sendDone();
+      return;
+    }
+    if (satisfies) {
+      sink._sendData(inputEvent);
+    } else {
+      sink._sendDone();
+    }
+  }
+}
+
+class SkipStream<T> extends _ForwardingStream<T, T> {
+  int _remaining;
+
+  SkipStream(Stream<T> source, int count)
+      : this._remaining = count, super(source) {
+    // This test is done early to avoid handling an async error
+    // in the _handleData method.
+    if (count is! int || count < 0) throw new ArgumentError(count);
+  }
+
+  void _handleData(T inputEvent, _StreamOutputSink<T> sink) {
+    if (_remaining > 0) {
+      _remaining--;
+      return;
+    }
+    return sink._sendData(inputEvent);
+  }
+}
+
+class SkipWhileStream<T> extends _ForwardingStream<T, T> {
+  final _Predicate<T> _test;
+  bool _hasFailed = false;
+
+  SkipWhileStream(Stream<T> source, bool test(T value))
+      : this._test = test, super(source);
+
+  void _handleData(T inputEvent, _StreamOutputSink<T> sink) {
+    if (_hasFailed) {
+      sink._sendData(inputEvent);
+    }
+    bool satisfies;
+    try {
+      satisfies = _test(inputEvent);
+    } catch (e, s) {
+      sink._sendError(_asyncError(e, s));
+      // A failure to return a boolean is considered "not matching".
+      _hasFailed = true;
+      return;
+    }
+    if (!satisfies) {
+      _hasFailed = true;
+      sink._sendData(inputEvent);
+    }
+  }
+}
+
+typedef bool _Equality<T>(T a, T b);
+
+class DistinctStream<T> extends _ForwardingStream<T, T> {
+  static var _SENTINEL = new Object();
+
+  _Equality<T> _equals;
+  var _previous = _SENTINEL;
+
+  DistinctStream(Stream<T> source, bool equals(T a, T b))
+      : _equals = equals, super(source);
+
+  void _handleData(T inputEvent, _StreamOutputSink<T> sink) {
+    if (identical(_previous, _SENTINEL)) {
+      _previous = inputEvent;
+      return sink._sendData(inputEvent);
+    } else {
+      bool isEqual;
+      try {
+        if (_equals == null) {
+          isEqual = (_previous == inputEvent);
+        } else {
+          isEqual = _equals(_previous, inputEvent);
+        }
+      } catch (e, s) {
+        sink._sendError(_asyncError(e, s));
+        return null;
+      }
+      if (!isEqual) {
+        sink._sendData(inputEvent);
+        _previous = inputEvent;
+      }
     }
   }
 }
@@ -262,7 +436,7 @@
 typedef void _TransformDoneHandler<T>(StreamSink<T> sink);
 
 /**
- * A stream transfomer that intercepts all events and can generate any event as
+ * A stream transformer that intercepts all events and can generate any event as
  * output.
  *
  * Each incoming event on the source stream is passed to the corresponding
@@ -270,7 +444,7 @@
  * Stream.
  * The handler can then decide exactly which events to send to the output.
  */
-class _StreamTransformerImpl<S, T> extends _ForwardingStreamTransformer<S, T> {
+class _StreamTransformerImpl<S, T> implements StreamTransformer<S, T> {
   final _TransformDataHandler<S, T> _onData;
   final _TransformErrorHandler<T> _onError;
   final _TransformDoneHandler<T> _onDone;
@@ -284,9 +458,10 @@
         this._onDone = (onDone == null ? _defaultHandleDone : onDone);
 
   Stream<T> bind(Stream<S> source) {
-    Stream<T> stream = super.bind(source);
+    Stream<T> stream = new _SingleStreamImpl<T>();
     // Cache a Sink object to avoid creating a new one for each event.
     _sink = new _StreamImplSink(stream);
+    source.listen(_handleData, onError: _handleError, onDone: _handleDone);
     return stream;
   }
 
@@ -338,131 +513,3 @@
 }
 
 
-class TakeTransformer<T> extends _ForwardingStreamTransformer<T, T> {
-  int _remaining;
-
-  TakeTransformer(int count)
-      : this._remaining = count {
-    // This test is done early to avoid handling an async error
-    // in the _handleData method.
-    if (count is! int) throw new ArgumentError(count);
-  }
-
-  void _handleData(T inputEvent) {
-    if (_remaining > 0) {
-      _stream._add(inputEvent);
-      _remaining -= 1;
-      if (_remaining == 0) {
-        // Closing also unsubscribes all subscribers, which unsubscribes
-        // this from source.
-        _stream._close();
-      }
-    }
-  }
-}
-
-
-class TakeWhileTransformer<T> extends _ForwardingStreamTransformer<T, T> {
-  final _Predicate<T> _test;
-
-  TakeWhileTransformer(bool test(T value))
-      : this._test = test;
-
-  void _handleData(T inputEvent) {
-    bool satisfies;
-    try {
-      satisfies = _test(inputEvent);
-    } catch (e, s) {
-      _stream._signalError(_asyncError(e, s));
-      // The test didn't say true. Didn't say false either, but we stop anyway.
-      _stream._close();
-      return;
-    }
-    if (satisfies) {
-      _stream._add(inputEvent);
-    } else {
-      _stream._close();
-    }
-  }
-}
-
-class SkipTransformer<T> extends _ForwardingStreamTransformer<T, T> {
-  int _remaining;
-
-  SkipTransformer(int count)
-      : this._remaining = count{
-    // This test is done early to avoid handling an async error
-    // in the _handleData method.
-    if (count is! int || count < 0) throw new ArgumentError(count);
-  }
-
-  void _handleData(T inputEvent) {
-    if (_remaining > 0) {
-      _remaining--;
-      return;
-    }
-    return _stream._add(inputEvent);
-  }
-}
-
-class SkipWhileTransformer<T> extends _ForwardingStreamTransformer<T, T> {
-  final _Predicate<T> _test;
-  bool _hasFailed = false;
-
-  SkipWhileTransformer(bool test(T value))
-      : this._test = test;
-
-  void _handleData(T inputEvent) {
-    if (_hasFailed) {
-      _stream._add(inputEvent);
-    }
-    bool satisfies;
-    try {
-      satisfies = _test(inputEvent);
-    } catch (e, s) {
-      _stream._signalError(_asyncError(e, s));
-      // A failure to return a boolean is considered "not matching".
-      _hasFailed = true;
-      return;
-    }
-    if (!satisfies) {
-      _hasFailed = true;
-      _stream._add(inputEvent);
-    }
-  }
-}
-
-typedef bool _Equality<T>(T a, T b);
-
-class DistinctTransformer<T> extends _ForwardingStreamTransformer<T, T> {
-  static var _SENTINEL = new Object();
-
-  _Equality<T> _equals;
-  var _previous = _SENTINEL;
-
-  DistinctTransformer(bool equals(T a, T b))
-      : _equals = equals;
-
-  void _handleData(T inputEvent) {
-    if (identical(_previous, _SENTINEL)) {
-      _previous = inputEvent;
-      return _stream._add(inputEvent);
-    } else {
-      bool isEqual;
-      try {
-        if (_equals == null) {
-          isEqual = (_previous == inputEvent);
-        } else {
-          isEqual = _equals(_previous, inputEvent);
-        }
-      } catch (e, s) {
-        _stream._signalError(_asyncError(e, s));
-        return null;
-      }
-      if (!isEqual) {
-        _stream._add(inputEvent);
-        _previous = inputEvent;
-      }
-    }
-  }
-}
diff --git a/sdk/lib/chrome/dart2js/chrome_dart2js.dart b/sdk/lib/chrome/dart2js/chrome_dart2js.dart
new file mode 100644
index 0000000..9ab5df7
--- /dev/null
+++ b/sdk/lib/chrome/dart2js/chrome_dart2js.dart
@@ -0,0 +1,46 @@
+library chrome;
+
+// 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.
+
+// DO NOT EDIT
+// Auto-generated dart:chrome library.
+
+
+// Copyright (c) 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.
+
+
+// This is an example of exposing chrome APIs in Dart and will be replaced with
+// the proper implementation in the future.
+
+class AppModule {
+  AppModule._();
+
+  WindowModule get window => new WindowModule._();
+}
+
+class WindowModule {
+  WindowModule._();
+
+  void create(String url) {
+    var chrome = JS('', 'chrome');
+
+    if (chrome == null) {
+      throw new UnsupportedError('Not supported by current browser');
+    }
+    var app = JS('', '#.app', chrome);
+    if (app == null) {
+      throw new UnsupportedError('Not supported by current browser');
+    }
+    var window = JS('', '#.window', app);
+    if (app == null) {
+      throw new UnsupportedError('Not supported by current browser');
+    }
+    JS('void', '#.create(#)', window, url);
+  }
+}
+
+final app = new AppModule._();
diff --git a/sdk/lib/chrome/dartium/chrome_dartium.dart b/sdk/lib/chrome/dartium/chrome_dartium.dart
new file mode 100644
index 0000000..c228655
--- /dev/null
+++ b/sdk/lib/chrome/dartium/chrome_dartium.dart
@@ -0,0 +1,9 @@
+library chrome;
+
+// 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.
+
+// DO NOT EDIT
+// Auto-generated dart:chrome library.
+
diff --git a/sdk/lib/collection/collection.dart b/sdk/lib/collection/collection.dart
index 3219649..7c9e6a3 100644
--- a/sdk/lib/collection/collection.dart
+++ b/sdk/lib/collection/collection.dart
@@ -4,7 +4,10 @@
 
 library dart.collection;
 
+import 'dart:collection-dev';
+
 part 'arrays.dart';
 part 'collections.dart';
 part 'maps.dart';
+part 'sort.dart';
 part 'splay_tree.dart';
diff --git a/sdk/lib/collection/collection_sources.gypi b/sdk/lib/collection/collection_sources.gypi
index 9eea155..f2137e7 100644
--- a/sdk/lib/collection/collection_sources.gypi
+++ b/sdk/lib/collection/collection_sources.gypi
@@ -8,6 +8,7 @@
     'arrays.dart',
     'collections.dart',
     'maps.dart',
+    'sort.dart',
     'splay_tree.dart',
   ],
 }
diff --git a/sdk/lib/collection/collections.dart b/sdk/lib/collection/collections.dart
index 4bd1fad..9a34944 100644
--- a/sdk/lib/collection/collections.dart
+++ b/sdk/lib/collection/collections.dart
@@ -5,11 +5,11 @@
 part of dart.collection;
 
 /**
- * The [Collections] class implements static methods useful when
- * writing a class that implements [Collection] and the [iterator]
- * method.
+ * This class provides default implementations for Iterables (including Lists).
+ *
+ * Once Dart receives Mixins it will be replaced with mixin classes.
  */
-class Collections {
+class IterableMixinWorkaround {
   static bool contains(Iterable iterable, var element) {
     for (final e in iterable) {
       if (element == e) return true;
@@ -46,6 +46,80 @@
     return initialValue;
   }
 
+  /**
+   * Simple implementation for [Collection.removeAll].
+   *
+   * This implementation assumes that [Collection.remove] on [collection]
+   * is efficient. The [:remove:] method on [List] objects is typically
+   * not efficient since it requires linear search to find an element.
+   */
+  static void removeAll(Collection collection, Iterable elementsToRemove) {
+    for (Object object in elementsToRemove) {
+      collection.remove(object);
+    }
+  }
+
+  /**
+   * Implementation of [Collection.removeAll] for lists.
+   *
+   * This implementation assumes that [Collection.remove] is not efficient
+   * (as it usually isn't on a [List]) and uses [Collection.removeMathcing]
+   * instead of just repeatedly calling remove.
+   */
+  static void removeAllList(Collection collection, Iterable elementsToRemove) {
+    Set setToRemove;
+    // Assume contains is efficient on a Set.
+    if (elementsToRemove is Set) {
+      setToRemove = elementsToRemove;
+    } else {
+      setToRemove = elementsToRemove.toSet();
+    }
+    collection.removeMatching(setToRemve.contains);
+  }
+
+  /**
+   * Simple implemenation for [Collection.retainAll].
+   *
+   * This implementation assumes that [Collecton.retainMatching] on [collection]
+   * is efficient.
+   */
+  static void retainAll(Collection collection, Iterable elementsToRetain) {
+    Set lookup;
+    if (elementsToRetain is Set) {
+      lookup = elementsToRetain;
+    } else {
+      lookup = elementsToRetain.toSet();
+    }
+    collection.retainMatching(lookup.contains);
+  }
+
+  /**
+   * Simple implemenation for [Collection.removeMatching].
+   *
+   * This implementation assumes that [Collecton.removeAll] on [collection] is
+   * efficient.
+   */
+  static void removeMatching(Collection collection, bool test(var element)) {
+    List elementsToRemove = [];
+    for (var element in collection) {
+      if (test(element)) elementsToRemove.add(element);
+    }
+    collection.removeAll(elementsToRemove);
+  }
+
+  /**
+   * Simple implemenation for [Collection.retainMatching].
+   *
+   * This implementation assumes that [Collecton.removeAll] on [collection] is
+   * efficient.
+   */
+  static void retainMatching(Collection collection, bool test(var element)) {
+    List elementsToRemove = [];
+    for (var element in collection) {
+      if (!test(element)) elementsToRemove.add(element);
+    }
+    collection.removeAll(elementsToRemove);
+  }
   static bool isEmpty(Iterable iterable) {
     return !iterable.iterator.moveNext();
   }
@@ -186,7 +260,7 @@
     return buffer.toString();
   }
 
-  static String joinList(List<Object> list, [String separator]) {
+  static String joinList(List list, [String separator]) {
     if (list.isEmpty) return "";
     if (list.length == 1) return "${list[0]}";
     StringBuffer buffer = new StringBuffer();
@@ -204,6 +278,151 @@
     return buffer.toString();
   }
 
+  static Iterable where(Iterable iterable, bool f(var element)) {
+    return new WhereIterable(iterable, f);
+  }
+
+  static List mappedByList(List list, f(var element)) {
+    return new MappedList(list, f);
+  }
+
+  static List takeList(List list, int n) {
+    // The generic type is currently lost. It will be fixed with mixins.
+    return new ListView(list, 0, n);
+  }
+
+  static Iterable takeWhile(Iterable iterable, bool test(var value)) {
+    // The generic type is currently lost. It will be fixed with mixins.
+    return new TakeWhileIterable(iterable, test);
+  }
+
+  static List skipList(List list, int n) {
+    // The generic type is currently lost. It will be fixed with mixins.
+    return new ListView(list, n, null);
+  }
+
+  static Iterable skipWhile(Iterable iterable, bool test(var value)) {
+    // The generic type is currently lost. It will be fixed with mixins.
+    return new SkipWhileIterable(iterable, test);
+  }
+
+  static void sortList(List l, int compare(a, b)) {
+    if (compare == null) compare = Comparable.compare;
+    _Sort.sort(l, compare);
+  }
+}
+
+/**
+ * The [Collections] class implements static methods useful when
+ * writing a class that implements [Collection] and the [iterator]
+ * method.
+ */
+class Collections {
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static bool contains(Iterable iterable, var element)
+      => IterableMixinWorkaround.contains(iterable, element);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static void forEach(Iterable iterable, void f(o)) {
+    IterableMixinWorkaround.forEach(iterable, f);
+  }
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static bool any(Iterable iterable, bool f(o))
+      => IterableMixinWorkaround.any(iterable, f);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static bool every(Iterable iterable, bool f(o))
+      => IterableMixinWorkaround.every(iterable, f);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic reduce(Iterable iterable,
+                        dynamic initialValue,
+                        dynamic combine(dynamic previousValue, element))
+      => IterableMixinWorkaround.reduce(iterable, initialValue, combine);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static bool isEmpty(Iterable iterable)
+      => IterableMixinWorkaround.isEmpty(iterable);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic first(Iterable iterable)
+      => IterableMixinWorkaround.first(iterable);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic last(Iterable iterable)
+      => IterableMixinWorkaround.last(iterable);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic min(Iterable iterable, [int compare(var a, var b)])
+      => IterableMixinWorkaround.min(iterable, compare);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic max(Iterable iterable, [int compare(var a, var b)])
+      => IterableMixinWorkaround.max(iterable, compare);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic single(Iterable iterable)
+      => IterableMixinWorkaround.single(iterable);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic firstMatching(Iterable iterable,
+                               bool test(dynamic value),
+                               dynamic orElse())
+      => IterableMixinWorkaround.firstMatching(iterable, test, orElse);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic lastMatching(Iterable iterable,
+                              bool test(dynamic value),
+                              dynamic orElse())
+      => IterableMixinWorkaround.lastMatching(iterable, test, orElse);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic lastMatchingInList(List list,
+                                    bool test(dynamic value),
+                                    dynamic orElse())
+      => IterableMixinWorkaround.lastMatchingInList(list, test, orElse);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic singleMatching(Iterable iterable, bool test(dynamic value))
+      => IterableMixinWorkaround.singleMatching(iterable, test);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static dynamic elementAt(Iterable iterable, int index)
+      => IterableMixinWorkaround.elementAt(iterable, index);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static String join(Iterable iterable, [String separator])
+      => IterableMixinWorkaround.join(iterable, separator);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static String joinList(List list, [String separator])
+      => IterableMixinWorkaround.joinList(list, separator);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static Iterable where(Iterable iterable, bool f(var element))
+      => IterableMixinWorkaround.where(iterable, f);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static List mappedByList(List list, f(var element))
+      => IterableMixinWorkaround.mappedByList(list, f);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static List takeList(List list, int n)
+      => IterableMixinWorkaround.takeList(list, n);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static Iterable takeWhile(Iterable iterable, bool test(var value))
+      => IterableMixinWorkaround.takeWhile(iterable, test);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static List skipList(List list, int n)
+      => IterableMixinWorkaround.skipList(list, n);
+
+  /** Deprecated. Use the same method in [IterableMixinWorkaround] instead.*/
+  static Iterable skipWhile(Iterable iterable, bool test(var value))
+      => IterableMixinWorkaround.skipWhile(iterable, test);
+
   // TODO(jjb): visiting list should be an identityHashSet when it exists
 
   /**
diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
index 6c9472c..62c760f 100644
--- a/sdk/lib/collection/maps.dart
+++ b/sdk/lib/collection/maps.dart
@@ -39,7 +39,7 @@
   }
 
   static clear(Map map) {
-    for (final k in map.keys) {
+    for (final k in map.keys.toList()) {
       map.remove(k);
     }
   }
@@ -50,17 +50,13 @@
     }
   }
 
-  static Collection getValues(Map map) {
-    final result = [];
-    for (final k in map.keys) {
-      result.add(map[k]);
-    }
-    return result;
+  static Iterable getValues(Map map) {
+    return map.keys.mappedBy((key) => map[key]);
   }
 
   static int length(Map map) => map.keys.length;
 
-  static bool isEmpty(Map map) => length(map) == 0;
+  static bool isEmpty(Map map) => map.keys.isEmpty;
 
   /**
    * Returns a string representing the specified map. The returned string
diff --git a/sdk/lib/core/sort.dart b/sdk/lib/collection/sort.dart
similarity index 97%
rename from sdk/lib/core/sort.dart
rename to sdk/lib/collection/sort.dart
index 96d987a..a5805cd 100644
--- a/sdk/lib/core/sort.dart
+++ b/sdk/lib/collection/sort.dart
@@ -2,13 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of dart.core;
-
-// TODO(ajohnsen): Remove once dart2js intercepters can work without it.
-/**
- * WARNING: This method is temporary and will go away soon.
- */
-void coreSort(List l, int compare(a, b)) => _Sort.sort(l, compare);
+part of dart.collection;
 
 /**
  * Dual-Pivot Quicksort algorithm.
diff --git a/sdk/lib/collection_dev/collection_dev.dart b/sdk/lib/collection_dev/collection_dev.dart
new file mode 100644
index 0000000..20eaac9
--- /dev/null
+++ b/sdk/lib/collection_dev/collection_dev.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart.collection.dev;
+
+part 'iterable.dart';
+part 'list.dart';
diff --git a/sdk/lib/collection_dev/collection_dev_sources.gypi b/sdk/lib/collection_dev/collection_dev_sources.gypi
new file mode 100644
index 0000000..4bee7d2
--- /dev/null
+++ b/sdk/lib/collection_dev/collection_dev_sources.gypi
@@ -0,0 +1,11 @@
+# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# This file contains all sources for the dart:collection-dev library.
+{
+  'sources': [
+    'iterable.dart',
+    'list.dart',
+  ],
+}
diff --git a/sdk/lib/collection_dev/iterable.dart b/sdk/lib/collection_dev/iterable.dart
new file mode 100644
index 0000000..8fcef18
--- /dev/null
+++ b/sdk/lib/collection_dev/iterable.dart
@@ -0,0 +1,226 @@
+// 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.
+
+part of dart.collection.dev;
+
+typedef T _Transformation<S, T>(S value);
+
+class MappedIterable<S, T> extends Iterable<T> {
+  final Iterable<S> _iterable;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _Transformation<S, T> */ _f;
+
+  MappedIterable(this._iterable, T this._f(S element));
+
+  Iterator<T> get iterator => new MappedIterator<S, T>(_iterable.iterator, _f);
+
+  // Length related functions are independent of the mapping.
+  int get length => _iterable.length;
+  bool get isEmpty => _iterable.isEmpty;
+}
+
+class MappedIterator<S, T> extends Iterator<T> {
+  T _current;
+  final Iterator<S> _iterator;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _Transformation<S, T> */ _f;
+
+  MappedIterator(this._iterator, T this._f(S element));
+
+  bool moveNext() {
+    if (_iterator.moveNext()) {
+      _current = _f(_iterator.current);
+      return true;
+    } else {
+      _current = null;
+      return false;
+    }
+  }
+
+  T get current => _current;
+}
+
+typedef bool _ElementPredicate<E>(E element);
+
+class WhereIterable<E> extends Iterable<E> {
+  final Iterable<E> _iterable;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _ElementPredicate */ _f;
+
+  WhereIterable(this._iterable, bool this._f(E element));
+
+  Iterator<E> get iterator => new WhereIterator<E>(_iterable.iterator, _f);
+}
+
+class WhereIterator<E> extends Iterator<E> {
+  final Iterator<E> _iterator;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _ElementPredicate */ _f;
+
+  WhereIterator(this._iterator, bool this._f(E element));
+
+  bool moveNext() {
+    while (_iterator.moveNext()) {
+      if (_f(_iterator.current)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  E get current => _iterator.current;
+}
+
+class TakeIterable<E> extends Iterable<E> {
+  final Iterable<E> _iterable;
+  final int _takeCount;
+
+  TakeIterable(this._iterable, this._takeCount) {
+    if (_takeCount is! int || _takeCount < 0) {
+      throw new ArgumentError(_takeCount);
+    }
+  }
+
+  Iterator<E> get iterator {
+    return new TakeIterator<E>(_iterable.iterator, _takeCount);
+  }
+}
+
+class TakeIterator<E> extends Iterator<E> {
+  final Iterator<E> _iterator;
+  int _remaining;
+
+  TakeIterator(this._iterator, this._remaining) {
+    assert(_remaining is int && _remaining >= 0);
+  }
+
+  bool moveNext() {
+    _remaining--;
+    if (_remaining >= 0) {
+      return _iterator.moveNext();
+    }
+    _remaining = -1;
+    return false;
+  }
+
+  E get current {
+    if (_remaining < 0) return null;
+    return _iterator.current;
+  }
+}
+
+class TakeWhileIterable<E> extends Iterable<E> {
+  final Iterable<E> _iterable;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _ElementPredicate */ _f;
+
+  TakeWhileIterable(this._iterable, bool this._f(E element));
+
+  Iterator<E> get iterator {
+    return new TakeWhileIterator<E>(_iterable.iterator, _f);
+  }
+}
+
+class TakeWhileIterator<E> extends Iterator<E> {
+  final Iterator<E> _iterator;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _ElementPredicate */ _f;
+  bool _isFinished = false;
+
+  TakeWhileIterator(this._iterator, bool this._f(E element));
+
+  bool moveNext() {
+    if (_isFinished) return false;
+    if (!_iterator.moveNext() || !_f(_iterator.current)) {
+      _isFinished = true;
+      return false;
+    }
+    return true;
+  }
+
+  E get current {
+    if (_isFinished) return null;
+    return _iterator.current;
+  }
+}
+
+class SkipIterable<E> extends Iterable<E> {
+  final Iterable<E> _iterable;
+  final int _skipCount;
+
+  SkipIterable(this._iterable, this._skipCount) {
+    if (_skipCount is! int || _skipCount < 0) {
+      throw new ArgumentError(_skipCount);
+    }
+  }
+
+  Iterable<E> skip(int n) {
+    if (n is! int || n < 0) {
+      throw new ArgumentError(n);
+    }
+    return new SkipIterable<E>(_iterable, _skipCount + n);
+  }
+
+  Iterator<E> get iterator {
+    return new SkipIterator<E>(_iterable.iterator, _skipCount);
+  }
+}
+
+class SkipIterator<E> extends Iterator<E> {
+  final Iterator<E> _iterator;
+  int _skipCount;
+
+  SkipIterator(this._iterator, this._skipCount) {
+    assert(_skipCount is int && _skipCount >= 0);
+  }
+
+  bool moveNext() {
+    for (int i = 0; i < _skipCount; i++) _iterator.moveNext();
+    _skipCount = 0;
+    return _iterator.moveNext();
+  }
+
+  E get current => _iterator.current;
+}
+
+class SkipWhileIterable<E> extends Iterable<E> {
+  final Iterable<E> _iterable;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _ElementPredicate */ _f;
+
+  SkipWhileIterable(this._iterable, bool this._f(E element));
+
+  Iterator<E> get iterator {
+    return new SkipWhileIterator<E>(_iterable.iterator, _f);
+  }
+}
+
+class SkipWhileIterator<E> extends Iterator<E> {
+  final Iterator<E> _iterator;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _ElementPredicate */ _f;
+  bool _hasSkipped = false;
+
+  SkipWhileIterator(this._iterator, bool this._f(E element));
+
+  bool moveNext() {
+    if (!_hasSkipped) {
+      _hasSkipped = true;
+      while (_iterator.moveNext()) {
+        if (!_f(_iterator.current)) return true;
+      }
+    }
+    return _iterator.moveNext();
+  }
+
+  E get current => _iterator.current;
+}
diff --git a/sdk/lib/collection_dev/list.dart b/sdk/lib/collection_dev/list.dart
new file mode 100644
index 0000000..48b31fa
--- /dev/null
+++ b/sdk/lib/collection_dev/list.dart
@@ -0,0 +1,267 @@
+// 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.
+
+part of dart.collection.dev;
+
+/**
+ * Skeleton class for an unmodifiable [List].
+ */
+abstract class NonExtensibleListMixin<E>
+    extends Iterable<E> implements List<E> {
+
+  Iterator<E> get iterator => new ListIterator(this);
+
+  void forEach(f(E element)) {
+    for (int i = 0; i < this.length; i++) f(this[i]);
+  }
+
+  bool contains(E value) {
+    for (int i = 0; i < length; i++) {
+      if (this[i] == value) return true;
+    }
+    return false;
+  }
+
+  reduce(initialValue, combine(previousValue, E element)) {
+    var value = initialValue;
+    for (int i = 0; i < this.length; i++) {
+      value = combine(value, this[i]);
+    }
+    return value;
+  }
+
+  bool every(bool f(E element)) {
+    for (int i = 0; i < this.length; i++) {
+      if (!f(this[i])) return false;
+    }
+    return true;
+  }
+
+  bool any(bool f(E element)) {
+    for (int i = 0; i < this.length; i++) {
+      if (f(this[i])) return true;
+    }
+    return false;
+  }
+
+  bool get isEmpty {
+    return this.length == 0;
+  }
+
+  E elementAt(int index) {
+    return this[index];
+  }
+
+  int indexOf(E value, [int start = 0]) {
+    for (int i = start; i < length; i++) {
+      if (this[i] == value) return i;
+    }
+    return -1;
+  }
+
+  int lastIndexOf(E value, [int start]) {
+    if (start == null) start = length - 1;
+    for (int i = start; i >= 0; i--) {
+      if (this[i] == value) return i;
+    }
+    return -1;
+  }
+
+  E get first {
+    if (length > 0) return this[0];
+    throw new StateError("No elements");
+  }
+
+  E get last {
+    if (length > 0) return this[length - 1];
+    throw new StateError("No elements");
+  }
+
+  E get single {
+    if (length == 1) return this[0];
+    if (length == 0) throw new StateError("No elements");
+    throw new StateError("More than one element");
+  }
+
+  List<E> getRange(int start, int length) {
+    List<E> result = <E>[];
+    for (int i = 0; i < length; i++) {
+      result.add(this[start + i]);
+    }
+    return result;
+  }
+
+  void operator []=(int index, E value) {
+    throw new UnsupportedError(
+        "Cannot modify an unmodifiable list");
+  }
+
+  void set length(int newLength) {
+    throw new UnsupportedError(
+        "Cannot change the length of an unmodifiable list");
+  }
+
+  void add(E value) {
+    throw new UnsupportedError(
+        "Cannot add to an unmodifiable list");
+  }
+
+  void addLast(E value) {
+    throw new UnsupportedError(
+        "Cannot add to an unmodifiable list");
+  }
+
+  void addAll(Iterable<E> iterable) {
+    throw new UnsupportedError(
+        "Cannot add to an unmodifiable list");
+  }
+
+  void remove(E element) {
+    throw new UnsupportedError(
+        "Cannot remove from an unmodifiable list");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove from an unmodifiable list");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError(
+        "Cannot remove from an unmodifiable list");
+  }
+
+  void removeMatching(bool test(E element)) {
+    throw new UnsupportedError(
+        "Cannot remove from an unmodifiable list");
+  }
+  void sort([Comparator<E> compare]) {
+    throw new UnsupportedError(
+        "Cannot modify an unmodifiable list");
+  }
+
+  void clear() {
+    throw new UnsupportedError(
+        "Cannot clear an unmodifiable list");
+  }
+
+  E removeAt(int index) {
+    throw new UnsupportedError(
+        "Cannot remove from an unmodifiable list");
+  }
+
+  E removeLast() {
+    throw new UnsupportedError(
+        "Cannot remove from an unmodifiable list");
+  }
+
+  void setRange(int start, int length, List<E> from, [int startFrom]) {
+    throw new UnsupportedError(
+        "Cannot modify an unmodifiable list");
+  }
+
+  void removeRange(int start, int length) {
+    throw new UnsupportedError(
+        "Cannot remove from an unmodifiable list");
+  }
+
+  void insertRange(int start, int length, [E initialValue]) {
+    throw new UnsupportedError(
+        "Cannot insert range in an unmodifiable list");
+  }
+}
+
+/**
+ * Iterates over a [List] in growing index order.
+ */
+class ListIterator<E> implements Iterator<E> {
+  final List<E> _list;
+  int _position;
+  E _current;
+
+  ListIterator(this._list) : _position = -1;
+
+  bool moveNext() {
+    int nextPosition = _position + 1;
+    if (nextPosition < _list.length) {
+      _current = _list[nextPosition];
+      _position = nextPosition;
+      return true;
+    }
+    _position = _list.length;
+    _current = null;
+    return false;
+  }
+
+  E get current => _current;
+}
+
+class MappedList<S, T> extends NonExtensibleListMixin<T> {
+  final List<S> _list;
+  // TODO(ahe): Restore type when feature is implemented in dart2js
+  // checked mode. http://dartbug.com/7733
+  final /* _Transformation<S, T> */ _f;
+
+  MappedList(this._list, T this._f(S element));
+
+  T operator[](int index) => _f(_list[index]);
+  int get length => _list.length;
+}
+
+/**
+ * An immutable view of a [List].
+ */
+class ListView<E> extends NonExtensibleListMixin<E> {
+  final List<E> _list;
+  final int _offset;
+  final int _length;
+
+  /**
+   * If the given length is `null` then the ListView's length is bound by
+   * the backed [list].
+   */
+  ListView(List<E> list, this._offset, this._length) : _list = list {
+    if (_offset is! int || _offset < 0) {
+      throw new ArgumentError(_offset);
+    }
+    if (_length != null &&
+        (_length is! int || _length < 0)) {
+      throw new ArgumentError(_length);
+    }
+  }
+
+  int get length {
+    int originalLength = _list.length;
+    int skipLength = originalLength - _offset;
+    if (skipLength < 0) return 0;
+    if (_length == null || _length > skipLength) return skipLength;
+    return _length;
+  }
+
+  E operator[](int index) {
+    int skipIndex = index + _offset;
+    if (index < 0 ||
+        (_length != null && index >= _length) ||
+        index + _offset >= _list.length) {
+      throw new RangeError.value(index);
+    }
+    return _list[index + _offset];
+  }
+
+  ListView<E> skip(int skipCount) {
+    if (skipCount is! int || skipCount < 0) {
+      throw new ArgumentError(skipCount);
+    }
+    return new ListView(_list, _offset + skipCount, _length);
+  }
+
+  ListView<E> take(int takeCount) {
+    if (takeCount is! int || takeCount < 0) {
+      throw new ArgumentError(takeCount);
+    }
+    int newLength = takeCount;
+    if (_length != null && takeCount > _length) newLength = _length;
+    return new ListView(_list, _offset, newLength);
+  }
+}
diff --git a/sdk/lib/core/collection.dart b/sdk/lib/core/collection.dart
index 23b08e6..48ab1de 100644
--- a/sdk/lib/core/collection.dart
+++ b/sdk/lib/core/collection.dart
@@ -5,11 +5,83 @@
 part of dart.core;
 
 /**
- * The common interface of all collections.
+ * A collection of individual elements.
  *
- * The [Collection] class contains a skeleton implementation of
- * an iterator based collection.
+ * A [Collection] contains some elements in a structure optimized
+ * for certain operations. Different collections are optimized for different
+ * uses.
+ *
+ * A collection can be updated by adding or removing elements.
+ *
+ * Collections are [Iterable]. The order of iteration is defined by
+ * each type of collection.
  */
 abstract class Collection<E> extends Iterable<E> {
   const Collection();
+
+  /**
+   * Adds an element to this collection.
+   */
+  void add(E element);
+
+  /**
+   * Adds all of [elements] to this collection.
+   *
+   * Equivalent to adding each element in [elements] using [add],
+   * but some collections may be able to optimize it.
+   */
+  void addAll(Iterable<E> elements) {
+    for (E element in elements) {
+      add(element);
+    }
+  }
+
+  /**
+   * Removes an instance of [element] from this collection.
+   *
+   * This removes only one instance of the element for collections that can
+   * contain the same element more than once (e.g., [List]). Which instance
+   * is removed is decided by the collection.
+   *
+   * Has no effect if the elements is not in this collection.
+   */
+  void remove(Object element);
+
+  /**
+   * Removes all of [elements] from this collection.
+   *
+   * Equivalent to calling [remove] once for each element in
+   * [elements], but may be faster for some collections.
+   */
+  void removeAll(Iterable elements) {
+    IterableMixinWorkaround.removeAll(this, elements);
+  }
+
+  /**
+   * Removes all elements of this collection that are not
+   * in [elements].
+   *
+   * For [Set]s, this is the intersection of the two original sets.
+   */
+  void retainAll(Iterable elements) {
+    IterableMixinWorkaround.retainAll(this, elements);
+  }
+
+  /**
+   * Removes all elements of this collection that satisfy [test].
+   *
+   * An elements [:e:] satisfies [test] if [:test(e):] is true.
+   */
+  void removeMatching(bool test(E element)) {
+    IterableMixinWorkaround.removeMatching(this, test);
+  }
+
+  /**
+   * Removes all elements of this collection that fail to satisfy [test].
+   *
+   * An elements [:e:] satisfies [test] if [:test(e):] is true.
+   */
+  void retainMatching(bool test(E element)) {
+    IterableMixinWorkaround.retainMatching(this, test);
+  }
 }
diff --git a/sdk/lib/core/core.dart b/sdk/lib/core/core.dart
index af086a7..706b92d 100644
--- a/sdk/lib/core/core.dart
+++ b/sdk/lib/core/core.dart
@@ -5,6 +5,7 @@
 library dart.core;
 
 import "dart:collection";
+import "dart:collection-dev";
 
 part "bool.dart";
 part "collection.dart";
@@ -33,7 +34,6 @@
 part "regexp.dart";
 part "set.dart";
 part "sink.dart";
-part "sort.dart";
 part "stopwatch.dart";
 part "string.dart";
 part "string_buffer.dart";
diff --git a/sdk/lib/core/corelib_sources.gypi b/sdk/lib/core/corelib_sources.gypi
index dd48fd0..b502e96 100644
--- a/sdk/lib/core/corelib_sources.gypi
+++ b/sdk/lib/core/corelib_sources.gypi
@@ -30,7 +30,6 @@
     'queue.dart',
     'regexp.dart',
     'set.dart',
-    'sort.dart',
     'sink.dart',
     'stopwatch.dart',
     'string.dart',
diff --git a/sdk/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
index a2cc9cd..896d356 100644
--- a/sdk/lib/core/iterable.dart
+++ b/sdk/lib/core/iterable.dart
@@ -372,227 +372,6 @@
   }
 }
 
-typedef T _Transformation<S, T>(S value);
-
-class MappedIterable<S, T> extends Iterable<T> {
-  final Iterable<S> _iterable;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _Transformation<S, T> */ _f;
-
-  MappedIterable(this._iterable, T this._f(S element));
-
-  Iterator<T> get iterator => new MappedIterator<S, T>(_iterable.iterator, _f);
-
-  // Length related functions are independent of the mapping.
-  int get length => _iterable.length;
-  bool get isEmpty => _iterable.isEmpty;
-}
-
-class MappedIterator<S, T> extends Iterator<T> {
-  T _current;
-  final Iterator<S> _iterator;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _Transformation<S, T> */ _f;
-
-  MappedIterator(this._iterator, T this._f(S element));
-
-  bool moveNext() {
-    if (_iterator.moveNext()) {
-      _current = _f(_iterator.current);
-      return true;
-    } else {
-      _current = null;
-      return false;
-    }
-  }
-
-  T get current => _current;
-}
-
-typedef bool _ElementPredicate<E>(E element);
-
-class WhereIterable<E> extends Iterable<E> {
-  final Iterable<E> _iterable;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _ElementPredicate */ _f;
-
-  WhereIterable(this._iterable, bool this._f(E element));
-
-  Iterator<E> get iterator => new WhereIterator<E>(_iterable.iterator, _f);
-}
-
-class WhereIterator<E> extends Iterator<E> {
-  final Iterator<E> _iterator;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _ElementPredicate */ _f;
-
-  WhereIterator(this._iterator, bool this._f(E element));
-
-  bool moveNext() {
-    while (_iterator.moveNext()) {
-      if (_f(_iterator.current)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  E get current => _iterator.current;
-}
-
-class TakeIterable<E> extends Iterable<E> {
-  final Iterable<E> _iterable;
-  final int _takeCount;
-
-  TakeIterable(this._iterable, this._takeCount) {
-    if (_takeCount is! int || _takeCount < 0) {
-      throw new ArgumentError(_takeCount);
-    }
-  }
-
-  Iterator<E> get iterator {
-    return new TakeIterator<E>(_iterable.iterator, _takeCount);
-  }
-}
-
-class TakeIterator<E> extends Iterator<E> {
-  final Iterator<E> _iterator;
-  int _remaining;
-
-  TakeIterator(this._iterator, this._remaining) {
-    assert(_remaining is int && _remaining >= 0);
-  }
-
-  bool moveNext() {
-    _remaining--;
-    if (_remaining >= 0) {
-      return _iterator.moveNext();
-    }
-    _remaining = -1;
-    return false;
-  }
-
-  E get current {
-    if (_remaining < 0) return null;
-    return _iterator.current;
-  }
-}
-
-class TakeWhileIterable<E> extends Iterable<E> {
-  final Iterable<E> _iterable;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _ElementPredicate */ _f;
-
-  TakeWhileIterable(this._iterable, bool this._f(E element));
-
-  Iterator<E> get iterator {
-    return new TakeWhileIterator<E>(_iterable.iterator, _f);
-  }
-}
-
-class TakeWhileIterator<E> extends Iterator<E> {
-  final Iterator<E> _iterator;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _ElementPredicate */ _f;
-  bool _isFinished = false;
-
-  TakeWhileIterator(this._iterator, bool this._f(E element));
-
-  bool moveNext() {
-    if (_isFinished) return false;
-    if (!_iterator.moveNext() || !_f(_iterator.current)) {
-      _isFinished = true;
-      return false;
-    }
-    return true;
-  }
-
-  E get current {
-    if (_isFinished) return null;
-    return _iterator.current;
-  }
-}
-
-class SkipIterable<E> extends Iterable<E> {
-  final Iterable<E> _iterable;
-  final int _skipCount;
-
-  SkipIterable(this._iterable, this._skipCount) {
-    if (_skipCount is! int || _skipCount < 0) {
-      throw new ArgumentError(_skipCount);
-    }
-  }
-
-  Iterable<E> skip(int n) {
-    if (n is! int || n < 0) {
-      throw new ArgumentError(n);
-    }
-    return new SkipIterable<E>(_iterable, _skipCount + n);
-  }
-
-  Iterator<E> get iterator {
-    return new SkipIterator<E>(_iterable.iterator, _skipCount);
-  }
-}
-
-class SkipIterator<E> extends Iterator<E> {
-  final Iterator<E> _iterator;
-  int _skipCount;
-
-  SkipIterator(this._iterator, this._skipCount) {
-    assert(_skipCount is int && _skipCount >= 0);
-  }
-
-  bool moveNext() {
-    for (int i = 0; i < _skipCount; i++) _iterator.moveNext();
-    _skipCount = 0;
-    return _iterator.moveNext();
-  }
-
-  E get current => _iterator.current;
-}
-
-class SkipWhileIterable<E> extends Iterable<E> {
-  final Iterable<E> _iterable;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _ElementPredicate */ _f;
-
-  SkipWhileIterable(this._iterable, bool this._f(E element));
-
-  Iterator<E> get iterator {
-    return new SkipWhileIterator<E>(_iterable.iterator, _f);
-  }
-}
-
-class SkipWhileIterator<E> extends Iterator<E> {
-  final Iterator<E> _iterator;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _ElementPredicate */ _f;
-  bool _hasSkipped = false;
-
-  SkipWhileIterator(this._iterator, bool this._f(E element));
-
-  bool moveNext() {
-    if (!_hasSkipped) {
-      _hasSkipped = true;
-      while (_iterator.moveNext()) {
-        if (!_f(_iterator.current)) return true;
-      }
-    }
-    return _iterator.moveNext();
-  }
-
-  E get current => _iterator.current;
-}
-
 
 typedef E _Generator<E>(int index);
 
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index a2c299a..2ab0a06 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -190,246 +190,3 @@
    */
   void insertRange(int start, int length, [E fill]);
 }
-
-/**
- * An unmodifiable [List].
- */
-abstract class NonExtensibleListMixin<E>
-    extends Iterable<E> implements List<E> {
-
-  Iterator<E> get iterator => new ListIterator(this);
-
-  void forEach(f(E element)) {
-    for (int i = 0; i < this.length; i++) f(this[i]);
-  }
-
-  bool contains(E value) {
-    for (int i = 0; i < length; i++) {
-      if (this[i] == value) return true;
-    }
-    return false;
-  }
-
-  reduce(initialValue, combine(previousValue, E element)) {
-    var value = initialValue;
-    for (int i = 0; i < this.length; i++) {
-      value = combine(value, this[i]);
-    }
-    return value;
-  }
-
-  bool every(bool f(E element)) {
-    for (int i = 0; i < this.length; i++) {
-      if (!f(this[i])) return false;
-    }
-    return true;
-  }
-
-  bool any(bool f(E element)) {
-    for (int i = 0; i < this.length; i++) {
-      if (f(this[i])) return true;
-    }
-    return false;
-  }
-
-  bool get isEmpty {
-    return this.length == 0;
-  }
-
-  E elementAt(int index) {
-    return this[index];
-  }
-
-  int indexOf(E value, [int start = 0]) {
-    for (int i = start; i < length; i++) {
-      if (this[i] == value) return i;
-    }
-    return -1;
-  }
-
-  int lastIndexOf(E value, [int start]) {
-    if (start == null) start = length - 1;
-    for (int i = start; i >= 0; i--) {
-      if (this[i] == value) return i;
-    }
-    return -1;
-  }
-
-  E get first {
-    if (length > 0) return this[0];
-    throw new StateError("No elements");
-  }
-
-  E get last {
-    if (length > 0) return this[length - 1];
-    throw new StateError("No elements");
-  }
-
-  E get single {
-    if (length == 1) return this[0];
-    if (length == 0) throw new StateError("No elements");
-    throw new StateError("More than one element");
-  }
-
-  List<E> getRange(int start, int length) {
-    List<E> result = <E>[];
-    for (int i = 0; i < length; i++) {
-      result.add(this[start + i]);
-    }
-    return result;
-  }
-
-  void operator []=(int index, E value) {
-    throw new UnsupportedError(
-        "Cannot modify an unmodifiable list");
-  }
-
-  void set length(int newLength) {
-    throw new UnsupportedError(
-        "Cannot change the length of an unmodifiable list");
-  }
-
-  void add(E value) {
-    throw new UnsupportedError(
-        "Cannot add to an unmodifiable list");
-  }
-
-  void addLast(E value) {
-    throw new UnsupportedError(
-        "Cannot add to an unmodifiable list");
-  }
-
-  void addAll(Iterable<E> iterable) {
-    throw new UnsupportedError(
-        "Cannot add to an unmodifiable list");
-  }
-
-  void sort([Comparator<E> compare]) {
-    throw new UnsupportedError(
-        "Cannot modify an unmodifiable list");
-  }
-
-  void clear() {
-    throw new UnsupportedError(
-        "Cannot clear an unmodifiable list");
-  }
-
-  E removeAt(int index) {
-    throw new UnsupportedError(
-        "Cannot remove in an unmodifiable list");
-  }
-
-  E removeLast() {
-    throw new UnsupportedError(
-        "Cannot remove in an unmodifiable list");
-  }
-
-  void setRange(int start, int length, List<E> from, [int startFrom]) {
-    throw new UnsupportedError(
-        "Cannot modify an unmodifiable list");
-  }
-
-  void removeRange(int start, int length) {
-    throw new UnsupportedError(
-        "Cannot remove in an unmodifiable list");
-  }
-
-  void insertRange(int start, int length, [E initialValue]) {
-    throw new UnsupportedError(
-        "Cannot insert range in an unmodifiable list");
-  }
-}
-
-/**
- * Iterates over a [Sequence] in growing index order.
- */
-class ListIterator<E> implements Iterator<E> {
-  final List<E> _list;
-  int _position;
-  E _current;
-
-  ListIterator(this._list) : _position = -1;
-
-  bool moveNext() {
-    int nextPosition = _position + 1;
-    if (nextPosition < _list.length) {
-      _current = _list[nextPosition];
-      _position = nextPosition;
-      return true;
-    }
-    _position = _list.length;
-    _current = null;
-    return false;
-  }
-
-  E get current => _current;
-}
-
-class MappedList<S, T> extends NonExtensibleListMixin<T> {
-  final List<S> _list;
-  // TODO(ahe): Restore type when feature is implemented in dart2js
-  // checked mode. http://dartbug.com/7733
-  final /* _Transformation<S, T> */ _f;
-
-  MappedList(this._list, T this._f(S element));
-
-  T operator[](int index) => _f(_list[index]);
-  int get length => _list.length;
-}
-
-/**
- * An immutable view of a [List].
- */
-class ListView<E> extends NonExtensibleListMixin<E> {
-  final List<E> _list;
-  final int _offset;
-  final int _length;
-
-  /**
-   * If the given length is `null` then the ListView's length is bound by
-   * the backed [list].
-   */
-  ListView(List<E> list, this._offset, this._length) : _list = list {
-    if (_offset is! int || _offset < 0) {
-      throw new ArgumentError(_offset);
-    }
-    if (_length != null &&
-        (_length is! int || _length < 0)) {
-      throw new ArgumentError(_length);
-    }
-  }
-
-  int get length {
-    int originalLength = _list.length;
-    int skipLength = originalLength - _offset;
-    if (skipLength < 0) return 0;
-    if (_length == null || _length > skipLength) return skipLength;
-    return _length;
-  }
-
-  E operator[](int index) {
-    int skipIndex = index + _offset;
-    if (index < 0 ||
-        (_length != null && index >= _length) ||
-        index + _offset >= _list.length) {
-      throw new RangeError.value(index);
-    }
-    return _list[index + _offset];
-  }
-
-  ListView<E> skip(int skipCount) {
-    if (skipCount is! int || skipCount < 0) {
-      throw new ArgumentError(skipCount);
-    }
-    return new ListView(_list, _offset + skipCount, _length);
-  }
-
-  ListView<E> take(int takeCount) {
-    if (takeCount is! int || takeCount < 0) {
-      throw new ArgumentError(takeCount);
-    }
-    int newLength = takeCount;
-    if (_length != null && takeCount > _length) newLength = _length;
-    return new ListView(_list, _offset, newLength);
-  }
-}
diff --git a/sdk/lib/core/queue.dart b/sdk/lib/core/queue.dart
index 9a000c3..8f20efd 100644
--- a/sdk/lib/core/queue.dart
+++ b/sdk/lib/core/queue.dart
@@ -201,6 +201,44 @@
     return _sentinel._next.remove();
   }
 
+  void remove(Object o) {
+    DoubleLinkedQueueEntry<E> entry = firstEntry();
+    while (!identical(entry, _sentinel)) {
+      if (entry.element == o) {
+        entry.remove();
+        return;
+      }
+      entry = entry._next;
+    }
+  }
+
+  void removeAll(Iterable elements) {
+    // Use this method when remove is slow and removeMatching more efficient.
+    IterableMixinWorkaround.removeAllList(this, elements);
+  }
+
+  void removeMatching(bool test(E element)) {
+    DoubleLinkedQueueEntry<E> entry = firstEntry();
+    while (!identical(entry, _sentinel)) {
+      DoubleLinkedQueueEntry<E> next = entry._next;
+      if (test(entry.element)) {
+        entry.remove();
+      }
+      entry = next;
+    }
+  }
+
+  void retainMatching(bool test(E element)) {
+    DoubleLinkedQueueEntry<E> entry = firstEntry();
+    while (!identical(entry, _sentinel)) {
+      DoubleLinkedQueueEntry<E> next = entry._next;
+      if (!test(entry.element)) {
+        entry.remove();
+      }
+      entry = next;
+    }
+  }
+
   E get first {
     return _sentinel._next.element;
   }
diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart
index 95a633a..556c1fa 100644
--- a/sdk/lib/core/set.dart
+++ b/sdk/lib/core/set.dart
@@ -9,12 +9,12 @@
  * without duplicates.
  */
 abstract class Set<E> extends Collection<E> {
-  factory Set() => new _HashSetImpl<E>();
+  factory Set() => new HashSet<E>();
 
   /**
    * Creates a [Set] that contains all elements of [other].
    */
-  factory Set.from(Iterable<E> other) => new _HashSetImpl<E>.from(other);
+  factory Set.from(Iterable<E> other) => new HashSet<E>.from(other);
 
   /**
    * Returns true if [value] is in the set.
@@ -32,17 +32,7 @@
    * in the set. Returns false otherwise. The method has no effect
    * if [value] value was not in the set.
    */
-  bool remove(E value);
-
-  /**
-   * Adds all the elements of the given [iterable] to the set.
-   */
-  void addAll(Iterable<E> iterable);
-
-  /**
-   * Removes all the elements of the given collection from the set.
-   */
-  void removeAll(Iterable<E> iterable);
+  bool remove(Object value);
 
   /**
    * Returns true if [collection] contains all the elements of this
@@ -66,27 +56,22 @@
    * Removes all elements in the set.
    */
   void clear();
-
 }
 
-abstract class HashSet<E> extends Set<E> {
-  factory HashSet() => new _HashSetImpl<E>();
+
+class HashSet<E> extends Collection<E> implements Set<E> {
+  // The map backing this set. The associations in this map are all
+  // of the form element -> element. If a value is not in the map,
+  // then it is not in the set.
+  final _HashMapImpl<E, E> _backingMap;
+
+  HashSet() : _backingMap = new _HashMapImpl<E, E>();
 
   /**
    * Creates a [Set] that contains all elements of [other].
    */
-  factory HashSet.from(Iterable<E> other) => new _HashSetImpl<E>.from(other);
-}
-
-
-class _HashSetImpl<E> extends Iterable<E> implements HashSet<E> {
-
-  _HashSetImpl() {
-    _backingMap = new _HashMapImpl<E, E>();
-  }
-
-  factory _HashSetImpl.from(Iterable<E> other) {
-    Set<E> set = new _HashSetImpl<E>();
+  factory HashSet.from(Iterable<E> other) {
+    Set<E> set = new HashSet<E>();
     for (final e in other) {
       set.add(e);
     }
@@ -101,20 +86,14 @@
     _backingMap[value] = value;
   }
 
-  bool contains(E value) {
-    return _backingMap.containsKey(value);
-  }
-
-  bool remove(E value) {
+  bool remove(Object value) {
     if (!_backingMap.containsKey(value)) return false;
     _backingMap.remove(value);
     return true;
   }
 
-  void addAll(Iterable<E> iterable) {
-    for (E element in iterable) {
-      add(element);
-    }
+  bool contains(E value) {
+    return _backingMap.containsKey(value);
   }
 
   Set<E> intersection(Collection<E> collection) {
@@ -129,12 +108,6 @@
     return new Set<E>.from(other).containsAll(this);
   }
 
-  void removeAll(Iterable<E> iterable) {
-    for (E value in iterable) {
-      remove(value);
-    }
-  }
-
   bool containsAll(Collection<E> collection) {
     return collection.every((E value) {
       return contains(value);
@@ -160,16 +133,11 @@
   String toString() {
     return Collections.collectionToString(this);
   }
-
-  // The map backing this set. The associations in this map are all
-  // of the form element -> element. If a value is not in the map,
-  // then it is not in the set.
-  _HashMapImpl<E, E> _backingMap;
 }
 
 class _HashSetIterator<E> implements Iterator<E> {
 
-  _HashSetIterator(_HashSetImpl<E> set)
+  _HashSetIterator(HashSet<E> set)
     : _keysIterator = set._backingMap._keys.iterator;
 
   E get current {
diff --git a/sdk/lib/core/sink.dart b/sdk/lib/core/sink.dart
index ef1c2aa..d0dafc0 100644
--- a/sdk/lib/core/sink.dart
+++ b/sdk/lib/core/sink.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+part of dart.core;
 /**
  * An interface for an object that can receive a sequence of values.
  */
@@ -24,6 +25,14 @@
   final _CollectionSinkCallback<T> callback;
   bool _isClosed = false;
 
+  /**
+   * Create a sink that stores incoming values in a collection.
+   *
+   * The [collection] is the collection to add the values to.
+   *
+   * If [callback] is provided, then it's called with the collection as arugment
+   * when the sink's [close] method is called.
+   */
   CollectionSink(this.collection, [void callback(Collection<T> collection)])
       : this.callback = callback;
 
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 614cb9f..01a6bfe 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -2,6 +2,7 @@
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:collection-dev';
 import 'dart:html_common';
 import 'dart:indexed_db';
 import 'dart:isolate';
@@ -54,36 +55,39 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AbstractWorker; @docsEditable true
+
+@DocsEditable
+@DomName('AbstractWorker')
 class AbstractWorker extends EventTarget native "*AbstractWorker" {
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   AbstractWorkerEvents get on =>
     new AbstractWorkerEvents(this);
 
-  /// @domName AbstractWorker.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('AbstractWorker.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName AbstractWorker.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('AbstractWorker.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName AbstractWorker.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('AbstractWorker.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class AbstractWorkerEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   AbstractWorkerEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -91,65 +95,67 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAnchorElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLAnchorElement')
 class AnchorElement extends Element native "*HTMLAnchorElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnchorElement({String href}) {
     var e = document.$dom_createElement("a");
     if (href != null) e.href = href;
     return e;
   }
 
-  /// @domName HTMLAnchorElement.download; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.download')
   String download;
 
-  /// @domName HTMLAnchorElement.hash; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.hash')
   String hash;
 
-  /// @domName HTMLAnchorElement.host; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.host')
   String host;
 
-  /// @domName HTMLAnchorElement.hostname; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.hostname')
   String hostname;
 
-  /// @domName HTMLAnchorElement.href; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.href')
   String href;
 
-  /// @domName HTMLAnchorElement.hreflang; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.hreflang')
   String hreflang;
 
-  /// @domName HTMLAnchorElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.name')
   String name;
 
-  /// @domName HTMLAnchorElement.origin; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.origin')
   final String origin;
 
-  /// @domName HTMLAnchorElement.pathname; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.pathname')
   String pathname;
 
-  /// @domName HTMLAnchorElement.ping; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.ping')
   String ping;
 
-  /// @domName HTMLAnchorElement.port; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.port')
   String port;
 
-  /// @domName HTMLAnchorElement.protocol; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.protocol')
   String protocol;
 
-  /// @domName HTMLAnchorElement.rel; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.rel')
   String rel;
 
-  /// @domName HTMLAnchorElement.search; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.search')
   String search;
 
-  /// @domName HTMLAnchorElement.target; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.target')
   String target;
 
-  /// @domName HTMLAnchorElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.type')
   String type;
 
-  /// @domName HTMLAnchorElement.toString; @docsEditable true
+  @DocsEditable @DomName('HTMLAnchorElement.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -157,13 +163,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitAnimationEvent; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitAnimationEvent')
 class AnimationEvent extends Event native "*WebKitAnimationEvent" {
 
-  /// @domName WebKitAnimationEvent.animationName; @docsEditable true
+  @DocsEditable @DomName('WebKitAnimationEvent.animationName')
   final String animationName;
 
-  /// @domName WebKitAnimationEvent.elapsedTime; @docsEditable true
+  @DocsEditable @DomName('WebKitAnimationEvent.elapsedTime')
   final num elapsedTime;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -171,48 +179,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAppletElement; @docsEditable true
-class AppletElement extends Element native "*HTMLAppletElement" {
 
-  /// @domName HTMLAppletElement.align; @docsEditable true
-  String align;
-
-  /// @domName HTMLAppletElement.alt; @docsEditable true
-  String alt;
-
-  /// @domName HTMLAppletElement.archive; @docsEditable true
-  String archive;
-
-  /// @domName HTMLAppletElement.code; @docsEditable true
-  String code;
-
-  /// @domName HTMLAppletElement.codeBase; @docsEditable true
-  String codeBase;
-
-  /// @domName HTMLAppletElement.height; @docsEditable true
-  String height;
-
-  /// @domName HTMLAppletElement.hspace; @docsEditable true
-  String hspace;
-
-  /// @domName HTMLAppletElement.name; @docsEditable true
-  String name;
-
-  /// @domName HTMLAppletElement.object; @docsEditable true
-  String object;
-
-  /// @domName HTMLAppletElement.vspace; @docsEditable true
-  String vspace;
-
-  /// @domName HTMLAppletElement.width; @docsEditable true
-  String width;
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName DOMApplicationCache; @docsEditable true
+@DocsEditable
+@DomName('DOMApplicationCache')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.FIREFOX)
+@SupportedBrowser(SupportedBrowser.IE, '10')
+@SupportedBrowser(SupportedBrowser.OPERA)
+@SupportedBrowser(SupportedBrowser.SAFARI)
 class ApplicationCache extends EventTarget native "*DOMApplicationCache" {
 
   static const EventStreamProvider<Event> cachedEvent = const EventStreamProvider<Event>('cached');
@@ -231,7 +205,11 @@
 
   static const EventStreamProvider<Event> updateReadyEvent = const EventStreamProvider<Event>('updateready');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  /// Checks if this type is supported on the current platform.
+  static bool get supported => JS('bool', '!!(window.applicationCache)');
+
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ApplicationCacheEvents get on =>
     new ApplicationCacheEvents(this);
 
@@ -247,28 +225,28 @@
 
   static const int UPDATEREADY = 4;
 
-  /// @domName DOMApplicationCache.status; @docsEditable true
+  @DocsEditable @DomName('DOMApplicationCache.status')
   final int status;
 
-  /// @domName DOMApplicationCache.abort; @docsEditable true
+  @DocsEditable @DomName('DOMApplicationCache.abort')
   void abort() native;
 
-  /// @domName DOMApplicationCache.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('DOMApplicationCache.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName DOMApplicationCache.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('DOMApplicationCache.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName DOMApplicationCache.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('DOMApplicationCache.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName DOMApplicationCache.swapCache; @docsEditable true
+  @DocsEditable @DomName('DOMApplicationCache.swapCache')
   void swapCache() native;
 
-  /// @domName DOMApplicationCache.update; @docsEditable true
+  @DocsEditable @DomName('DOMApplicationCache.update')
   void update() native;
 
   Stream<Event> get onCached => cachedEvent.forTarget(this);
@@ -288,33 +266,33 @@
   Stream<Event> get onUpdateReady => updateReadyEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class ApplicationCacheEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   ApplicationCacheEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cached => this['cached'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get checking => this['checking'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get downloading => this['downloading'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get noUpdate => this['noupdate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get obsolete => this['obsolete'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get updateReady => this['updateready'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -322,49 +300,51 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAreaElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLAreaElement')
 class AreaElement extends Element native "*HTMLAreaElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AreaElement() => document.$dom_createElement("area");
 
-  /// @domName HTMLAreaElement.alt; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.alt')
   String alt;
 
-  /// @domName HTMLAreaElement.coords; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.coords')
   String coords;
 
-  /// @domName HTMLAreaElement.hash; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.hash')
   final String hash;
 
-  /// @domName HTMLAreaElement.host; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.host')
   final String host;
 
-  /// @domName HTMLAreaElement.hostname; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.hostname')
   final String hostname;
 
-  /// @domName HTMLAreaElement.href; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.href')
   String href;
 
-  /// @domName HTMLAreaElement.pathname; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.pathname')
   final String pathname;
 
-  /// @domName HTMLAreaElement.ping; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.ping')
   String ping;
 
-  /// @domName HTMLAreaElement.port; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.port')
   final String port;
 
-  /// @domName HTMLAreaElement.protocol; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.protocol')
   final String protocol;
 
-  /// @domName HTMLAreaElement.search; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.search')
   final String search;
 
-  /// @domName HTMLAreaElement.shape; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.shape')
   String shape;
 
-  /// @domName HTMLAreaElement.target; @docsEditable true
+  @DocsEditable @DomName('HTMLAreaElement.target')
   String target;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -372,24 +352,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ArrayBuffer
+@DocsEditable
+@DomName('ArrayBuffer')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class ArrayBuffer native "*ArrayBuffer" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ArrayBuffer(int length) => ArrayBuffer._create(length);
   static ArrayBuffer _create(int length) => JS('ArrayBuffer', 'new ArrayBuffer(#)', length);
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', 'typeof window.ArrayBuffer != "undefined"');
 
-  /// @domName ArrayBuffer.byteLength; @docsEditable true
+  @DocsEditable @DomName('ArrayBuffer.byteLength')
   final int byteLength;
 
-  /// @domName ArrayBuffer.slice;
+  @DomName('ArrayBuffer.slice')
   ArrayBuffer slice(int begin, [int end]) {
     // IE10 supports ArrayBuffers but does not have the slice method.
     if (JS('bool', '!!#.slice', this)) {
@@ -423,20 +404,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ArrayBufferView; @docsEditable true
+
+@DocsEditable
+@DomName('ArrayBufferView')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class ArrayBufferView native "*ArrayBufferView" {
 
-  /// @domName ArrayBufferView.buffer; @docsEditable true
+  @DocsEditable @DomName('ArrayBufferView.buffer')
   final ArrayBuffer buffer;
 
-  /// @domName ArrayBufferView.byteLength; @docsEditable true
+  @DocsEditable @DomName('ArrayBufferView.byteLength')
   final int byteLength;
 
-  /// @domName ArrayBufferView.byteOffset; @docsEditable true
+  @DocsEditable @DomName('ArrayBufferView.byteOffset')
   final int byteOffset;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -444,33 +427,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Attr; @docsEditable true
+
+@DocsEditable
+@DomName('Attr')
 class Attr extends Node native "*Attr" {
-
-  /// @domName Attr.isId; @docsEditable true
-  final bool isId;
-
-  /// @domName Attr.name; @docsEditable true
-  final String name;
-
-  /// @domName Attr.ownerElement; @docsEditable true
-  final Element ownerElement;
-
-  /// @domName Attr.specified; @docsEditable true
-  final bool specified;
-
-  /// @domName Attr.value; @docsEditable true
-  String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAudioElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLAudioElement')
 class AudioElement extends MediaElement native "*HTMLAudioElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AudioElement([String src]) {
     if (!?src) {
       return AudioElement._create();
@@ -489,10 +461,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBRElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLBRElement')
 class BRElement extends Element native "*HTMLBRElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory BRElement() => document.$dom_createElement("br");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -500,10 +474,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName BarInfo; @docsEditable true
+
+@DocsEditable
+@DomName('BarInfo')
 class BarInfo native "*BarInfo" {
 
-  /// @domName BarInfo.visible; @docsEditable true
+  @DocsEditable @DomName('BarInfo.visible')
   final bool visible;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -511,16 +487,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBaseElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLBaseElement')
 class BaseElement extends Element native "*HTMLBaseElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory BaseElement() => document.$dom_createElement("base");
 
-  /// @domName HTMLBaseElement.href; @docsEditable true
+  @DocsEditable @DomName('HTMLBaseElement.href')
   String href;
 
-  /// @domName HTMLBaseElement.target; @docsEditable true
+  @DocsEditable @DomName('HTMLBaseElement.target')
   String target;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -528,24 +506,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBaseFontElement; @docsEditable true
-class BaseFontElement extends Element native "*HTMLBaseFontElement" {
 
-  /// @domName HTMLBaseFontElement.color; @docsEditable true
-  String color;
-
-  /// @domName HTMLBaseFontElement.face; @docsEditable true
-  String face;
-
-  /// @domName HTMLBaseFontElement.size; @docsEditable true
-  int size;
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName BatteryManager; @docsEditable true
+@DocsEditable
+@DomName('BatteryManager')
 class BatteryManager extends EventTarget native "*BatteryManager" {
 
   static const EventStreamProvider<Event> chargingChangeEvent = const EventStreamProvider<Event>('chargingchange');
@@ -556,32 +519,33 @@
 
   static const EventStreamProvider<Event> levelChangeEvent = const EventStreamProvider<Event>('levelchange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   BatteryManagerEvents get on =>
     new BatteryManagerEvents(this);
 
-  /// @domName BatteryManager.charging; @docsEditable true
+  @DocsEditable @DomName('BatteryManager.charging')
   final bool charging;
 
-  /// @domName BatteryManager.chargingTime; @docsEditable true
+  @DocsEditable @DomName('BatteryManager.chargingTime')
   final num chargingTime;
 
-  /// @domName BatteryManager.dischargingTime; @docsEditable true
+  @DocsEditable @DomName('BatteryManager.dischargingTime')
   final num dischargingTime;
 
-  /// @domName BatteryManager.level; @docsEditable true
+  @DocsEditable @DomName('BatteryManager.level')
   final num level;
 
-  /// @domName BatteryManager.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('BatteryManager.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName BatteryManager.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('BatteryManager.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName BatteryManager.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('BatteryManager.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onChargingChange => chargingChangeEvent.forTarget(this);
@@ -593,21 +557,21 @@
   Stream<Event> get onLevelChange => levelChangeEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class BatteryManagerEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   BatteryManagerEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get chargingChange => this['chargingchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get chargingTimeChange => this['chargingtimechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dischargingTimeChange => this['dischargingtimechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get levelChange => this['levelchange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -615,10 +579,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName BeforeLoadEvent; @docsEditable true
+
+@DocsEditable
+@DomName('BeforeLoadEvent')
 class BeforeLoadEvent extends Event native "*BeforeLoadEvent" {
 
-  /// @domName BeforeLoadEvent.url; @docsEditable true
+  @DocsEditable @DomName('BeforeLoadEvent.url')
   final String url;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -626,10 +592,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Blob
+@DocsEditable
+@DomName('Blob')
 class Blob native "*Blob" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory Blob(List blobParts, [String type, String endings]) {
     if (!?type) {
       return Blob._create(blobParts);
@@ -640,13 +607,13 @@
     return Blob._create(blobParts, type, endings);
   }
 
-  /// @domName Blob.size; @docsEditable true
+  @DocsEditable @DomName('Blob.size')
   final int size;
 
-  /// @domName Blob.type; @docsEditable true
+  @DocsEditable @DomName('Blob.type')
   final String type;
 
-  /// @domName Blob.slice; @docsEditable true
+  @DocsEditable @DomName('Blob.slice')
   Blob slice([int start, int end, String contentType]) native;
 
   static Blob _create([List blobParts = null, String type, String endings]) {
@@ -674,7 +641,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBodyElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLBodyElement')
 class BodyElement extends Element native "*HTMLBodyElement" {
 
   static const EventStreamProvider<Event> beforeUnloadEvent = const EventStreamProvider<Event>('beforeunload');
@@ -703,16 +672,14 @@
 
   static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
 
-  ///@docsEditable true
+  @DocsEditable
   factory BodyElement() => document.$dom_createElement("body");
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   BodyElementEvents get on =>
     new BodyElementEvents(this);
 
-  /// @domName HTMLBodyElement.vLink; @docsEditable true
-  String vLink;
-
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
   Stream<Event> get onBlur => blurEvent.forTarget(this);
@@ -740,48 +707,48 @@
   Stream<Event> get onUnload => unloadEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class BodyElementEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   BodyElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeUnload => this['beforeunload'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get hashChange => this['hashchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get offline => this['offline'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get online => this['online'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get popState => this['popstate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get resize => this['resize'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get storage => this['storage'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unload => this['unload'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -789,62 +756,64 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLButtonElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLButtonElement')
 class ButtonElement extends Element native "*HTMLButtonElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ButtonElement() => document.$dom_createElement("button");
 
-  /// @domName HTMLButtonElement.autofocus; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLButtonElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.disabled')
   bool disabled;
 
-  /// @domName HTMLButtonElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.form')
   final FormElement form;
 
-  /// @domName HTMLButtonElement.formAction; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.formAction')
   String formAction;
 
-  /// @domName HTMLButtonElement.formEnctype; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLButtonElement.formMethod; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLButtonElement.formNoValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLButtonElement.formTarget; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.formTarget')
   String formTarget;
 
-  /// @domName HTMLButtonElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLButtonElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.name')
   String name;
 
-  /// @domName HTMLButtonElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.type')
   String type;
 
-  /// @domName HTMLButtonElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLButtonElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLButtonElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.value')
   String value;
 
-  /// @domName HTMLButtonElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLButtonElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLButtonElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLButtonElement.setCustomValidity')
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -852,7 +821,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CDATASection; @docsEditable true
+
+@DocsEditable
+@DomName('CDATASection')
 class CDataSection extends Text native "*CDATASection" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -860,10 +831,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLCanvasElement
+@DocsEditable
+@DomName('HTMLCanvasElement')
 class CanvasElement extends Element native "*HTMLCanvasElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory CanvasElement({int width, int height}) {
     var e = document.$dom_createElement("canvas");
     if (width != null) e.width = width;
@@ -871,56 +843,14 @@
     return e;
   }
 
-  /// The height of this canvas element in CSS pixels.
-  /// @domName HTMLCanvasElement.height; @docsEditable true
+  @DocsEditable @DomName('HTMLCanvasElement.height')
   int height;
 
-  /// The width of this canvas element in CSS pixels.
-  /// @domName HTMLCanvasElement.width; @docsEditable true
+  @DocsEditable @DomName('HTMLCanvasElement.width')
   int width;
 
-  /**
-   * Returns a data URI containing a representation of the image in the
-   * format specified by type (defaults to 'image/png').
-   *
-   * Data Uri format is as follow `data:[<MIME-type>][;charset=<encoding>][;base64],<data>`
-   *
-   * Optional parameter [quality] in the range of 0.0 and 1.0 can be used when requesting [type]
-   * 'image/jpeg' or 'image/webp'. If [quality] is not passed the default
-   * value is used. Note: the default value varies by browser.
-   *
-   * If the height or width of this canvas element is 0, then 'data:' is returned,
-   * representing no data.
-   *
-   * If the type requested is not 'image/png', and the returned value is
-   * 'data:image/png', then the requested type is not supported.
-   *
-   * Example usage:
-   *
-   *     CanvasElement canvas = new CanvasElement();
-   *     var ctx = canvas.context2d
-   *     ..fillStyle = "rgb(200,0,0)"
-   *     ..fillRect(10, 10, 55, 50);
-   *     var dataUrl = canvas.toDataURL("image/jpeg", 0.95);
-   *     // The Data Uri would look similar to
-   *     // 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
-   *     // AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
-   *     // 9TXL0Y4OHwAAAABJRU5ErkJggg=='
-   *     //Create a new image element from the data URI.
-   *     var img = new ImageElement();
-   *     img.src = dataUrl;
-   *     document.body.children.add(img);
-   *
-   * See also:
-   *
-   * * [Data URI Scheme](http://en.wikipedia.org/wiki/Data_URI_scheme) from Wikipedia.
-   *
-   * * [HTMLCanvasElement](https://developer.mozilla.org/en-US/docs/DOM/HTMLCanvasElement) from MDN.
-   *
-   * * [toDataUrl](http://dev.w3.org/html5/spec/the-canvas-element.html#dom-canvas-todataurl) from W3C.
-   */
-  /// @domName HTMLCanvasElement.toDataURL; @docsEditable true
   @JSName('toDataURL')
+  @DocsEditable @DomName('HTMLCanvasElement.toDataURL')
   String toDataUrl(String type, [num quality]) native;
 
 
@@ -932,48 +862,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/**
- * An opaque canvas object representing a gradient.
- *
- * Created by calling [createLinearGradient] or [createRadialGradient] on a
- * [CanvasRenderingContext2D] object.
- *
- * Example usage:
- *
- *     var canvas = new CanvasElement(width: 600, height: 600);
- *     var ctx = canvas.context2d;
- *     ctx.clearRect(0, 0, 600, 600);
- *     ctx.save();
- *     // Create radial gradient.
- *     CanvasGradient gradient = ctx.createRadialGradient(0, 0, 0, 0, 0, 600);
- *     gradient.addColorStop(0, '#000');
- *     gradient.addColorStop(1, 'rgb(255, 255, 255)');
- *     // Assign gradients to fill.
- *     ctx.fillStyle = gradient;
- *     // Draw a rectangle with a gradient fill.
- *     ctx.fillRect(0, 0, 600, 600);
- *     ctx.save();
- *     document.body.children.add(canvas);
- *
- * See also:
- *
- * * [CanvasGradient](https://developer.mozilla.org/en-US/docs/DOM/CanvasGradient) from MDN.
- * * [CanvasGradient](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvasgradient) from whatwg.
- * * [CanvasGradient](http://www.w3.org/TR/2010/WD-2dcontext-20100304/#canvasgradient) from W3C.
- */
-/// @domName CanvasGradient; @docsEditable true
+
+@DocsEditable
+@DomName('CanvasGradient')
 class CanvasGradient native "*CanvasGradient" {
 
-  /**
-   * Adds a color stop to this gradient at the offset.
-   *
-   * The [offset] can range between 0.0 and 1.0.
-   *
-   * See also:
-   *
-   * * [Multiple Color Stops](https://developer.mozilla.org/en-US/docs/CSS/linear-gradient#Gradient_with_multiple_color_stops) from MDN.
-   */
-  /// @domName CanvasGradient.addColorStop; @docsEditable true
+  @DocsEditable @DomName('CanvasGradient.addColorStop')
   void addColorStop(num offset, String color) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -981,34 +875,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/**
- * An opaque object representing a pattern of image, canvas, or video.
- *
- * Created by calling [createPattern] on a [CanvasRenderingContext2D] object.
- *
- * Example usage:
- *
- *     var canvas = new CanvasElement(width: 600, height: 600);
- *     var ctx = canvas.context2d;
- *     var img = new ImageElement();
- *     // Image src needs to be loaded before pattern is applied.
- *     img.on.load.add((event) {
- *       // When the image is loaded, create a pattern
- *       // from the ImageElement.
- *       CanvasPattern pattern = ctx.createPattern(img, 'repeat');
- *       ctx.rect(0, 0, canvas.width, canvas.height);
- *       ctx.fillStyle = pattern;
- *       ctx.fill();
- *     });
- *     img.src = "images/foo.jpg";
- *     document.body.children.add(canvas);
- *
- * See also:
- * * [CanvasPattern](https://developer.mozilla.org/en-US/docs/DOM/CanvasPattern) from MDN.
- * * [CanvasPattern](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvaspattern) from whatwg.
- * * [CanvasPattern](http://www.w3.org/TR/2010/WD-2dcontext-20100304/#canvaspattern) from W3C.
- */
-/// @domName CanvasPattern; @docsEditable true
+
+@DocsEditable
+@DomName('CanvasPattern')
 class CanvasPattern native "*CanvasPattern" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1016,17 +885,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/**
- * A rendering context for a canvas element.
- *
- * This context is extended by [CanvasRenderingContext2D] and
- * [WebGLRenderingContext].
- */
-/// @domName CanvasRenderingContext; @docsEditable true
+
+@DocsEditable
+@DomName('CanvasRenderingContext')
 class CanvasRenderingContext native "*CanvasRenderingContext" {
 
-  /// Reference to the canvas element to which this context belongs.
-  /// @domName CanvasRenderingContext.canvas; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext.canvas')
   final CanvasElement canvas;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1034,93 +898,91 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CanvasRenderingContext2D
+@DocsEditable
+@DomName('CanvasRenderingContext2D')
 class CanvasRenderingContext2D extends CanvasRenderingContext native "*CanvasRenderingContext2D" {
 
-  /// @domName CanvasRenderingContext2D.fillStyle; @docsEditable true
-  @Creates('String|CanvasGradient|CanvasPattern') @Returns('String|CanvasGradient|CanvasPattern')
+  @DocsEditable @DomName('CanvasRenderingContext2D.fillStyle') @Creates('String|CanvasGradient|CanvasPattern') @Returns('String|CanvasGradient|CanvasPattern')
   dynamic fillStyle;
 
-  /// @domName CanvasRenderingContext2D.font; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.font')
   String font;
 
-  /// @domName CanvasRenderingContext2D.globalAlpha; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.globalAlpha')
   num globalAlpha;
 
-  /// @domName CanvasRenderingContext2D.globalCompositeOperation; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   String globalCompositeOperation;
 
-  /// @domName CanvasRenderingContext2D.lineCap; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.lineCap')
   String lineCap;
 
-  /// @domName CanvasRenderingContext2D.lineDashOffset; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.lineDashOffset')
   num lineDashOffset;
 
-  /// @domName CanvasRenderingContext2D.lineJoin; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.lineJoin')
   String lineJoin;
 
-  /// @domName CanvasRenderingContext2D.lineWidth; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.lineWidth')
   num lineWidth;
 
-  /// @domName CanvasRenderingContext2D.miterLimit; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.miterLimit')
   num miterLimit;
 
-  /// @domName CanvasRenderingContext2D.shadowBlur; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.shadowBlur')
   num shadowBlur;
 
-  /// @domName CanvasRenderingContext2D.shadowColor; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.shadowColor')
   String shadowColor;
 
-  /// @domName CanvasRenderingContext2D.shadowOffsetX; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.shadowOffsetX')
   num shadowOffsetX;
 
-  /// @domName CanvasRenderingContext2D.shadowOffsetY; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.shadowOffsetY')
   num shadowOffsetY;
 
-  /// @domName CanvasRenderingContext2D.strokeStyle; @docsEditable true
-  @Creates('String|CanvasGradient|CanvasPattern') @Returns('String|CanvasGradient|CanvasPattern')
+  @DocsEditable @DomName('CanvasRenderingContext2D.strokeStyle') @Creates('String|CanvasGradient|CanvasPattern') @Returns('String|CanvasGradient|CanvasPattern')
   dynamic strokeStyle;
 
-  /// @domName CanvasRenderingContext2D.textAlign; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.textAlign')
   String textAlign;
 
-  /// @domName CanvasRenderingContext2D.textBaseline; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.textBaseline')
   String textBaseline;
 
-  /// @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.webkitBackingStorePixelRatio')
   final num webkitBackingStorePixelRatio;
 
-  /// @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.webkitImageSmoothingEnabled')
   bool webkitImageSmoothingEnabled;
 
-  /// @domName CanvasRenderingContext2D.webkitLineDash; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.webkitLineDash')
   List webkitLineDash;
 
-  /// @domName CanvasRenderingContext2D.webkitLineDashOffset; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.webkitLineDashOffset')
   num webkitLineDashOffset;
 
-  /// @domName CanvasRenderingContext2D.arc; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.arc')
   void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) native;
 
-  /// @domName CanvasRenderingContext2D.arcTo; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.arcTo')
   void arcTo(num x1, num y1, num x2, num y2, num radius) native;
 
-  /// @domName CanvasRenderingContext2D.beginPath; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.beginPath')
   void beginPath() native;
 
-  /// @domName CanvasRenderingContext2D.bezierCurveTo; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.bezierCurveTo')
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) native;
 
-  /// @domName CanvasRenderingContext2D.clearRect; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.clearRect')
   void clearRect(num x, num y, num width, num height) native;
 
-  /// @domName CanvasRenderingContext2D.clip; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.clip')
   void clip() native;
 
-  /// @domName CanvasRenderingContext2D.closePath; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.closePath')
   void closePath() native;
 
-  /// @domName CanvasRenderingContext2D.createImageData; @docsEditable true
   ImageData createImageData(imagedata_OR_sw, [num sh]) {
     if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) &&
         !?sh) {
@@ -1133,57 +995,55 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('createImageData')
-  @Creates('ImageData|=Object')
+  @DocsEditable @DomName('CanvasRenderingContext2D.createImageData') @Creates('ImageData|=Object')
   _createImageData_1(imagedata) native;
   @JSName('createImageData')
-  @Creates('ImageData|=Object')
+  @DocsEditable @DomName('CanvasRenderingContext2D.createImageData') @Creates('ImageData|=Object')
   _createImageData_2(num sw, sh) native;
 
-  /// @domName CanvasRenderingContext2D.createLinearGradient; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.createLinearGradient')
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
 
-  /// @domName CanvasRenderingContext2D.createPattern; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.createPattern')
   CanvasPattern createPattern(canvas_OR_image, String repetitionType) native;
 
-  /// @domName CanvasRenderingContext2D.createRadialGradient; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.createRadialGradient')
   CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native;
 
-  /// @domName CanvasRenderingContext2D.drawImage; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.drawImage')
   void drawImage(canvas_OR_image_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]) native;
 
-  /// @domName CanvasRenderingContext2D.fill; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.fill')
   void fill() native;
 
-  /// @domName CanvasRenderingContext2D.fillRect; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.fillRect')
   void fillRect(num x, num y, num width, num height) native;
 
-  /// @domName CanvasRenderingContext2D.fillText; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.fillText')
   void fillText(String text, num x, num y, [num maxWidth]) native;
 
-  /// @domName CanvasRenderingContext2D.getImageData; @docsEditable true
   ImageData getImageData(num sx, num sy, num sw, num sh) {
     return _convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
   }
   @JSName('getImageData')
-  @Creates('ImageData|=Object')
+  @DocsEditable @DomName('CanvasRenderingContext2D.getImageData') @Creates('ImageData|=Object')
   _getImageData_1(sx, sy, sw, sh) native;
 
-  /// @domName CanvasRenderingContext2D.getLineDash; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.getLineDash')
   List<num> getLineDash() native;
 
-  /// @domName CanvasRenderingContext2D.isPointInPath; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.isPointInPath')
   bool isPointInPath(num x, num y) native;
 
-  /// @domName CanvasRenderingContext2D.lineTo; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.lineTo')
   void lineTo(num x, num y) native;
 
-  /// @domName CanvasRenderingContext2D.measureText; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.measureText')
   TextMetrics measureText(String text) native;
 
-  /// @domName CanvasRenderingContext2D.moveTo; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.moveTo')
   void moveTo(num x, num y) native;
 
-  /// @domName CanvasRenderingContext2D.putImageData; @docsEditable true
   void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if (!?dirtyX &&
         !?dirtyY &&
@@ -1199,58 +1059,58 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('putImageData')
+  @DocsEditable @DomName('CanvasRenderingContext2D.putImageData')
   void _putImageData_1(imagedata, dx, dy) native;
   @JSName('putImageData')
+  @DocsEditable @DomName('CanvasRenderingContext2D.putImageData')
   void _putImageData_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native;
 
-  /// @domName CanvasRenderingContext2D.quadraticCurveTo; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.quadraticCurveTo')
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
 
-  /// @domName CanvasRenderingContext2D.rect; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.rect')
   void rect(num x, num y, num width, num height) native;
 
-  /// @domName CanvasRenderingContext2D.restore; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.restore')
   void restore() native;
 
-  /// @domName CanvasRenderingContext2D.rotate; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.rotate')
   void rotate(num angle) native;
 
-  /// @domName CanvasRenderingContext2D.save; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.save')
   void save() native;
 
-  /// @domName CanvasRenderingContext2D.scale; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.scale')
   void scale(num sx, num sy) native;
 
-  /// @domName CanvasRenderingContext2D.setLineDash; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.setLineDash')
   void setLineDash(List<num> dash) native;
 
-  /// @domName CanvasRenderingContext2D.setTransform; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.setTransform')
   void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) native;
 
-  /// @domName CanvasRenderingContext2D.stroke; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.stroke')
   void stroke() native;
 
-  /// @domName CanvasRenderingContext2D.strokeRect; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.strokeRect')
   void strokeRect(num x, num y, num width, num height, [num lineWidth]) native;
 
-  /// @domName CanvasRenderingContext2D.strokeText; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.strokeText')
   void strokeText(String text, num x, num y, [num maxWidth]) native;
 
-  /// @domName CanvasRenderingContext2D.transform; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.transform')
   void transform(num m11, num m12, num m21, num m22, num dx, num dy) native;
 
-  /// @domName CanvasRenderingContext2D.translate; @docsEditable true
+  @DocsEditable @DomName('CanvasRenderingContext2D.translate')
   void translate(num tx, num ty) native;
 
-  /// @domName CanvasRenderingContext2D.webkitGetImageDataHD; @docsEditable true
   ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) {
     return _convertNativeToDart_ImageData(_webkitGetImageDataHD_1(sx, sy, sw, sh));
   }
   @JSName('webkitGetImageDataHD')
-  @Creates('ImageData|=Object')
+  @DocsEditable @DomName('CanvasRenderingContext2D.webkitGetImageDataHD') @Creates('ImageData|=Object')
   _webkitGetImageDataHD_1(sx, sy, sw, sh) native;
 
-  /// @domName CanvasRenderingContext2D.webkitPutImageDataHD; @docsEditable true
   void webkitPutImageDataHD(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if (!?dirtyX &&
         !?dirtyY &&
@@ -1266,8 +1126,10 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('webkitPutImageDataHD')
+  @DocsEditable @DomName('CanvasRenderingContext2D.webkitPutImageDataHD')
   void _webkitPutImageDataHD_1(imagedata, dx, dy) native;
   @JSName('webkitPutImageDataHD')
+  @DocsEditable @DomName('CanvasRenderingContext2D.webkitPutImageDataHD')
   void _webkitPutImageDataHD_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native;
 
 
@@ -1312,31 +1174,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CharacterData; @docsEditable true
+
+@DocsEditable
+@DomName('CharacterData')
 class CharacterData extends Node native "*CharacterData" {
 
-  /// @domName CharacterData.data; @docsEditable true
+  @DocsEditable @DomName('CharacterData.data')
   String data;
 
-  /// @domName CharacterData.length; @docsEditable true
+  @DocsEditable @DomName('CharacterData.length')
   final int length;
 
-  /// @domName CharacterData.appendData; @docsEditable true
+  @DocsEditable @DomName('CharacterData.appendData')
   void appendData(String data) native;
 
-  /// @domName CharacterData.deleteData; @docsEditable true
+  @DocsEditable @DomName('CharacterData.deleteData')
   void deleteData(int offset, int length) native;
 
-  /// @domName CharacterData.insertData; @docsEditable true
+  @DocsEditable @DomName('CharacterData.insertData')
   void insertData(int offset, String data) native;
 
-  /// @domName CharacterData.remove; @docsEditable true
+  @DocsEditable @DomName('CharacterData.remove')
   void remove() native;
 
-  /// @domName CharacterData.replaceData; @docsEditable true
+  @DocsEditable @DomName('CharacterData.replaceData')
   void replaceData(int offset, int length, String data) native;
 
-  /// @domName CharacterData.substringData; @docsEditable true
+  @DocsEditable @DomName('CharacterData.substringData')
   String substringData(int offset, int length) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1344,25 +1208,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ClientRect; @docsEditable true
+
+@DocsEditable
+@DomName('ClientRect')
 class ClientRect native "*ClientRect" {
 
-  /// @domName ClientRect.bottom; @docsEditable true
+  @DocsEditable @DomName('ClientRect.bottom')
   final num bottom;
 
-  /// @domName ClientRect.height; @docsEditable true
+  @DocsEditable @DomName('ClientRect.height')
   final num height;
 
-  /// @domName ClientRect.left; @docsEditable true
+  @DocsEditable @DomName('ClientRect.left')
   final num left;
 
-  /// @domName ClientRect.right; @docsEditable true
+  @DocsEditable @DomName('ClientRect.right')
   final num right;
 
-  /// @domName ClientRect.top; @docsEditable true
+  @DocsEditable @DomName('ClientRect.top')
   final num top;
 
-  /// @domName ClientRect.width; @docsEditable true
+  @DocsEditable @DomName('ClientRect.width')
   final num width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1370,35 +1236,37 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Clipboard; @docsEditable true
+
+@DocsEditable
+@DomName('Clipboard')
 class Clipboard native "*Clipboard" {
 
-  /// @domName Clipboard.dropEffect; @docsEditable true
+  @DocsEditable @DomName('Clipboard.dropEffect')
   String dropEffect;
 
-  /// @domName Clipboard.effectAllowed; @docsEditable true
+  @DocsEditable @DomName('Clipboard.effectAllowed')
   String effectAllowed;
 
-  /// @domName Clipboard.files; @docsEditable true
+  @DocsEditable @DomName('Clipboard.files')
   @Returns('FileList') @Creates('FileList')
   final List<File> files;
 
-  /// @domName Clipboard.items; @docsEditable true
+  @DocsEditable @DomName('Clipboard.items')
   final DataTransferItemList items;
 
-  /// @domName Clipboard.types; @docsEditable true
+  @DocsEditable @DomName('Clipboard.types')
   final List types;
 
-  /// @domName Clipboard.clearData; @docsEditable true
+  @DocsEditable @DomName('Clipboard.clearData')
   void clearData([String type]) native;
 
-  /// @domName Clipboard.getData; @docsEditable true
+  @DocsEditable @DomName('Clipboard.getData')
   String getData(String type) native;
 
-  /// @domName Clipboard.setData; @docsEditable true
+  @DocsEditable @DomName('Clipboard.setData')
   bool setData(String type, String data) native;
 
-  /// @domName Clipboard.setDragImage; @docsEditable true
+  @DocsEditable @DomName('Clipboard.setDragImage')
   void setDragImage(ImageElement image, int x, int y) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1406,16 +1274,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CloseEvent; @docsEditable true
+
+@DocsEditable
+@DomName('CloseEvent')
 class CloseEvent extends Event native "*CloseEvent" {
 
-  /// @domName CloseEvent.code; @docsEditable true
+  @DocsEditable @DomName('CloseEvent.code')
   final int code;
 
-  /// @domName CloseEvent.reason; @docsEditable true
+  @DocsEditable @DomName('CloseEvent.reason')
   final String reason;
 
-  /// @domName CloseEvent.wasClean; @docsEditable true
+  @DocsEditable @DomName('CloseEvent.wasClean')
   final bool wasClean;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1423,7 +1293,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Comment; @docsEditable true
+
+@DocsEditable
+@DomName('Comment')
 class Comment extends CharacterData native "*Comment" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1431,13 +1303,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CompositionEvent; @docsEditable true
+
+@DocsEditable
+@DomName('CompositionEvent')
 class CompositionEvent extends UIEvent native "*CompositionEvent" {
 
-  /// @domName CompositionEvent.data; @docsEditable true
+  @DocsEditable @DomName('CompositionEvent.data')
   final String data;
 
-  /// @domName CompositionEvent.initCompositionEvent; @docsEditable true
+  @DocsEditable @DomName('CompositionEvent.initCompositionEvent')
   void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1445,98 +1319,99 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Console
+@DocsEditable
+@DomName('Console')
 class Console {
 
   static Console safeConsole = new Console();
 
   bool get _isConsoleDefined => JS('bool', "typeof console != 'undefined'");
 
-  /// @domName Console.memory; @docsEditable true
+  @DomName('Console.memory')
   MemoryInfo get memory => _isConsoleDefined ?
       JS('MemoryInfo', 'console.memory') : null;
 
-  /// @domName Console.profiles; @docsEditable true
+  @DomName('Console.profiles')
   List<ScriptProfile> get profiles => _isConsoleDefined ?
       JS('List<ScriptProfile>', 'console.profiles') : null;
 
-  /// @domName Console.assertCondition; @docsEditable true
+  @DomName('Console.assertCondition')
   void assertCondition(bool condition, Object arg) => _isConsoleDefined ?
       JS('void', 'console.assertCondition(#, #)', condition, arg) : null;
 
-  /// @domName Console.count; @docsEditable true
+  @DomName('Console.count')
   void count(Object arg) => _isConsoleDefined ?
       JS('void', 'console.count(#)', arg) : null;
 
-  /// @domName Console.debug; @docsEditable true
+  @DomName('Console.debug')
   void debug(Object arg) => _isConsoleDefined ?
       JS('void', 'console.debug(#)', arg) : null;
 
-  /// @domName Console.dir; @docsEditable true
+  @DomName('Console.dir')
   void dir(Object arg) => _isConsoleDefined ?
       JS('void', 'console.debug(#)', arg) : null;
 
-  /// @domName Console.dirxml; @docsEditable true
+  @DomName('Console.dirxml')
   void dirxml(Object arg) => _isConsoleDefined ?
       JS('void', 'console.dirxml(#)', arg) : null;
 
-  /// @domName Console.error; @docsEditable true
+  @DomName('Console.error')
   void error(Object arg) => _isConsoleDefined ?
       JS('void', 'console.error(#)', arg) : null;
 
-  /// @domName Console.group; @docsEditable true
+  @DomName('Console.group')
   void group(Object arg) => _isConsoleDefined ?
       JS('void', 'console.group(#)', arg) : null;
 
-  /// @domName Console.groupCollapsed; @docsEditable true
+  @DomName('Console.groupCollapsed')
   void groupCollapsed(Object arg) => _isConsoleDefined ?
       JS('void', 'console.groupCollapsed(#)', arg) : null;
 
-  /// @domName Console.groupEnd; @docsEditable true
+  @DomName('Console.groupEnd')
   void groupEnd() => _isConsoleDefined ?
       JS('void', 'console.groupEnd()') : null;
 
-  /// @domName Console.info; @docsEditable true
+  @DomName('Console.info')
   void info(Object arg) => _isConsoleDefined ?
       JS('void', 'console.info(#)', arg) : null;
 
-  /// @domName Console.log; @docsEditable true
+  @DomName('Console.log')
   void log(Object arg) => _isConsoleDefined ?
       JS('void', 'console.log(#)', arg) : null;
 
-  /// @domName Console.markTimeline; @docsEditable true
+  @DomName('Console.markTimeline')
   void markTimeline(Object arg) => _isConsoleDefined ?
       JS('void', 'console.markTimeline(#)', arg) : null;
 
-  /// @domName Console.profile; @docsEditable true
+  @DomName('Console.profile')
   void profile(String title) => _isConsoleDefined ?
       JS('void', 'console.profile(#)', title) : null;
 
-  /// @domName Console.profileEnd; @docsEditable true
+  @DomName('Console.profileEnd')
   void profileEnd(String title) => _isConsoleDefined ?
       JS('void', 'console.profileEnd(#)', title) : null;
 
-  /// @domName Console.time; @docsEditable true
+  @DomName('Console.time')
   void time(String title) => _isConsoleDefined ?
       JS('void', 'console.time(#)', title) : null;
 
-  /// @domName Console.timeEnd; @docsEditable true
+  @DomName('Console.timeEnd')
   void timeEnd(String title, Object arg) => _isConsoleDefined ?
       JS('void', 'console.timeEnd(#, #)', title, arg) : null;
 
-  /// @domName Console.timeStamp; @docsEditable true
+  @DomName('Console.timeStamp')
   void timeStamp(Object arg) => _isConsoleDefined ?
       JS('void', 'console.timeStamp(#)', arg) : null;
 
-  /// @domName Console.trace; @docsEditable true
+  @DomName('Console.trace')
   void trace(Object arg) => _isConsoleDefined ?
       JS('void', 'console.trace(#)', arg) : null;
 
-  /// @domName Console.warn; @docsEditable true
+  @DomName('Console.warn')
   void warn(Object arg) => _isConsoleDefined ?
       JS('void', 'console.warn(#)', arg) : null;
 
-  /// @domName Console.clear; @docsEditable true
+  @DocsEditable @DomName('Console.clear')
   void clear(Object arg) native;
 
 }
@@ -1545,24 +1420,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLContentElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLContentElement')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 class ContentElement extends Element native "*HTMLContentElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ContentElement() => document.$dom_createElement("content");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('content');
 
-  /// @domName HTMLContentElement.resetStyleInheritance; @docsEditable true
+  @DocsEditable @DomName('HTMLContentElement.resetStyleInheritance')
   bool resetStyleInheritance;
 
-  /// @domName HTMLContentElement.select; @docsEditable true
+  @DocsEditable @DomName('HTMLContentElement.select')
   String select;
 
-  /// @domName HTMLContentElement.getDistributedNodes; @docsEditable true
+  @DocsEditable @DomName('HTMLContentElement.getDistributedNodes')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> getDistributedNodes() native;
 }
@@ -1571,28 +1448,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Coordinates; @docsEditable true
+
+@DocsEditable
+@DomName('Coordinates')
 class Coordinates native "*Coordinates" {
 
-  /// @domName Coordinates.accuracy; @docsEditable true
+  @DocsEditable @DomName('Coordinates.accuracy')
   final num accuracy;
 
-  /// @domName Coordinates.altitude; @docsEditable true
+  @DocsEditable @DomName('Coordinates.altitude')
   final num altitude;
 
-  /// @domName Coordinates.altitudeAccuracy; @docsEditable true
+  @DocsEditable @DomName('Coordinates.altitudeAccuracy')
   final num altitudeAccuracy;
 
-  /// @domName Coordinates.heading; @docsEditable true
+  @DocsEditable @DomName('Coordinates.heading')
   final num heading;
 
-  /// @domName Coordinates.latitude; @docsEditable true
+  @DocsEditable @DomName('Coordinates.latitude')
   final num latitude;
 
-  /// @domName Coordinates.longitude; @docsEditable true
+  @DocsEditable @DomName('Coordinates.longitude')
   final num longitude;
 
-  /// @domName Coordinates.speed; @docsEditable true
+  @DocsEditable @DomName('Coordinates.speed')
   final num speed;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1600,16 +1479,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Counter; @docsEditable true
+
+@DocsEditable
+@DomName('Counter')
 class Counter native "*Counter" {
 
-  /// @domName Counter.identifier; @docsEditable true
+  @DocsEditable @DomName('Counter.identifier')
   final String identifier;
 
-  /// @domName Counter.listStyle; @docsEditable true
+  @DocsEditable @DomName('Counter.listStyle')
   final String listStyle;
 
-  /// @domName Counter.separator; @docsEditable true
+  @DocsEditable @DomName('Counter.separator')
   final String separator;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1617,21 +1498,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Crypto; @docsEditable true
+
+@DocsEditable
+@DomName('Crypto')
 class Crypto native "*Crypto" {
 
-  /// @domName Crypto.getRandomValues; @docsEditable true
-  void getRandomValues(ArrayBufferView array) native;
+  @DocsEditable @DomName('Crypto.getRandomValues')
+  ArrayBufferView getRandomValues(ArrayBufferView array) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSCharsetRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSCharsetRule')
 class CssCharsetRule extends CssRule native "*CSSCharsetRule" {
 
-  /// @domName CSSCharsetRule.encoding; @docsEditable true
+  @DocsEditable @DomName('CSSCharsetRule.encoding')
   String encoding;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1639,10 +1524,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSFontFaceRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSFontFaceRule')
 class CssFontFaceRule extends CssRule native "*CSSFontFaceRule" {
 
-  /// @domName CSSFontFaceRule.style; @docsEditable true
+  @DocsEditable @DomName('CSSFontFaceRule.style')
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1650,16 +1537,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSImportRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSImportRule')
 class CssImportRule extends CssRule native "*CSSImportRule" {
 
-  /// @domName CSSImportRule.href; @docsEditable true
+  @DocsEditable @DomName('CSSImportRule.href')
   final String href;
 
-  /// @domName CSSImportRule.media; @docsEditable true
+  @DocsEditable @DomName('CSSImportRule.media')
   final MediaList media;
 
-  /// @domName CSSImportRule.styleSheet; @docsEditable true
+  @DocsEditable @DomName('CSSImportRule.styleSheet')
   final CssStyleSheet styleSheet;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1667,13 +1556,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSKeyframeRule; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitCSSKeyframeRule')
 class CssKeyframeRule extends CssRule native "*WebKitCSSKeyframeRule" {
 
-  /// @domName WebKitCSSKeyframeRule.keyText; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSKeyframeRule.keyText')
   String keyText;
 
-  /// @domName WebKitCSSKeyframeRule.style; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSKeyframeRule.style')
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1681,23 +1572,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSKeyframesRule; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitCSSKeyframesRule')
 class CssKeyframesRule extends CssRule native "*WebKitCSSKeyframesRule" {
 
-  /// @domName WebKitCSSKeyframesRule.cssRules; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSKeyframesRule.cssRules')
   @Returns('_CssRuleList') @Creates('_CssRuleList')
   final List<CssRule> cssRules;
 
-  /// @domName WebKitCSSKeyframesRule.name; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSKeyframesRule.name')
   String name;
 
-  /// @domName WebKitCSSKeyframesRule.deleteRule; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSKeyframesRule.deleteRule')
   void deleteRule(String key) native;
 
-  /// @domName WebKitCSSKeyframesRule.findRule; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSKeyframesRule.findRule')
   CssKeyframeRule findRule(String key) native;
 
-  /// @domName WebKitCSSKeyframesRule.insertRule; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSKeyframesRule.insertRule')
   void insertRule(String rule) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1705,10 +1598,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSMatrix; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitCSSMatrix')
 class CssMatrix native "*WebKitCSSMatrix" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory CssMatrix([String cssValue]) {
     if (!?cssValue) {
       return CssMatrix._create();
@@ -1722,100 +1617,100 @@
     return JS('CssMatrix', 'new WebKitCSSMatrix(#)', cssValue);
   }
 
-  /// @domName WebKitCSSMatrix.a; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.a')
   num a;
 
-  /// @domName WebKitCSSMatrix.b; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.b')
   num b;
 
-  /// @domName WebKitCSSMatrix.c; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.c')
   num c;
 
-  /// @domName WebKitCSSMatrix.d; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.d')
   num d;
 
-  /// @domName WebKitCSSMatrix.e; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.e')
   num e;
 
-  /// @domName WebKitCSSMatrix.f; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.f')
   num f;
 
-  /// @domName WebKitCSSMatrix.m11; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m11')
   num m11;
 
-  /// @domName WebKitCSSMatrix.m12; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m12')
   num m12;
 
-  /// @domName WebKitCSSMatrix.m13; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m13')
   num m13;
 
-  /// @domName WebKitCSSMatrix.m14; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m14')
   num m14;
 
-  /// @domName WebKitCSSMatrix.m21; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m21')
   num m21;
 
-  /// @domName WebKitCSSMatrix.m22; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m22')
   num m22;
 
-  /// @domName WebKitCSSMatrix.m23; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m23')
   num m23;
 
-  /// @domName WebKitCSSMatrix.m24; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m24')
   num m24;
 
-  /// @domName WebKitCSSMatrix.m31; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m31')
   num m31;
 
-  /// @domName WebKitCSSMatrix.m32; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m32')
   num m32;
 
-  /// @domName WebKitCSSMatrix.m33; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m33')
   num m33;
 
-  /// @domName WebKitCSSMatrix.m34; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m34')
   num m34;
 
-  /// @domName WebKitCSSMatrix.m41; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m41')
   num m41;
 
-  /// @domName WebKitCSSMatrix.m42; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m42')
   num m42;
 
-  /// @domName WebKitCSSMatrix.m43; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m43')
   num m43;
 
-  /// @domName WebKitCSSMatrix.m44; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.m44')
   num m44;
 
-  /// @domName WebKitCSSMatrix.inverse; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.inverse')
   CssMatrix inverse() native;
 
-  /// @domName WebKitCSSMatrix.multiply; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.multiply')
   CssMatrix multiply(CssMatrix secondMatrix) native;
 
-  /// @domName WebKitCSSMatrix.rotate; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.rotate')
   CssMatrix rotate(num rotX, num rotY, num rotZ) native;
 
-  /// @domName WebKitCSSMatrix.rotateAxisAngle; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.rotateAxisAngle')
   CssMatrix rotateAxisAngle(num x, num y, num z, num angle) native;
 
-  /// @domName WebKitCSSMatrix.scale; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.scale')
   CssMatrix scale(num scaleX, num scaleY, num scaleZ) native;
 
-  /// @domName WebKitCSSMatrix.setMatrixValue; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.setMatrixValue')
   void setMatrixValue(String string) native;
 
-  /// @domName WebKitCSSMatrix.skewX; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.skewX')
   CssMatrix skewX(num angle) native;
 
-  /// @domName WebKitCSSMatrix.skewY; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.skewY')
   CssMatrix skewY(num angle) native;
 
-  /// @domName WebKitCSSMatrix.toString; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.toString')
   String toString() native;
 
-  /// @domName WebKitCSSMatrix.translate; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSMatrix.translate')
   CssMatrix translate(num x, num y, num z) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1823,20 +1718,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSMediaRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSMediaRule')
 class CssMediaRule extends CssRule native "*CSSMediaRule" {
 
-  /// @domName CSSMediaRule.cssRules; @docsEditable true
+  @DocsEditable @DomName('CSSMediaRule.cssRules')
   @Returns('_CssRuleList') @Creates('_CssRuleList')
   final List<CssRule> cssRules;
 
-  /// @domName CSSMediaRule.media; @docsEditable true
+  @DocsEditable @DomName('CSSMediaRule.media')
   final MediaList media;
 
-  /// @domName CSSMediaRule.deleteRule; @docsEditable true
+  @DocsEditable @DomName('CSSMediaRule.deleteRule')
   void deleteRule(int index) native;
 
-  /// @domName CSSMediaRule.insertRule; @docsEditable true
+  @DocsEditable @DomName('CSSMediaRule.insertRule')
   int insertRule(String rule, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1844,13 +1741,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSPageRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSPageRule')
 class CssPageRule extends CssRule native "*CSSPageRule" {
 
-  /// @domName CSSPageRule.selectorText; @docsEditable true
+  @DocsEditable @DomName('CSSPageRule.selectorText')
   String selectorText;
 
-  /// @domName CSSPageRule.style; @docsEditable true
+  @DocsEditable @DomName('CSSPageRule.style')
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1858,7 +1757,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSPrimitiveValue; @docsEditable true
+
+@DocsEditable
+@DomName('CSSPrimitiveValue')
 class CssPrimitiveValue extends CssValue native "*CSSPrimitiveValue" {
 
   static const int CSS_ATTR = 22;
@@ -1919,29 +1820,29 @@
 
   static const int CSS_VW = 26;
 
-  /// @domName CSSPrimitiveValue.primitiveType; @docsEditable true
+  @DocsEditable @DomName('CSSPrimitiveValue.primitiveType')
   final int primitiveType;
 
-  /// @domName CSSPrimitiveValue.getCounterValue; @docsEditable true
+  @DocsEditable @DomName('CSSPrimitiveValue.getCounterValue')
   Counter getCounterValue() native;
 
-  /// @domName CSSPrimitiveValue.getFloatValue; @docsEditable true
+  @DocsEditable @DomName('CSSPrimitiveValue.getFloatValue')
   num getFloatValue(int unitType) native;
 
-  /// @domName CSSPrimitiveValue.getRGBColorValue; @docsEditable true
   @JSName('getRGBColorValue')
+  @DocsEditable @DomName('CSSPrimitiveValue.getRGBColorValue')
   RgbColor getRgbColorValue() native;
 
-  /// @domName CSSPrimitiveValue.getRectValue; @docsEditable true
+  @DocsEditable @DomName('CSSPrimitiveValue.getRectValue')
   Rect getRectValue() native;
 
-  /// @domName CSSPrimitiveValue.getStringValue; @docsEditable true
+  @DocsEditable @DomName('CSSPrimitiveValue.getStringValue')
   String getStringValue() native;
 
-  /// @domName CSSPrimitiveValue.setFloatValue; @docsEditable true
+  @DocsEditable @DomName('CSSPrimitiveValue.setFloatValue')
   void setFloatValue(int unitType, num floatValue) native;
 
-  /// @domName CSSPrimitiveValue.setStringValue; @docsEditable true
+  @DocsEditable @DomName('CSSPrimitiveValue.setStringValue')
   void setStringValue(int stringType, String stringValue) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1949,7 +1850,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSRule')
 class CssRule native "*CSSRule" {
 
   static const int CHARSET_RULE = 2;
@@ -1970,16 +1873,16 @@
 
   static const int WEBKIT_KEYFRAME_RULE = 8;
 
-  /// @domName CSSRule.cssText; @docsEditable true
+  @DocsEditable @DomName('CSSRule.cssText')
   String cssText;
 
-  /// @domName CSSRule.parentRule; @docsEditable true
+  @DocsEditable @DomName('CSSRule.parentRule')
   final CssRule parentRule;
 
-  /// @domName CSSRule.parentStyleSheet; @docsEditable true
+  @DocsEditable @DomName('CSSRule.parentStyleSheet')
   final CssStyleSheet parentStyleSheet;
 
-  /// @domName CSSRule.type; @docsEditable true
+  @DocsEditable @DomName('CSSRule.type')
   final int type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2004,43 +1907,44 @@
   return _cachedBrowserPrefix;
 }
 
-/// @domName CSSStyleDeclaration
+@DocsEditable
+@DomName('CSSStyleDeclaration')
 class CssStyleDeclaration native "*CSSStyleDeclaration" {
   factory CssStyleDeclaration() => _CssStyleDeclarationFactoryProvider.createCssStyleDeclaration();
   factory CssStyleDeclaration.css(String css) =>
       _CssStyleDeclarationFactoryProvider.createCssStyleDeclaration_css(css);
 
 
-  /// @domName CSSStyleDeclaration.cssText; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.cssText')
   String cssText;
 
-  /// @domName CSSStyleDeclaration.length; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.length')
   final int length;
 
-  /// @domName CSSStyleDeclaration.parentRule; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.parentRule')
   final CssRule parentRule;
 
-  /// @domName CSSStyleDeclaration.getPropertyCSSValue; @docsEditable true
   @JSName('getPropertyCSSValue')
+  @DocsEditable @DomName('CSSStyleDeclaration.getPropertyCSSValue')
   CssValue getPropertyCssValue(String propertyName) native;
 
-  /// @domName CSSStyleDeclaration.getPropertyPriority; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.getPropertyPriority')
   String getPropertyPriority(String propertyName) native;
 
-  /// @domName CSSStyleDeclaration.getPropertyShorthand; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.getPropertyShorthand')
   String getPropertyShorthand(String propertyName) native;
 
-  /// @domName CSSStyleDeclaration._getPropertyValue; @docsEditable true
   @JSName('getPropertyValue')
+  @DocsEditable @DomName('CSSStyleDeclaration.getPropertyValue')
   String _getPropertyValue(String propertyName) native;
 
-  /// @domName CSSStyleDeclaration.isPropertyImplicit; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.isPropertyImplicit')
   bool isPropertyImplicit(String propertyName) native;
 
-  /// @domName CSSStyleDeclaration.item; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.item')
   String item(int index) native;
 
-  /// @domName CSSStyleDeclaration.removeProperty; @docsEditable true
+  @DocsEditable @DomName('CSSStyleDeclaration.removeProperty')
   String removeProperty(String propertyName) native;
 
 
@@ -5213,13 +5117,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSStyleRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSStyleRule')
 class CssStyleRule extends CssRule native "*CSSStyleRule" {
 
-  /// @domName CSSStyleRule.selectorText; @docsEditable true
+  @DocsEditable @DomName('CSSStyleRule.selectorText')
   String selectorText;
 
-  /// @domName CSSStyleRule.style; @docsEditable true
+  @DocsEditable @DomName('CSSStyleRule.style')
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5227,30 +5133,32 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSStyleSheet; @docsEditable true
+
+@DocsEditable
+@DomName('CSSStyleSheet')
 class CssStyleSheet extends StyleSheet native "*CSSStyleSheet" {
 
-  /// @domName CSSStyleSheet.cssRules; @docsEditable true
+  @DocsEditable @DomName('CSSStyleSheet.cssRules')
   @Returns('_CssRuleList') @Creates('_CssRuleList')
   final List<CssRule> cssRules;
 
-  /// @domName CSSStyleSheet.ownerRule; @docsEditable true
+  @DocsEditable @DomName('CSSStyleSheet.ownerRule')
   final CssRule ownerRule;
 
-  /// @domName CSSStyleSheet.rules; @docsEditable true
+  @DocsEditable @DomName('CSSStyleSheet.rules')
   @Returns('_CssRuleList') @Creates('_CssRuleList')
   final List<CssRule> rules;
 
-  /// @domName CSSStyleSheet.addRule; @docsEditable true
+  @DocsEditable @DomName('CSSStyleSheet.addRule')
   int addRule(String selector, String style, [int index]) native;
 
-  /// @domName CSSStyleSheet.deleteRule; @docsEditable true
+  @DocsEditable @DomName('CSSStyleSheet.deleteRule')
   void deleteRule(int index) native;
 
-  /// @domName CSSStyleSheet.insertRule; @docsEditable true
+  @DocsEditable @DomName('CSSStyleSheet.insertRule')
   int insertRule(String rule, int index) native;
 
-  /// @domName CSSStyleSheet.removeRule; @docsEditable true
+  @DocsEditable @DomName('CSSStyleSheet.removeRule')
   void removeRule(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5258,7 +5166,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSTransformValue; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitCSSTransformValue')
 class CssTransformValue extends _CssValueList native "*WebKitCSSTransformValue" {
 
   static const int CSS_MATRIX = 11;
@@ -5303,7 +5213,7 @@
 
   static const int CSS_TRANSLATEZ = 12;
 
-  /// @domName WebKitCSSTransformValue.operationType; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSTransformValue.operationType')
   final int operationType;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5311,7 +5221,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSUnknownRule; @docsEditable true
+
+@DocsEditable
+@DomName('CSSUnknownRule')
 class CssUnknownRule extends CssRule native "*CSSUnknownRule" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5319,7 +5231,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSValue; @docsEditable true
+
+@DocsEditable
+@DomName('CSSValue')
 class CssValue native "*CSSValue" {
 
   static const int CSS_CUSTOM = 3;
@@ -5330,10 +5244,10 @@
 
   static const int CSS_VALUE_LIST = 2;
 
-  /// @domName CSSValue.cssText; @docsEditable true
+  @DocsEditable @DomName('CSSValue.cssText')
   String cssText;
 
-  /// @domName CSSValue.cssValueType; @docsEditable true
+  @DocsEditable @DomName('CSSValue.cssValueType')
   final int cssValueType;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5343,17 +5257,18 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CustomEvent
+@DocsEditable
+@DomName('CustomEvent')
 class CustomEvent extends Event native "*CustomEvent" {
   factory CustomEvent(String type, [bool canBubble = true, bool cancelable = true,
       Object detail]) => _CustomEventFactoryProvider.createCustomEvent(
       type, canBubble, cancelable, detail);
 
-  /// @domName CustomEvent.detail; @docsEditable true
+  @DocsEditable @DomName('CustomEvent.detail')
   final Object detail;
 
-  /// @domName CustomEvent.initCustomEvent; @docsEditable true
   @JSName('initCustomEvent')
+  @DocsEditable @DomName('CustomEvent.initCustomEvent')
   void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) native;
 
 }
@@ -5362,10 +5277,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDListElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLDListElement')
 class DListElement extends Element native "*HTMLDListElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DListElement() => document.$dom_createElement("dl");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5373,20 +5290,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDataListElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLDataListElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class DataListElement extends Element native "*HTMLDataListElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DataListElement() => document.$dom_createElement("datalist");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('datalist');
 
-  /// @domName HTMLDataListElement.options; @docsEditable true
+  @DocsEditable @DomName('HTMLDataListElement.options')
   final HtmlCollection options;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5394,22 +5313,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DataTransferItem; @docsEditable true
+
+@DocsEditable
+@DomName('DataTransferItem')
 class DataTransferItem native "*DataTransferItem" {
 
-  /// @domName DataTransferItem.kind; @docsEditable true
+  @DocsEditable @DomName('DataTransferItem.kind')
   final String kind;
 
-  /// @domName DataTransferItem.type; @docsEditable true
+  @DocsEditable @DomName('DataTransferItem.type')
   final String type;
 
-  /// @domName DataTransferItem.getAsFile; @docsEditable true
+  @DocsEditable @DomName('DataTransferItem.getAsFile')
   Blob getAsFile() native;
 
-  /// @domName DataTransferItem.getAsString; @docsEditable true
+  @DocsEditable @DomName('DataTransferItem.getAsString')
   void getAsString([StringCallback callback]) native;
 
-  /// @domName DataTransferItem.webkitGetAsEntry; @docsEditable true
+  @DocsEditable @DomName('DataTransferItem.webkitGetAsEntry')
   Entry webkitGetAsEntry() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5417,19 +5338,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DataTransferItemList; @docsEditable true
+
+@DocsEditable
+@DomName('DataTransferItemList')
 class DataTransferItemList native "*DataTransferItemList" {
 
-  /// @domName DataTransferItemList.length; @docsEditable true
+  @DocsEditable @DomName('DataTransferItemList.length')
   final int length;
 
-  /// @domName DataTransferItemList.add; @docsEditable true
+  @DocsEditable @DomName('DataTransferItemList.add')
   void add(data_OR_file, [String type]) native;
 
-  /// @domName DataTransferItemList.clear; @docsEditable true
+  @DocsEditable @DomName('DataTransferItemList.clear')
   void clear() native;
 
-  /// @domName DataTransferItemList.item; @docsEditable true
+  @DocsEditable @DomName('DataTransferItemList.item')
   DataTransferItem item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5437,10 +5360,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DataView; @docsEditable true
+
+@DocsEditable
+@DomName('DataView')
 class DataView extends ArrayBufferView native "*DataView" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) {
     if (!?byteOffset) {
       return DataView._create(buffer);
@@ -5460,52 +5385,52 @@
     return JS('DataView', 'new DataView(#,#,#)', buffer, byteOffset, byteLength);
   }
 
-  /// @domName DataView.getFloat32; @docsEditable true
+  @DocsEditable @DomName('DataView.getFloat32')
   num getFloat32(int byteOffset, {bool littleEndian}) native;
 
-  /// @domName DataView.getFloat64; @docsEditable true
+  @DocsEditable @DomName('DataView.getFloat64')
   num getFloat64(int byteOffset, {bool littleEndian}) native;
 
-  /// @domName DataView.getInt16; @docsEditable true
+  @DocsEditable @DomName('DataView.getInt16')
   int getInt16(int byteOffset, {bool littleEndian}) native;
 
-  /// @domName DataView.getInt32; @docsEditable true
+  @DocsEditable @DomName('DataView.getInt32')
   int getInt32(int byteOffset, {bool littleEndian}) native;
 
-  /// @domName DataView.getInt8; @docsEditable true
+  @DocsEditable @DomName('DataView.getInt8')
   int getInt8(int byteOffset) native;
 
-  /// @domName DataView.getUint16; @docsEditable true
+  @DocsEditable @DomName('DataView.getUint16')
   int getUint16(int byteOffset, {bool littleEndian}) native;
 
-  /// @domName DataView.getUint32; @docsEditable true
+  @DocsEditable @DomName('DataView.getUint32')
   int getUint32(int byteOffset, {bool littleEndian}) native;
 
-  /// @domName DataView.getUint8; @docsEditable true
+  @DocsEditable @DomName('DataView.getUint8')
   int getUint8(int byteOffset) native;
 
-  /// @domName DataView.setFloat32; @docsEditable true
+  @DocsEditable @DomName('DataView.setFloat32')
   void setFloat32(int byteOffset, num value, {bool littleEndian}) native;
 
-  /// @domName DataView.setFloat64; @docsEditable true
+  @DocsEditable @DomName('DataView.setFloat64')
   void setFloat64(int byteOffset, num value, {bool littleEndian}) native;
 
-  /// @domName DataView.setInt16; @docsEditable true
+  @DocsEditable @DomName('DataView.setInt16')
   void setInt16(int byteOffset, int value, {bool littleEndian}) native;
 
-  /// @domName DataView.setInt32; @docsEditable true
+  @DocsEditable @DomName('DataView.setInt32')
   void setInt32(int byteOffset, int value, {bool littleEndian}) native;
 
-  /// @domName DataView.setInt8; @docsEditable true
+  @DocsEditable @DomName('DataView.setInt8')
   void setInt8(int byteOffset, int value) native;
 
-  /// @domName DataView.setUint16; @docsEditable true
+  @DocsEditable @DomName('DataView.setUint16')
   void setUint16(int byteOffset, int value, {bool littleEndian}) native;
 
-  /// @domName DataView.setUint32; @docsEditable true
+  @DocsEditable @DomName('DataView.setUint32')
   void setUint32(int byteOffset, int value, {bool littleEndian}) native;
 
-  /// @domName DataView.setUint8; @docsEditable true
+  @DocsEditable @DomName('DataView.setUint8')
   void setUint8(int byteOffset, int value) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5513,19 +5438,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Database; @docsEditable true
+
+@DocsEditable
+@DomName('Database')
 class Database native "*Database" {
 
-  /// @domName Database.version; @docsEditable true
+  @DocsEditable @DomName('Database.version')
   final String version;
 
-  /// @domName Database.changeVersion; @docsEditable true
+  @DocsEditable @DomName('Database.changeVersion')
   void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
 
-  /// @domName Database.readTransaction; @docsEditable true
+  @DocsEditable @DomName('Database.readTransaction')
   void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
 
-  /// @domName Database.transaction; @docsEditable true
+  @DocsEditable @DomName('Database.transaction')
   void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5541,22 +5468,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DatabaseSync; @docsEditable true
+
+@DocsEditable
+@DomName('DatabaseSync')
 class DatabaseSync native "*DatabaseSync" {
 
-  /// @domName DatabaseSync.lastErrorMessage; @docsEditable true
+  @DocsEditable @DomName('DatabaseSync.lastErrorMessage')
   final String lastErrorMessage;
 
-  /// @domName DatabaseSync.version; @docsEditable true
+  @DocsEditable @DomName('DatabaseSync.version')
   final String version;
 
-  /// @domName DatabaseSync.changeVersion; @docsEditable true
+  @DocsEditable @DomName('DatabaseSync.changeVersion')
   void changeVersion(String oldVersion, String newVersion, [SqlTransactionSyncCallback callback]) native;
 
-  /// @domName DatabaseSync.readTransaction; @docsEditable true
+  @DocsEditable @DomName('DatabaseSync.readTransaction')
   void readTransaction(SqlTransactionSyncCallback callback) native;
 
-  /// @domName DatabaseSync.transaction; @docsEditable true
+  @DocsEditable @DomName('DatabaseSync.transaction')
   void transaction(SqlTransactionSyncCallback callback) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5564,16 +5493,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DedicatedWorkerContext; @docsEditable true
+
+@DocsEditable
+@DomName('DedicatedWorkerContext')
 class DedicatedWorkerContext extends WorkerContext native "*DedicatedWorkerContext" {
 
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   DedicatedWorkerContextEvents get on =>
     new DedicatedWorkerContextEvents(this);
 
-  /// @domName DedicatedWorkerContext.postMessage; @docsEditable true
   void postMessage(/*any*/ message, [List messagePorts]) {
     if (?messagePorts) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
@@ -5585,19 +5516,21 @@
     return;
   }
   @JSName('postMessage')
+  @DocsEditable @DomName('DedicatedWorkerContext.postMessage')
   void _postMessage_1(message, List messagePorts) native;
   @JSName('postMessage')
+  @DocsEditable @DomName('DedicatedWorkerContext.postMessage')
   void _postMessage_2(message) native;
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class DedicatedWorkerContextEvents extends WorkerContextEvents {
-  /// @docsEditable true
+  @DocsEditable
   DedicatedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5605,19 +5538,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDetailsElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLDetailsElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 class DetailsElement extends Element native "*HTMLDetailsElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DetailsElement() => document.$dom_createElement("details");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('details');
 
-  /// @domName HTMLDetailsElement.open; @docsEditable true
+  @DocsEditable @DomName('HTMLDetailsElement.open')
   bool open;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5625,10 +5560,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DeviceMotionEvent; @docsEditable true
+
+@DocsEditable
+@DomName('DeviceMotionEvent')
 class DeviceMotionEvent extends Event native "*DeviceMotionEvent" {
 
-  /// @domName DeviceMotionEvent.interval; @docsEditable true
+  @DocsEditable @DomName('DeviceMotionEvent.interval')
   final num interval;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5636,22 +5573,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DeviceOrientationEvent; @docsEditable true
+
+@DocsEditable
+@DomName('DeviceOrientationEvent')
 class DeviceOrientationEvent extends Event native "*DeviceOrientationEvent" {
 
-  /// @domName DeviceOrientationEvent.absolute; @docsEditable true
+  @DocsEditable @DomName('DeviceOrientationEvent.absolute')
   final bool absolute;
 
-  /// @domName DeviceOrientationEvent.alpha; @docsEditable true
+  @DocsEditable @DomName('DeviceOrientationEvent.alpha')
   final num alpha;
 
-  /// @domName DeviceOrientationEvent.beta; @docsEditable true
+  @DocsEditable @DomName('DeviceOrientationEvent.beta')
   final num beta;
 
-  /// @domName DeviceOrientationEvent.gamma; @docsEditable true
+  @DocsEditable @DomName('DeviceOrientationEvent.gamma')
   final num gamma;
 
-  /// @domName DeviceOrientationEvent.initDeviceOrientationEvent; @docsEditable true
+  @DocsEditable @DomName('DeviceOrientationEvent.initDeviceOrientationEvent')
   void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5659,24 +5598,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDirectoryElement; @docsEditable true
-class DirectoryElement extends Element native "*HTMLDirectoryElement" {
 
-  /// @domName HTMLDirectoryElement.compact; @docsEditable true
-  bool compact;
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName DirectoryEntry; @docsEditable true
+@DocsEditable
+@DomName('DirectoryEntry')
 class DirectoryEntry extends Entry native "*DirectoryEntry" {
 
-  /// @domName DirectoryEntry.createReader; @docsEditable true
+  @DocsEditable @DomName('DirectoryEntry.createReader')
   DirectoryReader createReader() native;
 
-  /// @domName DirectoryEntry.getDirectory; @docsEditable true
   void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) {
     if (?errorCallback) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -5697,15 +5626,18 @@
     return;
   }
   @JSName('getDirectory')
+  @DocsEditable @DomName('DirectoryEntry.getDirectory')
   void _getDirectory_1(path, options, EntryCallback successCallback, ErrorCallback errorCallback) native;
   @JSName('getDirectory')
+  @DocsEditable @DomName('DirectoryEntry.getDirectory')
   void _getDirectory_2(path, options, EntryCallback successCallback) native;
   @JSName('getDirectory')
+  @DocsEditable @DomName('DirectoryEntry.getDirectory')
   void _getDirectory_3(path, options) native;
   @JSName('getDirectory')
+  @DocsEditable @DomName('DirectoryEntry.getDirectory')
   void _getDirectory_4(path) native;
 
-  /// @domName DirectoryEntry.getFile; @docsEditable true
   void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) {
     if (?errorCallback) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -5726,15 +5658,19 @@
     return;
   }
   @JSName('getFile')
+  @DocsEditable @DomName('DirectoryEntry.getFile')
   void _getFile_1(path, options, EntryCallback successCallback, ErrorCallback errorCallback) native;
   @JSName('getFile')
+  @DocsEditable @DomName('DirectoryEntry.getFile')
   void _getFile_2(path, options, EntryCallback successCallback) native;
   @JSName('getFile')
+  @DocsEditable @DomName('DirectoryEntry.getFile')
   void _getFile_3(path, options) native;
   @JSName('getFile')
+  @DocsEditable @DomName('DirectoryEntry.getFile')
   void _getFile_4(path) native;
 
-  /// @domName DirectoryEntry.removeRecursively; @docsEditable true
+  @DocsEditable @DomName('DirectoryEntry.removeRecursively')
   void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5742,29 +5678,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DirectoryEntrySync; @docsEditable true
+
+@DocsEditable
+@DomName('DirectoryEntrySync')
 class DirectoryEntrySync extends EntrySync native "*DirectoryEntrySync" {
 
-  /// @domName DirectoryEntrySync.createReader; @docsEditable true
+  @DocsEditable @DomName('DirectoryEntrySync.createReader')
   DirectoryReaderSync createReader() native;
 
-  /// @domName DirectoryEntrySync.getDirectory; @docsEditable true
   DirectoryEntrySync getDirectory(String path, Map flags) {
     var flags_1 = convertDartToNative_Dictionary(flags);
     return _getDirectory_1(path, flags_1);
   }
   @JSName('getDirectory')
+  @DocsEditable @DomName('DirectoryEntrySync.getDirectory')
   DirectoryEntrySync _getDirectory_1(path, flags) native;
 
-  /// @domName DirectoryEntrySync.getFile; @docsEditable true
   FileEntrySync getFile(String path, Map flags) {
     var flags_1 = convertDartToNative_Dictionary(flags);
     return _getFile_1(path, flags_1);
   }
   @JSName('getFile')
+  @DocsEditable @DomName('DirectoryEntrySync.getFile')
   FileEntrySync _getFile_1(path, flags) native;
 
-  /// @domName DirectoryEntrySync.removeRecursively; @docsEditable true
+  @DocsEditable @DomName('DirectoryEntrySync.removeRecursively')
   void removeRecursively() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5772,10 +5710,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DirectoryReader; @docsEditable true
+
+@DocsEditable
+@DomName('DirectoryReader')
 class DirectoryReader native "*DirectoryReader" {
 
-  /// @domName DirectoryReader.readEntries; @docsEditable true
+  @DocsEditable @DomName('DirectoryReader.readEntries')
   void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5783,10 +5723,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DirectoryReaderSync; @docsEditable true
+
+@DocsEditable
+@DomName('DirectoryReaderSync')
 class DirectoryReaderSync native "*DirectoryReaderSync" {
 
-  /// @domName DirectoryReaderSync.readEntries; @docsEditable true
+  @DocsEditable @DomName('DirectoryReaderSync.readEntries')
   @Returns('_EntryArraySync') @Creates('_EntryArraySync')
   List<EntrySync> readEntries() native;
 }
@@ -5795,31 +5737,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/**
- * Represents an HTML <div> element.
- *
- * The [DivElement] is a generic container for content and does not have any
- * special significance. It is functionally similar to [SpanElement].
- *
- * The [DivElement] is a block-level element, as opposed to [SpanElement],
- * which is an inline-level element.
- *
- * Example usage:
- *
- *     DivElement div = new DivElement();
- *     div.text = 'Here's my new DivElem
- *     document.body.elements.add(elem);
- *
- * See also:
- *
- * * [HTML <div> element](http://www.w3.org/TR/html-markup/div.html) from W3C.
- * * [Block-level element](http://www.w3.org/TR/CSS2/visuren.html#block-boxes) from W3C.
- * * [Inline-level element](http://www.w3.org/TR/CSS2/visuren.html#inline-boxes) from W3C.
- */
-/// @domName HTMLDivElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLDivElement')
 class DivElement extends Element native "*HTMLDivElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DivElement() => document.$dom_createElement("div");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5827,7 +5750,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Document
+@DocsEditable
+@DomName('Document')
 /**
  * The base class for all documents.
  *
@@ -5841,413 +5765,301 @@
 {
 
 
-  static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
-
-  static const EventStreamProvider<Event> beforeCopyEvent = const EventStreamProvider<Event>('beforecopy');
-
-  static const EventStreamProvider<Event> beforeCutEvent = const EventStreamProvider<Event>('beforecut');
-
-  static const EventStreamProvider<Event> beforePasteEvent = const EventStreamProvider<Event>('beforepaste');
-
-  static const EventStreamProvider<Event> blurEvent = const EventStreamProvider<Event>('blur');
-
-  static const EventStreamProvider<Event> changeEvent = const EventStreamProvider<Event>('change');
-
-  static const EventStreamProvider<MouseEvent> clickEvent = const EventStreamProvider<MouseEvent>('click');
-
-  static const EventStreamProvider<MouseEvent> contextMenuEvent = const EventStreamProvider<MouseEvent>('contextmenu');
-
-  static const EventStreamProvider<Event> copyEvent = const EventStreamProvider<Event>('copy');
-
-  static const EventStreamProvider<Event> cutEvent = const EventStreamProvider<Event>('cut');
-
-  static const EventStreamProvider<Event> doubleClickEvent = const EventStreamProvider<Event>('dblclick');
-
-  static const EventStreamProvider<MouseEvent> dragEvent = const EventStreamProvider<MouseEvent>('drag');
-
-  static const EventStreamProvider<MouseEvent> dragEndEvent = const EventStreamProvider<MouseEvent>('dragend');
-
-  static const EventStreamProvider<MouseEvent> dragEnterEvent = const EventStreamProvider<MouseEvent>('dragenter');
-
-  static const EventStreamProvider<MouseEvent> dragLeaveEvent = const EventStreamProvider<MouseEvent>('dragleave');
-
-  static const EventStreamProvider<MouseEvent> dragOverEvent = const EventStreamProvider<MouseEvent>('dragover');
-
-  static const EventStreamProvider<MouseEvent> dragStartEvent = const EventStreamProvider<MouseEvent>('dragstart');
-
-  static const EventStreamProvider<MouseEvent> dropEvent = const EventStreamProvider<MouseEvent>('drop');
-
-  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
-
-  static const EventStreamProvider<Event> focusEvent = const EventStreamProvider<Event>('focus');
-
-  static const EventStreamProvider<Event> inputEvent = const EventStreamProvider<Event>('input');
-
-  static const EventStreamProvider<Event> invalidEvent = const EventStreamProvider<Event>('invalid');
-
-  static const EventStreamProvider<KeyboardEvent> keyDownEvent = const EventStreamProvider<KeyboardEvent>('keydown');
-
-  static const EventStreamProvider<KeyboardEvent> keyPressEvent = const EventStreamProvider<KeyboardEvent>('keypress');
-
-  static const EventStreamProvider<KeyboardEvent> keyUpEvent = const EventStreamProvider<KeyboardEvent>('keyup');
-
-  static const EventStreamProvider<Event> loadEvent = const EventStreamProvider<Event>('load');
-
-  static const EventStreamProvider<MouseEvent> mouseDownEvent = const EventStreamProvider<MouseEvent>('mousedown');
-
-  static const EventStreamProvider<MouseEvent> mouseMoveEvent = const EventStreamProvider<MouseEvent>('mousemove');
-
-  static const EventStreamProvider<MouseEvent> mouseOutEvent = const EventStreamProvider<MouseEvent>('mouseout');
-
-  static const EventStreamProvider<MouseEvent> mouseOverEvent = const EventStreamProvider<MouseEvent>('mouseover');
-
-  static const EventStreamProvider<MouseEvent> mouseUpEvent = const EventStreamProvider<MouseEvent>('mouseup');
-
-  static const EventStreamProvider<WheelEvent> mouseWheelEvent = const EventStreamProvider<WheelEvent>('mousewheel');
-
-  static const EventStreamProvider<Event> pasteEvent = const EventStreamProvider<Event>('paste');
-
   static const EventStreamProvider<Event> readyStateChangeEvent = const EventStreamProvider<Event>('readystatechange');
 
-  static const EventStreamProvider<Event> resetEvent = const EventStreamProvider<Event>('reset');
-
-  static const EventStreamProvider<Event> scrollEvent = const EventStreamProvider<Event>('scroll');
-
-  static const EventStreamProvider<Event> searchEvent = const EventStreamProvider<Event>('search');
-
-  static const EventStreamProvider<Event> selectEvent = const EventStreamProvider<Event>('select');
-
   static const EventStreamProvider<Event> selectionChangeEvent = const EventStreamProvider<Event>('selectionchange');
 
-  static const EventStreamProvider<Event> selectStartEvent = const EventStreamProvider<Event>('selectstart');
-
-  static const EventStreamProvider<Event> submitEvent = const EventStreamProvider<Event>('submit');
-
-  static const EventStreamProvider<TouchEvent> touchCancelEvent = const EventStreamProvider<TouchEvent>('touchcancel');
-
-  static const EventStreamProvider<TouchEvent> touchEndEvent = const EventStreamProvider<TouchEvent>('touchend');
-
-  static const EventStreamProvider<TouchEvent> touchMoveEvent = const EventStreamProvider<TouchEvent>('touchmove');
-
-  static const EventStreamProvider<TouchEvent> touchStartEvent = const EventStreamProvider<TouchEvent>('touchstart');
-
-  static const EventStreamProvider<Event> fullscreenChangeEvent = const EventStreamProvider<Event>('webkitfullscreenchange');
-
-  static const EventStreamProvider<Event> fullscreenErrorEvent = const EventStreamProvider<Event>('webkitfullscreenerror');
-
   static const EventStreamProvider<Event> pointerLockChangeEvent = const EventStreamProvider<Event>('webkitpointerlockchange');
 
   static const EventStreamProvider<Event> pointerLockErrorEvent = const EventStreamProvider<Event>('webkitpointerlockerror');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   DocumentEvents get on =>
     new DocumentEvents(this);
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.body; @docsEditable true
   @JSName('body')
+  @DocsEditable @DomName('Document.body')
   Element $dom_body;
 
-  /// @domName Document.charset; @docsEditable true
+  @DocsEditable @DomName('Document.charset')
   String charset;
 
-  /// @domName Document.cookie; @docsEditable true
+  @DocsEditable @DomName('Document.cookie')
   String cookie;
 
-  /// @domName Document.defaultView; @docsEditable true
   WindowBase get window => _convertNativeToDart_Window(this._window);
   @JSName('defaultView')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('Document.window') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _window;
 
-  /// @domName Document.documentElement; @docsEditable true
+  @DocsEditable @DomName('Document.documentElement')
   final Element documentElement;
 
-  /// @domName Document.domain; @docsEditable true
+  @DocsEditable @DomName('Document.domain')
   final String domain;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.head; @docsEditable true
   @JSName('head')
+  @DocsEditable @DomName('Document.head')
   final HeadElement $dom_head;
 
-  /// @domName Document.implementation; @docsEditable true
+  @DocsEditable @DomName('Document.implementation')
   final DomImplementation implementation;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.lastModified; @docsEditable true
   @JSName('lastModified')
+  @DocsEditable @DomName('Document.lastModified')
   final String $dom_lastModified;
 
-  /// @domName Document.preferredStylesheetSet; @docsEditable true
   @JSName('preferredStylesheetSet')
+  @DocsEditable @DomName('Document.preferredStylesheetSet')
   final String $dom_preferredStylesheetSet;
 
-  /// @domName Document.readyState; @docsEditable true
+  @DocsEditable @DomName('Document.readyState')
   final String readyState;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.referrer; @docsEditable true
   @JSName('referrer')
+  @DocsEditable @DomName('Document.referrer')
   final String $dom_referrer;
 
-  /// @domName Document.selectedStylesheetSet; @docsEditable true
   @JSName('selectedStylesheetSet')
+  @DocsEditable @DomName('Document.selectedStylesheetSet')
   String $dom_selectedStylesheetSet;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.styleSheets; @docsEditable true
   @JSName('styleSheets')
+  @DocsEditable @DomName('Document.styleSheets')
   @Returns('_StyleSheetList') @Creates('_StyleSheetList')
   final List<StyleSheet> $dom_styleSheets;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.title; @docsEditable true
   @JSName('title')
+  @DocsEditable @DomName('Document.title')
   String $dom_title;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitFullscreenElement; @docsEditable true
   @JSName('webkitFullscreenElement')
+  @DocsEditable @DomName('Document.webkitFullscreenElement')
   final Element $dom_webkitFullscreenElement;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitFullscreenEnabled; @docsEditable true
   @JSName('webkitFullscreenEnabled')
+  @DocsEditable @DomName('Document.webkitFullscreenEnabled')
   final bool $dom_webkitFullscreenEnabled;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitHidden; @docsEditable true
   @JSName('webkitHidden')
+  @DocsEditable @DomName('Document.webkitHidden')
   final bool $dom_webkitHidden;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitIsFullScreen; @docsEditable true
   @JSName('webkitIsFullScreen')
+  @DocsEditable @DomName('Document.webkitIsFullScreen')
   final bool $dom_webkitIsFullScreen;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitPointerLockElement; @docsEditable true
   @JSName('webkitPointerLockElement')
+  @DocsEditable @DomName('Document.webkitPointerLockElement')
   final Element $dom_webkitPointerLockElement;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitVisibilityState; @docsEditable true
   @JSName('webkitVisibilityState')
+  @DocsEditable @DomName('Document.webkitVisibilityState')
   final String $dom_webkitVisibilityState;
 
-  /// Use the [Range] constructor instead.
-  /// @domName Document.caretRangeFromPoint; @docsEditable true
   @JSName('caretRangeFromPoint')
+  @DocsEditable @DomName('Document.caretRangeFromPoint')
   Range $dom_caretRangeFromPoint(int x, int y) native;
 
-  /// @domName Document.createCDATASection; @docsEditable true
   @JSName('createCDATASection')
+  @DocsEditable @DomName('Document.createCDATASection')
   CDataSection createCDataSection(String data) native;
 
-  /// @domName Document.createDocumentFragment; @docsEditable true
+  @DocsEditable @DomName('Document.createDocumentFragment')
   DocumentFragment createDocumentFragment() native;
 
-  /// Deprecated: use new Element.tag(tagName) instead.
-  /// @domName Document.createElement; @docsEditable true
   @JSName('createElement')
+  @DocsEditable @DomName('Document.createElement')
   Element $dom_createElement(String tagName) native;
 
-  /// @domName Document.createElementNS; @docsEditable true
   @JSName('createElementNS')
+  @DocsEditable @DomName('Document.createElementNS')
   Element $dom_createElementNS(String namespaceURI, String qualifiedName) native;
 
-  /// @domName Document.createEvent; @docsEditable true
   @JSName('createEvent')
+  @DocsEditable @DomName('Document.createEvent')
   Event $dom_createEvent(String eventType) native;
 
-  /// @domName Document.createRange; @docsEditable true
   @JSName('createRange')
+  @DocsEditable @DomName('Document.createRange')
   Range $dom_createRange() native;
 
-  /// @domName Document.createTextNode; @docsEditable true
   @JSName('createTextNode')
+  @DocsEditable @DomName('Document.createTextNode')
   Text $dom_createTextNode(String data) native;
 
-  /// @domName Document.createTouch; @docsEditable true
   Touch $dom_createTouch(Window window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) {
     var target_1 = _convertDartToNative_EventTarget(target);
     return _$dom_createTouch_1(window, target_1, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
   }
   @JSName('createTouch')
+  @DocsEditable @DomName('Document.createTouch')
   Touch _$dom_createTouch_1(Window window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native;
 
-  /// Use the [TouchList] constructor isntead.
-  /// @domName Document.createTouchList; @docsEditable true
   @JSName('createTouchList')
+  @DocsEditable @DomName('Document.createTouchList')
   TouchList $dom_createTouchList() native;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.elementFromPoint; @docsEditable true
   @JSName('elementFromPoint')
+  @DocsEditable @DomName('Document.elementFromPoint')
   Element $dom_elementFromPoint(int x, int y) native;
 
-  /// @domName Document.execCommand; @docsEditable true
+  @DocsEditable @DomName('Document.execCommand')
   bool execCommand(String command, bool userInterface, String value) native;
 
-  /// @domName Document.getCSSCanvasContext; @docsEditable true
   @JSName('getCSSCanvasContext')
+  @DocsEditable @DomName('Document.getCSSCanvasContext')
   CanvasRenderingContext $dom_getCssCanvasContext(String contextId, String name, int width, int height) native;
 
-  /// Deprecated: use query("#$elementId") instead.
-  /// @domName Document.getElementById; @docsEditable true
   @JSName('getElementById')
+  @DocsEditable @DomName('Document.getElementById')
   Element $dom_getElementById(String elementId) native;
 
-  /// @domName Document.getElementsByClassName; @docsEditable true
   @JSName('getElementsByClassName')
+  @DocsEditable @DomName('Document.getElementsByClassName')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_getElementsByClassName(String tagname) native;
 
-  /// @domName Document.getElementsByName; @docsEditable true
   @JSName('getElementsByName')
+  @DocsEditable @DomName('Document.getElementsByName')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_getElementsByName(String elementName) native;
 
-  /// @domName Document.getElementsByTagName; @docsEditable true
   @JSName('getElementsByTagName')
+  @DocsEditable @DomName('Document.getElementsByTagName')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_getElementsByTagName(String tagname) native;
 
-  /// @domName Document.queryCommandEnabled; @docsEditable true
+  @DocsEditable @DomName('Document.queryCommandEnabled')
   bool queryCommandEnabled(String command) native;
 
-  /// @domName Document.queryCommandIndeterm; @docsEditable true
+  @DocsEditable @DomName('Document.queryCommandIndeterm')
   bool queryCommandIndeterm(String command) native;
 
-  /// @domName Document.queryCommandState; @docsEditable true
+  @DocsEditable @DomName('Document.queryCommandState')
   bool queryCommandState(String command) native;
 
-  /// @domName Document.queryCommandSupported; @docsEditable true
+  @DocsEditable @DomName('Document.queryCommandSupported')
   bool queryCommandSupported(String command) native;
 
-  /// @domName Document.queryCommandValue; @docsEditable true
+  @DocsEditable @DomName('Document.queryCommandValue')
   String queryCommandValue(String command) native;
 
-  /// Deprecated: renamed to the shorter name [query].
-  /// @domName Document.querySelector; @docsEditable true
   @JSName('querySelector')
+  @DocsEditable @DomName('Document.querySelector')
   Element $dom_querySelector(String selectors) native;
 
-  /// Deprecated: use query("#$elementId") instead.
-  /// @domName Document.querySelectorAll; @docsEditable true
   @JSName('querySelectorAll')
+  @DocsEditable @DomName('Document.querySelectorAll')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_querySelectorAll(String selectors) native;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitCancelFullScreen; @docsEditable true
   @JSName('webkitCancelFullScreen')
+  @DocsEditable @DomName('Document.webkitCancelFullScreen')
   void $dom_webkitCancelFullScreen() native;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitExitFullscreen; @docsEditable true
   @JSName('webkitExitFullscreen')
+  @DocsEditable @DomName('Document.webkitExitFullscreen')
   void $dom_webkitExitFullscreen() native;
 
-  /// Moved to [HtmlDocument].
-  /// @domName Document.webkitExitPointerLock; @docsEditable true
   @JSName('webkitExitPointerLock')
+  @DocsEditable @DomName('Document.webkitExitPointerLock')
   void $dom_webkitExitPointerLock() native;
 
-  Stream<Event> get onAbort => abortEvent.forTarget(this);
+  Stream<Event> get onAbort => Element.abortEvent.forTarget(this);
 
-  Stream<Event> get onBeforeCopy => beforeCopyEvent.forTarget(this);
+  Stream<Event> get onBeforeCopy => Element.beforeCopyEvent.forTarget(this);
 
-  Stream<Event> get onBeforeCut => beforeCutEvent.forTarget(this);
+  Stream<Event> get onBeforeCut => Element.beforeCutEvent.forTarget(this);
 
-  Stream<Event> get onBeforePaste => beforePasteEvent.forTarget(this);
+  Stream<Event> get onBeforePaste => Element.beforePasteEvent.forTarget(this);
 
-  Stream<Event> get onBlur => blurEvent.forTarget(this);
+  Stream<Event> get onBlur => Element.blurEvent.forTarget(this);
 
-  Stream<Event> get onChange => changeEvent.forTarget(this);
+  Stream<Event> get onChange => Element.changeEvent.forTarget(this);
 
-  Stream<MouseEvent> get onClick => clickEvent.forTarget(this);
+  Stream<MouseEvent> get onClick => Element.clickEvent.forTarget(this);
 
-  Stream<MouseEvent> get onContextMenu => contextMenuEvent.forTarget(this);
+  Stream<MouseEvent> get onContextMenu => Element.contextMenuEvent.forTarget(this);
 
-  Stream<Event> get onCopy => copyEvent.forTarget(this);
+  Stream<Event> get onCopy => Element.copyEvent.forTarget(this);
 
-  Stream<Event> get onCut => cutEvent.forTarget(this);
+  Stream<Event> get onCut => Element.cutEvent.forTarget(this);
 
-  Stream<Event> get onDoubleClick => doubleClickEvent.forTarget(this);
+  Stream<Event> get onDoubleClick => Element.doubleClickEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrag => dragEvent.forTarget(this);
+  Stream<MouseEvent> get onDrag => Element.dragEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnd => dragEndEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnd => Element.dragEndEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnter => dragEnterEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnter => Element.dragEnterEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragLeave => dragLeaveEvent.forTarget(this);
+  Stream<MouseEvent> get onDragLeave => Element.dragLeaveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragOver => dragOverEvent.forTarget(this);
+  Stream<MouseEvent> get onDragOver => Element.dragOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragStart => dragStartEvent.forTarget(this);
+  Stream<MouseEvent> get onDragStart => Element.dragStartEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrop => dropEvent.forTarget(this);
+  Stream<MouseEvent> get onDrop => Element.dropEvent.forTarget(this);
 
-  Stream<Event> get onError => errorEvent.forTarget(this);
+  Stream<Event> get onError => Element.errorEvent.forTarget(this);
 
-  Stream<Event> get onFocus => focusEvent.forTarget(this);
+  Stream<Event> get onFocus => Element.focusEvent.forTarget(this);
 
-  Stream<Event> get onInput => inputEvent.forTarget(this);
+  Stream<Event> get onInput => Element.inputEvent.forTarget(this);
 
-  Stream<Event> get onInvalid => invalidEvent.forTarget(this);
+  Stream<Event> get onInvalid => Element.invalidEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyDown => keyDownEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyDown => Element.keyDownEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyPress => keyPressEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyPress => Element.keyPressEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyUp => keyUpEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyUp => Element.keyUpEvent.forTarget(this);
 
-  Stream<Event> get onLoad => loadEvent.forTarget(this);
+  Stream<Event> get onLoad => Element.loadEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseDown => mouseDownEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseDown => Element.mouseDownEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseMove => mouseMoveEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseMove => Element.mouseMoveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOut => mouseOutEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOut => Element.mouseOutEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOver => mouseOverEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOver => Element.mouseOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseUp => Element.mouseUpEvent.forTarget(this);
 
-  Stream<WheelEvent> get onMouseWheel => mouseWheelEvent.forTarget(this);
+  Stream<WheelEvent> get onMouseWheel => Element.mouseWheelEvent.forTarget(this);
 
-  Stream<Event> get onPaste => pasteEvent.forTarget(this);
+  Stream<Event> get onPaste => Element.pasteEvent.forTarget(this);
 
   Stream<Event> get onReadyStateChange => readyStateChangeEvent.forTarget(this);
 
-  Stream<Event> get onReset => resetEvent.forTarget(this);
+  Stream<Event> get onReset => Element.resetEvent.forTarget(this);
 
-  Stream<Event> get onScroll => scrollEvent.forTarget(this);
+  Stream<Event> get onScroll => Element.scrollEvent.forTarget(this);
 
-  Stream<Event> get onSearch => searchEvent.forTarget(this);
+  Stream<Event> get onSearch => Element.searchEvent.forTarget(this);
 
-  Stream<Event> get onSelect => selectEvent.forTarget(this);
+  Stream<Event> get onSelect => Element.selectEvent.forTarget(this);
 
   Stream<Event> get onSelectionChange => selectionChangeEvent.forTarget(this);
 
-  Stream<Event> get onSelectStart => selectStartEvent.forTarget(this);
+  Stream<Event> get onSelectStart => Element.selectStartEvent.forTarget(this);
 
-  Stream<Event> get onSubmit => submitEvent.forTarget(this);
+  Stream<Event> get onSubmit => Element.submitEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchCancel => touchCancelEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchCancel => Element.touchCancelEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchEnd => touchEndEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchEnd => Element.touchEndEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchMove => touchMoveEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchStart => touchStartEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchStart => Element.touchStartEvent.forTarget(this);
 
-  Stream<Event> get onFullscreenChange => fullscreenChangeEvent.forTarget(this);
+  Stream<Event> get onFullscreenChange => Element.fullscreenChangeEvent.forTarget(this);
 
-  Stream<Event> get onFullscreenError => fullscreenErrorEvent.forTarget(this);
+  Stream<Event> get onFullscreenError => Element.fullscreenErrorEvent.forTarget(this);
 
   Stream<Event> get onPointerLockChange => pointerLockChangeEvent.forTarget(this);
 
@@ -6316,21 +6128,21 @@
   }
 }
 
-/// @docsEditable true
+@DocsEditable
 class DocumentEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   DocumentEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get readyStateChange => this['readystatechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get selectionChange => this['selectionchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pointerLockChange => this['webkitpointerlockchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pointerLockError => this['webkitpointerlockerror'];
 }
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
@@ -6353,7 +6165,8 @@
   bool get frozen => true;
 }
 
-/// @domName DocumentFragment
+@DocsEditable
+@DomName('DocumentFragment')
 class DocumentFragment extends Node native "*DocumentFragment" {
   factory DocumentFragment() => _DocumentFragmentFactoryProvider.createDocumentFragment();
 
@@ -6601,16 +6414,17 @@
   }
 
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ElementEvents get on =>
     new ElementEvents(this);
 
-  /// @domName DocumentFragment.querySelector; @docsEditable true
   @JSName('querySelector')
+  @DocsEditable @DomName('DocumentFragment.querySelector')
   Element $dom_querySelector(String selectors) native;
 
-  /// @domName DocumentFragment.querySelectorAll; @docsEditable true
   @JSName('querySelectorAll')
+  @DocsEditable @DomName('DocumentFragment.querySelectorAll')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_querySelectorAll(String selectors) native;
 
@@ -6620,134 +6434,97 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DocumentType; @docsEditable true
+
+@DocsEditable
+@DomName('DocumentType')
 class DocumentType extends Node native "*DocumentType" {
-
-  /// @domName DocumentType.entities; @docsEditable true
-  final NamedNodeMap entities;
-
-  /// @domName DocumentType.internalSubset; @docsEditable true
-  final String internalSubset;
-
-  /// @domName DocumentType.name; @docsEditable true
-  final String name;
-
-  /// @domName DocumentType.notations; @docsEditable true
-  final NamedNodeMap notations;
-
-  /// @domName DocumentType.publicId; @docsEditable true
-  final String publicId;
-
-  /// @domName DocumentType.systemId; @docsEditable true
-  final String systemId;
-
-  /// @domName DocumentType.remove; @docsEditable true
-  void remove() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMError; @docsEditable true
+
+@DocsEditable
+@DomName('DOMError')
 class DomError native "*DOMError" {
 
-  /// @domName DOMError.name; @docsEditable true
+  @DocsEditable @DomName('DOMError.name')
   final String name;
 }
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
 
-/// @domName DOMException; @docsEditable true
+/// @domName DOMException
 class DomException native "*DOMException" {
 
-  static const int ABORT_ERR = 20;
+  static const String INDEX_SIZE = 'IndexSizeError';
+  static const String HIERARCHY_REQUEST = 'HierarchyRequestError';
+  static const String WRONG_DOCUMENT = 'WrongDocumentError';
+  static const String INVALID_CHARACTER = 'InvalidCharacterError';
+  static const String NO_MODIFICATION_ALLOWED = 'NoModificationAllowedError';
+  static const String NOT_FOUND = 'NotFoundError';
+  static const String NOT_SUPPORTED = 'NotSupportedError';
+  static const String INVALID_STATE = 'InvalidStateError';
+  static const String SYNTAX = 'SyntaxError';
+  static const String INVALID_MODIFICATION = 'InvalidModificationError';
+  static const String NAMESPACE = 'NamespaceError';
+  static const String INVALID_ACCESS = 'InvalidAccessError';
+  static const String TYPE_MISMATCH = 'TypeMismatchError';
+  static const String SECURITY = 'SecurityError';
+  static const String NETWORK = 'NetworkError';
+  static const String ABORT = 'AbortError';
+  static const String URL_MISMATCH = 'URLMismatchError';
+  static const String QUOTA_EXCEEDED = 'QuotaExceededError';
+  static const String TIMEOUT = 'TimeoutError';
+  static const String INVALID_NODE_TYPE = 'InvalidNodeTypeError';
+  static const String DATA_CLONE = 'DataCloneError';
 
-  static const int DATA_CLONE_ERR = 25;
+  String get name {
+    var errorName = JS('String', '#.name', this);
+    // Although Safari nightly has updated the name to SecurityError, Safari 5
+    // and 6 still return SECURITY_ERR.
+    if (_Device.isWebKit && errorName == 'SECURITY_ERR') return 'SecurityError';
+    // Chrome release still uses old string, remove this line when Chrome stable
+    // also prints out SyntaxError.
+    if (_Device.isWebKit && errorName == 'SYNTAX_ERR') return 'SyntaxError';
+    return errorName;
+  }
 
-  static const int DOMSTRING_SIZE_ERR = 2;
-
-  static const int HIERARCHY_REQUEST_ERR = 3;
-
-  static const int INDEX_SIZE_ERR = 1;
-
-  static const int INUSE_ATTRIBUTE_ERR = 10;
-
-  static const int INVALID_ACCESS_ERR = 15;
-
-  static const int INVALID_CHARACTER_ERR = 5;
-
-  static const int INVALID_MODIFICATION_ERR = 13;
-
-  static const int INVALID_NODE_TYPE_ERR = 24;
-
-  static const int INVALID_STATE_ERR = 11;
-
-  static const int NAMESPACE_ERR = 14;
-
-  static const int NETWORK_ERR = 19;
-
-  static const int NOT_FOUND_ERR = 8;
-
-  static const int NOT_SUPPORTED_ERR = 9;
-
-  static const int NO_DATA_ALLOWED_ERR = 6;
-
-  static const int NO_MODIFICATION_ALLOWED_ERR = 7;
-
-  static const int QUOTA_EXCEEDED_ERR = 22;
-
-  static const int SECURITY_ERR = 18;
-
-  static const int SYNTAX_ERR = 12;
-
-  static const int TIMEOUT_ERR = 23;
-
-  static const int TYPE_MISMATCH_ERR = 17;
-
-  static const int URL_MISMATCH_ERR = 21;
-
-  static const int VALIDATION_ERR = 16;
-
-  static const int WRONG_DOCUMENT_ERR = 4;
-
-  /// @domName DOMException.code; @docsEditable true
-  final int code;
-
-  /// @domName DOMException.message; @docsEditable true
+  @DocsEditable @DomName('DOMCoreException.message')
   final String message;
 
-  /// @domName DOMException.name; @docsEditable true
-  final String name;
-
-  /// @domName DOMException.toString; @docsEditable true
+  @DocsEditable @DomName('DOMCoreException.toString')
   String toString() native;
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMImplementation; @docsEditable true
+
+@DocsEditable
+@DomName('DOMImplementation')
 class DomImplementation native "*DOMImplementation" {
 
-  /// @domName DOMImplementation.createCSSStyleSheet; @docsEditable true
   @JSName('createCSSStyleSheet')
+  @DocsEditable @DomName('DOMImplementation.createCSSStyleSheet')
   CssStyleSheet createCssStyleSheet(String title, String media) native;
 
-  /// @domName DOMImplementation.createDocument; @docsEditable true
+  @DocsEditable @DomName('DOMImplementation.createDocument')
   Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype) native;
 
-  /// @domName DOMImplementation.createDocumentType; @docsEditable true
+  @DocsEditable @DomName('DOMImplementation.createDocumentType')
   DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) native;
 
-  /// @domName DOMImplementation.createHTMLDocument; @docsEditable true
   @JSName('createHTMLDocument')
+  @DocsEditable @DomName('DOMImplementation.createHTMLDocument')
   HtmlDocument createHtmlDocument(String title) native;
 
-  /// @domName DOMImplementation.hasFeature; @docsEditable true
+  @DocsEditable @DomName('DOMImplementation.hasFeature')
   bool hasFeature(String feature, String version) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6755,19 +6532,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MimeType; @docsEditable true
+
+@DocsEditable
+@DomName('MimeType')
 class DomMimeType native "*MimeType" {
 
-  /// @domName MimeType.description; @docsEditable true
+  @DocsEditable @DomName('DOMMimeType.description')
   final String description;
 
-  /// @domName MimeType.enabledPlugin; @docsEditable true
+  @DocsEditable @DomName('DOMMimeType.enabledPlugin')
   final DomPlugin enabledPlugin;
 
-  /// @domName MimeType.suffixes; @docsEditable true
+  @DocsEditable @DomName('DOMMimeType.suffixes')
   final String suffixes;
 
-  /// @domName MimeType.type; @docsEditable true
+  @DocsEditable @DomName('DOMMimeType.type')
   final String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6775,10 +6554,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MimeTypeArray; @docsEditable true
+
+@DocsEditable
+@DomName('MimeTypeArray')
 class DomMimeTypeArray implements JavaScriptIndexingBehavior, List<DomMimeType> native "*MimeTypeArray" {
 
-  /// @domName MimeTypeArray.length; @docsEditable true
+  @DocsEditable @DomName('DOMMimeTypeArray.length')
   int get length => JS("int", "#.length", this);
 
   DomMimeType operator[](int index) => JS("DomMimeType", "#[#]", this, index);
@@ -6799,50 +6580,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, DomMimeType)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(DomMimeType element) => Collections.contains(this, element);
+  bool contains(DomMimeType element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(DomMimeType element)) => Collections.forEach(this, f);
+  void forEach(void f(DomMimeType element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(DomMimeType element)) => new MappedList<DomMimeType, dynamic>(this, f);
+  List mappedBy(f(DomMimeType element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<DomMimeType> where(bool f(DomMimeType element)) => new WhereIterable<DomMimeType>(this, f);
+  Iterable<DomMimeType> where(bool f(DomMimeType element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(DomMimeType element)) => Collections.every(this, f);
+  bool every(bool f(DomMimeType element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(DomMimeType element)) => Collections.any(this, f);
+  bool any(bool f(DomMimeType element)) => IterableMixinWorkaround.any(this, f);
 
   List<DomMimeType> toList() => new List<DomMimeType>.from(this);
   Set<DomMimeType> toSet() => new Set<DomMimeType>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<DomMimeType> take(int n) => new ListView<DomMimeType>(this, 0, n);
+  List<DomMimeType> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<DomMimeType> takeWhile(bool test(DomMimeType value)) {
-    return new TakeWhileIterable<DomMimeType>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<DomMimeType> skip(int n) => new ListView<DomMimeType>(this, n, null);
+  List<DomMimeType> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<DomMimeType> skipWhile(bool test(DomMimeType value)) {
-    return new SkipWhileIterable<DomMimeType>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   DomMimeType firstMatching(bool test(DomMimeType value), { DomMimeType orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   DomMimeType lastMatching(bool test(DomMimeType value), {DomMimeType orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   DomMimeType singleMatching(bool test(DomMimeType value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   DomMimeType elementAt(int index) {
@@ -6900,16 +6681,36 @@
     throw new StateError("More than one element");
   }
 
-  DomMimeType min([int compare(DomMimeType a, DomMimeType b)]) => Collections.min(this, compare);
+  DomMimeType min([int compare(DomMimeType a, DomMimeType b)]) => IterableMixinWorkaround.min(this, compare);
 
-  DomMimeType max([int compare(DomMimeType a, DomMimeType b)]) => Collections.max(this, compare);
+  DomMimeType max([int compare(DomMimeType a, DomMimeType b)]) => IterableMixinWorkaround.max(this, compare);
 
   DomMimeType removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   DomMimeType removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(DomMimeType element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(DomMimeType element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DomMimeType> from, [int startFrom]) {
@@ -6929,10 +6730,10 @@
 
   // -- end List<DomMimeType> mixins.
 
-  /// @domName MimeTypeArray.item; @docsEditable true
+  @DocsEditable @DomName('DOMMimeTypeArray.item')
   DomMimeType item(int index) native;
 
-  /// @domName MimeTypeArray.namedItem; @docsEditable true
+  @DocsEditable @DomName('DOMMimeTypeArray.namedItem')
   DomMimeType namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6940,14 +6741,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMParser; @docsEditable true
+
+@DocsEditable
+@DomName('DOMParser')
 class DomParser native "*DOMParser" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DomParser() => DomParser._create();
   static DomParser _create() => JS('DomParser', 'new DOMParser()');
 
-  /// @domName DOMParser.parseFromString; @docsEditable true
+  @DocsEditable @DomName('DOMParser.parseFromString')
   Document parseFromString(String str, String contentType) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6955,25 +6758,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Plugin; @docsEditable true
+
+@DocsEditable
+@DomName('Plugin')
 class DomPlugin native "*Plugin" {
 
-  /// @domName Plugin.description; @docsEditable true
+  @DocsEditable @DomName('DOMPlugin.description')
   final String description;
 
-  /// @domName Plugin.filename; @docsEditable true
+  @DocsEditable @DomName('DOMPlugin.filename')
   final String filename;
 
-  /// @domName Plugin.length; @docsEditable true
+  @DocsEditable @DomName('DOMPlugin.length')
   final int length;
 
-  /// @domName Plugin.name; @docsEditable true
+  @DocsEditable @DomName('DOMPlugin.name')
   final String name;
 
-  /// @domName Plugin.item; @docsEditable true
+  @DocsEditable @DomName('DOMPlugin.item')
   DomMimeType item(int index) native;
 
-  /// @domName Plugin.namedItem; @docsEditable true
+  @DocsEditable @DomName('DOMPlugin.namedItem')
   DomMimeType namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6981,10 +6786,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PluginArray; @docsEditable true
+
+@DocsEditable
+@DomName('PluginArray')
 class DomPluginArray implements JavaScriptIndexingBehavior, List<DomPlugin> native "*PluginArray" {
 
-  /// @domName PluginArray.length; @docsEditable true
+  @DocsEditable @DomName('DOMPluginArray.length')
   int get length => JS("int", "#.length", this);
 
   DomPlugin operator[](int index) => JS("DomPlugin", "#[#]", this, index);
@@ -7005,50 +6812,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, DomPlugin)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(DomPlugin element) => Collections.contains(this, element);
+  bool contains(DomPlugin element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(DomPlugin element)) => Collections.forEach(this, f);
+  void forEach(void f(DomPlugin element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(DomPlugin element)) => new MappedList<DomPlugin, dynamic>(this, f);
+  List mappedBy(f(DomPlugin element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<DomPlugin> where(bool f(DomPlugin element)) => new WhereIterable<DomPlugin>(this, f);
+  Iterable<DomPlugin> where(bool f(DomPlugin element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(DomPlugin element)) => Collections.every(this, f);
+  bool every(bool f(DomPlugin element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(DomPlugin element)) => Collections.any(this, f);
+  bool any(bool f(DomPlugin element)) => IterableMixinWorkaround.any(this, f);
 
   List<DomPlugin> toList() => new List<DomPlugin>.from(this);
   Set<DomPlugin> toSet() => new Set<DomPlugin>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<DomPlugin> take(int n) => new ListView<DomPlugin>(this, 0, n);
+  List<DomPlugin> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<DomPlugin> takeWhile(bool test(DomPlugin value)) {
-    return new TakeWhileIterable<DomPlugin>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<DomPlugin> skip(int n) => new ListView<DomPlugin>(this, n, null);
+  List<DomPlugin> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<DomPlugin> skipWhile(bool test(DomPlugin value)) {
-    return new SkipWhileIterable<DomPlugin>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   DomPlugin firstMatching(bool test(DomPlugin value), { DomPlugin orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   DomPlugin lastMatching(bool test(DomPlugin value), {DomPlugin orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   DomPlugin singleMatching(bool test(DomPlugin value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   DomPlugin elementAt(int index) {
@@ -7106,16 +6913,36 @@
     throw new StateError("More than one element");
   }
 
-  DomPlugin min([int compare(DomPlugin a, DomPlugin b)]) => Collections.min(this, compare);
+  DomPlugin min([int compare(DomPlugin a, DomPlugin b)]) => IterableMixinWorkaround.min(this, compare);
 
-  DomPlugin max([int compare(DomPlugin a, DomPlugin b)]) => Collections.max(this, compare);
+  DomPlugin max([int compare(DomPlugin a, DomPlugin b)]) => IterableMixinWorkaround.max(this, compare);
 
   DomPlugin removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   DomPlugin removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(DomPlugin element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(DomPlugin element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DomPlugin> from, [int startFrom]) {
@@ -7135,13 +6962,13 @@
 
   // -- end List<DomPlugin> mixins.
 
-  /// @domName PluginArray.item; @docsEditable true
+  @DocsEditable @DomName('DOMPluginArray.item')
   DomPlugin item(int index) native;
 
-  /// @domName PluginArray.namedItem; @docsEditable true
+  @DocsEditable @DomName('DOMPluginArray.namedItem')
   DomPlugin namedItem(String name) native;
 
-  /// @domName PluginArray.refresh; @docsEditable true
+  @DocsEditable @DomName('DOMPluginArray.refresh')
   void refresh(bool reload) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7149,85 +6976,87 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Selection; @docsEditable true
+
+@DocsEditable
+@DomName('Selection')
 class DomSelection native "*Selection" {
 
-  /// @domName Selection.anchorNode; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.anchorNode')
   final Node anchorNode;
 
-  /// @domName Selection.anchorOffset; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.anchorOffset')
   final int anchorOffset;
 
-  /// @domName Selection.baseNode; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.baseNode')
   final Node baseNode;
 
-  /// @domName Selection.baseOffset; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.baseOffset')
   final int baseOffset;
 
-  /// @domName Selection.extentNode; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.extentNode')
   final Node extentNode;
 
-  /// @domName Selection.extentOffset; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.extentOffset')
   final int extentOffset;
 
-  /// @domName Selection.focusNode; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.focusNode')
   final Node focusNode;
 
-  /// @domName Selection.focusOffset; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.focusOffset')
   final int focusOffset;
 
-  /// @domName Selection.isCollapsed; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.isCollapsed')
   final bool isCollapsed;
 
-  /// @domName Selection.rangeCount; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.rangeCount')
   final int rangeCount;
 
-  /// @domName Selection.type; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.type')
   final String type;
 
-  /// @domName Selection.addRange; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.addRange')
   void addRange(Range range) native;
 
-  /// @domName Selection.collapse; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.collapse')
   void collapse(Node node, int index) native;
 
-  /// @domName Selection.collapseToEnd; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.collapseToEnd')
   void collapseToEnd() native;
 
-  /// @domName Selection.collapseToStart; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.collapseToStart')
   void collapseToStart() native;
 
-  /// @domName Selection.containsNode; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.containsNode')
   bool containsNode(Node node, bool allowPartial) native;
 
-  /// @domName Selection.deleteFromDocument; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.deleteFromDocument')
   void deleteFromDocument() native;
 
-  /// @domName Selection.empty; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.empty')
   void empty() native;
 
-  /// @domName Selection.extend; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.extend')
   void extend(Node node, int offset) native;
 
-  /// @domName Selection.getRangeAt; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.getRangeAt')
   Range getRangeAt(int index) native;
 
-  /// @domName Selection.modify; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.modify')
   void modify(String alter, String direction, String granularity) native;
 
-  /// @domName Selection.removeAllRanges; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.removeAllRanges')
   void removeAllRanges() native;
 
-  /// @domName Selection.selectAllChildren; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.selectAllChildren')
   void selectAllChildren(Node node) native;
 
-  /// @domName Selection.setBaseAndExtent; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.setBaseAndExtent')
   void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) native;
 
-  /// @domName Selection.setPosition; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.setPosition')
   void setPosition(Node node, int offset) native;
 
-  /// @domName Selection.toString; @docsEditable true
+  @DocsEditable @DomName('DOMSelection.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7235,10 +7064,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMSettableTokenList; @docsEditable true
+
+@DocsEditable
+@DomName('DOMSettableTokenList')
 class DomSettableTokenList extends DomTokenList native "*DOMSettableTokenList" {
 
-  /// @domName DOMSettableTokenList.value; @docsEditable true
+  @DocsEditable @DomName('DOMSettableTokenList.value')
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7246,10 +7077,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMStringList; @docsEditable true
+
+@DocsEditable
+@DomName('DOMStringList')
 class DomStringList implements JavaScriptIndexingBehavior, List<String> native "*DOMStringList" {
 
-  /// @domName DOMStringList.length; @docsEditable true
+  @DocsEditable @DomName('DOMStringList.length')
   int get length => JS("int", "#.length", this);
 
   String operator[](int index) => JS("String", "#[#]", this, index);
@@ -7270,50 +7103,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, String)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   // contains() defined by IDL.
 
-  void forEach(void f(String element)) => Collections.forEach(this, f);
+  void forEach(void f(String element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(String element)) => new MappedList<String, dynamic>(this, f);
+  List mappedBy(f(String element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<String> where(bool f(String element)) => new WhereIterable<String>(this, f);
+  Iterable<String> where(bool f(String element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(String element)) => Collections.every(this, f);
+  bool every(bool f(String element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(String element)) => Collections.any(this, f);
+  bool any(bool f(String element)) => IterableMixinWorkaround.any(this, f);
 
   List<String> toList() => new List<String>.from(this);
   Set<String> toSet() => new Set<String>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<String> take(int n) => new ListView<String>(this, 0, n);
+  List<String> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<String> takeWhile(bool test(String value)) {
-    return new TakeWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<String> skip(int n) => new ListView<String>(this, n, null);
+  List<String> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<String> skipWhile(bool test(String value)) {
-    return new SkipWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   String firstMatching(bool test(String value), { String orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   String lastMatching(bool test(String value), {String orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   String singleMatching(bool test(String value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   String elementAt(int index) {
@@ -7371,16 +7204,36 @@
     throw new StateError("More than one element");
   }
 
-  String min([int compare(String a, String b)]) => Collections.min(this, compare);
+  String min([int compare(String a, String b)]) => IterableMixinWorkaround.min(this, compare);
 
-  String max([int compare(String a, String b)]) => Collections.max(this, compare);
+  String max([int compare(String a, String b)]) => IterableMixinWorkaround.max(this, compare);
 
   String removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   String removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
@@ -7400,10 +7253,10 @@
 
   // -- end List<String> mixins.
 
-  /// @domName DOMStringList.contains; @docsEditable true
+  @DocsEditable @DomName('DOMStringList.contains')
   bool contains(String string) native;
 
-  /// @domName DOMStringList.item; @docsEditable true
+  @DocsEditable @DomName('DOMStringList.item')
   String item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7411,7 +7264,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMStringMap
+@DocsEditable
+@DomName('DOMStringMap')
 abstract class DomStringMap {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7419,22 +7273,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMTokenList; @docsEditable true
+
+@DocsEditable
+@DomName('DOMTokenList')
 class DomTokenList native "*DOMTokenList" {
 
-  /// @domName DOMTokenList.length; @docsEditable true
+  @DocsEditable @DomName('DOMTokenList.length')
   final int length;
 
-  /// @domName DOMTokenList.contains; @docsEditable true
+  @DocsEditable @DomName('DOMTokenList.contains')
   bool contains(String token) native;
 
-  /// @domName DOMTokenList.item; @docsEditable true
+  @DocsEditable @DomName('DOMTokenList.item')
   String item(int index) native;
 
-  /// @domName DOMTokenList.toString; @docsEditable true
+  @DocsEditable @DomName('DOMTokenList.toString')
   String toString() native;
 
-  /// @domName DOMTokenList.toggle; @docsEditable true
+  @DocsEditable @DomName('DOMTokenList.toggle')
   bool toggle(String token, [bool force]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7496,46 +7352,47 @@
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   List mappedBy(f(Element element)) {
-    return new MappedList<Element, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
-  Iterable<Element> where(bool f(Element element))
-      => new WhereIterable(this, f);
+  Iterable<Element> where(bool f(Element element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
   bool get isEmpty {
     return _element.$dom_firstElementChild == null;
   }
 
   List<Element> take(int n) {
-    return new ListView<Element>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Element> takeWhile(bool test(Element value)) {
-    return new TakeWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Element> skip(int n) {
-    return new ListView<Element>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Element> skipWhile(bool test(Element value)) {
-    return new SkipWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Element firstMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Element lastMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Element singleMatching(bool test(Element value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Element elementAt(int index) {
@@ -7554,10 +7411,10 @@
     _element.$dom_replaceChild(value, _childElements[index]);
   }
 
-   void set length(int newLength) {
-     // TODO(jacobr): remove children when length is reduced.
-     throw new UnsupportedError('');
-   }
+  void set length(int newLength) {
+    // TODO(jacobr): remove children when length is reduced.
+    throw new UnsupportedError('');
+  }
 
   Element add(Element value) {
     _element.$dom_appendChild(value);
@@ -7580,13 +7437,38 @@
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Element element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
     throw new UnimplementedError();
   }
 
+  void remove(Object object) {
+    if (object is Element) {
+      Element element = object;
+      if (identical(element.parentNode, this)) {
+        _element.$dom_removeChild(element);
+      }
+    }
+  }
+
+  void removeAll(Iterable elements) {
+    Collections.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    Collections.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(Element element)) {
+    Collections.removeMatching(this, test);
+  }
+
+  void retainMatching(bool test(Element element)) {
+    Collections.retainMatching(this, test);
+  }
+
   void removeRange(int start, int rangeLength) {
     throw new UnimplementedError();
   }
@@ -7648,11 +7530,11 @@
   }
 
   Element min([int compare(Element a, Element b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Element max([int compare(Element a, Element b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 }
 
@@ -7679,15 +7561,16 @@
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   List mappedBy(f(Element element)) {
-    return new MappedList<Element, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
-  Iterable<Element> where(bool f(Element element))
-      => new WhereIterable(this, f);
+  Iterable<Element> where(bool f(Element element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
   bool every(bool f(Element element)) {
     for(Element element in this) {
@@ -7711,31 +7594,31 @@
   Set<Element> toSet() => new Set<Element>.from(this);
 
   List<Element> take(int n) {
-    return new ListView<Element>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Element> takeWhile(bool test(Element value)) {
-    return new TakeWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Element> skip(int n) {
-    return new ListView<Element>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Element> skipWhile(bool test(Element value)) {
-    return new SkipWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Element firstMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Element lastMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Element singleMatching(bool test(Element value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Element elementAt(int index) {
@@ -7776,7 +7659,7 @@
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Element element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -7812,6 +7695,26 @@
     throw new UnsupportedError('');
   }
 
+  void remove(Object element) {
+    throw new UnsupportedError('');
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError('');
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError('');
+  }
+
+  void removeMatching(bool test(Element element)) {
+    throw new UnsupportedError('');
+  }
+
+  void retainMatching(bool test(Element element)) {
+    throw new UnsupportedError('');
+  }
+
   Element get first => _nodeList.first;
 
   Element get last => _nodeList.last;
@@ -7819,11 +7722,11 @@
   Element get single => _nodeList.single;
 
   Element min([int compare(Element a, Element b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Element max([int compare(Element a, Element b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 }
 
@@ -8162,6 +8065,23 @@
   @Creates('Null')  // Set from Dart code; does not instantiate a native type.
   var xtag;
 
+  static const EventStreamProvider<WheelEvent> mouseWheelEvent =
+      const _CustomEventStreamProvider<WheelEvent>(
+        Element._determineMouseWheelEventType);
+
+  static String _determineMouseWheelEventType(EventTarget e) {
+    if (JS('bool', '#.onwheel !== undefined', e)) {
+      // W3C spec, and should be IE9+, but IE has a bug exposing onwheel.
+      return 'wheel';
+    } else if (JS('bool', '#.onmousewheel !== undefined', e)) {
+      // Chrome & IE
+      return 'mousewheel';
+    } else {
+      // Firefox
+      return 'DOMMouseScroll';
+    }
+  }
+
   /**
    * Creates a text node and inserts it into the DOM at the specified location.
    *
@@ -8369,225 +8289,225 @@
 
   static const EventStreamProvider<Event> fullscreenErrorEvent = const EventStreamProvider<Event>('webkitfullscreenerror');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ElementEvents get on =>
     new ElementEvents(this);
 
-  /// @domName HTMLElement.children; @docsEditable true
   @JSName('children')
+  @DocsEditable @DomName('Element.children')
   final HtmlCollection $dom_children;
 
-  /// @domName HTMLElement.contentEditable; @docsEditable true
+  @DocsEditable @DomName('Element.contentEditable')
   String contentEditable;
 
-  /// @domName HTMLElement.dir; @docsEditable true
+  @DocsEditable @DomName('Element.dir')
   String dir;
 
-  /// @domName HTMLElement.draggable; @docsEditable true
+  @DocsEditable @DomName('Element.draggable')
   bool draggable;
 
-  /// @domName HTMLElement.hidden; @docsEditable true
+  @DocsEditable @DomName('Element.hidden')
   bool hidden;
 
-  /// @domName HTMLElement.id; @docsEditable true
+  @DocsEditable @DomName('Element.id')
   String id;
 
-  /// @domName HTMLElement.innerHTML; @docsEditable true
   @JSName('innerHTML')
+  @DocsEditable @DomName('Element.innerHTML')
   String innerHtml;
 
-  /// @domName HTMLElement.isContentEditable; @docsEditable true
+  @DocsEditable @DomName('Element.isContentEditable')
   final bool isContentEditable;
 
-  /// @domName HTMLElement.lang; @docsEditable true
+  @DocsEditable @DomName('Element.lang')
   String lang;
 
-  /// @domName HTMLElement.outerHTML; @docsEditable true
   @JSName('outerHTML')
+  @DocsEditable @DomName('Element.outerHTML')
   final String outerHtml;
 
-  /// @domName HTMLElement.spellcheck; @docsEditable true
+  @DocsEditable @DomName('Element.spellcheck')
   bool spellcheck;
 
-  /// @domName HTMLElement.tabIndex; @docsEditable true
+  @DocsEditable @DomName('Element.tabIndex')
   int tabIndex;
 
-  /// @domName HTMLElement.title; @docsEditable true
+  @DocsEditable @DomName('Element.title')
   String title;
 
-  /// @domName HTMLElement.translate; @docsEditable true
+  @DocsEditable @DomName('Element.translate')
   bool translate;
 
-  /// @domName HTMLElement.webkitdropzone; @docsEditable true
+  @DocsEditable @DomName('Element.webkitdropzone')
   String webkitdropzone;
 
-  /// @domName HTMLElement.click; @docsEditable true
+  @DocsEditable @DomName('Element.click')
   void click() native;
 
   static const int ALLOW_KEYBOARD_INPUT = 1;
 
-  /// @domName Element.childElementCount; @docsEditable true
   @JSName('childElementCount')
+  @DocsEditable @DomName('Element.childElementCount')
   final int $dom_childElementCount;
 
-  /// @domName Element.className; @docsEditable true
   @JSName('className')
+  @DocsEditable @DomName('Element.className')
   String $dom_className;
 
-  /// @domName Element.clientHeight; @docsEditable true
+  @DocsEditable @DomName('Element.clientHeight')
   final int clientHeight;
 
-  /// @domName Element.clientLeft; @docsEditable true
+  @DocsEditable @DomName('Element.clientLeft')
   final int clientLeft;
 
-  /// @domName Element.clientTop; @docsEditable true
+  @DocsEditable @DomName('Element.clientTop')
   final int clientTop;
 
-  /// @domName Element.clientWidth; @docsEditable true
+  @DocsEditable @DomName('Element.clientWidth')
   final int clientWidth;
 
-  /// @domName Element.dataset; @docsEditable true
+  @DocsEditable @DomName('Element.dataset')
   final Map<String, String> dataset;
 
-  /// @domName Element.firstElementChild; @docsEditable true
   @JSName('firstElementChild')
+  @DocsEditable @DomName('Element.firstElementChild')
   final Element $dom_firstElementChild;
 
-  /// @domName Element.lastElementChild; @docsEditable true
   @JSName('lastElementChild')
+  @DocsEditable @DomName('Element.lastElementChild')
   final Element $dom_lastElementChild;
 
-  /// @domName Element.nextElementSibling; @docsEditable true
+  @DocsEditable @DomName('Element.nextElementSibling')
   final Element nextElementSibling;
 
-  /// @domName Element.offsetHeight; @docsEditable true
+  @DocsEditable @DomName('Element.offsetHeight')
   final int offsetHeight;
 
-  /// @domName Element.offsetLeft; @docsEditable true
+  @DocsEditable @DomName('Element.offsetLeft')
   final int offsetLeft;
 
-  /// @domName Element.offsetParent; @docsEditable true
+  @DocsEditable @DomName('Element.offsetParent')
   final Element offsetParent;
 
-  /// @domName Element.offsetTop; @docsEditable true
+  @DocsEditable @DomName('Element.offsetTop')
   final int offsetTop;
 
-  /// @domName Element.offsetWidth; @docsEditable true
+  @DocsEditable @DomName('Element.offsetWidth')
   final int offsetWidth;
 
-  /// @domName Element.previousElementSibling; @docsEditable true
+  @DocsEditable @DomName('Element.previousElementSibling')
   final Element previousElementSibling;
 
-  /// @domName Element.scrollHeight; @docsEditable true
+  @DocsEditable @DomName('Element.scrollHeight')
   final int scrollHeight;
 
-  /// @domName Element.scrollLeft; @docsEditable true
+  @DocsEditable @DomName('Element.scrollLeft')
   int scrollLeft;
 
-  /// @domName Element.scrollTop; @docsEditable true
+  @DocsEditable @DomName('Element.scrollTop')
   int scrollTop;
 
-  /// @domName Element.scrollWidth; @docsEditable true
+  @DocsEditable @DomName('Element.scrollWidth')
   final int scrollWidth;
 
-  /// @domName Element.style; @docsEditable true
+  @DocsEditable @DomName('Element.style')
   final CssStyleDeclaration style;
 
-  /// @domName Element.tagName; @docsEditable true
+  @DocsEditable @DomName('Element.tagName')
   final String tagName;
 
-  /// @domName Element.webkitPseudo; @docsEditable true
+  @DocsEditable @DomName('Element.webkitPseudo')
   String webkitPseudo;
 
-  /// @domName Element.webkitShadowRoot; @docsEditable true
+  @DocsEditable @DomName('Element.webkitShadowRoot')
   final ShadowRoot webkitShadowRoot;
 
-  /// @domName Element.blur; @docsEditable true
+  @DocsEditable @DomName('Element.blur')
   void blur() native;
 
-  /// @domName Element.focus; @docsEditable true
+  @DocsEditable @DomName('Element.focus')
   void focus() native;
 
-  /// @domName Element.getAttribute; @docsEditable true
   @JSName('getAttribute')
+  @DocsEditable @DomName('Element.getAttribute')
   String $dom_getAttribute(String name) native;
 
-  /// @domName Element.getAttributeNS; @docsEditable true
   @JSName('getAttributeNS')
+  @DocsEditable @DomName('Element.getAttributeNS')
   String $dom_getAttributeNS(String namespaceURI, String localName) native;
 
-  /// @domName Element.getBoundingClientRect; @docsEditable true
+  @DocsEditable @DomName('Element.getBoundingClientRect')
   ClientRect getBoundingClientRect() native;
 
-  /// @domName Element.getClientRects; @docsEditable true
+  @DocsEditable @DomName('Element.getClientRects')
   @Returns('_ClientRectList') @Creates('_ClientRectList')
   List<ClientRect> getClientRects() native;
 
-  /// @domName Element.getElementsByClassName; @docsEditable true
   @JSName('getElementsByClassName')
+  @DocsEditable @DomName('Element.getElementsByClassName')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_getElementsByClassName(String name) native;
 
-  /// @domName Element.getElementsByTagName; @docsEditable true
   @JSName('getElementsByTagName')
+  @DocsEditable @DomName('Element.getElementsByTagName')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_getElementsByTagName(String name) native;
 
-  /// @domName Element.hasAttribute; @docsEditable true
   @JSName('hasAttribute')
+  @DocsEditable @DomName('Element.hasAttribute')
   bool $dom_hasAttribute(String name) native;
 
-  /// @domName Element.hasAttributeNS; @docsEditable true
   @JSName('hasAttributeNS')
+  @DocsEditable @DomName('Element.hasAttributeNS')
   bool $dom_hasAttributeNS(String namespaceURI, String localName) native;
 
-  /// @domName Element.querySelector; @docsEditable true
   @JSName('querySelector')
+  @DocsEditable @DomName('Element.querySelector')
   Element $dom_querySelector(String selectors) native;
 
-  /// @domName Element.querySelectorAll; @docsEditable true
   @JSName('querySelectorAll')
+  @DocsEditable @DomName('Element.querySelectorAll')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_querySelectorAll(String selectors) native;
 
-  /// @domName Element.removeAttribute; @docsEditable true
   @JSName('removeAttribute')
+  @DocsEditable @DomName('Element.removeAttribute')
   void $dom_removeAttribute(String name) native;
 
-  /// @domName Element.removeAttributeNS; @docsEditable true
   @JSName('removeAttributeNS')
+  @DocsEditable @DomName('Element.removeAttributeNS')
   void $dom_removeAttributeNS(String namespaceURI, String localName) native;
 
-  /// @domName Element.scrollByLines; @docsEditable true
+  @DocsEditable @DomName('Element.scrollByLines')
   void scrollByLines(int lines) native;
 
-  /// @domName Element.scrollByPages; @docsEditable true
+  @DocsEditable @DomName('Element.scrollByPages')
   void scrollByPages(int pages) native;
 
-  /// @domName Element.scrollIntoViewIfNeeded; @docsEditable true
   @JSName('scrollIntoViewIfNeeded')
+  @DocsEditable @DomName('Element.scrollIntoViewIfNeeded')
   void scrollIntoView([bool centerIfNeeded]) native;
 
-  /// @domName Element.setAttribute; @docsEditable true
   @JSName('setAttribute')
+  @DocsEditable @DomName('Element.setAttribute')
   void $dom_setAttribute(String name, String value) native;
 
-  /// @domName Element.setAttributeNS; @docsEditable true
   @JSName('setAttributeNS')
+  @DocsEditable @DomName('Element.setAttributeNS')
   void $dom_setAttributeNS(String namespaceURI, String qualifiedName, String value) native;
 
-  /// @domName Element.webkitCreateShadowRoot; @docsEditable true
   @JSName('webkitCreateShadowRoot')
-  @SupportedBrowser(SupportedBrowser.CHROME, '25') @Experimental()
+  @DocsEditable @DomName('Element.webkitCreateShadowRoot') @SupportedBrowser(SupportedBrowser.CHROME, '25') @Experimental()
   ShadowRoot createShadowRoot() native;
 
-  /// @domName Element.webkitRequestFullScreen; @docsEditable true
+  @DocsEditable @DomName('Element.webkitRequestFullScreen')
   void webkitRequestFullScreen(int flags) native;
 
-  /// @domName Element.webkitRequestFullscreen; @docsEditable true
+  @DocsEditable @DomName('Element.webkitRequestFullscreen')
   void webkitRequestFullscreen() native;
 
-  /// @domName Element.webkitRequestPointerLock; @docsEditable true
+  @DocsEditable @DomName('Element.webkitRequestPointerLock')
   void webkitRequestPointerLock() native;
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -8652,6 +8572,8 @@
 
   Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this);
 
+  Stream<WheelEvent> get onMouseWheel => mouseWheelEvent.forTarget(this);
+
   Stream<Event> get onPaste => pasteEvent.forTarget(this);
 
   Stream<Event> get onReset => resetEvent.forTarget(this);
@@ -8688,11 +8610,12 @@
 
 final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 class _ElementFactoryProvider {
-  static final _CUSTOM_PARENT_TAG_MAP = const {
+  static const _CUSTOM_PARENT_TAG_MAP = const {
     'body' : 'html',
     'head' : 'html',
     'caption' : 'table',
     'td': 'tr',
+    'th': 'tr',
     'colgroup': 'table',
     'col' : 'colgroup',
     'tr' : 'tbody',
@@ -8702,7 +8625,20 @@
     'track' : 'audio',
   };
 
-  /** @domName Document.createElement */
+  // TODO(jmesserly): const set would be better
+  static const _TABLE_TAGS = const {
+    'caption': null,
+    'col': null,
+    'colgroup': null,
+    'tbody': null,
+    'td': null,
+    'tfoot': null,
+    'th': null,
+    'thead': null,
+    'tr': null,
+  };
+
+  @DomName('Document.createElement')
   static Element createElement_html(String html) {
     // TODO(jacobr): this method can be made more robust and performant.
     // 1) Cache the dummy parent elements required to use innerHTML rather than
@@ -8715,30 +8651,90 @@
     final match = _START_TAG_REGEXP.firstMatch(html);
     if (match != null) {
       tag = match.group(1).toLowerCase();
-      if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
-        parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
+      if (_Device.isIE && _TABLE_TAGS.containsKey(tag)) {
+        return _createTableForIE(html, tag);
       }
+      parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
+      if (parentTag == null) parentTag = 'div';
     }
-    final Element temp = new Element.tag(parentTag);
+
+    final temp = new Element.tag(parentTag);
     temp.innerHtml = html;
 
     Element element;
     if (temp.children.length == 1) {
       element = temp.children[0];
     } else if (parentTag == 'html' && temp.children.length == 2) {
-      // Work around for edge case in WebKit and possibly other browsers where
-      // both body and head elements are created even though the inner html
-      // only contains a head or body element.
+      // In html5 the root <html> tag will always have a <body> and a <head>,
+      // even though the inner html only contains one of them.
       element = temp.children[tag == 'head' ? 0 : 1];
     } else {
-      throw new ArgumentError('HTML had ${temp.children.length} '
-          'top level elements but 1 expected');
+      _singleNode(temp.children);
     }
     element.remove();
     return element;
   }
 
-  /** @domName Document.createElement */
+  /**
+   * IE table elements don't support innerHTML (even in standards mode).
+   * Instead we use a div and inject the table element in the innerHtml string.
+   * This technique works on other browsers too, but it's probably slower,
+   * so we only use it when running on IE.
+   *
+   * See also innerHTML:
+   * <http://msdn.microsoft.com/en-us/library/ie/ms533897(v=vs.85).aspx>
+   * and Building Tables Dynamically:
+   * <http://msdn.microsoft.com/en-us/library/ie/ms532998(v=vs.85).aspx>.
+   */
+  static Element _createTableForIE(String html, String tag) {
+    var div = new Element.tag('div');
+    div.innerHtml = '<table>$html</table>';
+    var table = _singleNode(div.children);
+    Element element;
+    switch (tag) {
+      case 'td':
+      case 'th':
+        element = _singleNode(_singleNode(table.rows).cells);
+        break;
+      case 'tr':
+        element = _singleNode(table.rows);
+        break;
+      case 'tbody':
+        element = _singleNode(table.tBodies);
+        break;
+      case 'thead':
+        element = table.tHead;
+        break;
+      case 'tfoot':
+        element = table.tFoot;
+        break;
+      case 'caption':
+        element = table.caption;
+        break;
+      case 'colgroup':
+        element = _getColgroup(table);
+        break;
+      case 'col':
+        element = _singleNode(_getColgroup(table).children);
+        break;
+    }
+    element.remove();
+    return element;
+  }
+
+  static TableColElement _getColgroup(TableElement table) {
+    // TODO(jmesserly): is there a better way to do this?
+    return _singleNode(table.children.where((n) => n.tagName == 'COLGROUP')
+        .toList());
+  }
+
+  static Node _singleNode(List<Node> list) {
+    if (list.length == 1) return list[0];
+    throw new ArgumentError('HTML had ${list.length} '
+        'top level elements but 1 expected');
+  }
+
+  @DomName('Document.createElement')
   // Optimization to improve performance until the dart2js compiler inlines this
   // method.
   static dynamic createElement_tag(String tag) =>
@@ -8752,145 +8748,145 @@
 class ElementEvents extends Events {
   ElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCopy => this['beforecopy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCut => this['beforecut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforePaste => this['beforepaste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get change => this['change'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contextMenu => this['contextmenu'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get copy => this['copy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cut => this['cut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get doubleClick => this['dblclick'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drag => this['drag'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnd => this['dragend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnter => this['dragenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragLeave => this['dragleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragOver => this['dragover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragStart => this['dragstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drop => this['drop'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get input => this['input'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get invalid => this['invalid'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyDown => this['keydown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyPress => this['keypress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyUp => this['keyup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseDown => this['mousedown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseMove => this['mousemove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOut => this['mouseout'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOver => this['mouseover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseUp => this['mouseup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get paste => this['paste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get reset => this['reset'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get scroll => this['scroll'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get search => this['search'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get select => this['select'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get selectStart => this['selectstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get submit => this['submit'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchCancel => this['touchcancel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchEnd => this['touchend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchEnter => this['touchenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchLeave => this['touchleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchMove => this['touchmove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchStart => this['touchstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get transitionEnd => this['webkitTransitionEnd'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get fullscreenError => this['webkitfullscreenerror'];
 
   EventListenerList get mouseWheel {
@@ -8911,7 +8907,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ElementTraversal
+@DocsEditable
+@DomName('ElementTraversal')
 abstract class ElementTraversal {
 
   int $dom_childElementCount;
@@ -8929,34 +8926,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLEmbedElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLEmbedElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class EmbedElement extends Element native "*HTMLEmbedElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory EmbedElement() => document.$dom_createElement("embed");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('embed');
 
-  /// @domName HTMLEmbedElement.align; @docsEditable true
+  @DocsEditable @DomName('HTMLEmbedElement.align')
   String align;
 
-  /// @domName HTMLEmbedElement.height; @docsEditable true
+  @DocsEditable @DomName('HTMLEmbedElement.height')
   String height;
 
-  /// @domName HTMLEmbedElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLEmbedElement.name')
   String name;
 
-  /// @domName HTMLEmbedElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLEmbedElement.src')
   String src;
 
-  /// @domName HTMLEmbedElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLEmbedElement.type')
   String type;
 
-  /// @domName HTMLEmbedElement.width; @docsEditable true
+  @DocsEditable @DomName('HTMLEmbedElement.width')
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8964,7 +8963,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EntityReference; @docsEditable true
+
+@DocsEditable
+@DomName('EntityReference')
 class EntityReference extends Node native "*EntityReference" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8980,41 +8981,43 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Entry; @docsEditable true
+
+@DocsEditable
+@DomName('Entry')
 class Entry native "*Entry" {
 
-  /// @domName Entry.filesystem; @docsEditable true
+  @DocsEditable @DomName('Entry.filesystem')
   final FileSystem filesystem;
 
-  /// @domName Entry.fullPath; @docsEditable true
+  @DocsEditable @DomName('Entry.fullPath')
   final String fullPath;
 
-  /// @domName Entry.isDirectory; @docsEditable true
+  @DocsEditable @DomName('Entry.isDirectory')
   final bool isDirectory;
 
-  /// @domName Entry.isFile; @docsEditable true
+  @DocsEditable @DomName('Entry.isFile')
   final bool isFile;
 
-  /// @domName Entry.name; @docsEditable true
+  @DocsEditable @DomName('Entry.name')
   final String name;
 
-  /// @domName Entry.copyTo; @docsEditable true
+  @DocsEditable @DomName('Entry.copyTo')
   void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /// @domName Entry.getMetadata; @docsEditable true
+  @DocsEditable @DomName('Entry.getMetadata')
   void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /// @domName Entry.getParent; @docsEditable true
+  @DocsEditable @DomName('Entry.getParent')
   void getParent([EntryCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /// @domName Entry.moveTo; @docsEditable true
+  @DocsEditable @DomName('Entry.moveTo')
   void moveTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /// @domName Entry.remove; @docsEditable true
+  @DocsEditable @DomName('Entry.remove')
   void remove(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /// @domName Entry.toURL; @docsEditable true
   @JSName('toURL')
+  @DocsEditable @DomName('Entry.toURL')
   String toUrl() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9030,41 +9033,43 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EntrySync; @docsEditable true
+
+@DocsEditable
+@DomName('EntrySync')
 class EntrySync native "*EntrySync" {
 
-  /// @domName EntrySync.filesystem; @docsEditable true
+  @DocsEditable @DomName('EntrySync.filesystem')
   final FileSystemSync filesystem;
 
-  /// @domName EntrySync.fullPath; @docsEditable true
+  @DocsEditable @DomName('EntrySync.fullPath')
   final String fullPath;
 
-  /// @domName EntrySync.isDirectory; @docsEditable true
+  @DocsEditable @DomName('EntrySync.isDirectory')
   final bool isDirectory;
 
-  /// @domName EntrySync.isFile; @docsEditable true
+  @DocsEditable @DomName('EntrySync.isFile')
   final bool isFile;
 
-  /// @domName EntrySync.name; @docsEditable true
+  @DocsEditable @DomName('EntrySync.name')
   final String name;
 
-  /// @domName EntrySync.copyTo; @docsEditable true
+  @DocsEditable @DomName('EntrySync.copyTo')
   EntrySync copyTo(DirectoryEntrySync parent, String name) native;
 
-  /// @domName EntrySync.getMetadata; @docsEditable true
+  @DocsEditable @DomName('EntrySync.getMetadata')
   Metadata getMetadata() native;
 
-  /// @domName EntrySync.getParent; @docsEditable true
+  @DocsEditable @DomName('EntrySync.getParent')
   EntrySync getParent() native;
 
-  /// @domName EntrySync.moveTo; @docsEditable true
+  @DocsEditable @DomName('EntrySync.moveTo')
   EntrySync moveTo(DirectoryEntrySync parent, String name) native;
 
-  /// @domName EntrySync.remove; @docsEditable true
+  @DocsEditable @DomName('EntrySync.remove')
   void remove() native;
 
-  /// @domName EntrySync.toURL; @docsEditable true
   @JSName('toURL')
+  @DocsEditable @DomName('EntrySync.toURL')
   String toUrl() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9080,16 +9085,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ErrorEvent; @docsEditable true
+
+@DocsEditable
+@DomName('ErrorEvent')
 class ErrorEvent extends Event native "*ErrorEvent" {
 
-  /// @domName ErrorEvent.filename; @docsEditable true
+  @DocsEditable @DomName('ErrorEvent.filename')
   final String filename;
 
-  /// @domName ErrorEvent.lineno; @docsEditable true
+  @DocsEditable @DomName('ErrorEvent.lineno')
   final int lineno;
 
-  /// @domName ErrorEvent.message; @docsEditable true
+  @DocsEditable @DomName('ErrorEvent.message')
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9099,7 +9106,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Event
+@DocsEditable
+@DomName('Event')
 class Event native "*Event" {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
@@ -9150,56 +9158,54 @@
 
   static const int SELECT = 16384;
 
-  /// @domName Event.bubbles; @docsEditable true
+  @DocsEditable @DomName('Event.bubbles')
   final bool bubbles;
 
-  /// @domName Event.cancelBubble; @docsEditable true
+  @DocsEditable @DomName('Event.cancelBubble')
   bool cancelBubble;
 
-  /// @domName Event.cancelable; @docsEditable true
+  @DocsEditable @DomName('Event.cancelable')
   final bool cancelable;
 
-  /// @domName Event.clipboardData; @docsEditable true
+  @DocsEditable @DomName('Event.clipboardData')
   final Clipboard clipboardData;
 
-  /// @domName Event.currentTarget; @docsEditable true
   EventTarget get currentTarget => _convertNativeToDart_EventTarget(this._currentTarget);
   @JSName('currentTarget')
-  @Creates('Null') @Returns('EventTarget|=Object')
+  @DocsEditable @DomName('Event.currentTarget') @Creates('Null') @Returns('EventTarget|=Object')
   final dynamic _currentTarget;
 
-  /// @domName Event.defaultPrevented; @docsEditable true
+  @DocsEditable @DomName('Event.defaultPrevented')
   final bool defaultPrevented;
 
-  /// @domName Event.eventPhase; @docsEditable true
+  @DocsEditable @DomName('Event.eventPhase')
   final int eventPhase;
 
-  /// @domName Event.returnValue; @docsEditable true
+  @DocsEditable @DomName('Event.returnValue')
   bool returnValue;
 
-  /// @domName Event.target; @docsEditable true
   EventTarget get target => _convertNativeToDart_EventTarget(this._target);
   @JSName('target')
-  @Creates('Node') @Returns('EventTarget|=Object')
+  @DocsEditable @DomName('Event.target') @Creates('Node') @Returns('EventTarget|=Object')
   final dynamic _target;
 
-  /// @domName Event.timeStamp; @docsEditable true
+  @DocsEditable @DomName('Event.timeStamp')
   final int timeStamp;
 
-  /// @domName Event.type; @docsEditable true
+  @DocsEditable @DomName('Event.type')
   final String type;
 
-  /// @domName Event.initEvent; @docsEditable true
   @JSName('initEvent')
+  @DocsEditable @DomName('Event.initEvent')
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native;
 
-  /// @domName Event.preventDefault; @docsEditable true
+  @DocsEditable @DomName('Event.preventDefault')
   void preventDefault() native;
 
-  /// @domName Event.stopImmediatePropagation; @docsEditable true
+  @DocsEditable @DomName('Event.stopImmediatePropagation')
   void stopImmediatePropagation() native;
 
-  /// @domName Event.stopPropagation; @docsEditable true
+  @DocsEditable @DomName('Event.stopPropagation')
   void stopPropagation() native;
 
 }
@@ -9208,23 +9214,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EventException; @docsEditable true
+
+@DocsEditable
+@DomName('EventException')
 class EventException native "*EventException" {
 
   static const int DISPATCH_REQUEST_ERR = 1;
 
   static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
 
-  /// @domName EventException.code; @docsEditable true
+  @DocsEditable @DomName('EventException.code')
   final int code;
 
-  /// @domName EventException.message; @docsEditable true
+  @DocsEditable @DomName('EventException.message')
   final String message;
 
-  /// @domName EventException.name; @docsEditable true
+  @DocsEditable @DomName('EventException.name')
   final String name;
 
-  /// @domName EventException.toString; @docsEditable true
+  @DocsEditable @DomName('EventException.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9232,7 +9240,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EventSource; @docsEditable true
+
+@DocsEditable
+@DomName('EventSource')
 class EventSource extends EventTarget native "*EventSource" {
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
@@ -9241,11 +9251,22 @@
 
   static const EventStreamProvider<Event> openEvent = const EventStreamProvider<Event>('open');
 
-  ///@docsEditable true
-  factory EventSource(String scriptUrl) => EventSource._create(scriptUrl);
-  static EventSource _create(String scriptUrl) => JS('EventSource', 'new EventSource(#)', scriptUrl);
+  @DocsEditable
+  factory EventSource(String url, [Map eventSourceInit]) {
+    if (!?eventSourceInit) {
+      return EventSource._create(url);
+    }
+    return EventSource._create(url, eventSourceInit);
+  }
+  static EventSource _create(String url, [Map eventSourceInit]) {
+    if (!?eventSourceInit) {
+      return JS('EventSource', 'new EventSource(#)', url);
+    }
+    return JS('EventSource', 'new EventSource(#,#)', url, eventSourceInit);
+  }
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   EventSourceEvents get on =>
     new EventSourceEvents(this);
 
@@ -9255,25 +9276,28 @@
 
   static const int OPEN = 1;
 
-  /// @domName EventSource.readyState; @docsEditable true
+  @DocsEditable @DomName('EventSource.readyState')
   final int readyState;
 
-  /// @domName EventSource.url; @docsEditable true
+  @DocsEditable @DomName('EventSource.url')
   final String url;
 
-  /// @domName EventSource.addEventListener; @docsEditable true
+  @DocsEditable @DomName('EventSource.withCredentials')
+  final bool withCredentials;
+
   @JSName('addEventListener')
+  @DocsEditable @DomName('EventSource.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName EventSource.close; @docsEditable true
+  @DocsEditable @DomName('EventSource.close')
   void close() native;
 
-  /// @domName EventSource.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('EventSource.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName EventSource.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('EventSource.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onError => errorEvent.forTarget(this);
@@ -9283,18 +9307,18 @@
   Stream<Event> get onOpen => openEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class EventSourceEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   EventSourceEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9308,7 +9332,7 @@
  * Events can either be accessed by string name (using the indexed getter) or by
  * getters exposed by subclasses. Use the getters exposed by subclasses when
  * possible for better compile-time type checks.
- *
+ * 
  * Using an indexed getter:
  *     events['mouseover'].add((e) => print("Mouse over!"));
  *
@@ -9363,7 +9387,8 @@
   }
 }
 
-/// @domName EventTarget
+@DocsEditable
+@DomName('EventTarget')
 /**
  * Base class for all browser objects that support events.
  *
@@ -9371,22 +9396,22 @@
  * [$dom_addEventListener], [$dom_dispatchEvent], and
  * [$dom_removeEventListener]) for compile-time type checks and a more concise
  * API.
- */
+ */ 
 class EventTarget native "*EventTarget" {
 
-  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   Events get on => new Events(this);
 
-  /// @domName EventTarget.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('EventTarget.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName EventTarget.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('EventTarget.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName EventTarget.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('EventTarget.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
 }
@@ -9395,7 +9420,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EXTTextureFilterAnisotropic; @docsEditable true
+
+@DocsEditable
+@DomName('EXTTextureFilterAnisotropic')
 class ExtTextureFilterAnisotropic native "*EXTTextureFilterAnisotropic" {
 
   static const int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
@@ -9407,40 +9434,42 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFieldSetElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLFieldSetElement')
 class FieldSetElement extends Element native "*HTMLFieldSetElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FieldSetElement() => document.$dom_createElement("fieldset");
 
-  /// @domName HTMLFieldSetElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.disabled')
   bool disabled;
 
-  /// @domName HTMLFieldSetElement.elements; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.elements')
   final HtmlCollection elements;
 
-  /// @domName HTMLFieldSetElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.form')
   final FormElement form;
 
-  /// @domName HTMLFieldSetElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.name')
   String name;
 
-  /// @domName HTMLFieldSetElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.type')
   final String type;
 
-  /// @domName HTMLFieldSetElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLFieldSetElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLFieldSetElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLFieldSetElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLFieldSetElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLFieldSetElement.setCustomValidity')
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9448,16 +9477,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName File; @docsEditable true
+
+@DocsEditable
+@DomName('File')
 class File extends Blob native "*File" {
 
-  /// @domName File.lastModifiedDate; @docsEditable true
+  @DocsEditable @DomName('File.lastModifiedDate')
   final Date lastModifiedDate;
 
-  /// @domName File.name; @docsEditable true
+  @DocsEditable @DomName('File.name')
   final String name;
 
-  /// @domName File.webkitRelativePath; @docsEditable true
+  @DocsEditable @DomName('File.webkitRelativePath')
   final String webkitRelativePath;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9473,13 +9504,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileEntry; @docsEditable true
+
+@DocsEditable
+@DomName('FileEntry')
 class FileEntry extends Entry native "*FileEntry" {
 
-  /// @domName FileEntry.createWriter; @docsEditable true
+  @DocsEditable @DomName('FileEntry.createWriter')
   void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /// @domName FileEntry.file; @docsEditable true
+  @DocsEditable @DomName('FileEntry.file')
   void file(FileCallback successCallback, [ErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9487,13 +9520,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileEntrySync; @docsEditable true
+
+@DocsEditable
+@DomName('FileEntrySync')
 class FileEntrySync extends EntrySync native "*FileEntrySync" {
 
-  /// @domName FileEntrySync.createWriter; @docsEditable true
+  @DocsEditable @DomName('FileEntrySync.createWriter')
   FileWriterSync createWriter() native;
 
-  /// @domName FileEntrySync.file; @docsEditable true
+  @DocsEditable @DomName('FileEntrySync.file')
   File file() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9501,7 +9536,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileError; @docsEditable true
+
+@DocsEditable
+@DomName('FileError')
 class FileError native "*FileError" {
 
   static const int ABORT_ERR = 3;
@@ -9528,7 +9565,7 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
-  /// @domName FileError.code; @docsEditable true
+  @DocsEditable @DomName('FileError.code')
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9536,7 +9573,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileException; @docsEditable true
+
+@DocsEditable
+@DomName('FileException')
 class FileException native "*FileException" {
 
   static const int ABORT_ERR = 3;
@@ -9563,16 +9602,16 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
-  /// @domName FileException.code; @docsEditable true
+  @DocsEditable @DomName('FileException.code')
   final int code;
 
-  /// @domName FileException.message; @docsEditable true
+  @DocsEditable @DomName('FileException.message')
   final String message;
 
-  /// @domName FileException.name; @docsEditable true
+  @DocsEditable @DomName('FileException.name')
   final String name;
 
-  /// @domName FileException.toString; @docsEditable true
+  @DocsEditable @DomName('FileException.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9580,10 +9619,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileList; @docsEditable true
+
+@DocsEditable
+@DomName('FileList')
 class FileList implements JavaScriptIndexingBehavior, List<File> native "*FileList" {
 
-  /// @domName FileList.length; @docsEditable true
+  @DocsEditable @DomName('FileList.length')
   int get length => JS("int", "#.length", this);
 
   File operator[](int index) => JS("File", "#[#]", this, index);
@@ -9604,50 +9645,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, File)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(File element) => Collections.contains(this, element);
+  bool contains(File element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(File element)) => Collections.forEach(this, f);
+  void forEach(void f(File element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(File element)) => new MappedList<File, dynamic>(this, f);
+  List mappedBy(f(File element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<File> where(bool f(File element)) => new WhereIterable<File>(this, f);
+  Iterable<File> where(bool f(File element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(File element)) => Collections.every(this, f);
+  bool every(bool f(File element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(File element)) => Collections.any(this, f);
+  bool any(bool f(File element)) => IterableMixinWorkaround.any(this, f);
 
   List<File> toList() => new List<File>.from(this);
   Set<File> toSet() => new Set<File>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<File> take(int n) => new ListView<File>(this, 0, n);
+  List<File> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<File> takeWhile(bool test(File value)) {
-    return new TakeWhileIterable<File>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<File> skip(int n) => new ListView<File>(this, n, null);
+  List<File> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<File> skipWhile(bool test(File value)) {
-    return new SkipWhileIterable<File>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   File firstMatching(bool test(File value), { File orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   File lastMatching(bool test(File value), {File orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   File singleMatching(bool test(File value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   File elementAt(int index) {
@@ -9705,16 +9746,36 @@
     throw new StateError("More than one element");
   }
 
-  File min([int compare(File a, File b)]) => Collections.min(this, compare);
+  File min([int compare(File a, File b)]) => IterableMixinWorkaround.min(this, compare);
 
-  File max([int compare(File a, File b)]) => Collections.max(this, compare);
+  File max([int compare(File a, File b)]) => IterableMixinWorkaround.max(this, compare);
 
   File removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   File removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(File element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(File element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
@@ -9734,7 +9795,7 @@
 
   // -- end List<File> mixins.
 
-  /// @domName FileList.item; @docsEditable true
+  @DocsEditable @DomName('FileList.item')
   File item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9742,7 +9803,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileReader; @docsEditable true
+
+@DocsEditable
+@DomName('FileReader')
 class FileReader extends EventTarget native "*FileReader" {
 
   static const EventStreamProvider<ProgressEvent> abortEvent = const EventStreamProvider<ProgressEvent>('abort');
@@ -9757,11 +9820,12 @@
 
   static const EventStreamProvider<ProgressEvent> progressEvent = const EventStreamProvider<ProgressEvent>('progress');
 
-  ///@docsEditable true
+  @DocsEditable
   factory FileReader() => FileReader._create();
   static FileReader _create() => JS('FileReader', 'new FileReader()');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   FileReaderEvents get on =>
     new FileReaderEvents(this);
 
@@ -9771,42 +9835,41 @@
 
   static const int LOADING = 1;
 
-  /// @domName FileReader.error; @docsEditable true
+  @DocsEditable @DomName('FileReader.error')
   final FileError error;
 
-  /// @domName FileReader.readyState; @docsEditable true
+  @DocsEditable @DomName('FileReader.readyState')
   final int readyState;
 
-  /// @domName FileReader.result; @docsEditable true
-  @Creates('String|ArrayBuffer|Null')
+  @DocsEditable @DomName('FileReader.result') @Creates('String|ArrayBuffer|Null')
   final Object result;
 
-  /// @domName FileReader.abort; @docsEditable true
+  @DocsEditable @DomName('FileReader.abort')
   void abort() native;
 
-  /// @domName FileReader.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('FileReader.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName FileReader.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('FileReader.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName FileReader.readAsArrayBuffer; @docsEditable true
+  @DocsEditable @DomName('FileReader.readAsArrayBuffer')
   void readAsArrayBuffer(Blob blob) native;
 
-  /// @domName FileReader.readAsBinaryString; @docsEditable true
+  @DocsEditable @DomName('FileReader.readAsBinaryString')
   void readAsBinaryString(Blob blob) native;
 
-  /// @domName FileReader.readAsDataURL; @docsEditable true
   @JSName('readAsDataURL')
+  @DocsEditable @DomName('FileReader.readAsDataURL')
   void readAsDataUrl(Blob blob) native;
 
-  /// @domName FileReader.readAsText; @docsEditable true
+  @DocsEditable @DomName('FileReader.readAsText')
   void readAsText(Blob blob, [String encoding]) native;
 
-  /// @domName FileReader.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('FileReader.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -9822,27 +9885,27 @@
   Stream<ProgressEvent> get onProgress => progressEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class FileReaderEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   FileReaderEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadEnd => this['loadend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9850,24 +9913,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileReaderSync; @docsEditable true
+
+@DocsEditable
+@DomName('FileReaderSync')
 class FileReaderSync native "*FileReaderSync" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FileReaderSync() => FileReaderSync._create();
   static FileReaderSync _create() => JS('FileReaderSync', 'new FileReaderSync()');
 
-  /// @domName FileReaderSync.readAsArrayBuffer; @docsEditable true
+  @DocsEditable @DomName('FileReaderSync.readAsArrayBuffer')
   ArrayBuffer readAsArrayBuffer(Blob blob) native;
 
-  /// @domName FileReaderSync.readAsBinaryString; @docsEditable true
+  @DocsEditable @DomName('FileReaderSync.readAsBinaryString')
   String readAsBinaryString(Blob blob) native;
 
-  /// @domName FileReaderSync.readAsDataURL; @docsEditable true
   @JSName('readAsDataURL')
+  @DocsEditable @DomName('FileReaderSync.readAsDataURL')
   String readAsDataUrl(Blob blob) native;
 
-  /// @domName FileReaderSync.readAsText; @docsEditable true
+  @DocsEditable @DomName('FileReaderSync.readAsText')
   String readAsText(Blob blob, [String encoding]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9875,16 +9940,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMFileSystem; @docsEditable true
+
+@DocsEditable
+@DomName('DOMFileSystem')
 class FileSystem native "*DOMFileSystem" {
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.webkitRequestFileSystem)');
 
-  /// @domName DOMFileSystem.name; @docsEditable true
+  @DocsEditable @DomName('DOMFileSystem.name')
   final String name;
 
-  /// @domName DOMFileSystem.root; @docsEditable true
+  @DocsEditable @DomName('DOMFileSystem.root')
   final DirectoryEntry root;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9900,13 +9967,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMFileSystemSync; @docsEditable true
+
+@DocsEditable
+@DomName('DOMFileSystemSync')
 class FileSystemSync native "*DOMFileSystemSync" {
 
-  /// @domName DOMFileSystemSync.name; @docsEditable true
+  @DocsEditable @DomName('DOMFileSystemSync.name')
   final String name;
 
-  /// @domName DOMFileSystemSync.root; @docsEditable true
+  @DocsEditable @DomName('DOMFileSystemSync.root')
   final DirectoryEntrySync root;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9914,7 +9983,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileWriter; @docsEditable true
+
+@DocsEditable
+@DomName('FileWriter')
 class FileWriter extends EventTarget native "*FileWriter" {
 
   static const EventStreamProvider<ProgressEvent> abortEvent = const EventStreamProvider<ProgressEvent>('abort');
@@ -9929,7 +10000,8 @@
 
   static const EventStreamProvider<ProgressEvent> writeStartEvent = const EventStreamProvider<ProgressEvent>('writestart');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   FileWriterEvents get on =>
     new FileWriterEvents(this);
 
@@ -9939,40 +10011,40 @@
 
   static const int WRITING = 1;
 
-  /// @domName FileWriter.error; @docsEditable true
+  @DocsEditable @DomName('FileWriter.error')
   final FileError error;
 
-  /// @domName FileWriter.length; @docsEditable true
+  @DocsEditable @DomName('FileWriter.length')
   final int length;
 
-  /// @domName FileWriter.position; @docsEditable true
+  @DocsEditable @DomName('FileWriter.position')
   final int position;
 
-  /// @domName FileWriter.readyState; @docsEditable true
+  @DocsEditable @DomName('FileWriter.readyState')
   final int readyState;
 
-  /// @domName FileWriter.abort; @docsEditable true
+  @DocsEditable @DomName('FileWriter.abort')
   void abort() native;
 
-  /// @domName FileWriter.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('FileWriter.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName FileWriter.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('FileWriter.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName FileWriter.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('FileWriter.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName FileWriter.seek; @docsEditable true
+  @DocsEditable @DomName('FileWriter.seek')
   void seek(int position) native;
 
-  /// @domName FileWriter.truncate; @docsEditable true
+  @DocsEditable @DomName('FileWriter.truncate')
   void truncate(int size) native;
 
-  /// @domName FileWriter.write; @docsEditable true
+  @DocsEditable @DomName('FileWriter.write')
   void write(Blob data) native;
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -9988,27 +10060,27 @@
   Stream<ProgressEvent> get onWriteStart => writeStartEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class FileWriterEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   FileWriterEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get write => this['write'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get writeEnd => this['writeend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get writeStart => this['writestart'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10024,22 +10096,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileWriterSync; @docsEditable true
+
+@DocsEditable
+@DomName('FileWriterSync')
 class FileWriterSync native "*FileWriterSync" {
 
-  /// @domName FileWriterSync.length; @docsEditable true
+  @DocsEditable @DomName('FileWriterSync.length')
   final int length;
 
-  /// @domName FileWriterSync.position; @docsEditable true
+  @DocsEditable @DomName('FileWriterSync.position')
   final int position;
 
-  /// @domName FileWriterSync.seek; @docsEditable true
+  @DocsEditable @DomName('FileWriterSync.seek')
   void seek(int position) native;
 
-  /// @domName FileWriterSync.truncate; @docsEditable true
+  @DocsEditable @DomName('FileWriterSync.truncate')
   void truncate(int size) native;
 
-  /// @domName FileWriterSync.write; @docsEditable true
+  @DocsEditable @DomName('FileWriterSync.write')
   void write(Blob data) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10047,7 +10121,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Float32Array; @docsEditable true
+
+@DocsEditable
+@DomName('Float32Array')
 class Float32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<num> native "*Float32Array" {
 
   factory Float32Array(int length) =>
@@ -10056,12 +10132,12 @@
   factory Float32Array.fromList(List<num> list) =>
     _TypedArrayFactoryProvider.createFloat32Array_fromList(list);
 
-  factory Float32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Float32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createFloat32Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 4;
 
-  /// @domName Float32Array.length; @docsEditable true
+  @DocsEditable @DomName('Float32Array.length')
   int get length => JS("int", "#.length", this);
 
   num operator[](int index) => JS("num", "#[#]", this, index);
@@ -10079,50 +10155,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, num)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(num element) => Collections.contains(this, element);
+  bool contains(num element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(num element)) => Collections.forEach(this, f);
+  void forEach(void f(num element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(num element)) => new MappedList<num, dynamic>(this, f);
+  List mappedBy(f(num element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<num> where(bool f(num element)) => new WhereIterable<num>(this, f);
+  Iterable<num> where(bool f(num element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(num element)) => Collections.every(this, f);
+  bool every(bool f(num element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(num element)) => Collections.any(this, f);
+  bool any(bool f(num element)) => IterableMixinWorkaround.any(this, f);
 
   List<num> toList() => new List<num>.from(this);
   Set<num> toSet() => new Set<num>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<num> take(int n) => new ListView<num>(this, 0, n);
+  List<num> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<num> takeWhile(bool test(num value)) {
-    return new TakeWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<num> skip(int n) => new ListView<num>(this, n, null);
+  List<num> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<num> skipWhile(bool test(num value)) {
-    return new SkipWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   num firstMatching(bool test(num value), { num orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   num lastMatching(bool test(num value), {num orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   num singleMatching(bool test(num value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   num elementAt(int index) {
@@ -10180,16 +10256,36 @@
     throw new StateError("More than one element");
   }
 
-  num min([int compare(num a, num b)]) => Collections.min(this, compare);
+  num min([int compare(num a, num b)]) => IterableMixinWorkaround.min(this, compare);
 
-  num max([int compare(num a, num b)]) => Collections.max(this, compare);
+  num max([int compare(num a, num b)]) => IterableMixinWorkaround.max(this, compare);
 
   num removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   num removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
@@ -10209,11 +10305,11 @@
 
   // -- end List<num> mixins.
 
-  /// @domName Float32Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Float32Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Float32Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Float32Array.subarray')
   Float32Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10221,7 +10317,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Float64Array; @docsEditable true
+
+@DocsEditable
+@DomName('Float64Array')
 class Float64Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<num> native "*Float64Array" {
 
   factory Float64Array(int length) =>
@@ -10230,12 +10328,12 @@
   factory Float64Array.fromList(List<num> list) =>
     _TypedArrayFactoryProvider.createFloat64Array_fromList(list);
 
-  factory Float64Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Float64Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createFloat64Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 8;
 
-  /// @domName Float64Array.length; @docsEditable true
+  @DocsEditable @DomName('Float64Array.length')
   int get length => JS("int", "#.length", this);
 
   num operator[](int index) => JS("num", "#[#]", this, index);
@@ -10253,50 +10351,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, num)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(num element) => Collections.contains(this, element);
+  bool contains(num element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(num element)) => Collections.forEach(this, f);
+  void forEach(void f(num element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(num element)) => new MappedList<num, dynamic>(this, f);
+  List mappedBy(f(num element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<num> where(bool f(num element)) => new WhereIterable<num>(this, f);
+  Iterable<num> where(bool f(num element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(num element)) => Collections.every(this, f);
+  bool every(bool f(num element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(num element)) => Collections.any(this, f);
+  bool any(bool f(num element)) => IterableMixinWorkaround.any(this, f);
 
   List<num> toList() => new List<num>.from(this);
   Set<num> toSet() => new Set<num>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<num> take(int n) => new ListView<num>(this, 0, n);
+  List<num> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<num> takeWhile(bool test(num value)) {
-    return new TakeWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<num> skip(int n) => new ListView<num>(this, n, null);
+  List<num> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<num> skipWhile(bool test(num value)) {
-    return new SkipWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   num firstMatching(bool test(num value), { num orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   num lastMatching(bool test(num value), {num orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   num singleMatching(bool test(num value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   num elementAt(int index) {
@@ -10354,16 +10452,36 @@
     throw new StateError("More than one element");
   }
 
-  num min([int compare(num a, num b)]) => Collections.min(this, compare);
+  num min([int compare(num a, num b)]) => IterableMixinWorkaround.min(this, compare);
 
-  num max([int compare(num a, num b)]) => Collections.max(this, compare);
+  num max([int compare(num a, num b)]) => IterableMixinWorkaround.max(this, compare);
 
   num removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   num removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
@@ -10383,11 +10501,11 @@
 
   // -- end List<num> mixins.
 
-  /// @domName Float64Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Float64Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Float64Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Float64Array.subarray')
   Float64Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10395,27 +10513,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFontElement; @docsEditable true
-class FontElement extends Element native "*HTMLFontElement" {
 
-  /// @domName HTMLFontElement.color; @docsEditable true
-  String color;
-
-  /// @domName HTMLFontElement.face; @docsEditable true
-  String face;
-
-  /// @domName HTMLFontElement.size; @docsEditable true
-  String size;
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName FormData; @docsEditable true
+@DocsEditable
+@DomName('FormData')
 class FormData native "*FormData" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FormData([FormElement form]) {
     if (!?form) {
       return FormData._create();
@@ -10429,7 +10532,7 @@
     return JS('FormData', 'new FormData(#)', form);
   }
 
-  /// @domName DOMFormData.append; @docsEditable true
+  @DocsEditable @DomName('DOMFormData.append')
   void append(String name, value, [String filename]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10437,49 +10540,51 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFormElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLFormElement')
 class FormElement extends Element native "*HTMLFormElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FormElement() => document.$dom_createElement("form");
 
-  /// @domName HTMLFormElement.acceptCharset; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.acceptCharset')
   String acceptCharset;
 
-  /// @domName HTMLFormElement.action; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.action')
   String action;
 
-  /// @domName HTMLFormElement.autocomplete; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLFormElement.encoding; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.encoding')
   String encoding;
 
-  /// @domName HTMLFormElement.enctype; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.enctype')
   String enctype;
 
-  /// @domName HTMLFormElement.length; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.length')
   final int length;
 
-  /// @domName HTMLFormElement.method; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.method')
   String method;
 
-  /// @domName HTMLFormElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.name')
   String name;
 
-  /// @domName HTMLFormElement.noValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.noValidate')
   bool noValidate;
 
-  /// @domName HTMLFormElement.target; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.target')
   String target;
 
-  /// @domName HTMLFormElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLFormElement.reset; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.reset')
   void reset() native;
 
-  /// @domName HTMLFormElement.submit; @docsEditable true
+  @DocsEditable @DomName('HTMLFormElement.submit')
   void submit() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10487,184 +10592,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFrameElement; @docsEditable true
-class FrameElement extends Element native "*HTMLFrameElement" {
 
-  /// @domName HTMLFrameElement.contentWindow; @docsEditable true
-  WindowBase get contentWindow => _convertNativeToDart_Window(this._contentWindow);
-  @JSName('contentWindow')
-  @Creates('Window|=Object') @Returns('Window|=Object')
-  final dynamic _contentWindow;
-
-  /// @domName HTMLFrameElement.frameBorder; @docsEditable true
-  String frameBorder;
-
-  /// @domName HTMLFrameElement.height; @docsEditable true
-  final int height;
-
-  /// @domName HTMLFrameElement.location; @docsEditable true
-  String location;
-
-  /// @domName HTMLFrameElement.longDesc; @docsEditable true
-  String longDesc;
-
-  /// @domName HTMLFrameElement.marginHeight; @docsEditable true
-  String marginHeight;
-
-  /// @domName HTMLFrameElement.marginWidth; @docsEditable true
-  String marginWidth;
-
-  /// @domName HTMLFrameElement.name; @docsEditable true
-  String name;
-
-  /// @domName HTMLFrameElement.noResize; @docsEditable true
-  bool noResize;
-
-  /// @domName HTMLFrameElement.scrolling; @docsEditable true
-  String scrolling;
-
-  /// @domName HTMLFrameElement.src; @docsEditable true
-  String src;
-
-  /// @domName HTMLFrameElement.width; @docsEditable true
-  final int width;
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName HTMLFrameSetElement; @docsEditable true
-class FrameSetElement extends Element native "*HTMLFrameSetElement" {
-
-  static const EventStreamProvider<Event> beforeUnloadEvent = const EventStreamProvider<Event>('beforeunload');
-
-  static const EventStreamProvider<Event> blurEvent = const EventStreamProvider<Event>('blur');
-
-  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
-
-  static const EventStreamProvider<Event> focusEvent = const EventStreamProvider<Event>('focus');
-
-  static const EventStreamProvider<HashChangeEvent> hashChangeEvent = const EventStreamProvider<HashChangeEvent>('hashchange');
-
-  static const EventStreamProvider<Event> loadEvent = const EventStreamProvider<Event>('load');
-
-  static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
-
-  static const EventStreamProvider<Event> offlineEvent = const EventStreamProvider<Event>('offline');
-
-  static const EventStreamProvider<Event> onlineEvent = const EventStreamProvider<Event>('online');
-
-  static const EventStreamProvider<PopStateEvent> popStateEvent = const EventStreamProvider<PopStateEvent>('popstate');
-
-  static const EventStreamProvider<Event> resizeEvent = const EventStreamProvider<Event>('resize');
-
-  static const EventStreamProvider<StorageEvent> storageEvent = const EventStreamProvider<StorageEvent>('storage');
-
-  static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
-
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
-  FrameSetElementEvents get on =>
-    new FrameSetElementEvents(this);
-
-  /// @domName HTMLFrameSetElement.cols; @docsEditable true
-  String cols;
-
-  /// @domName HTMLFrameSetElement.rows; @docsEditable true
-  String rows;
-
-  Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
-
-  Stream<Event> get onBlur => blurEvent.forTarget(this);
-
-  Stream<Event> get onError => errorEvent.forTarget(this);
-
-  Stream<Event> get onFocus => focusEvent.forTarget(this);
-
-  Stream<HashChangeEvent> get onHashChange => hashChangeEvent.forTarget(this);
-
-  Stream<Event> get onLoad => loadEvent.forTarget(this);
-
-  Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
-
-  Stream<Event> get onOffline => offlineEvent.forTarget(this);
-
-  Stream<Event> get onOnline => onlineEvent.forTarget(this);
-
-  Stream<PopStateEvent> get onPopState => popStateEvent.forTarget(this);
-
-  Stream<Event> get onResize => resizeEvent.forTarget(this);
-
-  Stream<StorageEvent> get onStorage => storageEvent.forTarget(this);
-
-  Stream<Event> get onUnload => unloadEvent.forTarget(this);
-}
-
-/// @docsEditable true
-class FrameSetElementEvents extends ElementEvents {
-  /// @docsEditable true
-  FrameSetElementEvents(EventTarget _ptr) : super(_ptr);
-
-  /// @docsEditable true
-  EventListenerList get beforeUnload => this['beforeunload'];
-
-  /// @docsEditable true
-  EventListenerList get blur => this['blur'];
-
-  /// @docsEditable true
-  EventListenerList get error => this['error'];
-
-  /// @docsEditable true
-  EventListenerList get focus => this['focus'];
-
-  /// @docsEditable true
-  EventListenerList get hashChange => this['hashchange'];
-
-  /// @docsEditable true
-  EventListenerList get load => this['load'];
-
-  /// @docsEditable true
-  EventListenerList get message => this['message'];
-
-  /// @docsEditable true
-  EventListenerList get offline => this['offline'];
-
-  /// @docsEditable true
-  EventListenerList get online => this['online'];
-
-  /// @docsEditable true
-  EventListenerList get popState => this['popstate'];
-
-  /// @docsEditable true
-  EventListenerList get resize => this['resize'];
-
-  /// @docsEditable true
-  EventListenerList get storage => this['storage'];
-
-  /// @docsEditable true
-  EventListenerList get unload => this['unload'];
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName Gamepad; @docsEditable true
+@DocsEditable
+@DomName('Gamepad')
 class Gamepad native "*Gamepad" {
 
-  /// @domName Gamepad.axes; @docsEditable true
+  @DocsEditable @DomName('Gamepad.axes')
   final List<num> axes;
 
-  /// @domName Gamepad.buttons; @docsEditable true
+  @DocsEditable @DomName('Gamepad.buttons')
   final List<num> buttons;
 
-  /// @domName Gamepad.id; @docsEditable true
+  @DocsEditable @DomName('Gamepad.id')
   final String id;
 
-  /// @domName Gamepad.index; @docsEditable true
+  @DocsEditable @DomName('Gamepad.index')
   final int index;
 
-  /// @domName Gamepad.timestamp; @docsEditable true
+  @DocsEditable @DomName('Gamepad.timestamp')
   final int timestamp;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10672,16 +10617,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Geolocation; @docsEditable true
+
+@DocsEditable
+@DomName('Geolocation')
 class Geolocation native "*Geolocation" {
 
-  /// @domName Geolocation.clearWatch; @docsEditable true
+  @DocsEditable @DomName('Geolocation.clearWatch')
   void clearWatch(int watchId) native;
 
-  /// @domName Geolocation.getCurrentPosition; @docsEditable true
+  @DocsEditable @DomName('Geolocation.getCurrentPosition')
   void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
 
-  /// @domName Geolocation.watchPosition; @docsEditable true
+  @DocsEditable @DomName('Geolocation.watchPosition')
   int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10689,13 +10636,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Geoposition; @docsEditable true
+
+@DocsEditable
+@DomName('Geoposition')
 class Geoposition native "*Geoposition" {
 
-  /// @domName Geoposition.coords; @docsEditable true
+  @DocsEditable @DomName('Geoposition.coords')
   final Coordinates coords;
 
-  /// @domName Geoposition.timestamp; @docsEditable true
+  @DocsEditable @DomName('Geoposition.timestamp')
   final int timestamp;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10703,10 +10652,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHRElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLHRElement')
 class HRElement extends Element native "*HTMLHRElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory HRElement() => document.$dom_createElement("hr");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10714,18 +10665,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HashChangeEvent; @docsEditable true
+
+@DocsEditable
+@DomName('HashChangeEvent')
 class HashChangeEvent extends Event native "*HashChangeEvent" {
 
-  /// @domName HashChangeEvent.newURL; @docsEditable true
   @JSName('newURL')
+  @DocsEditable @DomName('HashChangeEvent.newURL')
   final String newUrl;
 
-  /// @domName HashChangeEvent.oldURL; @docsEditable true
   @JSName('oldURL')
+  @DocsEditable @DomName('HashChangeEvent.oldURL')
   final String oldUrl;
 
-  /// @domName HashChangeEvent.initHashChangeEvent; @docsEditable true
+  @DocsEditable @DomName('HashChangeEvent.initHashChangeEvent')
   void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10733,10 +10686,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHeadElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLHeadElement')
 class HeadElement extends Element native "*HTMLHeadElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadElement() => document.$dom_createElement("head");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10744,25 +10699,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHeadingElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLHeadingElement')
 class HeadingElement extends Element native "*HTMLHeadingElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h1() => document.$dom_createElement("h1");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h2() => document.$dom_createElement("h2");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h3() => document.$dom_createElement("h3");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h4() => document.$dom_createElement("h4");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h5() => document.$dom_createElement("h5");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h6() => document.$dom_createElement("h6");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10770,7 +10727,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName History; @docsEditable true
+
+@DocsEditable
+@DomName('History')
 class History implements HistoryBase native "*History" {
 
   /**
@@ -10784,30 +10743,27 @@
    */
   static bool get supportsState => JS('bool', '!!window.history.pushState');
 
-  /// @domName History.length; @docsEditable true
+  @DocsEditable @DomName('History.length')
   final int length;
 
-  /// @domName History.state; @docsEditable true
   dynamic get state => _convertNativeToDart_SerializedScriptValue(this._state);
   @JSName('state')
-  @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
+  @DocsEditable @DomName('History.state') @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
   final dynamic _state;
 
-  /// @domName History.back; @docsEditable true
+  @DocsEditable @DomName('History.back')
   void back() native;
 
-  /// @domName History.forward; @docsEditable true
+  @DocsEditable @DomName('History.forward')
   void forward() native;
 
-  /// @domName History.go; @docsEditable true
+  @DocsEditable @DomName('History.go')
   void go(int distance) native;
 
-  /// @domName History.pushState; @docsEditable true
-  @SupportedBrowser(SupportedBrowser.CHROME) @SupportedBrowser(SupportedBrowser.FIREFOX) @SupportedBrowser(SupportedBrowser.IE, '10') @SupportedBrowser(SupportedBrowser.SAFARI)
+  @DocsEditable @DomName('History.pushState') @SupportedBrowser(SupportedBrowser.CHROME) @SupportedBrowser(SupportedBrowser.FIREFOX) @SupportedBrowser(SupportedBrowser.IE, '10') @SupportedBrowser(SupportedBrowser.SAFARI)
   void pushState(Object data, String title, [String url]) native;
 
-  /// @domName History.replaceState; @docsEditable true
-  @SupportedBrowser(SupportedBrowser.CHROME) @SupportedBrowser(SupportedBrowser.FIREFOX) @SupportedBrowser(SupportedBrowser.IE, '10') @SupportedBrowser(SupportedBrowser.SAFARI)
+  @DocsEditable @DomName('History.replaceState') @SupportedBrowser(SupportedBrowser.CHROME) @SupportedBrowser(SupportedBrowser.FIREFOX) @SupportedBrowser(SupportedBrowser.IE, '10') @SupportedBrowser(SupportedBrowser.SAFARI)
   void replaceState(Object data, String title, [String url]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10815,10 +10771,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAllCollection; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLAllCollection')
 class HtmlAllCollection implements JavaScriptIndexingBehavior, List<Node> native "*HTMLAllCollection" {
 
-  /// @domName HTMLAllCollection.length; @docsEditable true
+  @DocsEditable @DomName('HTMLAllCollection.length')
   int get length => JS("int", "#.length", this);
 
   Node operator[](int index) => JS("Node", "#[#]", this, index);
@@ -10839,50 +10797,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -10940,16 +10898,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -10969,13 +10947,13 @@
 
   // -- end List<Node> mixins.
 
-  /// @domName HTMLAllCollection.item; @docsEditable true
+  @DocsEditable @DomName('HTMLAllCollection.item')
   Node item(int index) native;
 
-  /// @domName HTMLAllCollection.namedItem; @docsEditable true
+  @DocsEditable @DomName('HTMLAllCollection.namedItem')
   Node namedItem(String name) native;
 
-  /// @domName HTMLAllCollection.tags; @docsEditable true
+  @DocsEditable @DomName('HTMLAllCollection.tags')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> tags(String name) native;
 }
@@ -10984,10 +10962,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLCollection; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLCollection')
 class HtmlCollection implements JavaScriptIndexingBehavior, List<Node> native "*HTMLCollection" {
 
-  /// @domName HTMLCollection.length; @docsEditable true
+  @DocsEditable @DomName('HTMLCollection.length')
   int get length => JS("int", "#.length", this);
 
   Node operator[](int index) => JS("Node", "#[#]", this, index);
@@ -11008,50 +10988,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -11109,16 +11089,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -11138,10 +11138,10 @@
 
   // -- end List<Node> mixins.
 
-  /// @domName HTMLCollection.item; @docsEditable true
+  @DocsEditable @DomName('HTMLCollection.item')
   Node item(int index) native;
 
-  /// @domName HTMLCollection.namedItem; @docsEditable true
+  @DocsEditable @DomName('HTMLCollection.namedItem')
   Node namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11151,26 +11151,27 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLDocument
+@DocsEditable
+@DomName('HTMLDocument')
 class HtmlDocument extends Document native "*HTMLDocument" {
 
-  /// @domName HTMLDocument.activeElement; @docsEditable true
+  @DocsEditable @DomName('HTMLDocument.activeElement')
   final Element activeElement;
 
-  /** @domName Document.body */
+  @DomName('Document.body')
   BodyElement get body => document.$dom_body;
 
-  /** @domName Document.body */
+  @DomName('Document.body')
   void set body(BodyElement value) {
     document.$dom_body = value;
   }
 
-  /** @domName Document.caretRangeFromPoint */
+  @DomName('Document.caretRangeFromPoint')
   Range caretRangeFromPoint(int x, int y) {
     return document.$dom_caretRangeFromPoint(x, y);
   }
 
-  /** @domName Document.elementFromPoint */
+  @DomName('Document.elementFromPoint')
   Element elementFromPoint(int x, int y) {
     return document.$dom_elementFromPoint(x, y);
   }
@@ -11209,72 +11210,73 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
+  @DomName('Document.getCSSCanvasContext')
   CanvasRenderingContext getCssCanvasContext(String contextId, String name,
       int width, int height) {
     return document.$dom_getCssCanvasContext(contextId, name, width, height);
   }
 
-  /** @domName Document.head */
+  @DomName('Document.head')
   HeadElement get head => document.$dom_head;
 
-  /** @domName Document.lastModified */
+  @DomName('Document.lastModified')
   String get lastModified => document.$dom_lastModified;
 
-  /** @domName Document.preferredStylesheetSet */
+  @DomName('Document.preferredStylesheetSet')
   String get preferredStylesheetSet => document.$dom_preferredStylesheetSet;
 
-  /** @domName Document.referrer */
+  @DomName('Document.referrer')
   String get referrer => document.$dom_referrer;
 
-  /** @domName Document.selectedStylesheetSet */
+  @DomName('Document.selectedStylesheetSet')
   String get selectedStylesheetSet => document.$dom_selectedStylesheetSet;
   void set selectedStylesheetSet(String value) {
     document.$dom_selectedStylesheetSet = value;
   }
 
-  /** @domName Document.styleSheets */
+  @DomName('Document.styleSheets')
   List<StyleSheet> get styleSheets => document.$dom_styleSheets;
 
-  /** @domName Document.title */
+  @DomName('Document.title')
   String get title => document.$dom_title;
 
-  /** @domName Document.title */
+  @DomName('Document.title')
   void set title(String value) {
     document.$dom_title = value;
   }
 
-  /** @domName Document.webkitCancelFullScreen */
+  @DomName('Document.webkitCancelFullScreen')
   void webkitCancelFullScreen() {
     document.$dom_webkitCancelFullScreen();
   }
 
-  /** @domName Document.webkitExitFullscreen */
+  @DomName('Document.webkitExitFullscreen')
   void webkitExitFullscreen() {
     document.$dom_webkitExitFullscreen();
   }
 
-  /** @domName Document.webkitExitPointerLock */
+  @DomName('Document.webkitExitPointerLock')
   void webkitExitPointerLock() {
     document.$dom_webkitExitPointerLock();
   }
 
-  /** @domName Document.webkitFullscreenElement */
+  @DomName('Document.webkitFullscreenElement')
   Element get webkitFullscreenElement => document.$dom_webkitFullscreenElement;
 
-  /** @domName Document.webkitFullscreenEnabled */
+  @DomName('Document.webkitFullscreenEnabled')
   bool get webkitFullscreenEnabled => document.$dom_webkitFullscreenEnabled;
 
-  /** @domName Document.webkitHidden */
+  @DomName('Document.webkitHidden')
   bool get webkitHidden => document.$dom_webkitHidden;
 
-  /** @domName Document.webkitIsFullScreen */
+  @DomName('Document.webkitIsFullScreen')
   bool get webkitIsFullScreen => document.$dom_webkitIsFullScreen;
 
-  /** @domName Document.webkitPointerLockElement */
+  @DomName('Document.webkitPointerLockElement')
   Element get webkitPointerLockElement =>
       document.$dom_webkitPointerLockElement;
 
-  /** @domName Document.webkitVisibilityState */
+  @DomName('Document.webkitVisibilityState')
   String get webkitVisibilityState => document.$dom_webkitVisibilityState;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11282,10 +11284,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHtmlElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLHtmlElement')
 class HtmlElement extends Element native "*HTMLHtmlElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory HtmlElement() => document.$dom_createElement("html");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11293,10 +11297,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFormControlsCollection; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLFormControlsCollection')
 class HtmlFormControlsCollection extends HtmlCollection native "*HTMLFormControlsCollection" {
 
-  /// @domName HTMLFormControlsCollection.namedItem; @docsEditable true
+  @DocsEditable @DomName('HTMLFormControlsCollection.namedItem')
   Node namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11304,26 +11310,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOptionsCollection; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLOptionsCollection')
 class HtmlOptionsCollection extends HtmlCollection native "*HTMLOptionsCollection" {
-
-  // Shadowing definition.
-  /// @domName HTMLOptionsCollection.length; @docsEditable true
-  int get length => JS("int", "#.length", this);
-
-  /// @domName HTMLOptionsCollection.length; @docsEditable true
-  void set length(int value) {
-    JS("void", "#.length = #", this, value);
-  }
-
-  /// @domName HTMLOptionsCollection.selectedIndex; @docsEditable true
-  int selectedIndex;
-
-  /// @domName HTMLOptionsCollection.namedItem; @docsEditable true
-  Node namedItem(String name) native;
-
-  /// @domName HTMLOptionsCollection.remove; @docsEditable true
-  void remove(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -11332,34 +11322,34 @@
 
 /**
  * A utility for retrieving data from a URL.
- *
+ * 
  * HttpRequest can be used to obtain data from http, ftp, and file
- * protocols.
- *
+ * protocols. 
+ * 
  * For example, suppose we're developing these API docs, and we
  * wish to retrieve the HTML of the top-level page and print it out.
  * The easiest way to do that would be:
- *
+ * 
  *     var httpRequest = HttpRequest.get('http://api.dartlang.org',
  *         (request) => print(request.responseText));
- *
+ * 
  * **Important**: With the default behavior of this class, your
  * code making the request should be served from the same origin (domain name,
  * port, and application layer protocol) as the URL you are trying to access
- * with HttpRequest. However, there are ways to
+ * with HttpRequest. However, there are ways to 
  * [get around this restriction](http://www.dartlang.org/articles/json-web-service/#note-on-jsonp).
- *
+ * 
  * See also:
  *
  * * [Dart article on using HttpRequests](http://www.dartlang.org/articles/json-web-service/#getting-data)
  * * [JS XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest)
  * * [Using XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest)
  */
-/// @domName XMLHttpRequest
+@DomName('XMLHttpRequest')
 class HttpRequest extends EventTarget native "*XMLHttpRequest" {
   /**
    * Creates a URL get request for the specified `url`.
-   *
+   * 
    * After completing the request, the object will call the user-provided
    * [onComplete] callback.
    */
@@ -11371,8 +11361,8 @@
    * Creates a URL GET request for the specified `url` with
    * credentials such a cookie (already) set in the header or
    * [authorization headers](http://tools.ietf.org/html/rfc1945#section-10.2).
-   *
-   * After completing the request, the object will call the user-provided
+   * 
+   * After completing the request, the object will call the user-provided 
    * [onComplete] callback.
    *
    * A few other details to keep in mind when using credentials:
@@ -11381,7 +11371,7 @@
    * * The `Access-Control-Allow-Origin` header of `url` cannot contain a wildcard (*).
    * * The `Access-Control-Allow-Credentials` header of `url` must be set to true.
    * * If `Access-Control-Expose-Headers` has not been set to true, only a subset of all the response headers will be returned when calling [getAllRequestHeaders].
-   *
+   * 
    * See also: [authorization headers](http://en.wikipedia.org/wiki/Basic_access_authentication).
    */
   factory HttpRequest.getWithCredentials(String url,
@@ -11403,16 +11393,12 @@
 
   static const EventStreamProvider<ProgressEvent> readyStateChangeEvent = const EventStreamProvider<ProgressEvent>('readystatechange');
 
-  ///@docsEditable true
+  @DocsEditable
   factory HttpRequest() => HttpRequest._create();
   static HttpRequest _create() => JS('HttpRequest', 'new XMLHttpRequest()');
 
-  /**
-   * Get the set of [HttpRequestEvents] that this request can respond to.
-   * Usually used when adding an EventListener, such as in
-   * `document.window.on.keyDown.add((e) => print('keydown happened'))`.
-   */
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   HttpRequestEvents get on =>
     new HttpRequestEvents(this);
 
@@ -11426,191 +11412,65 @@
 
   static const int UNSENT = 0;
 
-  /**
-   * Indicator of the current state of the request:
-   *
-   * <table>
-   *   <tr>
-   *     <td>Value</td>
-   *     <td>State</td>
-   *     <td>Meaning</td>
-   *   </tr>
-   *   <tr>
-   *     <td>0</td>
-   *     <td>unsent</td>
-   *     <td><code>open()</code> has not yet been called</td>
-   *   </tr>
-   *   <tr>
-   *     <td>1</td>
-   *     <td>opened</td>
-   *     <td><code>send()</code> has not yet been called</td>
-   *   </tr>
-   *   <tr>
-   *     <td>2</td>
-   *     <td>headers received</td>
-   *     <td><code>sent()</code> has been called; response headers and <code>status</code> are available</td>
-   *   </tr>
-   *   <tr>
-   *     <td>3</td> <td>loading</td> <td><code>responseText</code> holds some data</td>
-   *   </tr>
-   *   <tr>
-   *     <td>4</td> <td>done</td> <td>request is complete</td>
-   *   </tr>
-   * </table>
-   */
-  /// @domName XMLHttpRequest.readyState; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.readyState')
   final int readyState;
 
-  /**
-   * The data received as a reponse from the request.
-   *
-   * The data could be in the
-   * form of a [String], [ArrayBuffer], [Document], [Blob], or json (also a
-   * [String]). `null` indicates request failure.
-   */
-  /// @domName XMLHttpRequest.response; @docsEditable true
-  @Creates('ArrayBuffer|Blob|Document|=Object|=List|String|num')
+  @DocsEditable @DomName('XMLHttpRequest.response') @Creates('ArrayBuffer|Blob|Document|=Object|=List|String|num')
   final Object response;
 
-  /**
-   * The response in string form or null on failure.
-   */
-  /// @domName XMLHttpRequest.responseText; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.responseText')
   final String responseText;
 
-  /**
-   * [String] telling the server the desired response format.
-   *
-   * Default is `String`.
-   * Other options are one of 'arraybuffer', 'blob', 'document', 'json',
-   * 'text'. Some newer browsers will throw `NS_ERROR_DOM_INVALID_ACCESS_ERR` if
-   * `responseType` is set while performing a synchronous request.
-   *
-   * See also: [MDN responseType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType)
-   */
-  /// @domName XMLHttpRequest.responseType; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.responseType')
   String responseType;
 
-  /**
-   * The request response, or null on failure.
-   *
-   * The response is processed as
-   * `text/xml` stream, unless responseType = 'document' and the request is
-   * synchronous.
-   */
-  /// @domName XMLHttpRequest.responseXML; @docsEditable true
   @JSName('responseXML')
+  @DocsEditable @DomName('XMLHttpRequest.responseXML')
   final Document responseXml;
 
-  /**
-   * The http result code from the request (200, 404, etc).
-   * See also: [Http Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
-   */
-  /// @domName XMLHttpRequest.status; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.status')
   final int status;
 
-  /**
-   * The request response string (such as "200 OK").
-   * See also: [Http Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
-   */
-  /// @domName XMLHttpRequest.statusText; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.statusText')
   final String statusText;
 
-  /**
-   * [EventTarget] that can hold listeners to track the progress of the request.
-   * The events fired will be members of [HttpRequestUploadEvents].
-   */
-  /// @domName XMLHttpRequest.upload; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.upload')
   final HttpRequestUpload upload;
 
-  /**
-   * True if cross-site requests should use credentials such as cookies
-   * or authorization headers; false otherwise.
-   *
-   * This value is ignored for same-site requests.
-   */
-  /// @domName XMLHttpRequest.withCredentials; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.withCredentials')
   bool withCredentials;
 
-  /**
-   * Stop the current request.
-   *
-   * The request can only be stopped if readyState is `HEADERS_RECIEVED` or
-   * `LOADING`. If this method is not in the process of being sent, the method
-   * has no effect.
-   */
-  /// @domName XMLHttpRequest.abort; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.abort')
   void abort() native;
 
-  /// @domName XMLHttpRequest.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('XMLHttpRequest.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName XMLHttpRequest.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('XMLHttpRequest.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /**
-   * Retrieve all the response headers from a request.
-   *
-   * `null` if no headers have been received. For multipart requests,
-   * `getAllResponseHeaders` will return the response headers for the current
-   * part of the request.
-   *
-   * See also [HTTP response headers](http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Responses)
-   * for a list of common response headers.
-   */
-  /// @domName XMLHttpRequest.getAllResponseHeaders; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.getAllResponseHeaders')
   String getAllResponseHeaders() native;
 
-  /**
-   * Return the response header named `header`, or `null` if not found.
-   *
-   * See also [HTTP response headers](http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Responses)
-   * for a list of common response headers.
-   */
-  /// @domName XMLHttpRequest.getResponseHeader; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.getResponseHeader')
   String getResponseHeader(String header) native;
 
-  /**
-   * Specify the desired `url`, and `method` to use in making the request.
-   *
-   * By default the request is done asyncronously, with no user or password
-   * authentication information. If `async` is false, the request will be send
-   * synchronously.
-   *
-   * Calling `open` again on a currently active request is equivalent to
-   * calling `abort`.
-   */
-  /// @domName XMLHttpRequest.open; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.open')
   void open(String method, String url, [bool async, String user, String password]) native;
 
-  /**
-   * Specify a particular MIME type (such as `text/xml`) desired for the
-   * response.
-   *
-   * This value must be set before the request has been sent. See also the list
-   * of [common MIME types](http://en.wikipedia.org/wiki/Internet_media_type#List_of_common_media_types)
-   */
-  /// @domName XMLHttpRequest.overrideMimeType; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.overrideMimeType')
   void overrideMimeType(String override) native;
 
-  /// @domName XMLHttpRequest.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('XMLHttpRequest.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /**
-   * Send the request with any given `data`.
-   *
-   * See also:
-   * [send() docs](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send())
-   * from MDN.
-   */
-  /// @domName XMLHttpRequest.send; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.send')
   void send([data]) native;
 
-  /** Sets HTTP `header` to `value`. */
-  /// @domName XMLHttpRequest.setRequestHeader; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequest.setRequestHeader')
   void setRequestHeader(String header, String value) native;
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -11629,74 +11489,30 @@
 
 }
 
-/**
- * A class that supports listening for and dispatching events that can fire when
- * making an HTTP request.
- *
- * Here's an example of adding an event handler that executes once an HTTP
- * request has fully loaded:
- *
- *     httpRequest.on.loadEnd.add((e) => myCustomLoadEndHandler(e));
- *
- * Each property of this class is a read-only pointer to an [EventListenerList].
- * That list holds all of the [EventListener]s that have registered for that
- * particular type of event that fires from an HttpRequest.
- */
-/// @docsEditable true
+@DocsEditable
 class HttpRequestEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   HttpRequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /**
-   * Event listeners to be notified when request has been aborted,
-   * generally due to calling `httpRequest.abort()`.
-   */
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /**
-   * Event listeners to be notified when a request has failed, such as when a
-   * cross-domain error occurred or the file wasn't found on the server.
-   */
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /**
-   * Event listeners to be notified once the request has completed
-   * *successfully*.
-   */
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /**
-   * Event listeners to be notified once the request has completed (on
-   * either success or failure).
-   */
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadEnd => this['loadend'];
 
-  /**
-   * Event listeners to be notified when the request starts, once
-   * `httpRequest.send()` has been called.
-   */
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /**
-   * Event listeners to be notified when data for the request
-   * is being sent or loaded.
-   *
-   * Progress events are fired every 50ms or for every byte transmitted,
-   * whichever is less frequent.
-   */
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /**
-   * Event listeners to be notified every time the [HttpRequest]
-   * object's `readyState` changes values.
-   */
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get readyStateChange => this['readystatechange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11704,23 +11520,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLHttpRequestException; @docsEditable true
+
+@DocsEditable
+@DomName('XMLHttpRequestException')
 class HttpRequestException native "*XMLHttpRequestException" {
 
   static const int ABORT_ERR = 102;
 
   static const int NETWORK_ERR = 101;
 
-  /// @domName XMLHttpRequestException.code; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequestException.code')
   final int code;
 
-  /// @domName XMLHttpRequestException.message; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequestException.message')
   final String message;
 
-  /// @domName XMLHttpRequestException.name; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequestException.name')
   final String name;
 
-  /// @domName XMLHttpRequestException.toString; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequestException.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11728,13 +11546,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLHttpRequestProgressEvent; @docsEditable true
+
+@DocsEditable
+@DomName('XMLHttpRequestProgressEvent')
 class HttpRequestProgressEvent extends ProgressEvent native "*XMLHttpRequestProgressEvent" {
 
-  /// @domName XMLHttpRequestProgressEvent.position; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequestProgressEvent.position')
   final int position;
 
-  /// @domName XMLHttpRequestProgressEvent.totalSize; @docsEditable true
+  @DocsEditable @DomName('XMLHttpRequestProgressEvent.totalSize')
   final int totalSize;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11742,7 +11562,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLHttpRequestUpload; @docsEditable true
+
+@DocsEditable
+@DomName('XMLHttpRequestUpload')
 class HttpRequestUpload extends EventTarget native "*XMLHttpRequestUpload" {
 
   static const EventStreamProvider<ProgressEvent> abortEvent = const EventStreamProvider<ProgressEvent>('abort');
@@ -11757,20 +11579,21 @@
 
   static const EventStreamProvider<ProgressEvent> progressEvent = const EventStreamProvider<ProgressEvent>('progress');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   HttpRequestUploadEvents get on =>
     new HttpRequestUploadEvents(this);
 
-  /// @domName XMLHttpRequestUpload.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('XMLHttpRequestUpload.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName XMLHttpRequestUpload.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('XMLHttpRequestUpload.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName XMLHttpRequestUpload.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('XMLHttpRequestUpload.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -11786,27 +11609,27 @@
   Stream<ProgressEvent> get onProgress => progressEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class HttpRequestUploadEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   HttpRequestUploadEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadEnd => this['loadend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11814,34 +11637,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLIFrameElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLIFrameElement')
 class IFrameElement extends Element native "*HTMLIFrameElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory IFrameElement() => document.$dom_createElement("iframe");
 
-  /// @domName HTMLIFrameElement.contentWindow; @docsEditable true
   WindowBase get contentWindow => _convertNativeToDart_Window(this._contentWindow);
   @JSName('contentWindow')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('HTMLIFrameElement.contentWindow') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _contentWindow;
 
-  /// @domName HTMLIFrameElement.height; @docsEditable true
+  @DocsEditable @DomName('HTMLIFrameElement.height')
   String height;
 
-  /// @domName HTMLIFrameElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLIFrameElement.name')
   String name;
 
-  /// @domName HTMLIFrameElement.sandbox; @docsEditable true
+  @DocsEditable @DomName('HTMLIFrameElement.sandbox')
   String sandbox;
 
-  /// @domName HTMLIFrameElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLIFrameElement.src')
   String src;
 
-  /// @domName HTMLIFrameElement.srcdoc; @docsEditable true
+  @DocsEditable @DomName('HTMLIFrameElement.srcdoc')
   String srcdoc;
 
-  /// @domName HTMLIFrameElement.width; @docsEditable true
+  @DocsEditable @DomName('HTMLIFrameElement.width')
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11849,16 +11673,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ImageData; @docsEditable true
+
+@DocsEditable
+@DomName('ImageData')
 class ImageData native "*ImageData" {
 
-  /// @domName ImageData.data; @docsEditable true
+  @DocsEditable @DomName('ImageData.data')
   final Uint8ClampedArray data;
 
-  /// @domName ImageData.height; @docsEditable true
+  @DocsEditable @DomName('ImageData.height')
   final int height;
 
-  /// @domName ImageData.width; @docsEditable true
+  @DocsEditable @DomName('ImageData.width')
   final int width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11866,10 +11692,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLImageElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLImageElement')
 class ImageElement extends Element native "*HTMLImageElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ImageElement({String src, int width, int height}) {
     var e = document.$dom_createElement("img");
     if (src != null) e.src = src;
@@ -11878,46 +11706,46 @@
     return e;
   }
 
-  /// @domName HTMLImageElement.alt; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.alt')
   String alt;
 
-  /// @domName HTMLImageElement.border; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.border')
   String border;
 
-  /// @domName HTMLImageElement.complete; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.complete')
   final bool complete;
 
-  /// @domName HTMLImageElement.crossOrigin; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.crossOrigin')
   String crossOrigin;
 
-  /// @domName HTMLImageElement.height; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.height')
   int height;
 
-  /// @domName HTMLImageElement.isMap; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.isMap')
   bool isMap;
 
-  /// @domName HTMLImageElement.lowsrc; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.lowsrc')
   String lowsrc;
 
-  /// @domName HTMLImageElement.naturalHeight; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.naturalHeight')
   final int naturalHeight;
 
-  /// @domName HTMLImageElement.naturalWidth; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.naturalWidth')
   final int naturalWidth;
 
-  /// @domName HTMLImageElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.src')
   String src;
 
-  /// @domName HTMLImageElement.useMap; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.useMap')
   String useMap;
 
-  /// @domName HTMLImageElement.width; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.width')
   int width;
 
-  /// @domName HTMLImageElement.x; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.x')
   final int x;
 
-  /// @domName HTMLImageElement.y; @docsEditable true
+  @DocsEditable @DomName('HTMLImageElement.y')
   final int y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11925,7 +11753,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLInputElement
+@DocsEditable
+@DomName('HTMLInputElement')
 class InputElement extends Element implements
     HiddenInputElement,
     SearchInputElement,
@@ -11951,7 +11780,6 @@
     ButtonInputElement
      native "*HTMLInputElement" {
 
-  ///@docsEditable true
   factory InputElement({String type}) {
     var e = document.$dom_createElement("input");
     if (type != null) {
@@ -11965,179 +11793,180 @@
 
   static const EventStreamProvider<Event> speechChangeEvent = const EventStreamProvider<Event>('webkitSpeechChange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   InputElementEvents get on =>
     new InputElementEvents(this);
 
-  /// @domName HTMLInputElement.accept; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.accept')
   String accept;
 
-  /// @domName HTMLInputElement.alt; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.alt')
   String alt;
 
-  /// @domName HTMLInputElement.autocomplete; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLInputElement.autofocus; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLInputElement.checked; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.checked')
   bool checked;
 
-  /// @domName HTMLInputElement.defaultChecked; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.defaultChecked')
   bool defaultChecked;
 
-  /// @domName HTMLInputElement.defaultValue; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.defaultValue')
   String defaultValue;
 
-  /// @domName HTMLInputElement.dirName; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  /// @domName HTMLInputElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.disabled')
   bool disabled;
 
-  /// @domName HTMLInputElement.files; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.files')
   @Returns('FileList') @Creates('FileList')
   List<File> files;
 
-  /// @domName HTMLInputElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.form')
   final FormElement form;
 
-  /// @domName HTMLInputElement.formAction; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  /// @domName HTMLInputElement.formEnctype; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLInputElement.formMethod; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLInputElement.formNoValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLInputElement.formTarget; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.formTarget')
   String formTarget;
 
-  /// @domName HTMLInputElement.height; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.height')
   int height;
 
-  /// @domName HTMLInputElement.incremental; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.incremental')
   bool incremental;
 
-  /// @domName HTMLInputElement.indeterminate; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.indeterminate')
   bool indeterminate;
 
-  /// @domName HTMLInputElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLInputElement.list; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.list')
   final Element list;
 
-  /// @domName HTMLInputElement.max; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.max')
   String max;
 
-  /// @domName HTMLInputElement.maxLength; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLInputElement.min; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.min')
   String min;
 
-  /// @domName HTMLInputElement.multiple; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  /// @domName HTMLInputElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.name')
   String name;
 
-  /// @domName HTMLInputElement.pattern; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  /// @domName HTMLInputElement.placeholder; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.selectionDirection; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.selectionDirection')
   String selectionDirection;
 
-  /// @domName HTMLInputElement.selectionEnd; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.selectionEnd')
   int selectionEnd;
 
-  /// @domName HTMLInputElement.selectionStart; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.selectionStart')
   int selectionStart;
 
-  /// @domName HTMLInputElement.size; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.size')
   int size;
 
-  /// @domName HTMLInputElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.src')
   String src;
 
-  /// @domName HTMLInputElement.step; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.step')
   String step;
 
-  /// @domName HTMLInputElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.type')
   String type;
 
-  /// @domName HTMLInputElement.useMap; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.useMap')
   String useMap;
 
-  /// @domName HTMLInputElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLInputElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLInputElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.value')
   String value;
 
-  /// @domName HTMLInputElement.valueAsDate; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.valueAsNumber; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.valueAsNumber')
   num valueAsNumber;
 
-  /// @domName HTMLInputElement.webkitEntries; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.webkitEntries')
   @Returns('_EntryArray') @Creates('_EntryArray')
   final List<Entry> webkitEntries;
 
-  /// @domName HTMLInputElement.webkitGrammar; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.webkitGrammar')
   bool webkitGrammar;
 
-  /// @domName HTMLInputElement.webkitSpeech; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.webkitSpeech')
   bool webkitSpeech;
 
-  /// @domName HTMLInputElement.webkitdirectory; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.webkitdirectory')
   bool webkitdirectory;
 
-  /// @domName HTMLInputElement.width; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.width')
   int width;
 
-  /// @domName HTMLInputElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLInputElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLInputElement.select; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.select')
   void select() native;
 
-  /// @domName HTMLInputElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.setCustomValidity')
   void setCustomValidity(String error) native;
 
-  /// @domName HTMLInputElement.setRangeText; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.setRangeText')
   void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
 
-  /// @domName HTMLInputElement.setSelectionRange; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]) native;
 
-  /// @domName HTMLInputElement.stepDown; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.stepDown')
   void stepDown([int n]) native;
 
-  /// @domName HTMLInputElement.stepUp; @docsEditable true
+  @DocsEditable @DomName('HTMLInputElement.stepUp')
   void stepUp([int n]) native;
 
   Stream<Event> get onSpeechChange => speechChangeEvent.forTarget(this);
@@ -12153,40 +11982,40 @@
  * Exposes the functionality common between all InputElement types.
  */
 abstract class InputElementBase implements Element {
-  /// @domName HTMLInputElement.autofocus
+  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLInputElement.disabled
+  @DomName('HTMLInputElement.disabled')
   bool disabled;
 
-  /// @domName HTMLInputElement.incremental
+  @DomName('HTMLInputElement.incremental')
   bool incremental;
 
-  /// @domName HTMLInputElement.indeterminate
+  @DomName('HTMLInputElement.indeterminate')
   bool indeterminate;
 
-  /// @domName HTMLInputElement.labels
+  @DomName('HTMLInputElement.labels')
   List<Node> get labels;
 
-  /// @domName HTMLInputElement.name
+  @DomName('HTMLInputElement.name')
   String name;
 
-  /// @domName HTMLInputElement.validationMessage
+  @DomName('HTMLInputElement.validationMessage')
   String get validationMessage;
 
-  /// @domName HTMLInputElement.validity
+  @DomName('HTMLInputElement.validity')
   ValidityState get validity;
 
-  /// @domName HTMLInputElement.value
+  @DomName('HTMLInputElement.value')
   String value;
 
-  /// @domName HTMLInputElement.willValidate
+  @DomName('HTMLInputElement.willValidate')
   bool get willValidate;
 
-  /// @domName HTMLInputElement.checkValidity
+  @DomName('HTMLInputElement.checkValidity')
   bool checkValidity();
 
-  /// @domName HTMLInputElement.setCustomValidity
+  @DomName('HTMLInputElement.setCustomValidity')
   void setCustomValidity(String error);
 }
 
@@ -12202,40 +12031,40 @@
  * Base interface for all inputs which involve text editing.
  */
 abstract class TextInputElementBase implements InputElementBase {
-  /// @domName HTMLInputElement.autocomplete
+  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLInputElement.maxLength
+  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLInputElement.pattern
+  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.size
+  @DomName('HTMLInputElement.size')
   int size;
 
-  /// @domName HTMLInputElement.select
+  @DomName('HTMLInputElement.select')
   void select();
 
-  /// @domName HTMLInputElement.selectionDirection
+  @DomName('HTMLInputElement.selectionDirection')
   String selectionDirection;
 
-  /// @domName HTMLInputElement.selectionEnd
+  @DomName('HTMLInputElement.selectionEnd')
   int selectionEnd;
 
-  /// @domName HTMLInputElement.selectionStart
+  @DomName('HTMLInputElement.selectionStart')
   int selectionStart;
 
-  /// @domName HTMLInputElement.setSelectionRange
+  @DomName('HTMLInputElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]);
 }
 
@@ -12252,10 +12081,10 @@
 abstract class SearchInputElement implements TextInputElementBase {
   factory SearchInputElement() => new InputElement(type: 'search');
 
-  /// @domName HTMLInputElement.dirName;
+  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12270,10 +12099,10 @@
 abstract class TextInputElement implements TextInputElementBase {
   factory TextInputElement() => new InputElement(type: 'text');
 
-  /// @domName HTMLInputElement.dirName;
+  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 }
 
@@ -12289,7 +12118,7 @@
 abstract class UrlInputElement implements TextInputElementBase {
   factory UrlInputElement() => new InputElement(type: 'url');
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12313,7 +12142,7 @@
 abstract class TelephoneInputElement implements TextInputElementBase {
   factory TelephoneInputElement() => new InputElement(type: 'tel');
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12334,34 +12163,34 @@
 abstract class EmailInputElement implements TextInputElementBase {
   factory EmailInputElement() => new InputElement(type: 'email');
 
-  /// @domName HTMLInputElement.autocomplete
+  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLInputElement.autofocus
+  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
-  /// @domName HTMLInputElement.maxLength
+  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLInputElement.multiple;
+  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  /// @domName HTMLInputElement.pattern
+  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.size
+  @DomName('HTMLInputElement.size')
   int size;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12382,25 +12211,25 @@
  */
 abstract class RangeInputElementBase implements InputElementBase {
 
-  /// @domName HTMLInputElement.list
+  @DomName('HTMLInputElement.list')
   Element get list;
 
-  /// @domName HTMLInputElement.max
+  @DomName('HTMLInputElement.max')
   String max;
 
-  /// @domName HTMLInputElement.min
+  @DomName('HTMLInputElement.min')
   String min;
 
-  /// @domName HTMLInputElement.step
+  @DomName('HTMLInputElement.step')
   String step;
 
-  /// @domName HTMLInputElement.valueAsNumber
+  @DomName('HTMLInputElement.valueAsNumber')
   num valueAsNumber;
 
-  /// @domName HTMLInputElement.stepDown
+  @DomName('HTMLInputElement.stepDown')
   void stepDown([int n]);
 
-  /// @domName HTMLInputElement.stepUp
+  @DomName('HTMLInputElement.stepUp')
   void stepUp([int n]);
 }
 
@@ -12415,13 +12244,13 @@
 abstract class DateTimeInputElement implements RangeInputElementBase {
   factory DateTimeInputElement() => new InputElement(type: 'datetime');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12440,13 +12269,13 @@
 abstract class DateInputElement implements RangeInputElementBase {
   factory DateInputElement() => new InputElement(type: 'date');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12465,13 +12294,13 @@
 abstract class MonthInputElement implements RangeInputElementBase {
   factory MonthInputElement() => new InputElement(type: 'month');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12490,13 +12319,13 @@
 abstract class WeekInputElement implements RangeInputElementBase {
   factory WeekInputElement() => new InputElement(type: 'week');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12515,13 +12344,13 @@
 abstract class TimeInputElement implements RangeInputElementBase {
   factory TimeInputElement() => new InputElement(type: 'time');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12542,10 +12371,10 @@
   factory LocalDateTimeInputElement() =>
       new InputElement(type: 'datetime-local');
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12564,13 +12393,13 @@
 abstract class NumberInputElement implements RangeInputElementBase {
   factory NumberInputElement() => new InputElement(type: 'number');
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -12606,10 +12435,10 @@
 abstract class CheckboxInputElement implements InputElementBase {
   factory CheckboxInputElement() => new InputElement(type: 'checkbox');
 
-  /// @domName HTMLInputElement.checked
+  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -12628,10 +12457,10 @@
 abstract class RadioButtonInputElement implements InputElementBase {
   factory RadioButtonInputElement() => new InputElement(type: 'radio');
 
-  /// @domName HTMLInputElement.checked
+  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -12641,16 +12470,16 @@
 abstract class FileUploadInputElement implements InputElementBase {
   factory FileUploadInputElement() => new InputElement(type: 'file');
 
-  /// @domName HTMLInputElement.accept
+  @DomName('HTMLInputElement.accept')
   String accept;
 
-  /// @domName HTMLInputElement.multiple
+  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.files
+  @DomName('HTMLInputElement.files')
   List<File> files;
 }
 
@@ -12660,19 +12489,19 @@
 abstract class SubmitButtonInputElement implements InputElementBase {
   factory SubmitButtonInputElement() => new InputElement(type: 'submit');
 
-  /// @domName HTMLInputElement.formAction
+  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  /// @domName HTMLInputElement.formEnctype
+  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLInputElement.formMethod
+  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLInputElement.formNoValidate
+  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLInputElement.formTarget
+  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 }
 
@@ -12683,31 +12512,31 @@
 abstract class ImageButtonInputElement implements InputElementBase {
   factory ImageButtonInputElement() => new InputElement(type: 'image');
 
-  /// @domName HTMLInputElement.alt
+  @DomName('HTMLInputElement.alt')
   String alt;
 
-  /// @domName HTMLInputElement.formAction
+  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  /// @domName HTMLInputElement.formEnctype
+  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLInputElement.formMethod
+  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLInputElement.formNoValidate
+  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLInputElement.formTarget
+  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 
-  /// @domName HTMLInputElement.height
+  @DomName('HTMLInputElement.height')
   int height;
 
-  /// @domName HTMLInputElement.src
+  @DomName('HTMLInputElement.src')
   String src;
 
-  /// @domName HTMLInputElement.width
+  @DomName('HTMLInputElement.width')
   int width;
 }
 
@@ -12726,12 +12555,12 @@
 }
 
 
-/// @docsEditable true
+@DocsEditable
 class InputElementEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   InputElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get speechChange => this['webkitSpeechChange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12739,7 +12568,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Int16Array; @docsEditable true
+
+@DocsEditable
+@DomName('Int16Array')
 class Int16Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int16Array" {
 
   factory Int16Array(int length) =>
@@ -12748,12 +12579,12 @@
   factory Int16Array.fromList(List<int> list) =>
     _TypedArrayFactoryProvider.createInt16Array_fromList(list);
 
-  factory Int16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Int16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createInt16Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 2;
 
-  /// @domName Int16Array.length; @docsEditable true
+  @DocsEditable @DomName('Int16Array.length')
   int get length => JS("int", "#.length", this);
 
   int operator[](int index) => JS("int", "#[#]", this, index);
@@ -12771,50 +12602,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -12872,16 +12703,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -12901,11 +12752,11 @@
 
   // -- end List<int> mixins.
 
-  /// @domName Int16Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Int16Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Int16Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Int16Array.subarray')
   Int16Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12913,7 +12764,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Int32Array; @docsEditable true
+
+@DocsEditable
+@DomName('Int32Array')
 class Int32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int32Array" {
 
   factory Int32Array(int length) =>
@@ -12922,12 +12775,12 @@
   factory Int32Array.fromList(List<int> list) =>
     _TypedArrayFactoryProvider.createInt32Array_fromList(list);
 
-  factory Int32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Int32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createInt32Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 4;
 
-  /// @domName Int32Array.length; @docsEditable true
+  @DocsEditable @DomName('Int32Array.length')
   int get length => JS("int", "#.length", this);
 
   int operator[](int index) => JS("int", "#[#]", this, index);
@@ -12945,50 +12798,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -13046,16 +12899,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -13075,11 +12948,11 @@
 
   // -- end List<int> mixins.
 
-  /// @domName Int32Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Int32Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Int32Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Int32Array.subarray')
   Int32Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13087,7 +12960,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Int8Array; @docsEditable true
+
+@DocsEditable
+@DomName('Int8Array')
 class Int8Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int8Array" {
 
   factory Int8Array(int length) =>
@@ -13096,12 +12971,12 @@
   factory Int8Array.fromList(List<int> list) =>
     _TypedArrayFactoryProvider.createInt8Array_fromList(list);
 
-  factory Int8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Int8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createInt8Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 1;
 
-  /// @domName Int8Array.length; @docsEditable true
+  @DocsEditable @DomName('Int8Array.length')
   int get length => JS("int", "#.length", this);
 
   int operator[](int index) => JS("int", "#[#]", this, index);
@@ -13119,50 +12994,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -13220,16 +13095,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -13249,11 +13144,11 @@
 
   // -- end List<int> mixins.
 
-  /// @domName Int8Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Int8Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Int8Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Int8Array.subarray')
   Int8Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13261,7 +13156,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName JavaScriptCallFrame; @docsEditable true
+
+@DocsEditable
+@DomName('JavaScriptCallFrame')
 class JavaScriptCallFrame native "*JavaScriptCallFrame" {
 
   static const int CATCH_SCOPE = 4;
@@ -13274,37 +13171,37 @@
 
   static const int WITH_SCOPE = 2;
 
-  /// @domName JavaScriptCallFrame.caller; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.caller')
   final JavaScriptCallFrame caller;
 
-  /// @domName JavaScriptCallFrame.column; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.column')
   final int column;
 
-  /// @domName JavaScriptCallFrame.functionName; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.functionName')
   final String functionName;
 
-  /// @domName JavaScriptCallFrame.line; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.line')
   final int line;
 
-  /// @domName JavaScriptCallFrame.scopeChain; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.scopeChain')
   final List scopeChain;
 
-  /// @domName JavaScriptCallFrame.sourceID; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.sourceID')
   final int sourceID;
 
-  /// @domName JavaScriptCallFrame.thisObject; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.thisObject')
   final Object thisObject;
 
-  /// @domName JavaScriptCallFrame.type; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.type')
   final String type;
 
-  /// @domName JavaScriptCallFrame.evaluate; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.evaluate')
   void evaluate(String script) native;
 
-  /// @domName JavaScriptCallFrame.restart; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.restart')
   Object restart() native;
 
-  /// @domName JavaScriptCallFrame.scopeType; @docsEditable true
+  @DocsEditable @DomName('JavaScriptCallFrame.scopeType')
   int scopeType(int scopeIndex) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13312,7 +13209,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName KeyboardEvent; @docsEditable true
+@DomName('KeyboardEvent')
 class KeyboardEvent extends UIEvent native "*KeyboardEvent" {
 
   factory KeyboardEvent(String type, Window view,
@@ -13326,7 +13223,7 @@
     return e;
   }
 
-  /** @domName KeyboardEvent.initKeyboardEvent */
+  @DomName('KeyboardEvent.initKeyboardEvent')
   void $dom_initKeyboardEvent(String type, bool canBubble, bool cancelable,
       Window view, String keyIdentifier, int keyLocation, bool ctrlKey,
       bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) {
@@ -13346,32 +13243,32 @@
     }
   }
 
-  /** @domName KeyboardEvent.keyCode */
+  @DomName('KeyboardEvent.keyCode')
   int get keyCode => $dom_keyCode;
 
-  /** @domName KeyboardEvent.charCode */
+  @DomName('KeyboardEvent.charCode')
   int get charCode => $dom_charCode;
 
-  /// @domName KeyboardEvent.altGraphKey; @docsEditable true
+  @DocsEditable @DomName('KeyboardEvent.altGraphKey')
   final bool altGraphKey;
 
-  /// @domName KeyboardEvent.altKey; @docsEditable true
+  @DocsEditable @DomName('KeyboardEvent.altKey')
   final bool altKey;
 
-  /// @domName KeyboardEvent.ctrlKey; @docsEditable true
+  @DocsEditable @DomName('KeyboardEvent.ctrlKey')
   final bool ctrlKey;
 
-  /// @domName KeyboardEvent.keyIdentifier; @docsEditable true
   @JSName('keyIdentifier')
+  @DocsEditable @DomName('KeyboardEvent.keyIdentifier')
   final String $dom_keyIdentifier;
 
-  /// @domName KeyboardEvent.keyLocation; @docsEditable true
+  @DocsEditable @DomName('KeyboardEvent.keyLocation')
   final int keyLocation;
 
-  /// @domName KeyboardEvent.metaKey; @docsEditable true
+  @DocsEditable @DomName('KeyboardEvent.metaKey')
   final bool metaKey;
 
-  /// @domName KeyboardEvent.shiftKey; @docsEditable true
+  @DocsEditable @DomName('KeyboardEvent.shiftKey')
   final bool shiftKey;
 
 }
@@ -13380,56 +13277,58 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLKeygenElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLKeygenElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 class KeygenElement extends Element native "*HTMLKeygenElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory KeygenElement() => document.$dom_createElement("keygen");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('keygen') && (new Element.tag('keygen') is KeygenElement);
 
-  /// @domName HTMLKeygenElement.autofocus; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLKeygenElement.challenge; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.challenge')
   String challenge;
 
-  /// @domName HTMLKeygenElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.disabled')
   bool disabled;
 
-  /// @domName HTMLKeygenElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.form')
   final FormElement form;
 
-  /// @domName HTMLKeygenElement.keytype; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.keytype')
   String keytype;
 
-  /// @domName HTMLKeygenElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLKeygenElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.name')
   String name;
 
-  /// @domName HTMLKeygenElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.type')
   final String type;
 
-  /// @domName HTMLKeygenElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLKeygenElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLKeygenElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLKeygenElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLKeygenElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLKeygenElement.setCustomValidity')
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13437,16 +13336,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLIElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLLIElement')
 class LIElement extends Element native "*HTMLLIElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory LIElement() => document.$dom_createElement("li");
 
-  /// @domName HTMLLIElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLLIElement.type')
   String type;
 
-  /// @domName HTMLLIElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLLIElement.value')
   int value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13454,19 +13355,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLabelElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLLabelElement')
 class LabelElement extends Element native "*HTMLLabelElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory LabelElement() => document.$dom_createElement("label");
 
-  /// @domName HTMLLabelElement.control; @docsEditable true
+  @DocsEditable @DomName('HTMLLabelElement.control')
   final Element control;
 
-  /// @domName HTMLLabelElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLLabelElement.form')
   final FormElement form;
 
-  /// @domName HTMLLabelElement.htmlFor; @docsEditable true
+  @DocsEditable @DomName('HTMLLabelElement.htmlFor')
   String htmlFor;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13474,16 +13377,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLegendElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLLegendElement')
 class LegendElement extends Element native "*HTMLLegendElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory LegendElement() => document.$dom_createElement("legend");
 
-  /// @domName HTMLLegendElement.align; @docsEditable true
-  String align;
-
-  /// @domName HTMLLegendElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLLegendElement.form')
   final FormElement form;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13491,34 +13393,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLinkElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLLinkElement')
 class LinkElement extends Element native "*HTMLLinkElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory LinkElement() => document.$dom_createElement("link");
 
-  /// @domName HTMLLinkElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.disabled')
   bool disabled;
 
-  /// @domName HTMLLinkElement.href; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.href')
   String href;
 
-  /// @domName HTMLLinkElement.hreflang; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.hreflang')
   String hreflang;
 
-  /// @domName HTMLLinkElement.media; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.media')
   String media;
 
-  /// @domName HTMLLinkElement.rel; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.rel')
   String rel;
 
-  /// @domName HTMLLinkElement.sheet; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.sheet')
   final StyleSheet sheet;
 
-  /// @domName HTMLLinkElement.sizes; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.sizes')
   DomSettableTokenList sizes;
 
-  /// @domName HTMLLinkElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLLinkElement.type')
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13526,10 +13430,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName LocalMediaStream; @docsEditable true
+
+@DocsEditable
+@DomName('LocalMediaStream')
 class LocalMediaStream extends MediaStream implements EventTarget native "*LocalMediaStream" {
 
-  /// @domName LocalMediaStream.stop; @docsEditable true
+  @DocsEditable @DomName('LocalMediaStream.stop')
   void stop() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13537,50 +13443,52 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Location; @docsEditable true
+
+@DocsEditable
+@DomName('Location')
 class Location implements LocationBase native "*Location" {
 
-  /// @domName Location.ancestorOrigins; @docsEditable true
+  @DocsEditable @DomName('Location.ancestorOrigins')
   @Returns('DomStringList') @Creates('DomStringList')
   final List<String> ancestorOrigins;
 
-  /// @domName Location.hash; @docsEditable true
+  @DocsEditable @DomName('Location.hash')
   String hash;
 
-  /// @domName Location.host; @docsEditable true
+  @DocsEditable @DomName('Location.host')
   String host;
 
-  /// @domName Location.hostname; @docsEditable true
+  @DocsEditable @DomName('Location.hostname')
   String hostname;
 
-  /// @domName Location.href; @docsEditable true
+  @DocsEditable @DomName('Location.href')
   String href;
 
-  /// @domName Location.origin; @docsEditable true
+  @DocsEditable @DomName('Location.origin')
   final String origin;
 
-  /// @domName Location.pathname; @docsEditable true
+  @DocsEditable @DomName('Location.pathname')
   String pathname;
 
-  /// @domName Location.port; @docsEditable true
+  @DocsEditable @DomName('Location.port')
   String port;
 
-  /// @domName Location.protocol; @docsEditable true
+  @DocsEditable @DomName('Location.protocol')
   String protocol;
 
-  /// @domName Location.search; @docsEditable true
+  @DocsEditable @DomName('Location.search')
   String search;
 
-  /// @domName Location.assign; @docsEditable true
+  @DocsEditable @DomName('Location.assign')
   void assign(String url) native;
 
-  /// @domName Location.reload; @docsEditable true
+  @DocsEditable @DomName('Location.reload')
   void reload() native;
 
-  /// @domName Location.replace; @docsEditable true
+  @DocsEditable @DomName('Location.replace')
   void replace(String url) native;
 
-  /// @domName Location.toString; @docsEditable true
+  @DocsEditable @DomName('Location.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13588,16 +13496,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMapElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLMapElement')
 class MapElement extends Element native "*HTMLMapElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MapElement() => document.$dom_createElement("map");
 
-  /// @domName HTMLMapElement.areas; @docsEditable true
+  @DocsEditable @DomName('HTMLMapElement.areas')
   final HtmlCollection areas;
 
-  /// @domName HTMLMapElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLMapElement.name')
   String name;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13605,115 +13515,67 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMarqueeElement; @docsEditable true
-class MarqueeElement extends Element native "*HTMLMarqueeElement" {
 
-  /// Checks if this type is supported on the current platform.
-  static bool get supported => Element.isTagSupported('marquee')&& (new Element.tag('marquee') is MarqueeElement);
-
-  /// @domName HTMLMarqueeElement.behavior; @docsEditable true
-  String behavior;
-
-  /// @domName HTMLMarqueeElement.bgColor; @docsEditable true
-  String bgColor;
-
-  /// @domName HTMLMarqueeElement.direction; @docsEditable true
-  String direction;
-
-  /// @domName HTMLMarqueeElement.height; @docsEditable true
-  String height;
-
-  /// @domName HTMLMarqueeElement.hspace; @docsEditable true
-  int hspace;
-
-  /// @domName HTMLMarqueeElement.loop; @docsEditable true
-  int loop;
-
-  /// @domName HTMLMarqueeElement.scrollAmount; @docsEditable true
-  int scrollAmount;
-
-  /// @domName HTMLMarqueeElement.scrollDelay; @docsEditable true
-  int scrollDelay;
-
-  /// @domName HTMLMarqueeElement.trueSpeed; @docsEditable true
-  bool trueSpeed;
-
-  /// @domName HTMLMarqueeElement.vspace; @docsEditable true
-  int vspace;
-
-  /// @domName HTMLMarqueeElement.width; @docsEditable true
-  String width;
-
-  /// @domName HTMLMarqueeElement.start; @docsEditable true
-  void start() native;
-
-  /// @domName HTMLMarqueeElement.stop; @docsEditable true
-  void stop() native;
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName MediaController; @docsEditable true
+@DocsEditable
+@DomName('MediaController')
 class MediaController extends EventTarget native "*MediaController" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MediaController() => MediaController._create();
   static MediaController _create() => JS('MediaController', 'new MediaController()');
 
-  /// @domName MediaController.buffered; @docsEditable true
+  @DocsEditable @DomName('MediaController.buffered')
   final TimeRanges buffered;
 
-  /// @domName MediaController.currentTime; @docsEditable true
+  @DocsEditable @DomName('MediaController.currentTime')
   num currentTime;
 
-  /// @domName MediaController.defaultPlaybackRate; @docsEditable true
+  @DocsEditable @DomName('MediaController.defaultPlaybackRate')
   num defaultPlaybackRate;
 
-  /// @domName MediaController.duration; @docsEditable true
+  @DocsEditable @DomName('MediaController.duration')
   final num duration;
 
-  /// @domName MediaController.muted; @docsEditable true
+  @DocsEditable @DomName('MediaController.muted')
   bool muted;
 
-  /// @domName MediaController.paused; @docsEditable true
+  @DocsEditable @DomName('MediaController.paused')
   final bool paused;
 
-  /// @domName MediaController.playbackRate; @docsEditable true
+  @DocsEditable @DomName('MediaController.playbackRate')
   num playbackRate;
 
-  /// @domName MediaController.playbackState; @docsEditable true
+  @DocsEditable @DomName('MediaController.playbackState')
   final String playbackState;
 
-  /// @domName MediaController.played; @docsEditable true
+  @DocsEditable @DomName('MediaController.played')
   final TimeRanges played;
 
-  /// @domName MediaController.seekable; @docsEditable true
+  @DocsEditable @DomName('MediaController.seekable')
   final TimeRanges seekable;
 
-  /// @domName MediaController.volume; @docsEditable true
+  @DocsEditable @DomName('MediaController.volume')
   num volume;
 
-  /// @domName MediaController.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('MediaController.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MediaController.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('MediaController.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName MediaController.pause; @docsEditable true
+  @DocsEditable @DomName('MediaController.pause')
   void pause() native;
 
-  /// @domName MediaController.play; @docsEditable true
+  @DocsEditable @DomName('MediaController.play')
   void play() native;
 
-  /// @domName MediaController.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('MediaController.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MediaController.unpause; @docsEditable true
+  @DocsEditable @DomName('MediaController.unpause')
   void unpause() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13721,7 +13583,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMediaElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLMediaElement')
 class MediaElement extends Element native "*HTMLMediaElement" {
 
   static const EventStreamProvider<Event> canPlayEvent = const EventStreamProvider<Event>('canplay');
@@ -13774,7 +13638,8 @@
 
   static const EventStreamProvider<MediaKeyEvent> needKeyEvent = const EventStreamProvider<MediaKeyEvent>('webkitneedkey');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MediaElementEvents get on =>
     new MediaElementEvents(this);
 
@@ -13796,124 +13661,124 @@
 
   static const int NETWORK_NO_SOURCE = 3;
 
-  /// @domName HTMLMediaElement.autoplay; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.autoplay')
   bool autoplay;
 
-  /// @domName HTMLMediaElement.buffered; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.buffered')
   final TimeRanges buffered;
 
-  /// @domName HTMLMediaElement.controller; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.controller')
   MediaController controller;
 
-  /// @domName HTMLMediaElement.controls; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.controls')
   bool controls;
 
-  /// @domName HTMLMediaElement.currentSrc; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.currentSrc')
   final String currentSrc;
 
-  /// @domName HTMLMediaElement.currentTime; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.currentTime')
   num currentTime;
 
-  /// @domName HTMLMediaElement.defaultMuted; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.defaultMuted')
   bool defaultMuted;
 
-  /// @domName HTMLMediaElement.defaultPlaybackRate; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.defaultPlaybackRate')
   num defaultPlaybackRate;
 
-  /// @domName HTMLMediaElement.duration; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.duration')
   final num duration;
 
-  /// @domName HTMLMediaElement.ended; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.ended')
   final bool ended;
 
-  /// @domName HTMLMediaElement.error; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.error')
   final MediaError error;
 
-  /// @domName HTMLMediaElement.initialTime; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.initialTime')
   final num initialTime;
 
-  /// @domName HTMLMediaElement.loop; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.loop')
   bool loop;
 
-  /// @domName HTMLMediaElement.mediaGroup; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.mediaGroup')
   String mediaGroup;
 
-  /// @domName HTMLMediaElement.muted; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.muted')
   bool muted;
 
-  /// @domName HTMLMediaElement.networkState; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.networkState')
   final int networkState;
 
-  /// @domName HTMLMediaElement.paused; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.paused')
   final bool paused;
 
-  /// @domName HTMLMediaElement.playbackRate; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.playbackRate')
   num playbackRate;
 
-  /// @domName HTMLMediaElement.played; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.played')
   final TimeRanges played;
 
-  /// @domName HTMLMediaElement.preload; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.preload')
   String preload;
 
-  /// @domName HTMLMediaElement.readyState; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.readyState')
   final int readyState;
 
-  /// @domName HTMLMediaElement.seekable; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.seekable')
   final TimeRanges seekable;
 
-  /// @domName HTMLMediaElement.seeking; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.seeking')
   final bool seeking;
 
-  /// @domName HTMLMediaElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.src')
   String src;
 
-  /// @domName HTMLMediaElement.startTime; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.startTime')
   final num startTime;
 
-  /// @domName HTMLMediaElement.textTracks; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.textTracks')
   final TextTrackList textTracks;
 
-  /// @domName HTMLMediaElement.volume; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.volume')
   num volume;
 
-  /// @domName HTMLMediaElement.webkitAudioDecodedByteCount; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitAudioDecodedByteCount')
   final int webkitAudioDecodedByteCount;
 
-  /// @domName HTMLMediaElement.webkitClosedCaptionsVisible; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitClosedCaptionsVisible')
   bool webkitClosedCaptionsVisible;
 
-  /// @domName HTMLMediaElement.webkitHasClosedCaptions; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitHasClosedCaptions')
   final bool webkitHasClosedCaptions;
 
-  /// @domName HTMLMediaElement.webkitPreservesPitch; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitPreservesPitch')
   bool webkitPreservesPitch;
 
-  /// @domName HTMLMediaElement.webkitVideoDecodedByteCount; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitVideoDecodedByteCount')
   final int webkitVideoDecodedByteCount;
 
-  /// @domName HTMLMediaElement.addTextTrack; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.addTextTrack')
   TextTrack addTextTrack(String kind, [String label, String language]) native;
 
-  /// @domName HTMLMediaElement.canPlayType; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.canPlayType')
   String canPlayType(String type, String keySystem) native;
 
-  /// @domName HTMLMediaElement.load; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.load')
   void load() native;
 
-  /// @domName HTMLMediaElement.pause; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.pause')
   void pause() native;
 
-  /// @domName HTMLMediaElement.play; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.play')
   void play() native;
 
-  /// @domName HTMLMediaElement.webkitAddKey; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitAddKey')
   void webkitAddKey(String keySystem, Uint8Array key, [Uint8Array initData, String sessionId]) native;
 
-  /// @domName HTMLMediaElement.webkitCancelKeyRequest; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitCancelKeyRequest')
   void webkitCancelKeyRequest(String keySystem, String sessionId) native;
 
-  /// @domName HTMLMediaElement.webkitGenerateKeyRequest; @docsEditable true
+  @DocsEditable @DomName('HTMLMediaElement.webkitGenerateKeyRequest')
   void webkitGenerateKeyRequest(String keySystem, [Uint8Array initData]) native;
 
   Stream<Event> get onCanPlay => canPlayEvent.forTarget(this);
@@ -13967,84 +13832,84 @@
   Stream<MediaKeyEvent> get onNeedKey => needKeyEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class MediaElementEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   MediaElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlay => this['canplay'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlayThrough => this['canplaythrough'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get durationChange => this['durationchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get emptied => this['emptied'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get ended => this['ended'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedData => this['loadeddata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedMetadata => this['loadedmetadata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pause => this['pause'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get play => this['play'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get playing => this['playing'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get rateChange => this['ratechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeked => this['seeked'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeking => this['seeking'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get show => this['show'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get stalled => this['stalled'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get suspend => this['suspend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get timeUpdate => this['timeupdate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get volumeChange => this['volumechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get waiting => this['waiting'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyAdded => this['webkitkeyadded'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyError => this['webkitkeyerror'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyMessage => this['webkitkeymessage'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get needKey => this['webkitneedkey'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14052,7 +13917,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaError; @docsEditable true
+
+@DocsEditable
+@DomName('MediaError')
 class MediaError native "*MediaError" {
 
   static const int MEDIA_ERR_ABORTED = 1;
@@ -14065,7 +13932,7 @@
 
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
-  /// @domName MediaError.code; @docsEditable true
+  @DocsEditable @DomName('MediaError.code')
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14073,7 +13940,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaKeyError; @docsEditable true
+
+@DocsEditable
+@DomName('MediaKeyError')
 class MediaKeyError native "*MediaKeyError" {
 
   static const int MEDIA_KEYERR_CLIENT = 2;
@@ -14088,7 +13957,7 @@
 
   static const int MEDIA_KEYERR_UNKNOWN = 1;
 
-  /// @domName MediaKeyError.code; @docsEditable true
+  @DocsEditable @DomName('MediaKeyError.code')
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14096,29 +13965,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaKeyEvent; @docsEditable true
+
+@DocsEditable
+@DomName('MediaKeyEvent')
 class MediaKeyEvent extends Event native "*MediaKeyEvent" {
 
-  /// @domName MediaKeyEvent.defaultURL; @docsEditable true
   @JSName('defaultURL')
+  @DocsEditable @DomName('MediaKeyEvent.defaultURL')
   final String defaultUrl;
 
-  /// @domName MediaKeyEvent.errorCode; @docsEditable true
+  @DocsEditable @DomName('MediaKeyEvent.errorCode')
   final MediaKeyError errorCode;
 
-  /// @domName MediaKeyEvent.initData; @docsEditable true
+  @DocsEditable @DomName('MediaKeyEvent.initData')
   final Uint8Array initData;
 
-  /// @domName MediaKeyEvent.keySystem; @docsEditable true
+  @DocsEditable @DomName('MediaKeyEvent.keySystem')
   final String keySystem;
 
-  /// @domName MediaKeyEvent.message; @docsEditable true
+  @DocsEditable @DomName('MediaKeyEvent.message')
   final Uint8Array message;
 
-  /// @domName MediaKeyEvent.sessionId; @docsEditable true
+  @DocsEditable @DomName('MediaKeyEvent.sessionId')
   final String sessionId;
 
-  /// @domName MediaKeyEvent.systemCode; @docsEditable true
+  @DocsEditable @DomName('MediaKeyEvent.systemCode')
   final int systemCode;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14126,22 +13997,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaList; @docsEditable true
+
+@DocsEditable
+@DomName('MediaList')
 class MediaList native "*MediaList" {
 
-  /// @domName MediaList.length; @docsEditable true
+  @DocsEditable @DomName('MediaList.length')
   final int length;
 
-  /// @domName MediaList.mediaText; @docsEditable true
+  @DocsEditable @DomName('MediaList.mediaText')
   String mediaText;
 
-  /// @domName MediaList.appendMedium; @docsEditable true
+  @DocsEditable @DomName('MediaList.appendMedium')
   void appendMedium(String newMedium) native;
 
-  /// @domName MediaList.deleteMedium; @docsEditable true
+  @DocsEditable @DomName('MediaList.deleteMedium')
   void deleteMedium(String oldMedium) native;
 
-  /// @domName MediaList.item; @docsEditable true
+  @DocsEditable @DomName('MediaList.item')
   String item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14149,19 +14022,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaQueryList; @docsEditable true
+
+@DocsEditable
+@DomName('MediaQueryList')
 class MediaQueryList native "*MediaQueryList" {
 
-  /// @domName MediaQueryList.matches; @docsEditable true
+  @DocsEditable @DomName('MediaQueryList.matches')
   final bool matches;
 
-  /// @domName MediaQueryList.media; @docsEditable true
+  @DocsEditable @DomName('MediaQueryList.media')
   final String media;
 
-  /// @domName MediaQueryList.addListener; @docsEditable true
+  @DocsEditable @DomName('MediaQueryList.addListener')
   void addListener(MediaQueryListListener listener) native;
 
-  /// @domName MediaQueryList.removeListener; @docsEditable true
+  @DocsEditable @DomName('MediaQueryList.removeListener')
   void removeListener(MediaQueryListListener listener) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14169,10 +14044,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaQueryListListener
+@DocsEditable
+@DomName('MediaQueryListListener')
 abstract class MediaQueryListListener {
 
-  /// @domName MediaQueryListListener.queryChanged; @docsEditable true
   void queryChanged(MediaQueryList list);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14180,112 +14055,149 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaSource; @docsEditable true
+
+@DocsEditable
+@DomName('MediaSource')
 class MediaSource extends EventTarget native "*MediaSource" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MediaSource() => MediaSource._create();
   static MediaSource _create() => JS('MediaSource', 'new MediaSource()');
 
-  /// @domName MediaSource.activeSourceBuffers; @docsEditable true
+  @DocsEditable @DomName('MediaSource.activeSourceBuffers')
   final SourceBufferList activeSourceBuffers;
 
-  /// @domName MediaSource.duration; @docsEditable true
+  @DocsEditable @DomName('MediaSource.duration')
   num duration;
 
-  /// @domName MediaSource.readyState; @docsEditable true
+  @DocsEditable @DomName('MediaSource.readyState')
   final String readyState;
 
-  /// @domName MediaSource.sourceBuffers; @docsEditable true
+  @DocsEditable @DomName('MediaSource.sourceBuffers')
   final SourceBufferList sourceBuffers;
 
-  /// @domName MediaSource.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('MediaSource.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MediaSource.addSourceBuffer; @docsEditable true
+  @DocsEditable @DomName('MediaSource.addSourceBuffer')
   SourceBuffer addSourceBuffer(String type) native;
 
-  /// @domName MediaSource.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('MediaSource.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName MediaSource.endOfStream; @docsEditable true
+  @DocsEditable @DomName('MediaSource.endOfStream')
   void endOfStream(String error) native;
 
-  /// @domName MediaSource.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('MediaSource.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MediaSource.removeSourceBuffer; @docsEditable true
+  @DocsEditable @DomName('MediaSource.removeSourceBuffer')
   void removeSourceBuffer(SourceBuffer buffer) native;
 }
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
 
 /// @domName MediaStream; @docsEditable true
+@DocsEditable
+@DomName('MediaStream')
 class MediaStream extends EventTarget native "*MediaStream" {
 
   static const EventStreamProvider<Event> endedEvent = const EventStreamProvider<Event>('ended');
 
-  ///@docsEditable true
-  factory MediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => MediaStream._create(audioTracks, videoTracks);
-  static MediaStream _create(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => JS('MediaStream', 'new MediaStream(#,#)', audioTracks, videoTracks);
+  @DocsEditable
+  factory MediaStream() => MediaStream._create();
+  static MediaStream _create() => JS('MediaStream', 'new MediaStream()');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MediaStreamEvents get on =>
     new MediaStreamEvents(this);
 
-  static const int ENDED = 2;
+  @DocsEditable @DomName('MediaStream.ended')
+  final bool ended;
 
-  static const int LIVE = 1;
+  @DocsEditable @DomName('MediaStream.id')
+  final String id;
 
-  /// @domName MediaStream.audioTracks; @docsEditable true
-  final MediaStreamTrackList audioTracks;
-
-  /// @domName MediaStream.label; @docsEditable true
+  @DocsEditable @DomName('MediaStream.label')
   final String label;
 
-  /// @domName MediaStream.readyState; @docsEditable true
-  final int readyState;
-
-  /// @domName MediaStream.videoTracks; @docsEditable true
-  final MediaStreamTrackList videoTracks;
-
-  /// @domName MediaStream.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('MediaStream.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MediaStream.dispatchEvent; @docsEditable true
+  @DocsEditable @DomName('MediaStream.addTrack')
+  void addTrack(MediaStreamTrack track) native;
+
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('MediaStream.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName MediaStream.removeEventListener; @docsEditable true
+  @DocsEditable @DomName('MediaStream.getAudioTracks')
+  List<MediaStreamTrack> getAudioTracks() native;
+
+  @DocsEditable @DomName('MediaStream.getTrackById')
+  MediaStreamTrack getTrackById(String trackId) native;
+
+  @DocsEditable @DomName('MediaStream.getVideoTracks')
+  List<MediaStreamTrack> getVideoTracks() native;
+
   @JSName('removeEventListener')
+  @DocsEditable @DomName('MediaStream.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
+  @DocsEditable @DomName('MediaStream.removeTrack')
+  void removeTrack(MediaStreamTrack track) native;
+
   Stream<Event> get onEnded => endedEvent.forTarget(this);
+
+
+  /**
+   * Checks if the MediaStream APIs are supported on the current platform.
+   *
+   * See also:
+   *
+   * * [Navigator.getUserMedia]
+   */
+  static bool get supported =>
+    JS('bool', '''!!(#.getUserMedia || #.webkitGetUserMedia ||
+        #.mozGetUserMedia || #.msGetUserMedia)''',
+        window.navigator,
+        window.navigator,
+        window.navigator,
+        window.navigator);
 }
 
-/// @docsEditable true
+@DocsEditable
 class MediaStreamEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   MediaStreamEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
+  EventListenerList get addTrack => this['addtrack'];
+
+  @DocsEditable
   EventListenerList get ended => this['ended'];
+
+  @DocsEditable
+  EventListenerList get removeTrack => this['removetrack'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamEvent; @docsEditable true
+
+@DocsEditable
+@DomName('MediaStreamEvent')
 class MediaStreamEvent extends Event native "*MediaStreamEvent" {
 
-  /// @domName MediaStreamEvent.stream; @docsEditable true
+  @DocsEditable @DomName('MediaStreamEvent.stream')
   final MediaStream stream;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14293,7 +14205,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamTrack; @docsEditable true
+
+@DocsEditable
+@DomName('MediaStreamTrack')
 class MediaStreamTrack extends EventTarget native "*MediaStreamTrack" {
 
   static const EventStreamProvider<Event> endedEvent = const EventStreamProvider<Event>('ended');
@@ -14302,7 +14216,8 @@
 
   static const EventStreamProvider<Event> unmuteEvent = const EventStreamProvider<Event>('unmute');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MediaStreamTrackEvents get on =>
     new MediaStreamTrackEvents(this);
 
@@ -14312,28 +14227,31 @@
 
   static const int MUTED = 1;
 
-  /// @domName MediaStreamTrack.enabled; @docsEditable true
+  @DocsEditable @DomName('MediaStreamTrack.enabled')
   bool enabled;
 
-  /// @domName MediaStreamTrack.kind; @docsEditable true
+  @DocsEditable @DomName('MediaStreamTrack.id')
+  final String id;
+
+  @DocsEditable @DomName('MediaStreamTrack.kind')
   final String kind;
 
-  /// @domName MediaStreamTrack.label; @docsEditable true
+  @DocsEditable @DomName('MediaStreamTrack.label')
   final String label;
 
-  /// @domName MediaStreamTrack.readyState; @docsEditable true
+  @DocsEditable @DomName('MediaStreamTrack.readyState')
   final int readyState;
 
-  /// @domName MediaStreamTrack.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('MediaStreamTrack.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MediaStreamTrack.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('MediaStreamTrack.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName MediaStreamTrack.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('MediaStreamTrack.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onEnded => endedEvent.forTarget(this);
@@ -14343,18 +14261,18 @@
   Stream<Event> get onUnmute => unmuteEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class MediaStreamTrackEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   MediaStreamTrackEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get ended => this['ended'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mute => this['mute'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unmute => this['unmute'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14362,10 +14280,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamTrackEvent; @docsEditable true
+
+@DocsEditable
+@DomName('MediaStreamTrackEvent')
 class MediaStreamTrackEvent extends Event native "*MediaStreamTrackEvent" {
 
-  /// @domName MediaStreamTrackEvent.track; @docsEditable true
+  @DocsEditable @DomName('MediaStreamTrackEvent.track')
   final MediaStreamTrack track;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14373,72 +14293,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamTrackList; @docsEditable true
-class MediaStreamTrackList extends EventTarget native "*MediaStreamTrackList" {
 
-  static const EventStreamProvider<MediaStreamTrackEvent> addTrackEvent = const EventStreamProvider<MediaStreamTrackEvent>('addtrack');
-
-  static const EventStreamProvider<MediaStreamTrackEvent> removeTrackEvent = const EventStreamProvider<MediaStreamTrackEvent>('removetrack');
-
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
-  MediaStreamTrackListEvents get on =>
-    new MediaStreamTrackListEvents(this);
-
-  /// @domName MediaStreamTrackList.length; @docsEditable true
-  final int length;
-
-  /// @domName MediaStreamTrackList.add; @docsEditable true
-  void add(MediaStreamTrack track) native;
-
-  /// @domName MediaStreamTrackList.addEventListener; @docsEditable true
-  @JSName('addEventListener')
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
-
-  /// @domName MediaStreamTrackList.dispatchEvent; @docsEditable true
-  @JSName('dispatchEvent')
-  bool $dom_dispatchEvent(Event event) native;
-
-  /// @domName MediaStreamTrackList.item; @docsEditable true
-  MediaStreamTrack item(int index) native;
-
-  /// @domName MediaStreamTrackList.remove; @docsEditable true
-  void remove(MediaStreamTrack track) native;
-
-  /// @domName MediaStreamTrackList.removeEventListener; @docsEditable true
-  @JSName('removeEventListener')
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
-
-  Stream<MediaStreamTrackEvent> get onAddTrack => addTrackEvent.forTarget(this);
-
-  Stream<MediaStreamTrackEvent> get onRemoveTrack => removeTrackEvent.forTarget(this);
-}
-
-/// @docsEditable true
-class MediaStreamTrackListEvents extends Events {
-  /// @docsEditable true
-  MediaStreamTrackListEvents(EventTarget _ptr) : super(_ptr);
-
-  /// @docsEditable true
-  EventListenerList get addTrack => this['addtrack'];
-
-  /// @docsEditable true
-  EventListenerList get removeTrack => this['removetrack'];
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-/// @domName MemoryInfo; @docsEditable true
+@DocsEditable
+@DomName('MemoryInfo')
 class MemoryInfo native "*MemoryInfo" {
 
-  /// @domName MemoryInfo.jsHeapSizeLimit; @docsEditable true
+  @DocsEditable @DomName('MemoryInfo.jsHeapSizeLimit')
   final int jsHeapSizeLimit;
 
-  /// @domName MemoryInfo.totalJSHeapSize; @docsEditable true
+  @DocsEditable @DomName('MemoryInfo.totalJSHeapSize')
   final int totalJSHeapSize;
 
-  /// @domName MemoryInfo.usedJSHeapSize; @docsEditable true
+  @DocsEditable @DomName('MemoryInfo.usedJSHeapSize')
   final int usedJSHeapSize;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14446,20 +14312,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/**
- * An HTML <menu> element.
- *
- * A <menu> element represents an unordered list of menu commands.
- *
- * See also:
- *
- *  * [Menu Element](https://developer.mozilla.org/en-US/docs/HTML/Element/menu) from MDN.
- *  * [Menu Element](http://www.w3.org/TR/html5/the-menu-element.html#the-menu-element) from the W3C.
- */
-/// @domName HTMLMenuElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLMenuElement')
 class MenuElement extends Element native "*HTMLMenuElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MenuElement() => document.$dom_createElement("menu");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14467,17 +14325,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MessageChannel; @docsEditable true
+
+@DocsEditable
+@DomName('MessageChannel')
 class MessageChannel native "*MessageChannel" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MessageChannel() => MessageChannel._create();
   static MessageChannel _create() => JS('MessageChannel', 'new MessageChannel()');
 
-  /// @domName MessageChannel.port1; @docsEditable true
+  @DocsEditable @DomName('MessageChannel.port1')
   final MessagePort port1;
 
-  /// @domName MessageChannel.port2; @docsEditable true
+  @DocsEditable @DomName('MessageChannel.port2')
   final MessagePort port2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14485,35 +14345,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MessageEvent; @docsEditable true
+
+@DocsEditable
+@DomName('MessageEvent')
 class MessageEvent extends Event native "*MessageEvent" {
 
-  /// @domName MessageEvent.data; @docsEditable true
   dynamic get data => convertNativeToDart_SerializedScriptValue(this._data);
   @JSName('data')
-  @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
+  @DocsEditable @DomName('MessageEvent.data') @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
   final dynamic _data;
 
-  /// @domName MessageEvent.lastEventId; @docsEditable true
+  @DocsEditable @DomName('MessageEvent.lastEventId')
   final String lastEventId;
 
-  /// @domName MessageEvent.origin; @docsEditable true
+  @DocsEditable @DomName('MessageEvent.origin')
   final String origin;
 
-  /// @domName MessageEvent.ports; @docsEditable true
-  @Creates('=List')
+  @DocsEditable @DomName('MessageEvent.ports') @Creates('=List')
   final List ports;
 
-  /// @domName MessageEvent.source; @docsEditable true
   WindowBase get source => _convertNativeToDart_Window(this._source);
   @JSName('source')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('MessageEvent.source') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _source;
 
-  /// @domName MessageEvent.initMessageEvent; @docsEditable true
+  @DocsEditable @DomName('MessageEvent.initMessageEvent')
   void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List messagePorts) native;
 
-  /// @domName MessageEvent.webkitInitMessageEvent; @docsEditable true
+  @DocsEditable @DomName('MessageEvent.webkitInitMessageEvent')
   void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List transferables) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14521,27 +14380,29 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MessagePort; @docsEditable true
+
+@DocsEditable
+@DomName('MessagePort')
 class MessagePort extends EventTarget native "*MessagePort" {
 
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MessagePortEvents get on =>
     new MessagePortEvents(this);
 
-  /// @domName MessagePort.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('MessagePort.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MessagePort.close; @docsEditable true
+  @DocsEditable @DomName('MessagePort.close')
   void close() native;
 
-  /// @domName MessagePort.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('MessagePort.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName MessagePort.postMessage; @docsEditable true
   void postMessage(/*any*/ message, [List messagePorts]) {
     if (?messagePorts) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
@@ -14553,26 +14414,28 @@
     return;
   }
   @JSName('postMessage')
+  @DocsEditable @DomName('MessagePort.postMessage')
   void _postMessage_1(message, List messagePorts) native;
   @JSName('postMessage')
+  @DocsEditable @DomName('MessagePort.postMessage')
   void _postMessage_2(message) native;
 
-  /// @domName MessagePort.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('MessagePort.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName MessagePort.start; @docsEditable true
+  @DocsEditable @DomName('MessagePort.start')
   void start() native;
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class MessagePortEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   MessagePortEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14580,16 +14443,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMetaElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLMetaElement')
 class MetaElement extends Element native "*HTMLMetaElement" {
 
-  /// @domName HTMLMetaElement.content; @docsEditable true
+  @DocsEditable @DomName('HTMLMetaElement.content')
   String content;
 
-  /// @domName HTMLMetaElement.httpEquiv; @docsEditable true
+  @DocsEditable @DomName('HTMLMetaElement.httpEquiv')
   String httpEquiv;
 
-  /// @domName HTMLMetaElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLMetaElement.name')
   String name;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14597,13 +14462,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Metadata; @docsEditable true
+
+@DocsEditable
+@DomName('Metadata')
 class Metadata native "*Metadata" {
 
-  /// @domName Metadata.modificationTime; @docsEditable true
+  @DocsEditable @DomName('Metadata.modificationTime')
   final Date modificationTime;
 
-  /// @domName Metadata.size; @docsEditable true
+  @DocsEditable @DomName('Metadata.size')
   final int size;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14619,38 +14486,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMeterElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLMeterElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class MeterElement extends Element native "*HTMLMeterElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MeterElement() => document.$dom_createElement("meter");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('meter');
 
-  /// @domName HTMLMeterElement.high; @docsEditable true
+  @DocsEditable @DomName('HTMLMeterElement.high')
   num high;
 
-  /// @domName HTMLMeterElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLMeterElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLMeterElement.low; @docsEditable true
+  @DocsEditable @DomName('HTMLMeterElement.low')
   num low;
 
-  /// @domName HTMLMeterElement.max; @docsEditable true
+  @DocsEditable @DomName('HTMLMeterElement.max')
   num max;
 
-  /// @domName HTMLMeterElement.min; @docsEditable true
+  @DocsEditable @DomName('HTMLMeterElement.min')
   num min;
 
-  /// @domName HTMLMeterElement.optimum; @docsEditable true
+  @DocsEditable @DomName('HTMLMeterElement.optimum')
   num optimum;
 
-  /// @domName HTMLMeterElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLMeterElement.value')
   num value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14658,13 +14527,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLModElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLModElement')
 class ModElement extends Element native "*HTMLModElement" {
 
-  /// @domName HTMLModElement.cite; @docsEditable true
+  @DocsEditable @DomName('HTMLModElement.cite')
   String cite;
 
-  /// @domName HTMLModElement.dateTime; @docsEditable true
+  @DocsEditable @DomName('HTMLModElement.dateTime')
   String dateTime;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14672,7 +14543,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MouseEvent
+@DocsEditable
+@DomName('MouseEvent')
 class MouseEvent extends UIEvent native "*MouseEvent" {
   factory MouseEvent(String type, Window view, int detail, int screenX,
       int screenY, int clientX, int clientY, int button, [bool canBubble = true,
@@ -14685,67 +14557,66 @@
           ctrlKey, altKey, shiftKey, metaKey,
           relatedTarget);
 
-  /// @domName MouseEvent.altKey; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.altKey')
   final bool altKey;
 
-  /// @domName MouseEvent.button; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.button')
   final int button;
 
-  /// @domName MouseEvent.clientX; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.clientX')
   final int clientX;
 
-  /// @domName MouseEvent.clientY; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.clientY')
   final int clientY;
 
-  /// @domName MouseEvent.ctrlKey; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.ctrlKey')
   final bool ctrlKey;
 
-  /// @domName MouseEvent.dataTransfer; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.dataTransfer')
   final Clipboard dataTransfer;
 
-  /// @domName MouseEvent.fromElement; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.fromElement')
   final Node fromElement;
 
-  /// @domName MouseEvent.metaKey; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.metaKey')
   final bool metaKey;
 
-  /// @domName MouseEvent.relatedTarget; @docsEditable true
   EventTarget get relatedTarget => _convertNativeToDart_EventTarget(this._relatedTarget);
   @JSName('relatedTarget')
-  @Creates('Node') @Returns('EventTarget|=Object')
+  @DocsEditable @DomName('MouseEvent.relatedTarget') @Creates('Node') @Returns('EventTarget|=Object')
   final dynamic _relatedTarget;
 
-  /// @domName MouseEvent.screenX; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.screenX')
   final int screenX;
 
-  /// @domName MouseEvent.screenY; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.screenY')
   final int screenY;
 
-  /// @domName MouseEvent.shiftKey; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.shiftKey')
   final bool shiftKey;
 
-  /// @domName MouseEvent.toElement; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.toElement')
   final Node toElement;
 
-  /// @domName MouseEvent.webkitMovementX; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.webkitMovementX')
   final int webkitMovementX;
 
-  /// @domName MouseEvent.webkitMovementY; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.webkitMovementY')
   final int webkitMovementY;
 
-  /// @domName MouseEvent.x; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.x')
   final int x;
 
-  /// @domName MouseEvent.y; @docsEditable true
+  @DocsEditable @DomName('MouseEvent.y')
   final int y;
 
-  /// @domName MouseEvent.initMouseEvent; @docsEditable true
   void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) {
     var relatedTarget_1 = _convertDartToNative_EventTarget(relatedTarget);
     _$dom_initMouseEvent_1(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
     return;
   }
   @JSName('initMouseEvent')
+  @DocsEditable @DomName('MouseEvent.initMouseEvent')
   void _$dom_initMouseEvent_1(type, canBubble, cancelable, Window view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) native;
 
 
@@ -14790,7 +14661,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MutationEvent; @docsEditable true
+
+@DocsEditable
+@DomName('MutationEvent')
 class MutationEvent extends Event native "*MutationEvent" {
 
   static const int ADDITION = 2;
@@ -14799,22 +14672,22 @@
 
   static const int REMOVAL = 3;
 
-  /// @domName MutationEvent.attrChange; @docsEditable true
+  @DocsEditable @DomName('MutationEvent.attrChange')
   final int attrChange;
 
-  /// @domName MutationEvent.attrName; @docsEditable true
+  @DocsEditable @DomName('MutationEvent.attrName')
   final String attrName;
 
-  /// @domName MutationEvent.newValue; @docsEditable true
+  @DocsEditable @DomName('MutationEvent.newValue')
   final String newValue;
 
-  /// @domName MutationEvent.prevValue; @docsEditable true
+  @DocsEditable @DomName('MutationEvent.prevValue')
   final String prevValue;
 
-  /// @domName MutationEvent.relatedNode; @docsEditable true
+  @DocsEditable @DomName('MutationEvent.relatedNode')
   final Node relatedNode;
 
-  /// @domName MutationEvent.initMutationEvent; @docsEditable true
+  @DocsEditable @DomName('MutationEvent.initMutationEvent')
   void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14822,29 +14695,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MutationObserver
+@DocsEditable
+@DomName('MutationObserver')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 class MutationObserver native "*MutationObserver" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MutationObserver(MutationCallback callback) => MutationObserver._create(callback);
 
-  /// @domName MutationObserver.disconnect; @docsEditable true
+  @DocsEditable @DomName('MutationObserver.disconnect')
   void disconnect() native;
 
-  /// @domName MutationObserver._observe; @docsEditable true
   void _observe(Node target, Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     __observe_1(target, options_1);
     return;
   }
   @JSName('observe')
+  @DocsEditable @DomName('MutationObserver.observe')
   void __observe_1(Node target, options) native;
 
-  /// @domName MutationObserver.takeRecords; @docsEditable true
+  @DocsEditable @DomName('MutationObserver.takeRecords')
   List<MutationRecord> takeRecords() native;
 
   /**
@@ -14933,36 +14807,38 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MutationRecord; @docsEditable true
+
+@DocsEditable
+@DomName('MutationRecord')
 class MutationRecord native "*MutationRecord" {
 
-  /// @domName MutationRecord.addedNodes; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.addedNodes')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> addedNodes;
 
-  /// @domName MutationRecord.attributeName; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.attributeName')
   final String attributeName;
 
-  /// @domName MutationRecord.attributeNamespace; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.attributeNamespace')
   final String attributeNamespace;
 
-  /// @domName MutationRecord.nextSibling; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.nextSibling')
   final Node nextSibling;
 
-  /// @domName MutationRecord.oldValue; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.oldValue')
   final String oldValue;
 
-  /// @domName MutationRecord.previousSibling; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.previousSibling')
   final Node previousSibling;
 
-  /// @domName MutationRecord.removedNodes; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.removedNodes')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> removedNodes;
 
-  /// @domName MutationRecord.target; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.target')
   final Node target;
 
-  /// @domName MutationRecord.type; @docsEditable true
+  @DocsEditable @DomName('MutationRecord.type')
   final String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14970,10 +14846,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NamedNodeMap; @docsEditable true
+
+@DocsEditable
+@DomName('NamedNodeMap')
 class NamedNodeMap implements JavaScriptIndexingBehavior, List<Node> native "*NamedNodeMap" {
 
-  /// @domName NamedNodeMap.length; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.length')
   int get length => JS("int", "#.length", this);
 
   Node operator[](int index) => JS("Node", "#[#]", this, index);
@@ -14994,50 +14872,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -15095,16 +14973,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -15124,25 +15022,25 @@
 
   // -- end List<Node> mixins.
 
-  /// @domName NamedNodeMap.getNamedItem; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.getNamedItem')
   Node getNamedItem(String name) native;
 
-  /// @domName NamedNodeMap.getNamedItemNS; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.getNamedItemNS')
   Node getNamedItemNS(String namespaceURI, String localName) native;
 
-  /// @domName NamedNodeMap.item; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.item')
   Node item(int index) native;
 
-  /// @domName NamedNodeMap.removeNamedItem; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.removeNamedItem')
   Node removeNamedItem(String name) native;
 
-  /// @domName NamedNodeMap.removeNamedItemNS; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.removeNamedItemNS')
   Node removeNamedItemNS(String namespaceURI, String localName) native;
 
-  /// @domName NamedNodeMap.setNamedItem; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.setNamedItem')
   Node setNamedItem(Node node) native;
 
-  /// @domName NamedNodeMap.setNamedItemNS; @docsEditable true
+  @DocsEditable @DomName('NamedNodeMap.setNamedItemNS')
   Node setNamedItemNS(Node node) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15150,96 +15048,135 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Navigator; @docsEditable true
+@DocsEditable
+@DomName('Navigator')
 class Navigator native "*Navigator" {
 
-  /// @domName Navigator.language; @docsEditable true
+  @DomName('Navigator.language')
   String get language => JS('String', '#.language || #.userLanguage', this,
       this);
 
-  /// @domName Navigator.appCodeName; @docsEditable true
+  /**
+   * Gets a stream (video and or audio) from the local computer.
+   *
+   * Use [MediaStream.supported] to check if this is supported by the current
+   * platform.
+   *
+   * Example use:
+   *
+   *     window.navigator.getUserMedia(audio:true, video: true).then((stream) {
+   *       var video = new VideoElement()
+   *         ..autoplay = true
+   *         ..src = Url.createObjectUrl(stream);
+   *       document.body.append(video);
+   *     });
+   *
+   * See also:
+   * * [MediaStream.supported]
+   */
+  @DomName('Navigator.webkitGetUserMedia')
+  @SupportedBrowser(SupportedBrowser.CHROME)
+  @Experimental()
+  Future<LocalMediaStream> getUserMedia({bool audio: false,
+      bool video: false}) {
+    var completer = new Completer<LocalMediaStream>();
+    var options = {
+      'audio': audio,
+      'video': video
+    };
+    _ensureGetUserMedia();
+    this._getUserMedia(convertDartToNative_Dictionary(options),
+      (stream) {
+        completer.complete(stream);
+      },
+      (error) {
+        completer.completeError(error);
+      });
+    return completer.future;
+  }
+
+  _ensureGetUserMedia() {
+    if (JS('bool', '!(#.getUserMedia)', this)) {
+      JS('void', '#.getUserMedia = '
+          '(#.getUserMedia || #.webkitGetUserMedia || #.mozGetUserMedia ||'
+          '#.msGetUserMedia)', this, this, this, this, this);
+    }
+  }
+
+  @JSName('getUserMedia')
+  void _getUserMedia(options, _NavigatorUserMediaSuccessCallback success,
+      _NavigatorUserMediaErrorCallback error) native;
+
+
+  @DocsEditable @DomName('Navigator.appCodeName')
   final String appCodeName;
 
-  /// @domName Navigator.appName; @docsEditable true
+  @DocsEditable @DomName('Navigator.appName')
   final String appName;
 
-  /// @domName Navigator.appVersion; @docsEditable true
+  @DocsEditable @DomName('Navigator.appVersion')
   final String appVersion;
 
-  /// @domName Navigator.cookieEnabled; @docsEditable true
+  @DocsEditable @DomName('Navigator.cookieEnabled')
   final bool cookieEnabled;
 
-  /// @domName Navigator.geolocation; @docsEditable true
+  @DocsEditable @DomName('Navigator.geolocation')
   final Geolocation geolocation;
 
-  /// @domName Navigator.mimeTypes; @docsEditable true
+  @DocsEditable @DomName('Navigator.mimeTypes')
   final DomMimeTypeArray mimeTypes;
 
-  /// @domName Navigator.onLine; @docsEditable true
+  @DocsEditable @DomName('Navigator.onLine')
   final bool onLine;
 
-  /// @domName Navigator.platform; @docsEditable true
+  @DocsEditable @DomName('Navigator.platform')
   final String platform;
 
-  /// @domName Navigator.plugins; @docsEditable true
+  @DocsEditable @DomName('Navigator.plugins')
   final DomPluginArray plugins;
 
-  /// @domName Navigator.product; @docsEditable true
+  @DocsEditable @DomName('Navigator.product')
   final String product;
 
-  /// @domName Navigator.productSub; @docsEditable true
+  @DocsEditable @DomName('Navigator.productSub')
   final String productSub;
 
-  /// @domName Navigator.userAgent; @docsEditable true
+  @DocsEditable @DomName('Navigator.userAgent')
   final String userAgent;
 
-  /// @domName Navigator.vendor; @docsEditable true
+  @DocsEditable @DomName('Navigator.vendor')
   final String vendor;
 
-  /// @domName Navigator.vendorSub; @docsEditable true
+  @DocsEditable @DomName('Navigator.vendorSub')
   final String vendorSub;
 
-  /// @domName Navigator.webkitBattery; @docsEditable true
+  @DocsEditable @DomName('Navigator.webkitBattery')
   final BatteryManager webkitBattery;
 
-  /// @domName Navigator.getStorageUpdates; @docsEditable true
+  @DocsEditable @DomName('Navigator.getStorageUpdates')
   void getStorageUpdates() native;
 
-  /// @domName Navigator.javaEnabled; @docsEditable true
+  @DocsEditable @DomName('Navigator.javaEnabled')
   bool javaEnabled() native;
 
-  /// @domName Navigator.webkitGetGamepads; @docsEditable true
+  @DocsEditable @DomName('Navigator.webkitGetGamepads')
   @Returns('_GamepadList') @Creates('_GamepadList')
   List<Gamepad> webkitGetGamepads() native;
 
-  /// @domName Navigator.webkitGetUserMedia; @docsEditable true
-  void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [NavigatorUserMediaErrorCallback errorCallback]) {
-    if (?errorCallback) {
-      var options_1 = convertDartToNative_Dictionary(options);
-      _webkitGetUserMedia_1(options_1, successCallback, errorCallback);
-      return;
-    }
-    var options_2 = convertDartToNative_Dictionary(options);
-    _webkitGetUserMedia_2(options_2, successCallback);
-    return;
-  }
-  @JSName('webkitGetUserMedia')
-  void _webkitGetUserMedia_1(options, NavigatorUserMediaSuccessCallback successCallback, NavigatorUserMediaErrorCallback errorCallback) native;
-  @JSName('webkitGetUserMedia')
-  void _webkitGetUserMedia_2(options, NavigatorUserMediaSuccessCallback successCallback) native;
-
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NavigatorUserMediaError; @docsEditable true
+
+@DocsEditable
+@DomName('NavigatorUserMediaError')
 class NavigatorUserMediaError native "*NavigatorUserMediaError" {
 
   static const int PERMISSION_DENIED = 1;
 
-  /// @domName NavigatorUserMediaError.code; @docsEditable true
+  @DocsEditable @DomName('NavigatorUserMediaError.code')
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15249,7 +15186,7 @@
 // WARNING: Do not edit - generated code.
 
 
-typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
+typedef void _NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -15257,7 +15194,7 @@
 // WARNING: Do not edit - generated code.
 
 
-typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
+typedef void _NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -15292,11 +15229,11 @@
   }
 
   Node min([int compare(Node a, Node b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Node max([int compare(Node a, Node b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 
   void add(Node value) {
@@ -15330,6 +15267,29 @@
     return result;
   }
 
+  void remove(Object object) {
+    if (object is! Node) return;
+    Node node = object;
+    if (!identical(this, node.parentNode)) return;
+    _this.$dom_removeChild(node);
+  }
+
+  void removeAll(Iterable elements) {
+    IterableMixinWorkaround.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    IterableMixinWorkaround.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(Node node)) {
+    IterableMixinWorkaround.removeMatching(this, test);
+  }
+
+  void retainMatching(bool test(Node node)) {
+    IterableMixinWorkaround.retainMatching(this, test);
+  }
+
   void clear() {
     _this.text = '';
   }
@@ -15342,28 +15302,30 @@
 
   // TODO(jacobr): We can implement these methods much more efficiently by
   // looking up the nodeList only once instead of once per iteration.
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Node element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
-  List mappedBy(f(Node element)) =>
-      new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) {
+    return IterableMixinWorkaround.mappedByList(this, f);
+  }
 
-  Iterable<Node> where(bool f(Node element)) =>
-     new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
@@ -15373,31 +15335,31 @@
   // From List<Node>:
 
   List<Node> take(int n) {
-    return new ListView<Node>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Node> skip(int n) {
-    return new ListView<Node>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -15446,7 +15408,8 @@
   Node operator[](int index) => _this.$dom_childNodes[index];
 }
 
-/// @domName Node
+@DocsEditable
+@DomName('Node')
 class Node extends EventTarget native "*Node" {
   List<Node> get nodes {
     return new _ChildNodeListLazy(this);
@@ -15464,8 +15427,8 @@
 
   /**
    * Removes this node from the DOM.
-   * @domName Node.removeChild
    */
+  @DomName('Node.removeChild')
   void remove() {
     // TODO(jacobr): should we throw an exception if parent is already null?
     // TODO(vsm): Use the native remove when available.
@@ -15477,8 +15440,8 @@
 
   /**
    * Replaces this node with another node.
-   * @domName Node.replaceChild
    */
+  @DomName('Node.replaceChild')
   Node replaceWith(Node otherNode) {
     try {
       final Node parent = this.parentNode;
@@ -15490,128 +15453,95 @@
   }
 
 
-  static const int ATTRIBUTE_NODE = 2;
-
-  static const int CDATA_SECTION_NODE = 4;
-
-  static const int COMMENT_NODE = 8;
-
-  static const int DOCUMENT_FRAGMENT_NODE = 11;
-
-  static const int DOCUMENT_NODE = 9;
-
-  static const int DOCUMENT_POSITION_CONTAINED_BY = 0x10;
-
-  static const int DOCUMENT_POSITION_CONTAINS = 0x08;
-
-  static const int DOCUMENT_POSITION_DISCONNECTED = 0x01;
-
-  static const int DOCUMENT_POSITION_FOLLOWING = 0x04;
-
-  static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
-
-  static const int DOCUMENT_POSITION_PRECEDING = 0x02;
-
-  static const int DOCUMENT_TYPE_NODE = 10;
-
-  static const int ELEMENT_NODE = 1;
-
-  static const int ENTITY_NODE = 6;
-
-  static const int ENTITY_REFERENCE_NODE = 5;
-
-  static const int NOTATION_NODE = 12;
-
-  static const int PROCESSING_INSTRUCTION_NODE = 7;
-
-  static const int TEXT_NODE = 3;
-
-  /// @domName Node.attributes; @docsEditable true
   @JSName('attributes')
+  @DocsEditable @DomName('Node.attributes')
   final NamedNodeMap $dom_attributes;
 
-  /// @domName Node.childNodes; @docsEditable true
   @JSName('childNodes')
+  @DocsEditable @DomName('Node.childNodes')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> $dom_childNodes;
 
-  /// @domName Node.firstChild; @docsEditable true
   @JSName('firstChild')
+  @DocsEditable @DomName('Node.firstChild')
   final Node $dom_firstChild;
 
-  /// @domName Node.lastChild; @docsEditable true
   @JSName('lastChild')
+  @DocsEditable @DomName('Node.lastChild')
   final Node $dom_lastChild;
 
-  /// @domName Node.localName; @docsEditable true
   @JSName('localName')
+  @DocsEditable @DomName('Node.localName')
   final String $dom_localName;
 
-  /// @domName Node.namespaceURI; @docsEditable true
   @JSName('namespaceURI')
+  @DocsEditable @DomName('Node.namespaceURI')
   final String $dom_namespaceUri;
 
-  /// @domName Node.nextSibling; @docsEditable true
   @JSName('nextSibling')
+  @DocsEditable @DomName('Node.nextSibling')
   final Node nextNode;
 
-  /// @domName Node.nodeType; @docsEditable true
+  @DocsEditable @DomName('Node.nodeType')
   final int nodeType;
 
-  /// @domName Node.ownerDocument; @docsEditable true
+  @DocsEditable @DomName('Node.nodeValue')
+  final String nodeValue;
+
   @JSName('ownerDocument')
+  @DocsEditable @DomName('Node.ownerDocument')
   final Document document;
 
-  /// @domName Node.parentElement; @docsEditable true
   @JSName('parentElement')
+  @DocsEditable @DomName('Node.parentElement')
   final Element parent;
 
-  /// @domName Node.parentNode; @docsEditable true
+  @DocsEditable @DomName('Node.parentNode')
   final Node parentNode;
 
-  /// @domName Node.previousSibling; @docsEditable true
   @JSName('previousSibling')
+  @DocsEditable @DomName('Node.previousSibling')
   final Node previousNode;
 
-  /// @domName Node.textContent; @docsEditable true
   @JSName('textContent')
+  @DocsEditable @DomName('Node.textContent')
   String text;
 
-  /// @domName Node.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('Node.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName Node.appendChild; @docsEditable true
   @JSName('appendChild')
+  @DocsEditable @DomName('Node.appendChild')
   Node $dom_appendChild(Node newChild) native;
 
-  /// @domName Node.cloneNode; @docsEditable true
   @JSName('cloneNode')
+  @DocsEditable @DomName('Node.cloneNode')
   Node clone(bool deep) native;
 
-  /// @domName Node.contains; @docsEditable true
+  @DocsEditable @DomName('Node.contains')
   bool contains(Node other) native;
 
-  /// @domName Node.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('Node.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName Node.hasChildNodes; @docsEditable true
+  @DocsEditable @DomName('Node.hasChildNodes')
   bool hasChildNodes() native;
 
-  /// @domName Node.insertBefore; @docsEditable true
+  @DocsEditable @DomName('Node.insertBefore')
   Node insertBefore(Node newChild, Node refChild) native;
 
-  /// @domName Node.removeChild; @docsEditable true
   @JSName('removeChild')
+  @DocsEditable @DomName('Node.removeChild')
   Node $dom_removeChild(Node oldChild) native;
 
-  /// @domName Node.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('Node.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName Node.replaceChild; @docsEditable true
   @JSName('replaceChild')
+  @DocsEditable @DomName('Node.replaceChild')
   Node $dom_replaceChild(Node newChild, Node oldChild) native;
 
 }
@@ -15620,7 +15550,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NodeFilter; @docsEditable true
+
+@DocsEditable
+@DomName('NodeFilter')
 class NodeFilter native "*NodeFilter" {
 
   static const int FILTER_ACCEPT = 1;
@@ -15655,7 +15587,7 @@
 
   static const int SHOW_TEXT = 0x00000004;
 
-  /// @domName NodeFilter.acceptNode; @docsEditable true
+  @DocsEditable @DomName('NodeFilter.acceptNode')
   int acceptNode(Node n) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15663,34 +15595,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NodeIterator; @docsEditable true
+
+@DocsEditable
+@DomName('NodeIterator')
 class NodeIterator native "*NodeIterator" {
 
-  /// @domName NodeIterator.expandEntityReferences; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.expandEntityReferences')
   final bool expandEntityReferences;
 
-  /// @domName NodeIterator.filter; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.filter')
   final NodeFilter filter;
 
-  /// @domName NodeIterator.pointerBeforeReferenceNode; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.pointerBeforeReferenceNode')
   final bool pointerBeforeReferenceNode;
 
-  /// @domName NodeIterator.referenceNode; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.referenceNode')
   final Node referenceNode;
 
-  /// @domName NodeIterator.root; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.root')
   final Node root;
 
-  /// @domName NodeIterator.whatToShow; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.whatToShow')
   final int whatToShow;
 
-  /// @domName NodeIterator.detach; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.detach')
   void detach() native;
 
-  /// @domName NodeIterator.nextNode; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.nextNode')
   Node nextNode() native;
 
-  /// @domName NodeIterator.previousNode; @docsEditable true
+  @DocsEditable @DomName('NodeIterator.previousNode')
   Node previousNode() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15698,10 +15632,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NodeList; @docsEditable true
+
+@DocsEditable
+@DomName('NodeList')
 class NodeList implements JavaScriptIndexingBehavior, List<Node> native "*NodeList" {
 
-  /// @domName NodeList.length; @docsEditable true
+  @DocsEditable @DomName('NodeList.length')
   int get length => JS("int", "#.length", this);
 
   Node operator[](int index) => JS("Node", "#[#]", this, index);
@@ -15722,50 +15658,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -15823,16 +15759,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -15852,8 +15808,8 @@
 
   // -- end List<Node> mixins.
 
-  /// @domName NodeList.item; @docsEditable true
   @JSName('item')
+  @DocsEditable @DomName('NodeList.item')
   Node _item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15861,13 +15817,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Notation; @docsEditable true
+
+@DocsEditable
+@DomName('Notation')
 class Notation extends Node native "*Notation" {
 
-  /// @domName Notation.publicId; @docsEditable true
+  @DocsEditable @DomName('Notation.publicId')
   final String publicId;
 
-  /// @domName Notation.systemId; @docsEditable true
+  @DocsEditable @DomName('Notation.systemId')
   final String systemId;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15875,7 +15833,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Notification; @docsEditable true
+
+@DocsEditable
+@DomName('Notification')
 class Notification extends EventTarget native "*Notification" {
 
   static const EventStreamProvider<Event> clickEvent = const EventStreamProvider<Event>('click');
@@ -15888,7 +15848,7 @@
 
   static const EventStreamProvider<Event> showEvent = const EventStreamProvider<Event>('show');
 
-  ///@docsEditable true
+  @DocsEditable
   factory Notification(String title, [Map options]) {
     if (!?options) {
       return Notification._create(title);
@@ -15902,44 +15862,45 @@
     return JS('Notification', 'new Notification(#,#)', title, options);
   }
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   NotificationEvents get on =>
     new NotificationEvents(this);
 
-  /// @domName Notification.dir; @docsEditable true
+  @DocsEditable @DomName('Notification.dir')
   String dir;
 
-  /// @domName Notification.permission; @docsEditable true
+  @DocsEditable @DomName('Notification.permission')
   final String permission;
 
-  /// @domName Notification.replaceId; @docsEditable true
+  @DocsEditable @DomName('Notification.replaceId')
   String replaceId;
 
-  /// @domName Notification.tag; @docsEditable true
+  @DocsEditable @DomName('Notification.tag')
   String tag;
 
-  /// @domName Notification.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('Notification.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName Notification.cancel; @docsEditable true
+  @DocsEditable @DomName('Notification.cancel')
   void cancel() native;
 
-  /// @domName Notification.close; @docsEditable true
+  @DocsEditable @DomName('Notification.close')
   void close() native;
 
-  /// @domName Notification.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('Notification.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName Notification.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('Notification.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName Notification.requestPermission; @docsEditable true
+  @DocsEditable @DomName('Notification.requestPermission')
   static void requestPermission(NotificationPermissionCallback callback) native;
 
-  /// @domName Notification.show; @docsEditable true
+  @DocsEditable @DomName('Notification.show')
   void show() native;
 
   Stream<Event> get onClick => clickEvent.forTarget(this);
@@ -15953,24 +15914,24 @@
   Stream<Event> get onShow => showEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class NotificationEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   NotificationEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get close => this['close'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get display => this['display'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get show => this['show'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15978,20 +15939,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NotificationCenter; @docsEditable true
+
+@DocsEditable
+@DomName('NotificationCenter')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental()
 class NotificationCenter native "*NotificationCenter" {
 
-  /// @domName NotificationCenter.checkPermission; @docsEditable true
+  /// Checks if this type is supported on the current platform.
+  static bool get supported => JS('bool', '!!(window.webkitNotifications)');
+
+  @DocsEditable @DomName('NotificationCenter.checkPermission')
   int checkPermission() native;
 
-  /// @domName NotificationCenter.createHTMLNotification; @docsEditable true
   @JSName('createHTMLNotification')
+  @DocsEditable @DomName('NotificationCenter.createHTMLNotification')
   Notification createHtmlNotification(String url) native;
 
-  /// @domName NotificationCenter.createNotification; @docsEditable true
+  @DocsEditable @DomName('NotificationCenter.createNotification')
   Notification createNotification(String iconUrl, String title, String body) native;
 
-  /// @domName NotificationCenter.requestPermission; @docsEditable true
+  @DocsEditable @DomName('NotificationCenter.requestPermission')
   void requestPermission(VoidCallback callback) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16007,19 +15976,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOListElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLOListElement')
 class OListElement extends Element native "*HTMLOListElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory OListElement() => document.$dom_createElement("ol");
 
-  /// @domName HTMLOListElement.reversed; @docsEditable true
+  @DocsEditable @DomName('HTMLOListElement.reversed')
   bool reversed;
 
-  /// @domName HTMLOListElement.start; @docsEditable true
+  @DocsEditable @DomName('HTMLOListElement.start')
   int start;
 
-  /// @domName HTMLOListElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLOListElement.type')
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16027,55 +15998,57 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLObjectElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLObjectElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class ObjectElement extends Element native "*HTMLObjectElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ObjectElement() => document.$dom_createElement("object");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('object');
 
-  /// @domName HTMLObjectElement.code; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.code')
   String code;
 
-  /// @domName HTMLObjectElement.data; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.data')
   String data;
 
-  /// @domName HTMLObjectElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.form')
   final FormElement form;
 
-  /// @domName HTMLObjectElement.height; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.height')
   String height;
 
-  /// @domName HTMLObjectElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.name')
   String name;
 
-  /// @domName HTMLObjectElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.type')
   String type;
 
-  /// @domName HTMLObjectElement.useMap; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.useMap')
   String useMap;
 
-  /// @domName HTMLObjectElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLObjectElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLObjectElement.width; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.width')
   String width;
 
-  /// @domName HTMLObjectElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLObjectElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLObjectElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLObjectElement.setCustomValidity')
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16083,7 +16056,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESElementIndexUint; @docsEditable true
+
+@DocsEditable
+@DomName('OESElementIndexUint')
 class OesElementIndexUint native "*OESElementIndexUint" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16091,7 +16066,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESStandardDerivatives; @docsEditable true
+
+@DocsEditable
+@DomName('OESStandardDerivatives')
 class OesStandardDerivatives native "*OESStandardDerivatives" {
 
   static const int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
@@ -16101,7 +16078,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESTextureFloat; @docsEditable true
+
+@DocsEditable
+@DomName('OESTextureFloat')
 class OesTextureFloat native "*OESTextureFloat" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16109,25 +16088,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESVertexArrayObject; @docsEditable true
+
+@DocsEditable
+@DomName('OESVertexArrayObject')
 class OesVertexArrayObject native "*OESVertexArrayObject" {
 
   static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
-  /// @domName OESVertexArrayObject.bindVertexArrayOES; @docsEditable true
   @JSName('bindVertexArrayOES')
+  @DocsEditable @DomName('OESVertexArrayObject.bindVertexArrayOES')
   void bindVertexArray(WebGLVertexArrayObject arrayObject) native;
 
-  /// @domName OESVertexArrayObject.createVertexArrayOES; @docsEditable true
   @JSName('createVertexArrayOES')
+  @DocsEditable @DomName('OESVertexArrayObject.createVertexArrayOES')
   WebGLVertexArrayObject createVertexArray() native;
 
-  /// @domName OESVertexArrayObject.deleteVertexArrayOES; @docsEditable true
   @JSName('deleteVertexArrayOES')
+  @DocsEditable @DomName('OESVertexArrayObject.deleteVertexArrayOES')
   void deleteVertexArray(WebGLVertexArrayObject arrayObject) native;
 
-  /// @domName OESVertexArrayObject.isVertexArrayOES; @docsEditable true
   @JSName('isVertexArrayOES')
+  @DocsEditable @DomName('OESVertexArrayObject.isVertexArrayOES')
   bool isVertexArray(WebGLVertexArrayObject arrayObject) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16135,16 +16116,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOptGroupElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLOptGroupElement')
 class OptGroupElement extends Element native "*HTMLOptGroupElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory OptGroupElement() => document.$dom_createElement("optgroup");
 
-  /// @domName HTMLOptGroupElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLOptGroupElement.disabled')
   bool disabled;
 
-  /// @domName HTMLOptGroupElement.label; @docsEditable true
+  @DocsEditable @DomName('HTMLOptGroupElement.label')
   String label;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16152,10 +16135,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOptionElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLOptionElement')
 class OptionElement extends Element native "*HTMLOptionElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory OptionElement([String data, String value, bool defaultSelected, bool selected]) {
     if (!?data) {
       return OptionElement._create();
@@ -16187,25 +16172,25 @@
     return JS('OptionElement', 'new Option(#,#,#,#)', data, value, defaultSelected, selected);
   }
 
-  /// @domName HTMLOptionElement.defaultSelected; @docsEditable true
+  @DocsEditable @DomName('HTMLOptionElement.defaultSelected')
   bool defaultSelected;
 
-  /// @domName HTMLOptionElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLOptionElement.disabled')
   bool disabled;
 
-  /// @domName HTMLOptionElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLOptionElement.form')
   final FormElement form;
 
-  /// @domName HTMLOptionElement.index; @docsEditable true
+  @DocsEditable @DomName('HTMLOptionElement.index')
   final int index;
 
-  /// @domName HTMLOptionElement.label; @docsEditable true
+  @DocsEditable @DomName('HTMLOptionElement.label')
   String label;
 
-  /// @domName HTMLOptionElement.selected; @docsEditable true
+  @DocsEditable @DomName('HTMLOptionElement.selected')
   bool selected;
 
-  /// @domName HTMLOptionElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLOptionElement.value')
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16213,53 +16198,55 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOutputElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLOutputElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class OutputElement extends Element native "*HTMLOutputElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory OutputElement() => document.$dom_createElement("output");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('output');
 
-  /// @domName HTMLOutputElement.defaultValue; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.defaultValue')
   String defaultValue;
 
-  /// @domName HTMLOutputElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.form')
   final FormElement form;
 
-  /// @domName HTMLOutputElement.htmlFor; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.htmlFor')
   DomSettableTokenList htmlFor;
 
-  /// @domName HTMLOutputElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLOutputElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.name')
   String name;
 
-  /// @domName HTMLOutputElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.type')
   final String type;
 
-  /// @domName HTMLOutputElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLOutputElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLOutputElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.value')
   String value;
 
-  /// @domName HTMLOutputElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLOutputElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLOutputElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLOutputElement.setCustomValidity')
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16267,7 +16254,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OverflowEvent; @docsEditable true
+
+@DocsEditable
+@DomName('OverflowEvent')
 class OverflowEvent extends Event native "*OverflowEvent" {
 
   static const int BOTH = 2;
@@ -16276,13 +16265,13 @@
 
   static const int VERTICAL = 1;
 
-  /// @domName OverflowEvent.horizontalOverflow; @docsEditable true
+  @DocsEditable @DomName('OverflowEvent.horizontalOverflow')
   final bool horizontalOverflow;
 
-  /// @domName OverflowEvent.orient; @docsEditable true
+  @DocsEditable @DomName('OverflowEvent.orient')
   final int orient;
 
-  /// @domName OverflowEvent.verticalOverflow; @docsEditable true
+  @DocsEditable @DomName('OverflowEvent.verticalOverflow')
   final bool verticalOverflow;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16290,19 +16279,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PagePopupController; @docsEditable true
+
+@DocsEditable
+@DomName('PagePopupController')
 class PagePopupController native "*PagePopupController" {
 
-  /// @domName PagePopupController.formatMonth; @docsEditable true
+  @DocsEditable @DomName('PagePopupController.formatMonth')
   String formatMonth(int year, int zeroBaseMonth) native;
 
-  /// @domName PagePopupController.histogramEnumeration; @docsEditable true
+  @DocsEditable @DomName('PagePopupController.histogramEnumeration')
   void histogramEnumeration(String name, int sample, int boundaryValue) native;
 
-  /// @domName PagePopupController.localizeNumberString; @docsEditable true
+  @DocsEditable @DomName('PagePopupController.localizeNumberString')
   String localizeNumberString(String numberString) native;
 
-  /// @domName PagePopupController.setValueAndClosePopup; @docsEditable true
+  @DocsEditable @DomName('PagePopupController.setValueAndClosePopup')
   void setValueAndClosePopup(int numberValue, String stringValue) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16310,10 +16301,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PageTransitionEvent; @docsEditable true
+
+@DocsEditable
+@DomName('PageTransitionEvent')
 class PageTransitionEvent extends Event native "*PageTransitionEvent" {
 
-  /// @domName PageTransitionEvent.persisted; @docsEditable true
+  @DocsEditable @DomName('PageTransitionEvent.persisted')
   final bool persisted;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16321,10 +16314,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLParagraphElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLParagraphElement')
 class ParagraphElement extends Element native "*HTMLParagraphElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ParagraphElement() => document.$dom_createElement("p");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16332,16 +16327,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLParamElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLParamElement')
 class ParamElement extends Element native "*HTMLParamElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ParamElement() => document.$dom_createElement("param");
 
-  /// @domName HTMLParamElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLParamElement.name')
   String name;
 
-  /// @domName HTMLParamElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLParamElement.value')
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16349,7 +16346,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Performance; @docsEditable true
+
+@DocsEditable
+@DomName('Performance')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE)
@@ -16358,16 +16357,16 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.performance)');
 
-  /// @domName Performance.memory; @docsEditable true
+  @DocsEditable @DomName('Performance.memory')
   final MemoryInfo memory;
 
-  /// @domName Performance.navigation; @docsEditable true
+  @DocsEditable @DomName('Performance.navigation')
   final PerformanceNavigation navigation;
 
-  /// @domName Performance.timing; @docsEditable true
+  @DocsEditable @DomName('Performance.timing')
   final PerformanceTiming timing;
 
-  /// @domName Performance.now; @docsEditable true
+  @DocsEditable @DomName('Performance.now')
   num now() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16375,7 +16374,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PerformanceNavigation; @docsEditable true
+
+@DocsEditable
+@DomName('PerformanceNavigation')
 class PerformanceNavigation native "*PerformanceNavigation" {
 
   static const int TYPE_BACK_FORWARD = 2;
@@ -16386,10 +16387,10 @@
 
   static const int TYPE_RESERVED = 255;
 
-  /// @domName PerformanceNavigation.redirectCount; @docsEditable true
+  @DocsEditable @DomName('PerformanceNavigation.redirectCount')
   final int redirectCount;
 
-  /// @domName PerformanceNavigation.type; @docsEditable true
+  @DocsEditable @DomName('PerformanceNavigation.type')
   final int type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16397,70 +16398,72 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PerformanceTiming; @docsEditable true
+
+@DocsEditable
+@DomName('PerformanceTiming')
 class PerformanceTiming native "*PerformanceTiming" {
 
-  /// @domName PerformanceTiming.connectEnd; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.connectEnd')
   final int connectEnd;
 
-  /// @domName PerformanceTiming.connectStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.connectStart')
   final int connectStart;
 
-  /// @domName PerformanceTiming.domComplete; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.domComplete')
   final int domComplete;
 
-  /// @domName PerformanceTiming.domContentLoadedEventEnd; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.domContentLoadedEventEnd')
   final int domContentLoadedEventEnd;
 
-  /// @domName PerformanceTiming.domContentLoadedEventStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.domContentLoadedEventStart')
   final int domContentLoadedEventStart;
 
-  /// @domName PerformanceTiming.domInteractive; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.domInteractive')
   final int domInteractive;
 
-  /// @domName PerformanceTiming.domLoading; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.domLoading')
   final int domLoading;
 
-  /// @domName PerformanceTiming.domainLookupEnd; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.domainLookupEnd')
   final int domainLookupEnd;
 
-  /// @domName PerformanceTiming.domainLookupStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.domainLookupStart')
   final int domainLookupStart;
 
-  /// @domName PerformanceTiming.fetchStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.fetchStart')
   final int fetchStart;
 
-  /// @domName PerformanceTiming.loadEventEnd; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.loadEventEnd')
   final int loadEventEnd;
 
-  /// @domName PerformanceTiming.loadEventStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.loadEventStart')
   final int loadEventStart;
 
-  /// @domName PerformanceTiming.navigationStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.navigationStart')
   final int navigationStart;
 
-  /// @domName PerformanceTiming.redirectEnd; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.redirectEnd')
   final int redirectEnd;
 
-  /// @domName PerformanceTiming.redirectStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.redirectStart')
   final int redirectStart;
 
-  /// @domName PerformanceTiming.requestStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.requestStart')
   final int requestStart;
 
-  /// @domName PerformanceTiming.responseEnd; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.responseEnd')
   final int responseEnd;
 
-  /// @domName PerformanceTiming.responseStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.responseStart')
   final int responseStart;
 
-  /// @domName PerformanceTiming.secureConnectionStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.secureConnectionStart')
   final int secureConnectionStart;
 
-  /// @domName PerformanceTiming.unloadEventEnd; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.unloadEventEnd')
   final int unloadEventEnd;
 
-  /// @domName PerformanceTiming.unloadEventStart; @docsEditable true
+  @DocsEditable @DomName('PerformanceTiming.unloadEventStart')
   final int unloadEventStart;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16468,17 +16471,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitPoint; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitPoint')
 class Point native "*WebKitPoint" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory Point(num x, num y) => Point._create(x, y);
   static Point _create(num x, num y) => JS('Point', 'new WebKitPoint(#,#)', x, y);
 
-  /// @domName WebKitPoint.x; @docsEditable true
+  @DocsEditable @DomName('WebKitPoint.x')
   num x;
 
-  /// @domName WebKitPoint.y; @docsEditable true
+  @DocsEditable @DomName('WebKitPoint.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16486,13 +16491,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PopStateEvent; @docsEditable true
+
+@DocsEditable
+@DomName('PopStateEvent')
 class PopStateEvent extends Event native "*PopStateEvent" {
 
-  /// @domName PopStateEvent.state; @docsEditable true
   dynamic get state => convertNativeToDart_SerializedScriptValue(this._state);
   @JSName('state')
-  @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
+  @DocsEditable @DomName('PopStateEvent.state') @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
   final dynamic _state;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16508,7 +16514,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PositionError; @docsEditable true
+
+@DocsEditable
+@DomName('PositionError')
 class PositionError native "*PositionError" {
 
   static const int PERMISSION_DENIED = 1;
@@ -16517,10 +16525,10 @@
 
   static const int TIMEOUT = 3;
 
-  /// @domName PositionError.code; @docsEditable true
+  @DocsEditable @DomName('PositionError.code')
   final int code;
 
-  /// @domName PositionError.message; @docsEditable true
+  @DocsEditable @DomName('PositionError.message')
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16536,13 +16544,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLPreElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLPreElement')
 class PreElement extends Element native "*HTMLPreElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory PreElement() => document.$dom_createElement("pre");
 
-  /// @domName HTMLPreElement.wrap; @docsEditable true
+  @DocsEditable @DomName('HTMLPreElement.wrap')
   bool wrap;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16550,16 +16560,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ProcessingInstruction; @docsEditable true
+
+@DocsEditable
+@DomName('ProcessingInstruction')
 class ProcessingInstruction extends Node native "*ProcessingInstruction" {
 
-  /// @domName ProcessingInstruction.data; @docsEditable true
+  @DocsEditable @DomName('ProcessingInstruction.data')
   String data;
 
-  /// @domName ProcessingInstruction.sheet; @docsEditable true
+  @DocsEditable @DomName('ProcessingInstruction.sheet')
   final StyleSheet sheet;
 
-  /// @domName ProcessingInstruction.target; @docsEditable true
+  @DocsEditable @DomName('ProcessingInstruction.target')
   final String target;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16567,30 +16579,32 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLProgressElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLProgressElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class ProgressElement extends Element native "*HTMLProgressElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ProgressElement() => document.$dom_createElement("progress");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('progress');
 
-  /// @domName HTMLProgressElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLProgressElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLProgressElement.max; @docsEditable true
+  @DocsEditable @DomName('HTMLProgressElement.max')
   num max;
 
-  /// @domName HTMLProgressElement.position; @docsEditable true
+  @DocsEditable @DomName('HTMLProgressElement.position')
   final num position;
 
-  /// @domName HTMLProgressElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLProgressElement.value')
   num value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16598,16 +16612,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ProgressEvent; @docsEditable true
+
+@DocsEditable
+@DomName('ProgressEvent')
 class ProgressEvent extends Event native "*ProgressEvent" {
 
-  /// @domName ProgressEvent.lengthComputable; @docsEditable true
+  @DocsEditable @DomName('ProgressEvent.lengthComputable')
   final bool lengthComputable;
 
-  /// @domName ProgressEvent.loaded; @docsEditable true
+  @DocsEditable @DomName('ProgressEvent.loaded')
   final int loaded;
 
-  /// @domName ProgressEvent.total; @docsEditable true
+  @DocsEditable @DomName('ProgressEvent.total')
   final int total;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16615,10 +16631,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLQuoteElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLQuoteElement')
 class QuoteElement extends Element native "*HTMLQuoteElement" {
 
-  /// @domName HTMLQuoteElement.cite; @docsEditable true
+  @DocsEditable @DomName('HTMLQuoteElement.cite')
   String cite;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16650,10 +16668,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RadioNodeList; @docsEditable true
+
+@DocsEditable
+@DomName('RadioNodeList')
 class RadioNodeList extends NodeList native "*RadioNodeList" {
 
-  /// @domName RadioNodeList.value; @docsEditable true
+  @DocsEditable @DomName('RadioNodeList.value')
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16663,7 +16683,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Range
+@DocsEditable
+@DomName('Range')
 class Range native "*Range" {
   factory Range() => document.$dom_createRange();
 
@@ -16684,98 +16705,98 @@
 
   static const int START_TO_START = 0;
 
-  /// @domName Range.collapsed; @docsEditable true
+  @DocsEditable @DomName('Range.collapsed')
   final bool collapsed;
 
-  /// @domName Range.commonAncestorContainer; @docsEditable true
+  @DocsEditable @DomName('Range.commonAncestorContainer')
   final Node commonAncestorContainer;
 
-  /// @domName Range.endContainer; @docsEditable true
+  @DocsEditable @DomName('Range.endContainer')
   final Node endContainer;
 
-  /// @domName Range.endOffset; @docsEditable true
+  @DocsEditable @DomName('Range.endOffset')
   final int endOffset;
 
-  /// @domName Range.startContainer; @docsEditable true
+  @DocsEditable @DomName('Range.startContainer')
   final Node startContainer;
 
-  /// @domName Range.startOffset; @docsEditable true
+  @DocsEditable @DomName('Range.startOffset')
   final int startOffset;
 
-  /// @domName Range.cloneContents; @docsEditable true
+  @DocsEditable @DomName('Range.cloneContents')
   DocumentFragment cloneContents() native;
 
-  /// @domName Range.cloneRange; @docsEditable true
+  @DocsEditable @DomName('Range.cloneRange')
   Range cloneRange() native;
 
-  /// @domName Range.collapse; @docsEditable true
+  @DocsEditable @DomName('Range.collapse')
   void collapse(bool toStart) native;
 
-  /// @domName Range.compareNode; @docsEditable true
+  @DocsEditable @DomName('Range.compareNode')
   int compareNode(Node refNode) native;
 
-  /// @domName Range.comparePoint; @docsEditable true
+  @DocsEditable @DomName('Range.comparePoint')
   int comparePoint(Node refNode, int offset) native;
 
-  /// @domName Range.createContextualFragment; @docsEditable true
+  @DocsEditable @DomName('Range.createContextualFragment')
   DocumentFragment createContextualFragment(String html) native;
 
-  /// @domName Range.deleteContents; @docsEditable true
+  @DocsEditable @DomName('Range.deleteContents')
   void deleteContents() native;
 
-  /// @domName Range.detach; @docsEditable true
+  @DocsEditable @DomName('Range.detach')
   void detach() native;
 
-  /// @domName Range.expand; @docsEditable true
+  @DocsEditable @DomName('Range.expand')
   void expand(String unit) native;
 
-  /// @domName Range.extractContents; @docsEditable true
+  @DocsEditable @DomName('Range.extractContents')
   DocumentFragment extractContents() native;
 
-  /// @domName Range.getBoundingClientRect; @docsEditable true
+  @DocsEditable @DomName('Range.getBoundingClientRect')
   ClientRect getBoundingClientRect() native;
 
-  /// @domName Range.getClientRects; @docsEditable true
+  @DocsEditable @DomName('Range.getClientRects')
   @Returns('_ClientRectList') @Creates('_ClientRectList')
   List<ClientRect> getClientRects() native;
 
-  /// @domName Range.insertNode; @docsEditable true
+  @DocsEditable @DomName('Range.insertNode')
   void insertNode(Node newNode) native;
 
-  /// @domName Range.intersectsNode; @docsEditable true
+  @DocsEditable @DomName('Range.intersectsNode')
   bool intersectsNode(Node refNode) native;
 
-  /// @domName Range.isPointInRange; @docsEditable true
+  @DocsEditable @DomName('Range.isPointInRange')
   bool isPointInRange(Node refNode, int offset) native;
 
-  /// @domName Range.selectNode; @docsEditable true
+  @DocsEditable @DomName('Range.selectNode')
   void selectNode(Node refNode) native;
 
-  /// @domName Range.selectNodeContents; @docsEditable true
+  @DocsEditable @DomName('Range.selectNodeContents')
   void selectNodeContents(Node refNode) native;
 
-  /// @domName Range.setEnd; @docsEditable true
+  @DocsEditable @DomName('Range.setEnd')
   void setEnd(Node refNode, int offset) native;
 
-  /// @domName Range.setEndAfter; @docsEditable true
+  @DocsEditable @DomName('Range.setEndAfter')
   void setEndAfter(Node refNode) native;
 
-  /// @domName Range.setEndBefore; @docsEditable true
+  @DocsEditable @DomName('Range.setEndBefore')
   void setEndBefore(Node refNode) native;
 
-  /// @domName Range.setStart; @docsEditable true
+  @DocsEditable @DomName('Range.setStart')
   void setStart(Node refNode, int offset) native;
 
-  /// @domName Range.setStartAfter; @docsEditable true
+  @DocsEditable @DomName('Range.setStartAfter')
   void setStartAfter(Node refNode) native;
 
-  /// @domName Range.setStartBefore; @docsEditable true
+  @DocsEditable @DomName('Range.setStartBefore')
   void setStartBefore(Node refNode) native;
 
-  /// @domName Range.surroundContents; @docsEditable true
+  @DocsEditable @DomName('Range.surroundContents')
   void surroundContents(Node newParent) native;
 
-  /// @domName Range.toString; @docsEditable true
+  @DocsEditable @DomName('Range.toString')
   String toString() native;
 
 }
@@ -16784,23 +16805,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RangeException; @docsEditable true
+
+@DocsEditable
+@DomName('RangeException')
 class RangeException native "*RangeException" {
 
   static const int BAD_BOUNDARYPOINTS_ERR = 1;
 
   static const int INVALID_NODE_TYPE_ERR = 2;
 
-  /// @domName RangeException.code; @docsEditable true
+  @DocsEditable @DomName('RangeException.code')
   final int code;
 
-  /// @domName RangeException.message; @docsEditable true
+  @DocsEditable @DomName('RangeException.message')
   final String message;
 
-  /// @domName RangeException.name; @docsEditable true
+  @DocsEditable @DomName('RangeException.name')
   final String name;
 
-  /// @domName RangeException.toString; @docsEditable true
+  @DocsEditable @DomName('RangeException.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16808,19 +16831,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Rect; @docsEditable true
+
+@DocsEditable
+@DomName('Rect')
 class Rect native "*Rect" {
 
-  /// @domName Rect.bottom; @docsEditable true
+  @DocsEditable @DomName('Rect.bottom')
   final CssPrimitiveValue bottom;
 
-  /// @domName Rect.left; @docsEditable true
+  @DocsEditable @DomName('Rect.left')
   final CssPrimitiveValue left;
 
-  /// @domName Rect.right; @docsEditable true
+  @DocsEditable @DomName('Rect.right')
   final CssPrimitiveValue right;
 
-  /// @domName Rect.top; @docsEditable true
+  @DocsEditable @DomName('Rect.top')
   final CssPrimitiveValue top;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16836,16 +16861,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RGBColor; @docsEditable true
+
+@DocsEditable
+@DomName('RGBColor')
 class RgbColor native "*RGBColor" {
 
-  /// @domName RGBColor.blue; @docsEditable true
+  @DocsEditable @DomName('RGBColor.blue')
   final CssPrimitiveValue blue;
 
-  /// @domName RGBColor.green; @docsEditable true
+  @DocsEditable @DomName('RGBColor.green')
   final CssPrimitiveValue green;
 
-  /// @domName RGBColor.red; @docsEditable true
+  @DocsEditable @DomName('RGBColor.red')
   final CssPrimitiveValue red;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16853,7 +16880,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCDataChannel; @docsEditable true
+
+@DocsEditable
+@DomName('RTCDataChannel')
 class RtcDataChannel extends EventTarget native "*RTCDataChannel" {
 
   static const EventStreamProvider<Event> closeEvent = const EventStreamProvider<Event>('close');
@@ -16864,41 +16893,42 @@
 
   static const EventStreamProvider<Event> openEvent = const EventStreamProvider<Event>('open');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   RtcDataChannelEvents get on =>
     new RtcDataChannelEvents(this);
 
-  /// @domName RTCDataChannel.binaryType; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannel.binaryType')
   String binaryType;
 
-  /// @domName RTCDataChannel.bufferedAmount; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannel.bufferedAmount')
   final int bufferedAmount;
 
-  /// @domName RTCDataChannel.label; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannel.label')
   final String label;
 
-  /// @domName RTCDataChannel.readyState; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannel.readyState')
   final String readyState;
 
-  /// @domName RTCDataChannel.reliable; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannel.reliable')
   final bool reliable;
 
-  /// @domName RTCDataChannel.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('RTCDataChannel.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName RTCDataChannel.close; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannel.close')
   void close() native;
 
-  /// @domName RTCDataChannel.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('RTCDataChannel.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName RTCDataChannel.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('RTCDataChannel.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName RTCDataChannel.send; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannel.send')
   void send(data) native;
 
   Stream<Event> get onClose => closeEvent.forTarget(this);
@@ -16910,21 +16940,21 @@
   Stream<Event> get onOpen => openEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class RtcDataChannelEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   RtcDataChannelEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get close => this['close'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16932,10 +16962,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCDataChannelEvent; @docsEditable true
+
+@DocsEditable
+@DomName('RTCDataChannelEvent')
 class RtcDataChannelEvent extends Event native "*RTCDataChannelEvent" {
 
-  /// @domName RTCDataChannelEvent.channel; @docsEditable true
+  @DocsEditable @DomName('RTCDataChannelEvent.channel')
   final RtcDataChannel channel;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16943,20 +16975,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCIceCandidate; @docsEditable true
+
+@DocsEditable
+@DomName('RTCIceCandidate')
 class RtcIceCandidate native "*RTCIceCandidate" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory RtcIceCandidate(Map dictionary) => RtcIceCandidate._create(dictionary);
   static RtcIceCandidate _create(Map dictionary) => JS('RtcIceCandidate', 'new RTCIceCandidate(#)', dictionary);
 
-  /// @domName RTCIceCandidate.candidate; @docsEditable true
+  @DocsEditable @DomName('RTCIceCandidate.candidate')
   final String candidate;
 
-  /// @domName RTCIceCandidate.sdpMLineIndex; @docsEditable true
+  @DocsEditable @DomName('RTCIceCandidate.sdpMLineIndex')
   final int sdpMLineIndex;
 
-  /// @domName RTCIceCandidate.sdpMid; @docsEditable true
+  @DocsEditable @DomName('RTCIceCandidate.sdpMid')
   final String sdpMid;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16964,10 +16998,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCIceCandidateEvent; @docsEditable true
+
+@DocsEditable
+@DomName('RTCIceCandidateEvent')
 class RtcIceCandidateEvent extends Event native "*RTCIceCandidateEvent" {
 
-  /// @domName RTCIceCandidateEvent.candidate; @docsEditable true
+  @DocsEditable @DomName('RTCIceCandidateEvent.candidate')
   final RtcIceCandidate candidate;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16975,7 +17011,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCPeerConnection; @docsEditable true
+
+@DocsEditable
+@DomName('RTCPeerConnection')
 class RtcPeerConnection extends EventTarget native "*RTCPeerConnection" {
 
   static const EventStreamProvider<MediaStreamEvent> addStreamEvent = const EventStreamProvider<MediaStreamEvent>('addstream');
@@ -16994,7 +17032,7 @@
 
   static const EventStreamProvider<Event> stateChangeEvent = const EventStreamProvider<Event>('statechange');
 
-  ///@docsEditable true
+  @DocsEditable
   factory RtcPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
     if (!?mediaConstraints) {
       return RtcPeerConnection._create(rtcIceServers);
@@ -17008,41 +17046,41 @@
     return JS('RtcPeerConnection', 'new RTCPeerConnection(#,#)', rtcIceServers, mediaConstraints);
   }
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   RtcPeerConnectionEvents get on =>
     new RtcPeerConnectionEvents(this);
 
-  /// @domName RTCPeerConnection.iceGatheringState; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.iceGatheringState')
   final String iceGatheringState;
 
-  /// @domName RTCPeerConnection.iceState; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.iceState')
   final String iceState;
 
-  /// @domName RTCPeerConnection.localDescription; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.localDescription')
   final RtcSessionDescription localDescription;
 
-  /// @domName RTCPeerConnection.localStreams; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.localStreams')
   @Returns('_MediaStreamList') @Creates('_MediaStreamList')
   final List<MediaStream> localStreams;
 
-  /// @domName RTCPeerConnection.readyState; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.readyState')
   final String readyState;
 
-  /// @domName RTCPeerConnection.remoteDescription; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.remoteDescription')
   final RtcSessionDescription remoteDescription;
 
-  /// @domName RTCPeerConnection.remoteStreams; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.remoteStreams')
   @Returns('_MediaStreamList') @Creates('_MediaStreamList')
   final List<MediaStream> remoteStreams;
 
-  /// @domName RTCPeerConnection.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('RTCPeerConnection.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName RTCPeerConnection.addIceCandidate; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.addIceCandidate')
   void addIceCandidate(RtcIceCandidate candidate) native;
 
-  /// @domName RTCPeerConnection.addStream; @docsEditable true
   void addStream(MediaStream stream, [Map mediaConstraints]) {
     if (?mediaConstraints) {
       var mediaConstraints_1 = convertDartToNative_Dictionary(mediaConstraints);
@@ -17053,14 +17091,15 @@
     return;
   }
   @JSName('addStream')
+  @DocsEditable @DomName('RTCPeerConnection.addStream')
   void _addStream_1(MediaStream stream, mediaConstraints) native;
   @JSName('addStream')
+  @DocsEditable @DomName('RTCPeerConnection.addStream')
   void _addStream_2(MediaStream stream) native;
 
-  /// @domName RTCPeerConnection.close; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.close')
   void close() native;
 
-  /// @domName RTCPeerConnection.createAnswer; @docsEditable true
   void createAnswer(RtcSessionDescriptionCallback successCallback, [RtcErrorCallback failureCallback, Map mediaConstraints]) {
     if (?mediaConstraints) {
       var mediaConstraints_1 = convertDartToNative_Dictionary(mediaConstraints);
@@ -17071,11 +17110,12 @@
     return;
   }
   @JSName('createAnswer')
+  @DocsEditable @DomName('RTCPeerConnection.createAnswer')
   void _createAnswer_1(RtcSessionDescriptionCallback successCallback, RtcErrorCallback failureCallback, mediaConstraints) native;
   @JSName('createAnswer')
+  @DocsEditable @DomName('RTCPeerConnection.createAnswer')
   void _createAnswer_2(RtcSessionDescriptionCallback successCallback, RtcErrorCallback failureCallback) native;
 
-  /// @domName RTCPeerConnection.createDataChannel; @docsEditable true
   RtcDataChannel createDataChannel(String label, [Map options]) {
     if (?options) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -17084,11 +17124,12 @@
     return _createDataChannel_2(label);
   }
   @JSName('createDataChannel')
+  @DocsEditable @DomName('RTCPeerConnection.createDataChannel')
   RtcDataChannel _createDataChannel_1(label, options) native;
   @JSName('createDataChannel')
+  @DocsEditable @DomName('RTCPeerConnection.createDataChannel')
   RtcDataChannel _createDataChannel_2(label) native;
 
-  /// @domName RTCPeerConnection.createOffer; @docsEditable true
   void createOffer(RtcSessionDescriptionCallback successCallback, [RtcErrorCallback failureCallback, Map mediaConstraints]) {
     if (?mediaConstraints) {
       var mediaConstraints_1 = convertDartToNative_Dictionary(mediaConstraints);
@@ -17099,31 +17140,32 @@
     return;
   }
   @JSName('createOffer')
+  @DocsEditable @DomName('RTCPeerConnection.createOffer')
   void _createOffer_1(RtcSessionDescriptionCallback successCallback, RtcErrorCallback failureCallback, mediaConstraints) native;
   @JSName('createOffer')
+  @DocsEditable @DomName('RTCPeerConnection.createOffer')
   void _createOffer_2(RtcSessionDescriptionCallback successCallback, RtcErrorCallback failureCallback) native;
 
-  /// @domName RTCPeerConnection.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('RTCPeerConnection.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName RTCPeerConnection.getStats; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.getStats')
   void getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) native;
 
-  /// @domName RTCPeerConnection.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('RTCPeerConnection.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName RTCPeerConnection.removeStream; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.removeStream')
   void removeStream(MediaStream stream) native;
 
-  /// @domName RTCPeerConnection.setLocalDescription; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.setLocalDescription')
   void setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, RtcErrorCallback failureCallback]) native;
 
-  /// @domName RTCPeerConnection.setRemoteDescription; @docsEditable true
+  @DocsEditable @DomName('RTCPeerConnection.setRemoteDescription')
   void setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, RtcErrorCallback failureCallback]) native;
 
-  /// @domName RTCPeerConnection.updateIce; @docsEditable true
   void updateIce([Map configuration, Map mediaConstraints]) {
     if (?mediaConstraints) {
       var configuration_1 = convertDartToNative_Dictionary(configuration);
@@ -17140,10 +17182,13 @@
     return;
   }
   @JSName('updateIce')
+  @DocsEditable @DomName('RTCPeerConnection.updateIce')
   void _updateIce_1(configuration, mediaConstraints) native;
   @JSName('updateIce')
+  @DocsEditable @DomName('RTCPeerConnection.updateIce')
   void _updateIce_2(configuration) native;
   @JSName('updateIce')
+  @DocsEditable @DomName('RTCPeerConnection.updateIce')
   void _updateIce_3() native;
 
   Stream<MediaStreamEvent> get onAddStream => addStreamEvent.forTarget(this);
@@ -17163,30 +17208,30 @@
   Stream<Event> get onStateChange => stateChangeEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class RtcPeerConnectionEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   RtcPeerConnectionEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get addStream => this['addstream'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get iceCandidate => this['icecandidate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get iceChange => this['icechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get negotiationNeeded => this['negotiationneeded'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get removeStream => this['removestream'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get stateChange => this['statechange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17194,17 +17239,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCSessionDescription; @docsEditable true
+
+@DocsEditable
+@DomName('RTCSessionDescription')
 class RtcSessionDescription native "*RTCSessionDescription" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory RtcSessionDescription(Map dictionary) => RtcSessionDescription._create(dictionary);
   static RtcSessionDescription _create(Map dictionary) => JS('RtcSessionDescription', 'new RTCSessionDescription(#)', dictionary);
 
-  /// @domName RTCSessionDescription.sdp; @docsEditable true
+  @DocsEditable @DomName('RTCSessionDescription.sdp')
   String sdp;
 
-  /// @domName RTCSessionDescription.type; @docsEditable true
+  @DocsEditable @DomName('RTCSessionDescription.type')
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17212,16 +17259,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCStatsElement; @docsEditable true
+
+@DocsEditable
+@DomName('RTCStatsElement')
 class RtcStatsElement native "*RTCStatsElement" {
 
-  /// @domName RTCStatsElement.timestamp; @docsEditable true
+  @DocsEditable @DomName('RTCStatsElement.timestamp')
   final Date timestamp;
 
-  /// @domName RTCStatsElement.names; @docsEditable true
+  @DocsEditable @DomName('RTCStatsElement.names')
   List<String> names() native;
 
-  /// @domName RTCStatsElement.stat; @docsEditable true
+  @DocsEditable @DomName('RTCStatsElement.stat')
   String stat(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17229,13 +17278,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCStatsReport; @docsEditable true
+
+@DocsEditable
+@DomName('RTCStatsReport')
 class RtcStatsReport native "*RTCStatsReport" {
 
-  /// @domName RTCStatsReport.local; @docsEditable true
+  @DocsEditable @DomName('RTCStatsReport.local')
   final RtcStatsElement local;
 
-  /// @domName RTCStatsReport.remote; @docsEditable true
+  @DocsEditable @DomName('RTCStatsReport.remote')
   final RtcStatsElement remote;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17243,10 +17294,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCStatsResponse; @docsEditable true
+
+@DocsEditable
+@DomName('RTCStatsResponse')
 class RtcStatsResponse native "*RTCStatsResponse" {
 
-  /// @domName RTCStatsResponse.result; @docsEditable true
+  @DocsEditable @DomName('RTCStatsResponse.result')
   List<RtcStatsReport> result() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17294,31 +17347,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Screen; @docsEditable true
+
+@DocsEditable
+@DomName('Screen')
 class Screen native "*Screen" {
 
-  /// @domName Screen.availHeight; @docsEditable true
+  @DocsEditable @DomName('Screen.availHeight')
   final int availHeight;
 
-  /// @domName Screen.availLeft; @docsEditable true
+  @DocsEditable @DomName('Screen.availLeft')
   final int availLeft;
 
-  /// @domName Screen.availTop; @docsEditable true
+  @DocsEditable @DomName('Screen.availTop')
   final int availTop;
 
-  /// @domName Screen.availWidth; @docsEditable true
+  @DocsEditable @DomName('Screen.availWidth')
   final int availWidth;
 
-  /// @domName Screen.colorDepth; @docsEditable true
+  @DocsEditable @DomName('Screen.colorDepth')
   final int colorDepth;
 
-  /// @domName Screen.height; @docsEditable true
+  @DocsEditable @DomName('Screen.height')
   final int height;
 
-  /// @domName Screen.pixelDepth; @docsEditable true
+  @DocsEditable @DomName('Screen.pixelDepth')
   final int pixelDepth;
 
-  /// @domName Screen.width; @docsEditable true
+  @DocsEditable @DomName('Screen.width')
   final int width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17326,34 +17381,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLScriptElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLScriptElement')
 class ScriptElement extends Element native "*HTMLScriptElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ScriptElement() => document.$dom_createElement("script");
 
-  /// @domName HTMLScriptElement.async; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.async')
   bool async;
 
-  /// @domName HTMLScriptElement.charset; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.charset')
   String charset;
 
-  /// @domName HTMLScriptElement.crossOrigin; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.crossOrigin')
   String crossOrigin;
 
-  /// @domName HTMLScriptElement.defer; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.defer')
   bool defer;
 
-  /// @domName HTMLScriptElement.event; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.event')
   String event;
 
-  /// @domName HTMLScriptElement.htmlFor; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.htmlFor')
   String htmlFor;
 
-  /// @domName HTMLScriptElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.src')
   String src;
 
-  /// @domName HTMLScriptElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLScriptElement.type')
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17361,16 +17418,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ScriptProfile; @docsEditable true
+
+@DocsEditable
+@DomName('ScriptProfile')
 class ScriptProfile native "*ScriptProfile" {
 
-  /// @domName ScriptProfile.head; @docsEditable true
+  @DocsEditable @DomName('ScriptProfile.head')
   final ScriptProfileNode head;
 
-  /// @domName ScriptProfile.title; @docsEditable true
+  @DocsEditable @DomName('ScriptProfile.idleTime')
+  final num idleTime;
+
+  @DocsEditable @DomName('ScriptProfile.title')
   final String title;
 
-  /// @domName ScriptProfile.uid; @docsEditable true
+  @DocsEditable @DomName('ScriptProfile.uid')
   final int uid;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17378,35 +17440,37 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ScriptProfileNode; @docsEditable true
+
+@DocsEditable
+@DomName('ScriptProfileNode')
 class ScriptProfileNode native "*ScriptProfileNode" {
 
-  /// @domName ScriptProfileNode.callUID; @docsEditable true
   @JSName('callUID')
+  @DocsEditable @DomName('ScriptProfileNode.callUID')
   final int callUid;
 
-  /// @domName ScriptProfileNode.functionName; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.functionName')
   final String functionName;
 
-  /// @domName ScriptProfileNode.lineNumber; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.lineNumber')
   final int lineNumber;
 
-  /// @domName ScriptProfileNode.numberOfCalls; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.numberOfCalls')
   final int numberOfCalls;
 
-  /// @domName ScriptProfileNode.selfTime; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.selfTime')
   final num selfTime;
 
-  /// @domName ScriptProfileNode.totalTime; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.totalTime')
   final num totalTime;
 
-  /// @domName ScriptProfileNode.url; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.url')
   final String url;
 
-  /// @domName ScriptProfileNode.visible; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.visible')
   final bool visible;
 
-  /// @domName ScriptProfileNode.children; @docsEditable true
+  @DocsEditable @DomName('ScriptProfileNode.children')
   List<ScriptProfileNode> children() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17414,68 +17478,69 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLSelectElement
+@DocsEditable
+@DomName('HTMLSelectElement')
 class SelectElement extends Element native "*HTMLSelectElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SelectElement() => document.$dom_createElement("select");
 
-  /// @domName HTMLSelectElement.autofocus; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLSelectElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.disabled')
   bool disabled;
 
-  /// @domName HTMLSelectElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.form')
   final FormElement form;
 
-  /// @domName HTMLSelectElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLSelectElement.length; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.length')
   int length;
 
-  /// @domName HTMLSelectElement.multiple; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.multiple')
   bool multiple;
 
-  /// @domName HTMLSelectElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.name')
   String name;
 
-  /// @domName HTMLSelectElement.required; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.required')
   bool required;
 
-  /// @domName HTMLSelectElement.selectedIndex; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.selectedIndex')
   int selectedIndex;
 
-  /// @domName HTMLSelectElement.size; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.size')
   int size;
 
-  /// @domName HTMLSelectElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.type')
   final String type;
 
-  /// @domName HTMLSelectElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLSelectElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLSelectElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.value')
   String value;
 
-  /// @domName HTMLSelectElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLSelectElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLSelectElement.item; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.item')
   Node item(int index) native;
 
-  /// @domName HTMLSelectElement.namedItem; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.namedItem')
   Node namedItem(String name) native;
 
-  /// @domName HTMLSelectElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLSelectElement.setCustomValidity')
   void setCustomValidity(String error) native;
 
 
@@ -17501,7 +17566,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLShadowElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLShadowElement')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 class ShadowElement extends Element native "*HTMLShadowElement" {
@@ -17509,10 +17576,10 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('shadow');
 
-  /// @domName HTMLShadowElement.olderShadowRoot; @docsEditable true
+  @DocsEditable @DomName('HTMLShadowElement.olderShadowRoot')
   final ShadowRoot olderShadowRoot;
 
-  /// @domName HTMLShadowElement.resetStyleInheritance; @docsEditable true
+  @DocsEditable @DomName('HTMLShadowElement.resetStyleInheritance')
   bool resetStyleInheritance;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17522,43 +17589,47 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ShadowRoot
+@DocsEditable
+@DomName('ShadowRoot')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 class ShadowRoot extends DocumentFragment native "*ShadowRoot" {
 
-  /// @domName ShadowRoot.activeElement; @docsEditable true
+  @DocsEditable @DomName('ShadowRoot.activeElement')
   final Element activeElement;
 
-  /// @domName ShadowRoot.applyAuthorStyles; @docsEditable true
+  @DocsEditable @DomName('ShadowRoot.applyAuthorStyles')
   bool applyAuthorStyles;
 
-  /// @domName ShadowRoot.innerHTML; @docsEditable true
   @JSName('innerHTML')
+  @DocsEditable @DomName('ShadowRoot.innerHTML')
   String innerHtml;
 
-  /// @domName ShadowRoot.resetStyleInheritance; @docsEditable true
+  @DocsEditable @DomName('ShadowRoot.resetStyleInheritance')
   bool resetStyleInheritance;
 
-  /// @domName ShadowRoot.cloneNode; @docsEditable true
   @JSName('cloneNode')
+  @DocsEditable @DomName('ShadowRoot.cloneNode')
   Node clone(bool deep) native;
 
-  /// @domName ShadowRoot.getElementById; @docsEditable true
+  @DocsEditable @DomName('ShadowRoot.elementFromPoint')
+  Element elementFromPoint(int x, int y) native;
+
   @JSName('getElementById')
+  @DocsEditable @DomName('ShadowRoot.getElementById')
   Element $dom_getElementById(String elementId) native;
 
-  /// @domName ShadowRoot.getElementsByClassName; @docsEditable true
   @JSName('getElementsByClassName')
+  @DocsEditable @DomName('ShadowRoot.getElementsByClassName')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_getElementsByClassName(String className) native;
 
-  /// @domName ShadowRoot.getElementsByTagName; @docsEditable true
   @JSName('getElementsByTagName')
+  @DocsEditable @DomName('ShadowRoot.getElementsByTagName')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> $dom_getElementsByTagName(String tagName) native;
 
-  /// @domName ShadowRoot.getSelection; @docsEditable true
+  @DocsEditable @DomName('ShadowRoot.getSelection')
   DomSelection getSelection() native;
 
   static bool get supported =>
@@ -17569,10 +17640,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SharedWorker; @docsEditable true
+
+@DocsEditable
+@DomName('SharedWorker')
 class SharedWorker extends AbstractWorker native "*SharedWorker" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SharedWorker(String scriptURL, [String name]) {
     if (!?name) {
       return SharedWorker._create(scriptURL);
@@ -17586,7 +17659,7 @@
     return JS('SharedWorker', 'new SharedWorker(#,#)', scriptURL, name);
   }
 
-  /// @domName SharedWorker.port; @docsEditable true
+  @DocsEditable @DomName('SharedWorker.port')
   final MessagePort port;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17594,27 +17667,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SharedWorkerContext; @docsEditable true
+
+@DocsEditable
+@DomName('SharedWorkerContext')
 class SharedWorkerContext extends WorkerContext native "*SharedWorkerContext" {
 
   static const EventStreamProvider<Event> connectEvent = const EventStreamProvider<Event>('connect');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   SharedWorkerContextEvents get on =>
     new SharedWorkerContextEvents(this);
 
-  /// @domName SharedWorkerContext.name; @docsEditable true
+  @DocsEditable @DomName('SharedWorkerContext.name')
   final String name;
 
   Stream<Event> get onConnect => connectEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class SharedWorkerContextEvents extends WorkerContextEvents {
-  /// @docsEditable true
+  @DocsEditable
   SharedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get connect => this['connect'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17622,19 +17698,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SourceBuffer; @docsEditable true
+
+@DocsEditable
+@DomName('SourceBuffer')
 class SourceBuffer native "*SourceBuffer" {
 
-  /// @domName SourceBuffer.buffered; @docsEditable true
+  @DocsEditable @DomName('SourceBuffer.buffered')
   final TimeRanges buffered;
 
-  /// @domName SourceBuffer.timestampOffset; @docsEditable true
+  @DocsEditable @DomName('SourceBuffer.timestampOffset')
   num timestampOffset;
 
-  /// @domName SourceBuffer.abort; @docsEditable true
+  @DocsEditable @DomName('SourceBuffer.abort')
   void abort() native;
 
-  /// @domName SourceBuffer.append; @docsEditable true
+  @DocsEditable @DomName('SourceBuffer.append')
   void append(Uint8Array data) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17642,10 +17720,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SourceBufferList; @docsEditable true
+
+@DocsEditable
+@DomName('SourceBufferList')
 class SourceBufferList extends EventTarget implements JavaScriptIndexingBehavior, List<SourceBuffer> native "*SourceBufferList" {
 
-  /// @domName SourceBufferList.length; @docsEditable true
+  @DocsEditable @DomName('SourceBufferList.length')
   int get length => JS("int", "#.length", this);
 
   SourceBuffer operator[](int index) => JS("SourceBuffer", "#[#]", this, index);
@@ -17666,50 +17746,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SourceBuffer)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SourceBuffer element) => Collections.contains(this, element);
+  bool contains(SourceBuffer element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SourceBuffer element)) => Collections.forEach(this, f);
+  void forEach(void f(SourceBuffer element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SourceBuffer element)) => new MappedList<SourceBuffer, dynamic>(this, f);
+  List mappedBy(f(SourceBuffer element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SourceBuffer> where(bool f(SourceBuffer element)) => new WhereIterable<SourceBuffer>(this, f);
+  Iterable<SourceBuffer> where(bool f(SourceBuffer element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SourceBuffer element)) => Collections.every(this, f);
+  bool every(bool f(SourceBuffer element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SourceBuffer element)) => Collections.any(this, f);
+  bool any(bool f(SourceBuffer element)) => IterableMixinWorkaround.any(this, f);
 
   List<SourceBuffer> toList() => new List<SourceBuffer>.from(this);
   Set<SourceBuffer> toSet() => new Set<SourceBuffer>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SourceBuffer> take(int n) => new ListView<SourceBuffer>(this, 0, n);
+  List<SourceBuffer> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SourceBuffer> takeWhile(bool test(SourceBuffer value)) {
-    return new TakeWhileIterable<SourceBuffer>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SourceBuffer> skip(int n) => new ListView<SourceBuffer>(this, n, null);
+  List<SourceBuffer> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SourceBuffer> skipWhile(bool test(SourceBuffer value)) {
-    return new SkipWhileIterable<SourceBuffer>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SourceBuffer firstMatching(bool test(SourceBuffer value), { SourceBuffer orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SourceBuffer lastMatching(bool test(SourceBuffer value), {SourceBuffer orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SourceBuffer singleMatching(bool test(SourceBuffer value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SourceBuffer elementAt(int index) {
@@ -17767,16 +17847,36 @@
     throw new StateError("More than one element");
   }
 
-  SourceBuffer min([int compare(SourceBuffer a, SourceBuffer b)]) => Collections.min(this, compare);
+  SourceBuffer min([int compare(SourceBuffer a, SourceBuffer b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SourceBuffer max([int compare(SourceBuffer a, SourceBuffer b)]) => Collections.max(this, compare);
+  SourceBuffer max([int compare(SourceBuffer a, SourceBuffer b)]) => IterableMixinWorkaround.max(this, compare);
 
   SourceBuffer removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SourceBuffer removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SourceBuffer element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SourceBuffer element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
@@ -17796,19 +17896,19 @@
 
   // -- end List<SourceBuffer> mixins.
 
-  /// @domName SourceBufferList.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('SourceBufferList.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName SourceBufferList.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('SourceBufferList.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName SourceBufferList.item; @docsEditable true
+  @DocsEditable @DomName('SourceBufferList.item')
   SourceBuffer item(int index) native;
 
-  /// @domName SourceBufferList.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('SourceBufferList.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17816,19 +17916,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLSourceElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLSourceElement')
 class SourceElement extends Element native "*HTMLSourceElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SourceElement() => document.$dom_createElement("source");
 
-  /// @domName HTMLSourceElement.media; @docsEditable true
+  @DocsEditable @DomName('HTMLSourceElement.media')
   String media;
 
-  /// @domName HTMLSourceElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLSourceElement.src')
   String src;
 
-  /// @domName HTMLSourceElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLSourceElement.type')
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17836,10 +17938,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLSpanElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLSpanElement')
 class SpanElement extends Element native "*HTMLSpanElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpanElement() => document.$dom_createElement("span");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17847,17 +17951,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechGrammar; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechGrammar')
 class SpeechGrammar native "*SpeechGrammar" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpeechGrammar() => SpeechGrammar._create();
   static SpeechGrammar _create() => JS('SpeechGrammar', 'new SpeechGrammar()');
 
-  /// @domName SpeechGrammar.src; @docsEditable true
+  @DocsEditable @DomName('SpeechGrammar.src')
   String src;
 
-  /// @domName SpeechGrammar.weight; @docsEditable true
+  @DocsEditable @DomName('SpeechGrammar.weight')
   num weight;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17865,14 +17971,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechGrammarList; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechGrammarList')
 class SpeechGrammarList implements JavaScriptIndexingBehavior, List<SpeechGrammar> native "*SpeechGrammarList" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpeechGrammarList() => SpeechGrammarList._create();
   static SpeechGrammarList _create() => JS('SpeechGrammarList', 'new SpeechGrammarList()');
 
-  /// @domName SpeechGrammarList.length; @docsEditable true
+  @DocsEditable @DomName('SpeechGrammarList.length')
   int get length => JS("int", "#.length", this);
 
   SpeechGrammar operator[](int index) => JS("SpeechGrammar", "#[#]", this, index);
@@ -17893,50 +18001,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SpeechGrammar)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SpeechGrammar element) => Collections.contains(this, element);
+  bool contains(SpeechGrammar element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SpeechGrammar element)) => Collections.forEach(this, f);
+  void forEach(void f(SpeechGrammar element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SpeechGrammar element)) => new MappedList<SpeechGrammar, dynamic>(this, f);
+  List mappedBy(f(SpeechGrammar element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SpeechGrammar> where(bool f(SpeechGrammar element)) => new WhereIterable<SpeechGrammar>(this, f);
+  Iterable<SpeechGrammar> where(bool f(SpeechGrammar element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SpeechGrammar element)) => Collections.every(this, f);
+  bool every(bool f(SpeechGrammar element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SpeechGrammar element)) => Collections.any(this, f);
+  bool any(bool f(SpeechGrammar element)) => IterableMixinWorkaround.any(this, f);
 
   List<SpeechGrammar> toList() => new List<SpeechGrammar>.from(this);
   Set<SpeechGrammar> toSet() => new Set<SpeechGrammar>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SpeechGrammar> take(int n) => new ListView<SpeechGrammar>(this, 0, n);
+  List<SpeechGrammar> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SpeechGrammar> takeWhile(bool test(SpeechGrammar value)) {
-    return new TakeWhileIterable<SpeechGrammar>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SpeechGrammar> skip(int n) => new ListView<SpeechGrammar>(this, n, null);
+  List<SpeechGrammar> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SpeechGrammar> skipWhile(bool test(SpeechGrammar value)) {
-    return new SkipWhileIterable<SpeechGrammar>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SpeechGrammar firstMatching(bool test(SpeechGrammar value), { SpeechGrammar orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SpeechGrammar lastMatching(bool test(SpeechGrammar value), {SpeechGrammar orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SpeechGrammar singleMatching(bool test(SpeechGrammar value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SpeechGrammar elementAt(int index) {
@@ -17994,16 +18102,36 @@
     throw new StateError("More than one element");
   }
 
-  SpeechGrammar min([int compare(SpeechGrammar a, SpeechGrammar b)]) => Collections.min(this, compare);
+  SpeechGrammar min([int compare(SpeechGrammar a, SpeechGrammar b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SpeechGrammar max([int compare(SpeechGrammar a, SpeechGrammar b)]) => Collections.max(this, compare);
+  SpeechGrammar max([int compare(SpeechGrammar a, SpeechGrammar b)]) => IterableMixinWorkaround.max(this, compare);
 
   SpeechGrammar removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SpeechGrammar removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SpeechGrammar element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SpeechGrammar element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
@@ -18023,13 +18151,13 @@
 
   // -- end List<SpeechGrammar> mixins.
 
-  /// @domName SpeechGrammarList.addFromString; @docsEditable true
+  @DocsEditable @DomName('SpeechGrammarList.addFromString')
   void addFromString(String string, [num weight]) native;
 
-  /// @domName SpeechGrammarList.addFromUri; @docsEditable true
+  @DocsEditable @DomName('SpeechGrammarList.addFromUri')
   void addFromUri(String src, [num weight]) native;
 
-  /// @domName SpeechGrammarList.item; @docsEditable true
+  @DocsEditable @DomName('SpeechGrammarList.item')
   SpeechGrammar item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18037,10 +18165,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechInputEvent; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechInputEvent')
 class SpeechInputEvent extends Event native "*SpeechInputEvent" {
 
-  /// @domName SpeechInputEvent.results; @docsEditable true
+  @DocsEditable @DomName('SpeechInputEvent.results')
   @Returns('_SpeechInputResultList') @Creates('_SpeechInputResultList')
   final List<SpeechInputResult> results;
 }
@@ -18049,13 +18179,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechInputResult; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechInputResult')
 class SpeechInputResult native "*SpeechInputResult" {
 
-  /// @domName SpeechInputResult.confidence; @docsEditable true
+  @DocsEditable @DomName('SpeechInputResult.confidence')
   final num confidence;
 
-  /// @domName SpeechInputResult.utterance; @docsEditable true
+  @DocsEditable @DomName('SpeechInputResult.utterance')
   final String utterance;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18063,7 +18195,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognition; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechRecognition')
 class SpeechRecognition extends EventTarget native "*SpeechRecognition" {
 
   static const EventStreamProvider<Event> audioEndEvent = const EventStreamProvider<Event>('audioend');
@@ -18088,48 +18222,49 @@
 
   static const EventStreamProvider<Event> startEvent = const EventStreamProvider<Event>('start');
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpeechRecognition() => SpeechRecognition._create();
   static SpeechRecognition _create() => JS('SpeechRecognition', 'new SpeechRecognition()');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   SpeechRecognitionEvents get on =>
     new SpeechRecognitionEvents(this);
 
-  /// @domName SpeechRecognition.continuous; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.continuous')
   bool continuous;
 
-  /// @domName SpeechRecognition.grammars; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.grammars')
   SpeechGrammarList grammars;
 
-  /// @domName SpeechRecognition.interimResults; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.interimResults')
   bool interimResults;
 
-  /// @domName SpeechRecognition.lang; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.lang')
   String lang;
 
-  /// @domName SpeechRecognition.maxAlternatives; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.maxAlternatives')
   int maxAlternatives;
 
-  /// @domName SpeechRecognition.abort; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.abort')
   void abort() native;
 
-  /// @domName SpeechRecognition.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('SpeechRecognition.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName SpeechRecognition.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('SpeechRecognition.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName SpeechRecognition.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('SpeechRecognition.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName SpeechRecognition.start; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.start')
   void start() native;
 
-  /// @domName SpeechRecognition.stop; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognition.stop')
   void stop() native;
 
   Stream<Event> get onAudioEnd => audioEndEvent.forTarget(this);
@@ -18155,42 +18290,42 @@
   Stream<Event> get onStart => startEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class SpeechRecognitionEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   SpeechRecognitionEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get audioEnd => this['audioend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get audioStart => this['audiostart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get end => this['end'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get noMatch => this['nomatch'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get result => this['result'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get soundEnd => this['soundend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get soundStart => this['soundstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get speechEnd => this['speechend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get speechStart => this['speechstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get start => this['start'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18198,13 +18333,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionAlternative; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechRecognitionAlternative')
 class SpeechRecognitionAlternative native "*SpeechRecognitionAlternative" {
 
-  /// @domName SpeechRecognitionAlternative.confidence; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionAlternative.confidence')
   final num confidence;
 
-  /// @domName SpeechRecognitionAlternative.transcript; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionAlternative.transcript')
   final String transcript;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18212,13 +18349,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionError; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechRecognitionError')
 class SpeechRecognitionError extends Event native "*SpeechRecognitionError" {
 
-  /// @domName SpeechRecognitionError.error; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionError.error')
   final String error;
 
-  /// @domName SpeechRecognitionError.message; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionError.message')
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18226,20 +18365,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionEvent; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechRecognitionEvent')
 class SpeechRecognitionEvent extends Event native "*SpeechRecognitionEvent" {
 
-  /// @domName SpeechRecognitionEvent.result; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionEvent.result')
   final SpeechRecognitionResult result;
 
-  /// @domName SpeechRecognitionEvent.resultHistory; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionEvent.resultHistory')
   @Returns('_SpeechRecognitionResultList') @Creates('_SpeechRecognitionResultList')
   final List<SpeechRecognitionResult> resultHistory;
 
-  /// @domName SpeechRecognitionEvent.resultIndex; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionEvent.resultIndex')
   final int resultIndex;
 
-  /// @domName SpeechRecognitionEvent.results; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionEvent.results')
   @Returns('_SpeechRecognitionResultList') @Creates('_SpeechRecognitionResultList')
   final List<SpeechRecognitionResult> results;
 }
@@ -18248,16 +18389,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionResult; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechRecognitionResult')
 class SpeechRecognitionResult native "*SpeechRecognitionResult" {
 
-  /// @domName SpeechRecognitionResult.isFinal; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionResult.isFinal')
   final bool isFinal;
 
-  /// @domName SpeechRecognitionResult.length; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionResult.length')
   final int length;
 
-  /// @domName SpeechRecognitionResult.item; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionResult.item')
   SpeechRecognitionAlternative item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18265,7 +18408,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLError; @docsEditable true
+
+@DocsEditable
+@DomName('SQLError')
 class SqlError native "*SQLError" {
 
   static const int CONSTRAINT_ERR = 6;
@@ -18284,10 +18429,10 @@
 
   static const int VERSION_ERR = 2;
 
-  /// @domName SQLError.code; @docsEditable true
+  @DocsEditable @DomName('SQLError.code')
   final int code;
 
-  /// @domName SQLError.message; @docsEditable true
+  @DocsEditable @DomName('SQLError.message')
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18295,7 +18440,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLException; @docsEditable true
+
+@DocsEditable
+@DomName('SQLException')
 class SqlException native "*SQLException" {
 
   static const int CONSTRAINT_ERR = 6;
@@ -18314,10 +18461,10 @@
 
   static const int VERSION_ERR = 2;
 
-  /// @domName SQLException.code; @docsEditable true
+  @DocsEditable @DomName('SQLException.code')
   final int code;
 
-  /// @domName SQLException.message; @docsEditable true
+  @DocsEditable @DomName('SQLException.message')
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18325,16 +18472,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLResultSet; @docsEditable true
+
+@DocsEditable
+@DomName('SQLResultSet')
 class SqlResultSet native "*SQLResultSet" {
 
-  /// @domName SQLResultSet.insertId; @docsEditable true
+  @DocsEditable @DomName('SQLResultSet.insertId')
   final int insertId;
 
-  /// @domName SQLResultSet.rows; @docsEditable true
+  @DocsEditable @DomName('SQLResultSet.rows')
   final SqlResultSetRowList rows;
 
-  /// @domName SQLResultSet.rowsAffected; @docsEditable true
+  @DocsEditable @DomName('SQLResultSet.rowsAffected')
   final int rowsAffected;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18342,10 +18491,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLResultSetRowList; @docsEditable true
+
+@DocsEditable
+@DomName('SQLResultSetRowList')
 class SqlResultSetRowList implements JavaScriptIndexingBehavior, List<Map> native "*SQLResultSetRowList" {
 
-  /// @domName SQLResultSetRowList.length; @docsEditable true
+  @DocsEditable @DomName('SQLResultSetRowList.length')
   int get length => JS("int", "#.length", this);
 
   Map operator[](int index) => JS("Map", "#[#]", this, index);
@@ -18366,50 +18517,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Map)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Map element) => Collections.contains(this, element);
+  bool contains(Map element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Map element)) => Collections.forEach(this, f);
+  void forEach(void f(Map element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Map element)) => new MappedList<Map, dynamic>(this, f);
+  List mappedBy(f(Map element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Map> where(bool f(Map element)) => new WhereIterable<Map>(this, f);
+  Iterable<Map> where(bool f(Map element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Map element)) => Collections.every(this, f);
+  bool every(bool f(Map element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Map element)) => Collections.any(this, f);
+  bool any(bool f(Map element)) => IterableMixinWorkaround.any(this, f);
 
   List<Map> toList() => new List<Map>.from(this);
   Set<Map> toSet() => new Set<Map>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Map> take(int n) => new ListView<Map>(this, 0, n);
+  List<Map> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Map> takeWhile(bool test(Map value)) {
-    return new TakeWhileIterable<Map>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Map> skip(int n) => new ListView<Map>(this, n, null);
+  List<Map> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Map> skipWhile(bool test(Map value)) {
-    return new SkipWhileIterable<Map>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Map firstMatching(bool test(Map value), { Map orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Map lastMatching(bool test(Map value), {Map orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Map singleMatching(bool test(Map value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Map elementAt(int index) {
@@ -18467,16 +18618,36 @@
     throw new StateError("More than one element");
   }
 
-  Map min([int compare(Map a, Map b)]) => Collections.min(this, compare);
+  Map min([int compare(Map a, Map b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Map max([int compare(Map a, Map b)]) => Collections.max(this, compare);
+  Map max([int compare(Map a, Map b)]) => IterableMixinWorkaround.max(this, compare);
 
   Map removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Map removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Map element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Map element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
@@ -18496,12 +18667,11 @@
 
   // -- end List<Map> mixins.
 
-  /// @domName SQLResultSetRowList.item; @docsEditable true
   Map item(int index) {
     return convertNativeToDart_Dictionary(_item_1(index));
   }
   @JSName('item')
-  @Creates('=Object')
+  @DocsEditable @DomName('SQLResultSetRowList.item') @Creates('=Object')
   _item_1(index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18509,10 +18679,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLTransaction; @docsEditable true
+
+@DocsEditable
+@DomName('SQLTransaction')
 class SqlTransaction native "*SQLTransaction" {
 
-  /// @domName SQLTransaction.executeSql; @docsEditable true
+  @DocsEditable @DomName('SQLTransaction.executeSql')
   void executeSql(String sqlStatement, List arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18520,10 +18692,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLTransactionSync; @docsEditable true
+
+@DocsEditable
+@DomName('SQLTransactionSync')
 class SqlTransactionSync native "*SQLTransactionSync" {
 
-  /// @domName SQLTransactionSync.executeSql; @docsEditable true
+  @DocsEditable @DomName('SQLTransactionSync.executeSql')
   SqlResultSet executeSql(String sqlStatement, List arguments) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18531,7 +18705,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Storage
+@DocsEditable
+@DomName('Storage')
 class Storage implements Map<String, String>  native "*Storage" {
 
   // TODO(nweiz): update this when maps support lazy iteration
@@ -18581,28 +18756,28 @@
 
   bool get isEmpty => $dom_key(0) == null;
 
-  /// @domName Storage.length; @docsEditable true
   @JSName('length')
+  @DocsEditable @DomName('Storage.length')
   final int $dom_length;
 
-  /// @domName Storage.clear; @docsEditable true
   @JSName('clear')
+  @DocsEditable @DomName('Storage.clear')
   void $dom_clear() native;
 
-  /// @domName Storage.getItem; @docsEditable true
   @JSName('getItem')
+  @DocsEditable @DomName('Storage.getItem')
   String $dom_getItem(String key) native;
 
-  /// @domName Storage.key; @docsEditable true
   @JSName('key')
+  @DocsEditable @DomName('Storage.key')
   String $dom_key(int index) native;
 
-  /// @domName Storage.removeItem; @docsEditable true
   @JSName('removeItem')
+  @DocsEditable @DomName('Storage.removeItem')
   void $dom_removeItem(String key) native;
 
-  /// @domName Storage.setItem; @docsEditable true
   @JSName('setItem')
+  @DocsEditable @DomName('Storage.setItem')
   void $dom_setItem(String key, String data) native;
 
 }
@@ -18611,25 +18786,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StorageEvent; @docsEditable true
+
+@DocsEditable
+@DomName('StorageEvent')
 class StorageEvent extends Event native "*StorageEvent" {
 
-  /// @domName StorageEvent.key; @docsEditable true
+  @DocsEditable @DomName('StorageEvent.key')
   final String key;
 
-  /// @domName StorageEvent.newValue; @docsEditable true
+  @DocsEditable @DomName('StorageEvent.newValue')
   final String newValue;
 
-  /// @domName StorageEvent.oldValue; @docsEditable true
+  @DocsEditable @DomName('StorageEvent.oldValue')
   final String oldValue;
 
-  /// @domName StorageEvent.storageArea; @docsEditable true
+  @DocsEditable @DomName('StorageEvent.storageArea')
   final Storage storageArea;
 
-  /// @domName StorageEvent.url; @docsEditable true
+  @DocsEditable @DomName('StorageEvent.url')
   final String url;
 
-  /// @domName StorageEvent.initStorageEvent; @docsEditable true
+  @DocsEditable @DomName('StorageEvent.initStorageEvent')
   void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18637,17 +18814,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StorageInfo; @docsEditable true
+
+@DocsEditable
+@DomName('StorageInfo')
 class StorageInfo native "*StorageInfo" {
 
   static const int PERSISTENT = 1;
 
   static const int TEMPORARY = 0;
 
-  /// @domName StorageInfo.queryUsageAndQuota; @docsEditable true
+  @DocsEditable @DomName('StorageInfo.queryUsageAndQuota')
   void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]) native;
 
-  /// @domName StorageInfo.requestQuota; @docsEditable true
+  @DocsEditable @DomName('StorageInfo.requestQuota')
   void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18687,25 +18866,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLStyleElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLStyleElement')
 class StyleElement extends Element native "*HTMLStyleElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory StyleElement() => document.$dom_createElement("style");
 
-  /// @domName HTMLStyleElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLStyleElement.disabled')
   bool disabled;
 
-  /// @domName HTMLStyleElement.media; @docsEditable true
+  @DocsEditable @DomName('HTMLStyleElement.media')
   String media;
 
-  /// @domName HTMLStyleElement.scoped; @docsEditable true
+  @DocsEditable @DomName('HTMLStyleElement.scoped')
   bool scoped;
 
-  /// @domName HTMLStyleElement.sheet; @docsEditable true
+  @DocsEditable @DomName('HTMLStyleElement.sheet')
   final StyleSheet sheet;
 
-  /// @domName HTMLStyleElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLStyleElement.type')
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18713,13 +18894,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StyleMedia; @docsEditable true
+
+@DocsEditable
+@DomName('StyleMedia')
 class StyleMedia native "*StyleMedia" {
 
-  /// @domName StyleMedia.type; @docsEditable true
+  @DocsEditable @DomName('StyleMedia.type')
   final String type;
 
-  /// @domName StyleMedia.matchMedium; @docsEditable true
+  @DocsEditable @DomName('StyleMedia.matchMedium')
   bool matchMedium(String mediaquery) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18727,28 +18910,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StyleSheet; @docsEditable true
+
+@DocsEditable
+@DomName('StyleSheet')
 class StyleSheet native "*StyleSheet" {
 
-  /// @domName StyleSheet.disabled; @docsEditable true
+  @DocsEditable @DomName('StyleSheet.disabled')
   bool disabled;
 
-  /// @domName StyleSheet.href; @docsEditable true
+  @DocsEditable @DomName('StyleSheet.href')
   final String href;
 
-  /// @domName StyleSheet.media; @docsEditable true
+  @DocsEditable @DomName('StyleSheet.media')
   final MediaList media;
 
-  /// @domName StyleSheet.ownerNode; @docsEditable true
+  @DocsEditable @DomName('StyleSheet.ownerNode')
   final Node ownerNode;
 
-  /// @domName StyleSheet.parentStyleSheet; @docsEditable true
+  @DocsEditable @DomName('StyleSheet.parentStyleSheet')
   final StyleSheet parentStyleSheet;
 
-  /// @domName StyleSheet.title; @docsEditable true
+  @DocsEditable @DomName('StyleSheet.title')
   final String title;
 
-  /// @domName StyleSheet.type; @docsEditable true
+  @DocsEditable @DomName('StyleSheet.type')
   final String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18756,10 +18941,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableCaptionElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTableCaptionElement')
 class TableCaptionElement extends Element native "*HTMLTableCaptionElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableCaptionElement() => document.$dom_createElement("caption");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18767,22 +18954,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableCellElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTableCellElement')
 class TableCellElement extends Element native "*HTMLTableCellElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableCellElement() => document.$dom_createElement("td");
 
-  /// @domName HTMLTableCellElement.cellIndex; @docsEditable true
+  @DocsEditable @DomName('HTMLTableCellElement.cellIndex')
   final int cellIndex;
 
-  /// @domName HTMLTableCellElement.colSpan; @docsEditable true
+  @DocsEditable @DomName('HTMLTableCellElement.colSpan')
   int colSpan;
 
-  /// @domName HTMLTableCellElement.headers; @docsEditable true
+  @DocsEditable @DomName('HTMLTableCellElement.headers')
   String headers;
 
-  /// @domName HTMLTableCellElement.rowSpan; @docsEditable true
+  @DocsEditable @DomName('HTMLTableCellElement.rowSpan')
   int rowSpan;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18790,13 +18979,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableColElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTableColElement')
 class TableColElement extends Element native "*HTMLTableColElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableColElement() => document.$dom_createElement("col");
 
-  /// @domName HTMLTableColElement.span; @docsEditable true
+  @DocsEditable @DomName('HTMLTableColElement.span')
   int span;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18804,52 +18995,53 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableElement
+@DocsEditable
+@DomName('HTMLTableElement')
 class TableElement extends Element native "*HTMLTableElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableElement() => document.$dom_createElement("table");
 
-  /// @domName HTMLTableElement.border; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.border')
   String border;
 
-  /// @domName HTMLTableElement.caption; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.caption')
   TableCaptionElement caption;
 
-  /// @domName HTMLTableElement.rows; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.rows')
   final HtmlCollection rows;
 
-  /// @domName HTMLTableElement.tBodies; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.tBodies')
   final HtmlCollection tBodies;
 
-  /// @domName HTMLTableElement.tFoot; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.tFoot')
   TableSectionElement tFoot;
 
-  /// @domName HTMLTableElement.tHead; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.tHead')
   TableSectionElement tHead;
 
-  /// @domName HTMLTableElement.createCaption; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.createCaption')
   Element createCaption() native;
 
-  /// @domName HTMLTableElement.createTFoot; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.createTFoot')
   Element createTFoot() native;
 
-  /// @domName HTMLTableElement.createTHead; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.createTHead')
   Element createTHead() native;
 
-  /// @domName HTMLTableElement.deleteCaption; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.deleteCaption')
   void deleteCaption() native;
 
-  /// @domName HTMLTableElement.deleteRow; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.deleteRow')
   void deleteRow(int index) native;
 
-  /// @domName HTMLTableElement.deleteTFoot; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.deleteTFoot')
   void deleteTFoot() native;
 
-  /// @domName HTMLTableElement.deleteTHead; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.deleteTHead')
   void deleteTHead() native;
 
-  /// @domName HTMLTableElement.insertRow; @docsEditable true
+  @DocsEditable @DomName('HTMLTableElement.insertRow')
   Element insertRow(int index) native;
 
 
@@ -18870,25 +19062,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableRowElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTableRowElement')
 class TableRowElement extends Element native "*HTMLTableRowElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableRowElement() => document.$dom_createElement("tr");
 
-  /// @domName HTMLTableRowElement.cells; @docsEditable true
+  @DocsEditable @DomName('HTMLTableRowElement.cells')
   final HtmlCollection cells;
 
-  /// @domName HTMLTableRowElement.rowIndex; @docsEditable true
+  @DocsEditable @DomName('HTMLTableRowElement.rowIndex')
   final int rowIndex;
 
-  /// @domName HTMLTableRowElement.sectionRowIndex; @docsEditable true
+  @DocsEditable @DomName('HTMLTableRowElement.sectionRowIndex')
   final int sectionRowIndex;
 
-  /// @domName HTMLTableRowElement.deleteCell; @docsEditable true
+  @DocsEditable @DomName('HTMLTableRowElement.deleteCell')
   void deleteCell(int index) native;
 
-  /// @domName HTMLTableRowElement.insertCell; @docsEditable true
+  @DocsEditable @DomName('HTMLTableRowElement.insertCell')
   Element insertCell(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18896,19 +19090,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableSectionElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTableSectionElement')
 class TableSectionElement extends Element native "*HTMLTableSectionElement" {
 
-  /// @domName HTMLTableSectionElement.chOff; @docsEditable true
-  String chOff;
-
-  /// @domName HTMLTableSectionElement.rows; @docsEditable true
+  @DocsEditable @DomName('HTMLTableSectionElement.rows')
   final HtmlCollection rows;
 
-  /// @domName HTMLTableSectionElement.deleteRow; @docsEditable true
+  @DocsEditable @DomName('HTMLTableSectionElement.deleteRow')
   void deleteRow(int index) native;
 
-  /// @domName HTMLTableSectionElement.insertRow; @docsEditable true
+  @DocsEditable @DomName('HTMLTableSectionElement.insertRow')
   Element insertRow(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18918,17 +19111,18 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Text
+@DocsEditable
+@DomName('Text')
 class Text extends CharacterData native "*Text" {
   factory Text(String data) => _TextFactoryProvider.createText(data);
 
-  /// @domName Text.wholeText; @docsEditable true
+  @DocsEditable @DomName('Text.wholeText')
   final String wholeText;
 
-  /// @domName Text.replaceWholeText; @docsEditable true
+  @DocsEditable @DomName('Text.replaceWholeText')
   Text replaceWholeText(String content) native;
 
-  /// @domName Text.splitText; @docsEditable true
+  @DocsEditable @DomName('Text.splitText')
   Text splitText(int offset) native;
 
 }
@@ -18937,95 +19131,97 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTextAreaElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTextAreaElement')
 class TextAreaElement extends Element native "*HTMLTextAreaElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TextAreaElement() => document.$dom_createElement("textarea");
 
-  /// @domName HTMLTextAreaElement.autofocus; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLTextAreaElement.cols; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.cols')
   int cols;
 
-  /// @domName HTMLTextAreaElement.defaultValue; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.defaultValue')
   String defaultValue;
 
-  /// @domName HTMLTextAreaElement.dirName; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.dirName')
   String dirName;
 
-  /// @domName HTMLTextAreaElement.disabled; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.disabled')
   bool disabled;
 
-  /// @domName HTMLTextAreaElement.form; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.form')
   final FormElement form;
 
-  /// @domName HTMLTextAreaElement.labels; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.labels')
   @Returns('NodeList') @Creates('NodeList')
   final List<Node> labels;
 
-  /// @domName HTMLTextAreaElement.maxLength; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLTextAreaElement.name; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.name')
   String name;
 
-  /// @domName HTMLTextAreaElement.placeholder; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLTextAreaElement.readOnly; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLTextAreaElement.required; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.required')
   bool required;
 
-  /// @domName HTMLTextAreaElement.rows; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.rows')
   int rows;
 
-  /// @domName HTMLTextAreaElement.selectionDirection; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.selectionDirection')
   String selectionDirection;
 
-  /// @domName HTMLTextAreaElement.selectionEnd; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.selectionEnd')
   int selectionEnd;
 
-  /// @domName HTMLTextAreaElement.selectionStart; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.selectionStart')
   int selectionStart;
 
-  /// @domName HTMLTextAreaElement.textLength; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.textLength')
   final int textLength;
 
-  /// @domName HTMLTextAreaElement.type; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.type')
   final String type;
 
-  /// @domName HTMLTextAreaElement.validationMessage; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.validationMessage')
   final String validationMessage;
 
-  /// @domName HTMLTextAreaElement.validity; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.validity')
   final ValidityState validity;
 
-  /// @domName HTMLTextAreaElement.value; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.value')
   String value;
 
-  /// @domName HTMLTextAreaElement.willValidate; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.willValidate')
   final bool willValidate;
 
-  /// @domName HTMLTextAreaElement.wrap; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.wrap')
   String wrap;
 
-  /// @domName HTMLTextAreaElement.checkValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.checkValidity')
   bool checkValidity() native;
 
-  /// @domName HTMLTextAreaElement.select; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.select')
   void select() native;
 
-  /// @domName HTMLTextAreaElement.setCustomValidity; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.setCustomValidity')
   void setCustomValidity(String error) native;
 
-  /// @domName HTMLTextAreaElement.setRangeText; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.setRangeText')
   void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
 
-  /// @domName HTMLTextAreaElement.setSelectionRange; @docsEditable true
+  @DocsEditable @DomName('HTMLTextAreaElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19033,13 +19229,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextEvent; @docsEditable true
+
+@DocsEditable
+@DomName('TextEvent')
 class TextEvent extends UIEvent native "*TextEvent" {
 
-  /// @domName TextEvent.data; @docsEditable true
+  @DocsEditable @DomName('TextEvent.data')
   final String data;
 
-  /// @domName TextEvent.initTextEvent; @docsEditable true
+  @DocsEditable @DomName('TextEvent.initTextEvent')
   void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19047,10 +19245,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextMetrics; @docsEditable true
+
+@DocsEditable
+@DomName('TextMetrics')
 class TextMetrics native "*TextMetrics" {
 
-  /// @domName TextMetrics.width; @docsEditable true
+  @DocsEditable @DomName('TextMetrics.width')
   final num width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19058,60 +19258,63 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrack; @docsEditable true
+
+@DocsEditable
+@DomName('TextTrack')
 class TextTrack extends EventTarget native "*TextTrack" {
 
   static const EventStreamProvider<Event> cueChangeEvent = const EventStreamProvider<Event>('cuechange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TextTrackEvents get on =>
     new TextTrackEvents(this);
 
-  /// @domName TextTrack.activeCues; @docsEditable true
+  @DocsEditable @DomName('TextTrack.activeCues')
   final TextTrackCueList activeCues;
 
-  /// @domName TextTrack.cues; @docsEditable true
+  @DocsEditable @DomName('TextTrack.cues')
   final TextTrackCueList cues;
 
-  /// @domName TextTrack.kind; @docsEditable true
+  @DocsEditable @DomName('TextTrack.kind')
   final String kind;
 
-  /// @domName TextTrack.label; @docsEditable true
+  @DocsEditable @DomName('TextTrack.label')
   final String label;
 
-  /// @domName TextTrack.language; @docsEditable true
+  @DocsEditable @DomName('TextTrack.language')
   final String language;
 
-  /// @domName TextTrack.mode; @docsEditable true
+  @DocsEditable @DomName('TextTrack.mode')
   String mode;
 
-  /// @domName TextTrack.addCue; @docsEditable true
+  @DocsEditable @DomName('TextTrack.addCue')
   void addCue(TextTrackCue cue) native;
 
-  /// @domName TextTrack.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('TextTrack.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName TextTrack.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('TextTrack.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName TextTrack.removeCue; @docsEditable true
+  @DocsEditable @DomName('TextTrack.removeCue')
   void removeCue(TextTrackCue cue) native;
 
-  /// @domName TextTrack.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('TextTrack.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onCueChange => cueChangeEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class TextTrackEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TextTrackEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cueChange => this['cuechange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19119,71 +19322,74 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrackCue; @docsEditable true
+
+@DocsEditable
+@DomName('TextTrackCue')
 class TextTrackCue extends EventTarget native "*TextTrackCue" {
 
   static const EventStreamProvider<Event> enterEvent = const EventStreamProvider<Event>('enter');
 
   static const EventStreamProvider<Event> exitEvent = const EventStreamProvider<Event>('exit');
 
-  ///@docsEditable true
+  @DocsEditable
   factory TextTrackCue(num startTime, num endTime, String text) => TextTrackCue._create(startTime, endTime, text);
   static TextTrackCue _create(num startTime, num endTime, String text) => JS('TextTrackCue', 'new TextTrackCue(#,#,#)', startTime, endTime, text);
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TextTrackCueEvents get on =>
     new TextTrackCueEvents(this);
 
-  /// @domName TextTrackCue.align; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.align')
   String align;
 
-  /// @domName TextTrackCue.endTime; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.endTime')
   num endTime;
 
-  /// @domName TextTrackCue.id; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.id')
   String id;
 
-  /// @domName TextTrackCue.line; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.line')
   int line;
 
-  /// @domName TextTrackCue.pauseOnExit; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.pauseOnExit')
   bool pauseOnExit;
 
-  /// @domName TextTrackCue.position; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.position')
   int position;
 
-  /// @domName TextTrackCue.size; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.size')
   int size;
 
-  /// @domName TextTrackCue.snapToLines; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.snapToLines')
   bool snapToLines;
 
-  /// @domName TextTrackCue.startTime; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.startTime')
   num startTime;
 
-  /// @domName TextTrackCue.text; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.text')
   String text;
 
-  /// @domName TextTrackCue.track; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.track')
   final TextTrack track;
 
-  /// @domName TextTrackCue.vertical; @docsEditable true
+  @DocsEditable @DomName('TextTrackCue.vertical')
   String vertical;
 
-  /// @domName TextTrackCue.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('TextTrackCue.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName TextTrackCue.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('TextTrackCue.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName TextTrackCue.getCueAsHTML; @docsEditable true
   @JSName('getCueAsHTML')
+  @DocsEditable @DomName('TextTrackCue.getCueAsHTML')
   DocumentFragment getCueAsHtml() native;
 
-  /// @domName TextTrackCue.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('TextTrackCue.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onEnter => enterEvent.forTarget(this);
@@ -19191,15 +19397,15 @@
   Stream<Event> get onExit => exitEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class TextTrackCueEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TextTrackCueEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get enter => this['enter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get exit => this['exit'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19207,10 +19413,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrackCueList; @docsEditable true
+
+@DocsEditable
+@DomName('TextTrackCueList')
 class TextTrackCueList implements List<TextTrackCue>, JavaScriptIndexingBehavior native "*TextTrackCueList" {
 
-  /// @domName TextTrackCueList.length; @docsEditable true
+  @DocsEditable @DomName('TextTrackCueList.length')
   int get length => JS("int", "#.length", this);
 
   TextTrackCue operator[](int index) => JS("TextTrackCue", "#[#]", this, index);
@@ -19231,50 +19439,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, TextTrackCue)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(TextTrackCue element) => Collections.contains(this, element);
+  bool contains(TextTrackCue element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(TextTrackCue element)) => Collections.forEach(this, f);
+  void forEach(void f(TextTrackCue element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(TextTrackCue element)) => new MappedList<TextTrackCue, dynamic>(this, f);
+  List mappedBy(f(TextTrackCue element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<TextTrackCue> where(bool f(TextTrackCue element)) => new WhereIterable<TextTrackCue>(this, f);
+  Iterable<TextTrackCue> where(bool f(TextTrackCue element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(TextTrackCue element)) => Collections.every(this, f);
+  bool every(bool f(TextTrackCue element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(TextTrackCue element)) => Collections.any(this, f);
+  bool any(bool f(TextTrackCue element)) => IterableMixinWorkaround.any(this, f);
 
   List<TextTrackCue> toList() => new List<TextTrackCue>.from(this);
   Set<TextTrackCue> toSet() => new Set<TextTrackCue>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<TextTrackCue> take(int n) => new ListView<TextTrackCue>(this, 0, n);
+  List<TextTrackCue> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<TextTrackCue> takeWhile(bool test(TextTrackCue value)) {
-    return new TakeWhileIterable<TextTrackCue>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<TextTrackCue> skip(int n) => new ListView<TextTrackCue>(this, n, null);
+  List<TextTrackCue> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<TextTrackCue> skipWhile(bool test(TextTrackCue value)) {
-    return new SkipWhileIterable<TextTrackCue>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   TextTrackCue firstMatching(bool test(TextTrackCue value), { TextTrackCue orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   TextTrackCue lastMatching(bool test(TextTrackCue value), {TextTrackCue orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   TextTrackCue singleMatching(bool test(TextTrackCue value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   TextTrackCue elementAt(int index) {
@@ -19332,16 +19540,36 @@
     throw new StateError("More than one element");
   }
 
-  TextTrackCue min([int compare(TextTrackCue a, TextTrackCue b)]) => Collections.min(this, compare);
+  TextTrackCue min([int compare(TextTrackCue a, TextTrackCue b)]) => IterableMixinWorkaround.min(this, compare);
 
-  TextTrackCue max([int compare(TextTrackCue a, TextTrackCue b)]) => Collections.max(this, compare);
+  TextTrackCue max([int compare(TextTrackCue a, TextTrackCue b)]) => IterableMixinWorkaround.max(this, compare);
 
   TextTrackCue removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   TextTrackCue removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(TextTrackCue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(TextTrackCue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
@@ -19361,10 +19589,10 @@
 
   // -- end List<TextTrackCue> mixins.
 
-  /// @domName TextTrackCueList.getCueById; @docsEditable true
+  @DocsEditable @DomName('TextTrackCueList.getCueById')
   TextTrackCue getCueById(String id) native;
 
-  /// @domName TextTrackCueList.item; @docsEditable true
+  @DocsEditable @DomName('TextTrackCueList.item')
   TextTrackCue item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19372,16 +19600,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrackList; @docsEditable true
+
+@DocsEditable
+@DomName('TextTrackList')
 class TextTrackList extends EventTarget implements JavaScriptIndexingBehavior, List<TextTrack> native "*TextTrackList" {
 
   static const EventStreamProvider<TrackEvent> addTrackEvent = const EventStreamProvider<TrackEvent>('addtrack');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TextTrackListEvents get on =>
     new TextTrackListEvents(this);
 
-  /// @domName TextTrackList.length; @docsEditable true
+  @DocsEditable @DomName('TextTrackList.length')
   int get length => JS("int", "#.length", this);
 
   TextTrack operator[](int index) => JS("TextTrack", "#[#]", this, index);
@@ -19402,50 +19633,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, TextTrack)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(TextTrack element) => Collections.contains(this, element);
+  bool contains(TextTrack element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(TextTrack element)) => Collections.forEach(this, f);
+  void forEach(void f(TextTrack element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(TextTrack element)) => new MappedList<TextTrack, dynamic>(this, f);
+  List mappedBy(f(TextTrack element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<TextTrack> where(bool f(TextTrack element)) => new WhereIterable<TextTrack>(this, f);
+  Iterable<TextTrack> where(bool f(TextTrack element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(TextTrack element)) => Collections.every(this, f);
+  bool every(bool f(TextTrack element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(TextTrack element)) => Collections.any(this, f);
+  bool any(bool f(TextTrack element)) => IterableMixinWorkaround.any(this, f);
 
   List<TextTrack> toList() => new List<TextTrack>.from(this);
   Set<TextTrack> toSet() => new Set<TextTrack>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<TextTrack> take(int n) => new ListView<TextTrack>(this, 0, n);
+  List<TextTrack> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<TextTrack> takeWhile(bool test(TextTrack value)) {
-    return new TakeWhileIterable<TextTrack>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<TextTrack> skip(int n) => new ListView<TextTrack>(this, n, null);
+  List<TextTrack> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<TextTrack> skipWhile(bool test(TextTrack value)) {
-    return new SkipWhileIterable<TextTrack>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   TextTrack firstMatching(bool test(TextTrack value), { TextTrack orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   TextTrack lastMatching(bool test(TextTrack value), {TextTrack orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   TextTrack singleMatching(bool test(TextTrack value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   TextTrack elementAt(int index) {
@@ -19503,16 +19734,36 @@
     throw new StateError("More than one element");
   }
 
-  TextTrack min([int compare(TextTrack a, TextTrack b)]) => Collections.min(this, compare);
+  TextTrack min([int compare(TextTrack a, TextTrack b)]) => IterableMixinWorkaround.min(this, compare);
 
-  TextTrack max([int compare(TextTrack a, TextTrack b)]) => Collections.max(this, compare);
+  TextTrack max([int compare(TextTrack a, TextTrack b)]) => IterableMixinWorkaround.max(this, compare);
 
   TextTrack removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   TextTrack removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(TextTrack element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(TextTrack element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
@@ -19532,30 +19783,30 @@
 
   // -- end List<TextTrack> mixins.
 
-  /// @domName TextTrackList.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('TextTrackList.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName TextTrackList.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('TextTrackList.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName TextTrackList.item; @docsEditable true
+  @DocsEditable @DomName('TextTrackList.item')
   TextTrack item(int index) native;
 
-  /// @domName TextTrackList.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('TextTrackList.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<TrackEvent> get onAddTrack => addTrackEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class TextTrackListEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TextTrackListEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get addTrack => this['addtrack'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19563,16 +19814,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TimeRanges; @docsEditable true
+
+@DocsEditable
+@DomName('TimeRanges')
 class TimeRanges native "*TimeRanges" {
 
-  /// @domName TimeRanges.length; @docsEditable true
+  @DocsEditable @DomName('TimeRanges.length')
   final int length;
 
-  /// @domName TimeRanges.end; @docsEditable true
+  @DocsEditable @DomName('TimeRanges.end')
   num end(int index) native;
 
-  /// @domName TimeRanges.start; @docsEditable true
+  @DocsEditable @DomName('TimeRanges.start')
   num start(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19588,10 +19841,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTitleElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTitleElement')
 class TitleElement extends Element native "*HTMLTitleElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TitleElement() => document.$dom_createElement("title");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19599,46 +19854,47 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Touch; @docsEditable true
+
+@DocsEditable
+@DomName('Touch')
 class Touch native "*Touch" {
 
-  /// @domName Touch.clientX; @docsEditable true
+  @DocsEditable @DomName('Touch.clientX')
   final int clientX;
 
-  /// @domName Touch.clientY; @docsEditable true
+  @DocsEditable @DomName('Touch.clientY')
   final int clientY;
 
-  /// @domName Touch.identifier; @docsEditable true
+  @DocsEditable @DomName('Touch.identifier')
   final int identifier;
 
-  /// @domName Touch.pageX; @docsEditable true
+  @DocsEditable @DomName('Touch.pageX')
   final int pageX;
 
-  /// @domName Touch.pageY; @docsEditable true
+  @DocsEditable @DomName('Touch.pageY')
   final int pageY;
 
-  /// @domName Touch.screenX; @docsEditable true
+  @DocsEditable @DomName('Touch.screenX')
   final int screenX;
 
-  /// @domName Touch.screenY; @docsEditable true
+  @DocsEditable @DomName('Touch.screenY')
   final int screenY;
 
-  /// @domName Touch.target; @docsEditable true
   EventTarget get target => _convertNativeToDart_EventTarget(this._target);
   @JSName('target')
-  @Creates('Element|Document') @Returns('Element|Document')
+  @DocsEditable @DomName('Touch.target') @Creates('Element|Document') @Returns('Element|Document')
   final dynamic _target;
 
-  /// @domName Touch.webkitForce; @docsEditable true
+  @DocsEditable @DomName('Touch.webkitForce')
   final num webkitForce;
 
-  /// @domName Touch.webkitRadiusX; @docsEditable true
+  @DocsEditable @DomName('Touch.webkitRadiusX')
   final int webkitRadiusX;
 
-  /// @domName Touch.webkitRadiusY; @docsEditable true
+  @DocsEditable @DomName('Touch.webkitRadiusY')
   final int webkitRadiusY;
 
-  /// @domName Touch.webkitRotationAngle; @docsEditable true
+  @DocsEditable @DomName('Touch.webkitRotationAngle')
   final num webkitRotationAngle;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19646,31 +19902,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TouchEvent; @docsEditable true
+
+@DocsEditable
+@DomName('TouchEvent')
 class TouchEvent extends UIEvent native "*TouchEvent" {
 
-  /// @domName TouchEvent.altKey; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.altKey')
   final bool altKey;
 
-  /// @domName TouchEvent.changedTouches; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.changedTouches')
   final TouchList changedTouches;
 
-  /// @domName TouchEvent.ctrlKey; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.ctrlKey')
   final bool ctrlKey;
 
-  /// @domName TouchEvent.metaKey; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.metaKey')
   final bool metaKey;
 
-  /// @domName TouchEvent.shiftKey; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.shiftKey')
   final bool shiftKey;
 
-  /// @domName TouchEvent.targetTouches; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.targetTouches')
   final TouchList targetTouches;
 
-  /// @domName TouchEvent.touches; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.touches')
   final TouchList touches;
 
-  /// @domName TouchEvent.initTouchEvent; @docsEditable true
+  @DocsEditable @DomName('TouchEvent.initTouchEvent')
   void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19678,10 +19936,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TouchList; @docsEditable true
+
+@DocsEditable
+@DomName('TouchList')
 class TouchList implements JavaScriptIndexingBehavior, List<Touch> native "*TouchList" {
 
-  /// @domName TouchList.length; @docsEditable true
+  @DocsEditable @DomName('TouchList.length')
   int get length => JS("int", "#.length", this);
 
   Touch operator[](int index) => JS("Touch", "#[#]", this, index);
@@ -19702,50 +19962,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Touch)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Touch element) => Collections.contains(this, element);
+  bool contains(Touch element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Touch element)) => Collections.forEach(this, f);
+  void forEach(void f(Touch element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Touch element)) => new MappedList<Touch, dynamic>(this, f);
+  List mappedBy(f(Touch element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Touch> where(bool f(Touch element)) => new WhereIterable<Touch>(this, f);
+  Iterable<Touch> where(bool f(Touch element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Touch element)) => Collections.every(this, f);
+  bool every(bool f(Touch element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Touch element)) => Collections.any(this, f);
+  bool any(bool f(Touch element)) => IterableMixinWorkaround.any(this, f);
 
   List<Touch> toList() => new List<Touch>.from(this);
   Set<Touch> toSet() => new Set<Touch>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Touch> take(int n) => new ListView<Touch>(this, 0, n);
+  List<Touch> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Touch> takeWhile(bool test(Touch value)) {
-    return new TakeWhileIterable<Touch>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Touch> skip(int n) => new ListView<Touch>(this, n, null);
+  List<Touch> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Touch> skipWhile(bool test(Touch value)) {
-    return new SkipWhileIterable<Touch>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Touch firstMatching(bool test(Touch value), { Touch orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Touch lastMatching(bool test(Touch value), {Touch orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Touch singleMatching(bool test(Touch value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Touch elementAt(int index) {
@@ -19803,16 +20063,36 @@
     throw new StateError("More than one element");
   }
 
-  Touch min([int compare(Touch a, Touch b)]) => Collections.min(this, compare);
+  Touch min([int compare(Touch a, Touch b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Touch max([int compare(Touch a, Touch b)]) => Collections.max(this, compare);
+  Touch max([int compare(Touch a, Touch b)]) => IterableMixinWorkaround.max(this, compare);
 
   Touch removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Touch removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Touch element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Touch element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
@@ -19832,7 +20112,7 @@
 
   // -- end List<Touch> mixins.
 
-  /// @domName TouchList.item; @docsEditable true
+  @DocsEditable @DomName('TouchList.item')
   Touch item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19840,13 +20120,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTrackElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLTrackElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class TrackElement extends Element native "*HTMLTrackElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TrackElement() => document.$dom_createElement("track");
 
   /// Checks if this type is supported on the current platform.
@@ -19860,26 +20142,26 @@
 
   static const int NONE = 0;
 
-  /// @domName HTMLTrackElement.defaultValue; @docsEditable true
   @JSName('default')
+  @DocsEditable @DomName('HTMLTrackElement.default')
   bool defaultValue;
 
-  /// @domName HTMLTrackElement.kind; @docsEditable true
+  @DocsEditable @DomName('HTMLTrackElement.kind')
   String kind;
 
-  /// @domName HTMLTrackElement.label; @docsEditable true
+  @DocsEditable @DomName('HTMLTrackElement.label')
   String label;
 
-  /// @domName HTMLTrackElement.readyState; @docsEditable true
+  @DocsEditable @DomName('HTMLTrackElement.readyState')
   final int readyState;
 
-  /// @domName HTMLTrackElement.src; @docsEditable true
+  @DocsEditable @DomName('HTMLTrackElement.src')
   String src;
 
-  /// @domName HTMLTrackElement.srclang; @docsEditable true
+  @DocsEditable @DomName('HTMLTrackElement.srclang')
   String srclang;
 
-  /// @domName HTMLTrackElement.track; @docsEditable true
+  @DocsEditable @DomName('HTMLTrackElement.track')
   final TextTrack track;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19887,10 +20169,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TrackEvent; @docsEditable true
+
+@DocsEditable
+@DomName('TrackEvent')
 class TrackEvent extends Event native "*TrackEvent" {
 
-  /// @domName TrackEvent.track; @docsEditable true
+  @DocsEditable @DomName('TrackEvent.track')
   final Object track;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19898,13 +20182,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitTransitionEvent; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitTransitionEvent')
 class TransitionEvent extends Event native "*WebKitTransitionEvent" {
 
-  /// @domName WebKitTransitionEvent.elapsedTime; @docsEditable true
+  @DocsEditable @DomName('WebKitTransitionEvent.elapsedTime')
   final num elapsedTime;
 
-  /// @domName WebKitTransitionEvent.propertyName; @docsEditable true
+  @DocsEditable @DomName('WebKitTransitionEvent.propertyName')
   final String propertyName;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19912,43 +20198,45 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TreeWalker; @docsEditable true
+
+@DocsEditable
+@DomName('TreeWalker')
 class TreeWalker native "*TreeWalker" {
 
-  /// @domName TreeWalker.currentNode; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.currentNode')
   Node currentNode;
 
-  /// @domName TreeWalker.expandEntityReferences; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.expandEntityReferences')
   final bool expandEntityReferences;
 
-  /// @domName TreeWalker.filter; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.filter')
   final NodeFilter filter;
 
-  /// @domName TreeWalker.root; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.root')
   final Node root;
 
-  /// @domName TreeWalker.whatToShow; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.whatToShow')
   final int whatToShow;
 
-  /// @domName TreeWalker.firstChild; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.firstChild')
   Node firstChild() native;
 
-  /// @domName TreeWalker.lastChild; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.lastChild')
   Node lastChild() native;
 
-  /// @domName TreeWalker.nextNode; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.nextNode')
   Node nextNode() native;
 
-  /// @domName TreeWalker.nextSibling; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.nextSibling')
   Node nextSibling() native;
 
-  /// @domName TreeWalker.parentNode; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.parentNode')
   Node parentNode() native;
 
-  /// @domName TreeWalker.previousNode; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.previousNode')
   Node previousNode() native;
 
-  /// @domName TreeWalker.previousSibling; @docsEditable true
+  @DocsEditable @DomName('TreeWalker.previousSibling')
   Node previousSibling() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19958,7 +20246,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName UIEvent; @docsEditable true
+@DocsEditable
+@DomName('UIEvent')
 class UIEvent extends Event native "*UIEvent" {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
@@ -19973,40 +20262,39 @@
     return e;
   }
 
-  /// @domName UIEvent.charCode; @docsEditable true
   @JSName('charCode')
+  @DocsEditable @DomName('UIEvent.charCode')
   final int $dom_charCode;
 
-  /// @domName UIEvent.detail; @docsEditable true
+  @DocsEditable @DomName('UIEvent.detail')
   final int detail;
 
-  /// @domName UIEvent.keyCode; @docsEditable true
   @JSName('keyCode')
+  @DocsEditable @DomName('UIEvent.keyCode')
   final int $dom_keyCode;
 
-  /// @domName UIEvent.layerX; @docsEditable true
+  @DocsEditable @DomName('UIEvent.layerX')
   final int layerX;
 
-  /// @domName UIEvent.layerY; @docsEditable true
+  @DocsEditable @DomName('UIEvent.layerY')
   final int layerY;
 
-  /// @domName UIEvent.pageX; @docsEditable true
+  @DocsEditable @DomName('UIEvent.pageX')
   final int pageX;
 
-  /// @domName UIEvent.pageY; @docsEditable true
+  @DocsEditable @DomName('UIEvent.pageY')
   final int pageY;
 
-  /// @domName UIEvent.view; @docsEditable true
   WindowBase get view => _convertNativeToDart_Window(this._view);
   @JSName('view')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('UIEvent.view') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _view;
 
-  /// @domName UIEvent.which; @docsEditable true
+  @DocsEditable @DomName('UIEvent.which')
   final int which;
 
-  /// @domName UIEvent.initUIEvent; @docsEditable true
   @JSName('initUIEvent')
+  @DocsEditable @DomName('UIEvent.initUIEvent')
   void $dom_initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) native;
 
 }
@@ -20015,10 +20303,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLUListElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLUListElement')
 class UListElement extends Element native "*HTMLUListElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory UListElement() => document.$dom_createElement("ul");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20026,7 +20316,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint16Array; @docsEditable true
+
+@DocsEditable
+@DomName('Uint16Array')
 class Uint16Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint16Array" {
 
   factory Uint16Array(int length) =>
@@ -20035,12 +20327,12 @@
   factory Uint16Array.fromList(List<int> list) =>
     _TypedArrayFactoryProvider.createUint16Array_fromList(list);
 
-  factory Uint16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Uint16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint16Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 2;
 
-  /// @domName Uint16Array.length; @docsEditable true
+  @DocsEditable @DomName('Uint16Array.length')
   int get length => JS("int", "#.length", this);
 
   int operator[](int index) => JS("int", "#[#]", this, index);
@@ -20058,50 +20350,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -20159,16 +20451,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -20188,11 +20500,11 @@
 
   // -- end List<int> mixins.
 
-  /// @domName Uint16Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Uint16Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Uint16Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Uint16Array.subarray')
   Uint16Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20200,7 +20512,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint32Array; @docsEditable true
+
+@DocsEditable
+@DomName('Uint32Array')
 class Uint32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint32Array" {
 
   factory Uint32Array(int length) =>
@@ -20209,12 +20523,12 @@
   factory Uint32Array.fromList(List<int> list) =>
     _TypedArrayFactoryProvider.createUint32Array_fromList(list);
 
-  factory Uint32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Uint32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint32Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 4;
 
-  /// @domName Uint32Array.length; @docsEditable true
+  @DocsEditable @DomName('Uint32Array.length')
   int get length => JS("int", "#.length", this);
 
   int operator[](int index) => JS("int", "#[#]", this, index);
@@ -20232,50 +20546,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -20333,16 +20647,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -20362,11 +20696,11 @@
 
   // -- end List<int> mixins.
 
-  /// @domName Uint32Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Uint32Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Uint32Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Uint32Array.subarray')
   Uint32Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20374,7 +20708,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint8Array; @docsEditable true
+
+@DocsEditable
+@DomName('Uint8Array')
 class Uint8Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint8Array" {
 
   factory Uint8Array(int length) =>
@@ -20383,12 +20719,12 @@
   factory Uint8Array.fromList(List<int> list) =>
     _TypedArrayFactoryProvider.createUint8Array_fromList(list);
 
-  factory Uint8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Uint8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint8Array_fromBuffer(buffer, byteOffset, length);
 
   static const int BYTES_PER_ELEMENT = 1;
 
-  /// @domName Uint8Array.length; @docsEditable true
+  @DocsEditable @DomName('Uint8Array.length')
   int get length => JS("int", "#.length", this);
 
   int operator[](int index) => JS("int", "#[#]", this, index);
@@ -20406,50 +20742,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -20507,16 +20843,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -20536,11 +20892,11 @@
 
   // -- end List<int> mixins.
 
-  /// @domName Uint8Array.setElements; @docsEditable true
   @JSName('set')
+  @DocsEditable @DomName('Uint8Array.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Uint8Array.subarray; @docsEditable true
+  @DocsEditable @DomName('Uint8Array.subarray')
   Uint8Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20548,8 +20904,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint8ClampedArray; @docsEditable true
-class Uint8ClampedArray extends Uint8Array native "*Uint8ClampedArray" {
+
+@DocsEditable
+@DomName('Uint8ClampedArray')
+class Uint8ClampedArray extends Uint8Array implements JavaScriptIndexingBehavior, List<int> native "*Uint8ClampedArray" {
 
   factory Uint8ClampedArray(int length) =>
     _TypedArrayFactoryProvider.createUint8ClampedArray(length);
@@ -20557,17 +20915,182 @@
   factory Uint8ClampedArray.fromList(List<int> list) =>
     _TypedArrayFactoryProvider.createUint8ClampedArray_fromList(list);
 
-  factory Uint8ClampedArray.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) =>
+  factory Uint8ClampedArray.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
 
   // Use implementation from Uint8Array.
   // final int length;
 
-  /// @domName Uint8ClampedArray.setElements; @docsEditable true
+  int operator[](int index) => JS("int", "#[#]", this, index);
+
+  void operator[]=(int index, int value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<int> mixins.
+  // int is the element type.
+
+  // From Iterable<int>:
+
+  Iterator<int> get iterator {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new FixedSizeListIterator<int>(this);
+  }
+
+  dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
+  }
+
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
+
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
+
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
+
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
+
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
+
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
+
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
+
+  List<int> toList() => new List<int>.from(this);
+  Set<int> toSet() => new Set<int>.from(this);
+
+  bool get isEmpty => this.length == 0;
+
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
+
+  Iterable<int> takeWhile(bool test(int value)) {
+    return IterableMixinWorkaround.takeWhile(this, test);
+  }
+
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
+
+  Iterable<int> skipWhile(bool test(int value)) {
+    return IterableMixinWorkaround.skipWhile(this, test);
+  }
+
+  int firstMatching(bool test(int value), { int orElse() }) {
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
+  }
+
+  int lastMatching(bool test(int value), {int orElse()}) {
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
+  }
+
+  int singleMatching(bool test(int value)) {
+    return IterableMixinWorkaround.singleMatching(this, test);
+  }
+
+  int elementAt(int index) {
+    return this[index];
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Iterable<int> iterable) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  // From List<int>:
+  void set length(int value) {
+    throw new UnsupportedError("Cannot resize immutable List.");
+  }
+
+  void clear() {
+    throw new UnsupportedError("Cannot clear immutable List.");
+  }
+
+  void sort([int compare(int a, int b)]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return Lists.lastIndexOf(this, element, start);
+  }
+
+  int get first {
+    if (this.length > 0) return this[0];
+    throw new StateError("No elements");
+  }
+
+  int get last {
+    if (this.length > 0) return this[this.length - 1];
+    throw new StateError("No elements");
+  }
+
+  int get single {
+    if (length == 1) return this[0];
+    if (length == 0) throw new StateError("No elements");
+    throw new StateError("More than one element");
+  }
+
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
+
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
+
+  int removeAt(int pos) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
   @JSName('set')
+  @DocsEditable @DomName('Uint8ClampedArray.set')
   void setElements(Object array, [int offset]) native;
 
-  /// @domName Uint8ClampedArray.subarray; @docsEditable true
+  @DocsEditable @DomName('Uint8ClampedArray.subarray')
   Uint8ClampedArray subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20575,7 +21098,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLUnknownElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLUnknownElement')
 class UnknownElement extends Element native "*HTMLUnknownElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20583,7 +21108,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName URL
+@DocsEditable
+@DomName('URL')
 class Url native "*URL" {
 
   static String createObjectUrl(blob_OR_source_OR_stream) =>
@@ -20601,37 +21127,39 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ValidityState; @docsEditable true
+
+@DocsEditable
+@DomName('ValidityState')
 class ValidityState native "*ValidityState" {
 
-  /// @domName ValidityState.badInput; @docsEditable true
+  @DocsEditable @DomName('ValidityState.badInput')
   final bool badInput;
 
-  /// @domName ValidityState.customError; @docsEditable true
+  @DocsEditable @DomName('ValidityState.customError')
   final bool customError;
 
-  /// @domName ValidityState.patternMismatch; @docsEditable true
+  @DocsEditable @DomName('ValidityState.patternMismatch')
   final bool patternMismatch;
 
-  /// @domName ValidityState.rangeOverflow; @docsEditable true
+  @DocsEditable @DomName('ValidityState.rangeOverflow')
   final bool rangeOverflow;
 
-  /// @domName ValidityState.rangeUnderflow; @docsEditable true
+  @DocsEditable @DomName('ValidityState.rangeUnderflow')
   final bool rangeUnderflow;
 
-  /// @domName ValidityState.stepMismatch; @docsEditable true
+  @DocsEditable @DomName('ValidityState.stepMismatch')
   final bool stepMismatch;
 
-  /// @domName ValidityState.tooLong; @docsEditable true
+  @DocsEditable @DomName('ValidityState.tooLong')
   final bool tooLong;
 
-  /// @domName ValidityState.typeMismatch; @docsEditable true
+  @DocsEditable @DomName('ValidityState.typeMismatch')
   final bool typeMismatch;
 
-  /// @domName ValidityState.valid; @docsEditable true
+  @DocsEditable @DomName('ValidityState.valid')
   final bool valid;
 
-  /// @domName ValidityState.valueMissing; @docsEditable true
+  @DocsEditable @DomName('ValidityState.valueMissing')
   final bool valueMissing;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20639,49 +21167,51 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLVideoElement; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLVideoElement')
 class VideoElement extends MediaElement native "*HTMLVideoElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory VideoElement() => document.$dom_createElement("video");
 
-  /// @domName HTMLVideoElement.height; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.height')
   int height;
 
-  /// @domName HTMLVideoElement.poster; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.poster')
   String poster;
 
-  /// @domName HTMLVideoElement.videoHeight; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.videoHeight')
   final int videoHeight;
 
-  /// @domName HTMLVideoElement.videoWidth; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.videoWidth')
   final int videoWidth;
 
-  /// @domName HTMLVideoElement.webkitDecodedFrameCount; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitDecodedFrameCount')
   final int webkitDecodedFrameCount;
 
-  /// @domName HTMLVideoElement.webkitDisplayingFullscreen; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitDisplayingFullscreen')
   final bool webkitDisplayingFullscreen;
 
-  /// @domName HTMLVideoElement.webkitDroppedFrameCount; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitDroppedFrameCount')
   final int webkitDroppedFrameCount;
 
-  /// @domName HTMLVideoElement.webkitSupportsFullscreen; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitSupportsFullscreen')
   final bool webkitSupportsFullscreen;
 
-  /// @domName HTMLVideoElement.width; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.width')
   int width;
 
-  /// @domName HTMLVideoElement.webkitEnterFullScreen; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitEnterFullScreen')
   void webkitEnterFullScreen() native;
 
-  /// @domName HTMLVideoElement.webkitEnterFullscreen; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitEnterFullscreen')
   void webkitEnterFullscreen() native;
 
-  /// @domName HTMLVideoElement.webkitExitFullScreen; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitExitFullScreen')
   void webkitExitFullScreen() native;
 
-  /// @domName HTMLVideoElement.webkitExitFullscreen; @docsEditable true
+  @DocsEditable @DomName('HTMLVideoElement.webkitExitFullscreen')
   void webkitExitFullscreen() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20697,16 +21227,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLActiveInfo; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLActiveInfo')
 class WebGLActiveInfo native "*WebGLActiveInfo" {
 
-  /// @domName WebGLActiveInfo.name; @docsEditable true
+  @DocsEditable @DomName('WebGLActiveInfo.name')
   final String name;
 
-  /// @domName WebGLActiveInfo.size; @docsEditable true
+  @DocsEditable @DomName('WebGLActiveInfo.size')
   final int size;
 
-  /// @domName WebGLActiveInfo.type; @docsEditable true
+  @DocsEditable @DomName('WebGLActiveInfo.type')
   final int type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20714,7 +21246,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLBuffer; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLBuffer')
 class WebGLBuffer native "*WebGLBuffer" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20722,7 +21256,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLCompressedTextureS3TC; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLCompressedTextureS3TC')
 class WebGLCompressedTextureS3TC native "*WebGLCompressedTextureS3TC" {
 
   static const int COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1;
@@ -20738,25 +21274,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLContextAttributes; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLContextAttributes')
 class WebGLContextAttributes native "*WebGLContextAttributes" {
 
-  /// @domName WebGLContextAttributes.alpha; @docsEditable true
+  @DocsEditable @DomName('WebGLContextAttributes.alpha')
   bool alpha;
 
-  /// @domName WebGLContextAttributes.antialias; @docsEditable true
+  @DocsEditable @DomName('WebGLContextAttributes.antialias')
   bool antialias;
 
-  /// @domName WebGLContextAttributes.depth; @docsEditable true
+  @DocsEditable @DomName('WebGLContextAttributes.depth')
   bool depth;
 
-  /// @domName WebGLContextAttributes.premultipliedAlpha; @docsEditable true
+  @DocsEditable @DomName('WebGLContextAttributes.premultipliedAlpha')
   bool premultipliedAlpha;
 
-  /// @domName WebGLContextAttributes.preserveDrawingBuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   bool preserveDrawingBuffer;
 
-  /// @domName WebGLContextAttributes.stencil; @docsEditable true
+  @DocsEditable @DomName('WebGLContextAttributes.stencil')
   bool stencil;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20764,10 +21302,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLContextEvent; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLContextEvent')
 class WebGLContextEvent extends Event native "*WebGLContextEvent" {
 
-  /// @domName WebGLContextEvent.statusMessage; @docsEditable true
+  @DocsEditable @DomName('WebGLContextEvent.statusMessage')
   final String statusMessage;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20775,7 +21315,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLDebugRendererInfo; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLDebugRendererInfo')
 class WebGLDebugRendererInfo native "*WebGLDebugRendererInfo" {
 
   static const int UNMASKED_RENDERER_WEBGL = 0x9246;
@@ -20787,10 +21329,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLDebugShaders; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLDebugShaders')
 class WebGLDebugShaders native "*WebGLDebugShaders" {
 
-  /// @domName WebGLDebugShaders.getTranslatedShaderSource; @docsEditable true
+  @DocsEditable @DomName('WebGLDebugShaders.getTranslatedShaderSource')
   String getTranslatedShaderSource(WebGLShader shader) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20798,7 +21342,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLDepthTexture; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLDepthTexture')
 class WebGLDepthTexture native "*WebGLDepthTexture" {
 
   static const int UNSIGNED_INT_24_8_WEBGL = 0x84FA;
@@ -20808,7 +21354,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLFramebuffer; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLFramebuffer')
 class WebGLFramebuffer native "*WebGLFramebuffer" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20816,13 +21364,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLLoseContext; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLLoseContext')
 class WebGLLoseContext native "*WebGLLoseContext" {
 
-  /// @domName WebGLLoseContext.loseContext; @docsEditable true
+  @DocsEditable @DomName('WebGLLoseContext.loseContext')
   void loseContext() native;
 
-  /// @domName WebGLLoseContext.restoreContext; @docsEditable true
+  @DocsEditable @DomName('WebGLLoseContext.restoreContext')
   void restoreContext() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20830,7 +21380,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLProgram; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLProgram')
 class WebGLProgram native "*WebGLProgram" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20838,7 +21390,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLRenderbuffer; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLRenderbuffer')
 class WebGLRenderbuffer native "*WebGLRenderbuffer" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20846,7 +21400,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLRenderingContext; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLRenderingContext')
 class WebGLRenderingContext extends CanvasRenderingContext native "*WebGLRenderingContext" {
 
   static const int ACTIVE_ATTRIBUTES = 0x8B89;
@@ -21439,319 +21995,318 @@
 
   static const int ZERO = 0;
 
-  /// @domName WebGLRenderingContext.drawingBufferHeight; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.drawingBufferHeight')
   final int drawingBufferHeight;
 
-  /// @domName WebGLRenderingContext.drawingBufferWidth; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.drawingBufferWidth')
   final int drawingBufferWidth;
 
-  /// @domName WebGLRenderingContext.activeTexture; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.activeTexture')
   void activeTexture(int texture) native;
 
-  /// @domName WebGLRenderingContext.attachShader; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.attachShader')
   void attachShader(WebGLProgram program, WebGLShader shader) native;
 
-  /// @domName WebGLRenderingContext.bindAttribLocation; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.bindAttribLocation')
   void bindAttribLocation(WebGLProgram program, int index, String name) native;
 
-  /// @domName WebGLRenderingContext.bindBuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.bindBuffer')
   void bindBuffer(int target, WebGLBuffer buffer) native;
 
-  /// @domName WebGLRenderingContext.bindFramebuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.bindFramebuffer')
   void bindFramebuffer(int target, WebGLFramebuffer framebuffer) native;
 
-  /// @domName WebGLRenderingContext.bindRenderbuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.bindRenderbuffer')
   void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) native;
 
-  /// @domName WebGLRenderingContext.bindTexture; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.bindTexture')
   void bindTexture(int target, WebGLTexture texture) native;
 
-  /// @domName WebGLRenderingContext.blendColor; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.blendColor')
   void blendColor(num red, num green, num blue, num alpha) native;
 
-  /// @domName WebGLRenderingContext.blendEquation; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.blendEquation')
   void blendEquation(int mode) native;
 
-  /// @domName WebGLRenderingContext.blendEquationSeparate; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.blendEquationSeparate')
   void blendEquationSeparate(int modeRGB, int modeAlpha) native;
 
-  /// @domName WebGLRenderingContext.blendFunc; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.blendFunc')
   void blendFunc(int sfactor, int dfactor) native;
 
-  /// @domName WebGLRenderingContext.blendFuncSeparate; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.blendFuncSeparate')
   void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native;
 
-  /// @domName WebGLRenderingContext.bufferData; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.bufferData')
   void bufferData(int target, data_OR_size, int usage) native;
 
-  /// @domName WebGLRenderingContext.bufferSubData; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.bufferSubData')
   void bufferSubData(int target, int offset, data) native;
 
-  /// @domName WebGLRenderingContext.checkFramebufferStatus; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.checkFramebufferStatus')
   int checkFramebufferStatus(int target) native;
 
-  /// @domName WebGLRenderingContext.clear; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.clear')
   void clear(int mask) native;
 
-  /// @domName WebGLRenderingContext.clearColor; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.clearColor')
   void clearColor(num red, num green, num blue, num alpha) native;
 
-  /// @domName WebGLRenderingContext.clearDepth; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.clearDepth')
   void clearDepth(num depth) native;
 
-  /// @domName WebGLRenderingContext.clearStencil; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.clearStencil')
   void clearStencil(int s) native;
 
-  /// @domName WebGLRenderingContext.colorMask; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.colorMask')
   void colorMask(bool red, bool green, bool blue, bool alpha) native;
 
-  /// @domName WebGLRenderingContext.compileShader; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.compileShader')
   void compileShader(WebGLShader shader) native;
 
-  /// @domName WebGLRenderingContext.compressedTexImage2D; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.compressedTexImage2D')
   void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ArrayBufferView data) native;
 
-  /// @domName WebGLRenderingContext.compressedTexSubImage2D; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.compressedTexSubImage2D')
   void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ArrayBufferView data) native;
 
-  /// @domName WebGLRenderingContext.copyTexImage2D; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.copyTexImage2D')
   void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) native;
 
-  /// @domName WebGLRenderingContext.copyTexSubImage2D; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.copyTexSubImage2D')
   void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) native;
 
-  /// @domName WebGLRenderingContext.createBuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.createBuffer')
   WebGLBuffer createBuffer() native;
 
-  /// @domName WebGLRenderingContext.createFramebuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.createFramebuffer')
   WebGLFramebuffer createFramebuffer() native;
 
-  /// @domName WebGLRenderingContext.createProgram; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.createProgram')
   WebGLProgram createProgram() native;
 
-  /// @domName WebGLRenderingContext.createRenderbuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.createRenderbuffer')
   WebGLRenderbuffer createRenderbuffer() native;
 
-  /// @domName WebGLRenderingContext.createShader; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.createShader')
   WebGLShader createShader(int type) native;
 
-  /// @domName WebGLRenderingContext.createTexture; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.createTexture')
   WebGLTexture createTexture() native;
 
-  /// @domName WebGLRenderingContext.cullFace; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.cullFace')
   void cullFace(int mode) native;
 
-  /// @domName WebGLRenderingContext.deleteBuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.deleteBuffer')
   void deleteBuffer(WebGLBuffer buffer) native;
 
-  /// @domName WebGLRenderingContext.deleteFramebuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.deleteFramebuffer')
   void deleteFramebuffer(WebGLFramebuffer framebuffer) native;
 
-  /// @domName WebGLRenderingContext.deleteProgram; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.deleteProgram')
   void deleteProgram(WebGLProgram program) native;
 
-  /// @domName WebGLRenderingContext.deleteRenderbuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.deleteRenderbuffer')
   void deleteRenderbuffer(WebGLRenderbuffer renderbuffer) native;
 
-  /// @domName WebGLRenderingContext.deleteShader; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.deleteShader')
   void deleteShader(WebGLShader shader) native;
 
-  /// @domName WebGLRenderingContext.deleteTexture; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.deleteTexture')
   void deleteTexture(WebGLTexture texture) native;
 
-  /// @domName WebGLRenderingContext.depthFunc; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.depthFunc')
   void depthFunc(int func) native;
 
-  /// @domName WebGLRenderingContext.depthMask; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.depthMask')
   void depthMask(bool flag) native;
 
-  /// @domName WebGLRenderingContext.depthRange; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.depthRange')
   void depthRange(num zNear, num zFar) native;
 
-  /// @domName WebGLRenderingContext.detachShader; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.detachShader')
   void detachShader(WebGLProgram program, WebGLShader shader) native;
 
-  /// @domName WebGLRenderingContext.disable; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.disable')
   void disable(int cap) native;
 
-  /// @domName WebGLRenderingContext.disableVertexAttribArray; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.disableVertexAttribArray')
   void disableVertexAttribArray(int index) native;
 
-  /// @domName WebGLRenderingContext.drawArrays; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.drawArrays')
   void drawArrays(int mode, int first, int count) native;
 
-  /// @domName WebGLRenderingContext.drawElements; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.drawElements')
   void drawElements(int mode, int count, int type, int offset) native;
 
-  /// @domName WebGLRenderingContext.enable; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.enable')
   void enable(int cap) native;
 
-  /// @domName WebGLRenderingContext.enableVertexAttribArray; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.enableVertexAttribArray')
   void enableVertexAttribArray(int index) native;
 
-  /// @domName WebGLRenderingContext.finish; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.finish')
   void finish() native;
 
-  /// @domName WebGLRenderingContext.flush; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.flush')
   void flush() native;
 
-  /// @domName WebGLRenderingContext.framebufferRenderbuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.framebufferRenderbuffer')
   void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer) native;
 
-  /// @domName WebGLRenderingContext.framebufferTexture2D; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.framebufferTexture2D')
   void framebufferTexture2D(int target, int attachment, int textarget, WebGLTexture texture, int level) native;
 
-  /// @domName WebGLRenderingContext.frontFace; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.frontFace')
   void frontFace(int mode) native;
 
-  /// @domName WebGLRenderingContext.generateMipmap; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.generateMipmap')
   void generateMipmap(int target) native;
 
-  /// @domName WebGLRenderingContext.getActiveAttrib; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getActiveAttrib')
   WebGLActiveInfo getActiveAttrib(WebGLProgram program, int index) native;
 
-  /// @domName WebGLRenderingContext.getActiveUniform; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getActiveUniform')
   WebGLActiveInfo getActiveUniform(WebGLProgram program, int index) native;
 
-  /// @domName WebGLRenderingContext.getAttachedShaders; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getAttachedShaders')
   void getAttachedShaders(WebGLProgram program) native;
 
-  /// @domName WebGLRenderingContext.getAttribLocation; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getAttribLocation')
   int getAttribLocation(WebGLProgram program, String name) native;
 
-  /// @domName WebGLRenderingContext.getBufferParameter; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getBufferParameter')
   Object getBufferParameter(int target, int pname) native;
 
-  /// @domName WebGLRenderingContext.getContextAttributes; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getContextAttributes')
   WebGLContextAttributes getContextAttributes() native;
 
-  /// @domName WebGLRenderingContext.getError; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getError')
   int getError() native;
 
-  /// @domName WebGLRenderingContext.getExtension; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getExtension')
   Object getExtension(String name) native;
 
-  /// @domName WebGLRenderingContext.getFramebufferAttachmentParameter; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getFramebufferAttachmentParameter')
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native;
 
-  /// @domName WebGLRenderingContext.getParameter; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getParameter')
   Object getParameter(int pname) native;
 
-  /// @domName WebGLRenderingContext.getProgramInfoLog; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getProgramInfoLog')
   String getProgramInfoLog(WebGLProgram program) native;
 
-  /// @domName WebGLRenderingContext.getProgramParameter; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getProgramParameter')
   Object getProgramParameter(WebGLProgram program, int pname) native;
 
-  /// @domName WebGLRenderingContext.getRenderbufferParameter; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getRenderbufferParameter')
   Object getRenderbufferParameter(int target, int pname) native;
 
-  /// @domName WebGLRenderingContext.getShaderInfoLog; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getShaderInfoLog')
   String getShaderInfoLog(WebGLShader shader) native;
 
-  /// @domName WebGLRenderingContext.getShaderParameter; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getShaderParameter')
   Object getShaderParameter(WebGLShader shader, int pname) native;
 
-  /// @domName WebGLRenderingContext.getShaderPrecisionFormat; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getShaderPrecisionFormat')
   WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) native;
 
-  /// @domName WebGLRenderingContext.getShaderSource; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getShaderSource')
   String getShaderSource(WebGLShader shader) native;
 
-  /// @domName WebGLRenderingContext.getSupportedExtensions; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getSupportedExtensions')
   List<String> getSupportedExtensions() native;
 
-  /// @domName WebGLRenderingContext.getTexParameter; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getTexParameter')
   Object getTexParameter(int target, int pname) native;
 
-  /// @domName WebGLRenderingContext.getUniform; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getUniform')
   Object getUniform(WebGLProgram program, WebGLUniformLocation location) native;
 
-  /// @domName WebGLRenderingContext.getUniformLocation; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getUniformLocation')
   WebGLUniformLocation getUniformLocation(WebGLProgram program, String name) native;
 
-  /// @domName WebGLRenderingContext.getVertexAttrib; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getVertexAttrib')
   Object getVertexAttrib(int index, int pname) native;
 
-  /// @domName WebGLRenderingContext.getVertexAttribOffset; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.getVertexAttribOffset')
   int getVertexAttribOffset(int index, int pname) native;
 
-  /// @domName WebGLRenderingContext.hint; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.hint')
   void hint(int target, int mode) native;
 
-  /// @domName WebGLRenderingContext.isBuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isBuffer')
   bool isBuffer(WebGLBuffer buffer) native;
 
-  /// @domName WebGLRenderingContext.isContextLost; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isContextLost')
   bool isContextLost() native;
 
-  /// @domName WebGLRenderingContext.isEnabled; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isEnabled')
   bool isEnabled(int cap) native;
 
-  /// @domName WebGLRenderingContext.isFramebuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isFramebuffer')
   bool isFramebuffer(WebGLFramebuffer framebuffer) native;
 
-  /// @domName WebGLRenderingContext.isProgram; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isProgram')
   bool isProgram(WebGLProgram program) native;
 
-  /// @domName WebGLRenderingContext.isRenderbuffer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isRenderbuffer')
   bool isRenderbuffer(WebGLRenderbuffer renderbuffer) native;
 
-  /// @domName WebGLRenderingContext.isShader; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isShader')
   bool isShader(WebGLShader shader) native;
 
-  /// @domName WebGLRenderingContext.isTexture; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.isTexture')
   bool isTexture(WebGLTexture texture) native;
 
-  /// @domName WebGLRenderingContext.lineWidth; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.lineWidth')
   void lineWidth(num width) native;
 
-  /// @domName WebGLRenderingContext.linkProgram; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.linkProgram')
   void linkProgram(WebGLProgram program) native;
 
-  /// @domName WebGLRenderingContext.pixelStorei; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.pixelStorei')
   void pixelStorei(int pname, int param) native;
 
-  /// @domName WebGLRenderingContext.polygonOffset; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.polygonOffset')
   void polygonOffset(num factor, num units) native;
 
-  /// @domName WebGLRenderingContext.readPixels; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.readPixels')
   void readPixels(int x, int y, int width, int height, int format, int type, ArrayBufferView pixels) native;
 
-  /// @domName WebGLRenderingContext.releaseShaderCompiler; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.releaseShaderCompiler')
   void releaseShaderCompiler() native;
 
-  /// @domName WebGLRenderingContext.renderbufferStorage; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.renderbufferStorage')
   void renderbufferStorage(int target, int internalformat, int width, int height) native;
 
-  /// @domName WebGLRenderingContext.sampleCoverage; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.sampleCoverage')
   void sampleCoverage(num value, bool invert) native;
 
-  /// @domName WebGLRenderingContext.scissor; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.scissor')
   void scissor(int x, int y, int width, int height) native;
 
-  /// @domName WebGLRenderingContext.shaderSource; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.shaderSource')
   void shaderSource(WebGLShader shader, String string) native;
 
-  /// @domName WebGLRenderingContext.stencilFunc; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.stencilFunc')
   void stencilFunc(int func, int ref, int mask) native;
 
-  /// @domName WebGLRenderingContext.stencilFuncSeparate; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.stencilFuncSeparate')
   void stencilFuncSeparate(int face, int func, int ref, int mask) native;
 
-  /// @domName WebGLRenderingContext.stencilMask; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.stencilMask')
   void stencilMask(int mask) native;
 
-  /// @domName WebGLRenderingContext.stencilMaskSeparate; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.stencilMaskSeparate')
   void stencilMaskSeparate(int face, int mask) native;
 
-  /// @domName WebGLRenderingContext.stencilOp; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.stencilOp')
   void stencilOp(int fail, int zfail, int zpass) native;
 
-  /// @domName WebGLRenderingContext.stencilOpSeparate; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.stencilOpSeparate')
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
 
-  /// @domName WebGLRenderingContext.texImage2D; @docsEditable true
   void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [int format, int type, ArrayBufferView pixels]) {
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null)) {
       _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
@@ -21789,23 +22344,27 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('texImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texImage2D')
   void _texImage2D_1(target, level, internalformat, width, height, int border, format, type, ArrayBufferView pixels) native;
   @JSName('texImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texImage2D')
   void _texImage2D_2(target, level, internalformat, format, type, pixels) native;
   @JSName('texImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texImage2D')
   void _texImage2D_3(target, level, internalformat, format, type, ImageElement image) native;
   @JSName('texImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texImage2D')
   void _texImage2D_4(target, level, internalformat, format, type, CanvasElement canvas) native;
   @JSName('texImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texImage2D')
   void _texImage2D_5(target, level, internalformat, format, type, VideoElement video) native;
 
-  /// @domName WebGLRenderingContext.texParameterf; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.texParameterf')
   void texParameterf(int target, int pname, num param) native;
 
-  /// @domName WebGLRenderingContext.texParameteri; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.texParameteri')
   void texParameteri(int target, int pname, int param) native;
 
-  /// @domName WebGLRenderingContext.texSubImage2D; @docsEditable true
   void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [int type, ArrayBufferView pixels]) {
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null)) {
       _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
@@ -21839,107 +22398,112 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('texSubImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texSubImage2D')
   void _texSubImage2D_1(target, level, xoffset, yoffset, width, height, int format, type, ArrayBufferView pixels) native;
   @JSName('texSubImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texSubImage2D')
   void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels) native;
   @JSName('texSubImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texSubImage2D')
   void _texSubImage2D_3(target, level, xoffset, yoffset, format, type, ImageElement image) native;
   @JSName('texSubImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texSubImage2D')
   void _texSubImage2D_4(target, level, xoffset, yoffset, format, type, CanvasElement canvas) native;
   @JSName('texSubImage2D')
+  @DocsEditable @DomName('WebGLRenderingContext.texSubImage2D')
   void _texSubImage2D_5(target, level, xoffset, yoffset, format, type, VideoElement video) native;
 
-  /// @domName WebGLRenderingContext.uniform1f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform1f')
   void uniform1f(WebGLUniformLocation location, num x) native;
 
-  /// @domName WebGLRenderingContext.uniform1fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform1fv')
   void uniform1fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniform1i; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform1i')
   void uniform1i(WebGLUniformLocation location, int x) native;
 
-  /// @domName WebGLRenderingContext.uniform1iv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform1iv')
   void uniform1iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniform2f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform2f')
   void uniform2f(WebGLUniformLocation location, num x, num y) native;
 
-  /// @domName WebGLRenderingContext.uniform2fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform2fv')
   void uniform2fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniform2i; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform2i')
   void uniform2i(WebGLUniformLocation location, int x, int y) native;
 
-  /// @domName WebGLRenderingContext.uniform2iv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform2iv')
   void uniform2iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniform3f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform3f')
   void uniform3f(WebGLUniformLocation location, num x, num y, num z) native;
 
-  /// @domName WebGLRenderingContext.uniform3fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform3fv')
   void uniform3fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniform3i; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform3i')
   void uniform3i(WebGLUniformLocation location, int x, int y, int z) native;
 
-  /// @domName WebGLRenderingContext.uniform3iv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform3iv')
   void uniform3iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniform4f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform4f')
   void uniform4f(WebGLUniformLocation location, num x, num y, num z, num w) native;
 
-  /// @domName WebGLRenderingContext.uniform4fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform4fv')
   void uniform4fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniform4i; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform4i')
   void uniform4i(WebGLUniformLocation location, int x, int y, int z, int w) native;
 
-  /// @domName WebGLRenderingContext.uniform4iv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniform4iv')
   void uniform4iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /// @domName WebGLRenderingContext.uniformMatrix2fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniformMatrix2fv')
   void uniformMatrix2fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
 
-  /// @domName WebGLRenderingContext.uniformMatrix3fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniformMatrix3fv')
   void uniformMatrix3fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
 
-  /// @domName WebGLRenderingContext.uniformMatrix4fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.uniformMatrix4fv')
   void uniformMatrix4fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
 
-  /// @domName WebGLRenderingContext.useProgram; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.useProgram')
   void useProgram(WebGLProgram program) native;
 
-  /// @domName WebGLRenderingContext.validateProgram; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.validateProgram')
   void validateProgram(WebGLProgram program) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib1f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib1f')
   void vertexAttrib1f(int indx, num x) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib1fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib1fv')
   void vertexAttrib1fv(int indx, Float32Array values) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib2f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib2f')
   void vertexAttrib2f(int indx, num x, num y) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib2fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib2fv')
   void vertexAttrib2fv(int indx, Float32Array values) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib3f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib3f')
   void vertexAttrib3f(int indx, num x, num y, num z) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib3fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib3fv')
   void vertexAttrib3fv(int indx, Float32Array values) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib4f; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib4f')
   void vertexAttrib4f(int indx, num x, num y, num z, num w) native;
 
-  /// @domName WebGLRenderingContext.vertexAttrib4fv; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttrib4fv')
   void vertexAttrib4fv(int indx, Float32Array values) native;
 
-  /// @domName WebGLRenderingContext.vertexAttribPointer; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.vertexAttribPointer')
   void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) native;
 
-  /// @domName WebGLRenderingContext.viewport; @docsEditable true
+  @DocsEditable @DomName('WebGLRenderingContext.viewport')
   void viewport(int x, int y, int width, int height) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21947,7 +22511,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLShader; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLShader')
 class WebGLShader native "*WebGLShader" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21955,16 +22521,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLShaderPrecisionFormat; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLShaderPrecisionFormat')
 class WebGLShaderPrecisionFormat native "*WebGLShaderPrecisionFormat" {
 
-  /// @domName WebGLShaderPrecisionFormat.precision; @docsEditable true
+  @DocsEditable @DomName('WebGLShaderPrecisionFormat.precision')
   final int precision;
 
-  /// @domName WebGLShaderPrecisionFormat.rangeMax; @docsEditable true
+  @DocsEditable @DomName('WebGLShaderPrecisionFormat.rangeMax')
   final int rangeMax;
 
-  /// @domName WebGLShaderPrecisionFormat.rangeMin; @docsEditable true
+  @DocsEditable @DomName('WebGLShaderPrecisionFormat.rangeMin')
   final int rangeMin;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21972,7 +22540,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLTexture; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLTexture')
 class WebGLTexture native "*WebGLTexture" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21980,7 +22550,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLUniformLocation; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLUniformLocation')
 class WebGLUniformLocation native "*WebGLUniformLocation" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21988,7 +22560,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLVertexArrayObjectOES; @docsEditable true
+
+@DocsEditable
+@DomName('WebGLVertexArrayObjectOES')
 class WebGLVertexArrayObject native "*WebGLVertexArrayObjectOES" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21996,7 +22570,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSFilterValue; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitCSSFilterValue')
 class WebKitCssFilterValue extends _CssValueList native "*WebKitCSSFilterValue" {
 
   static const int CSS_FILTER_BLUR = 10;
@@ -22023,7 +22599,7 @@
 
   static const int CSS_FILTER_SEPIA = 3;
 
-  /// @domName WebKitCSSFilterValue.operationType; @docsEditable true
+  @DocsEditable @DomName('WebKitCSSFilterValue.operationType')
   final int operationType;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22031,7 +22607,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSMixFunctionValue; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitCSSMixFunctionValue')
 class WebKitCssMixFunctionValue extends _CssValueList native "*WebKitCSSMixFunctionValue" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22039,40 +22617,42 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitNamedFlow; @docsEditable true
+
+@DocsEditable
+@DomName('WebKitNamedFlow')
 class WebKitNamedFlow extends EventTarget native "*WebKitNamedFlow" {
 
-  /// @domName WebKitNamedFlow.firstEmptyRegionIndex; @docsEditable true
+  @DocsEditable @DomName('WebKitNamedFlow.firstEmptyRegionIndex')
   final int firstEmptyRegionIndex;
 
-  /// @domName WebKitNamedFlow.name; @docsEditable true
+  @DocsEditable @DomName('WebKitNamedFlow.name')
   final String name;
 
-  /// @domName WebKitNamedFlow.overset; @docsEditable true
+  @DocsEditable @DomName('WebKitNamedFlow.overset')
   final bool overset;
 
-  /// @domName WebKitNamedFlow.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('WebKitNamedFlow.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName WebKitNamedFlow.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('WebKitNamedFlow.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native;
 
-  /// @domName WebKitNamedFlow.getContent; @docsEditable true
+  @DocsEditable @DomName('WebKitNamedFlow.getContent')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> getContent() native;
 
-  /// @domName WebKitNamedFlow.getRegions; @docsEditable true
+  @DocsEditable @DomName('WebKitNamedFlow.getRegions')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> getRegions() native;
 
-  /// @domName WebKitNamedFlow.getRegionsByContent; @docsEditable true
+  @DocsEditable @DomName('WebKitNamedFlow.getRegionsByContent')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> getRegionsByContent(Node contentNode) native;
 
-  /// @domName WebKitNamedFlow.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('WebKitNamedFlow.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22080,7 +22660,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebSocket; @docsEditable true
+
+@DocsEditable
+@DomName('WebSocket')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -22095,14 +22677,15 @@
 
   static const EventStreamProvider<Event> openEvent = const EventStreamProvider<Event>('open');
 
-  ///@docsEditable true
+  @DocsEditable
   factory WebSocket(String url) => WebSocket._create(url);
   static WebSocket _create(String url) => JS('WebSocket', 'new WebSocket(#)', url);
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', 'typeof window.WebSocket != "undefined"');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WebSocketEvents get on =>
     new WebSocketEvents(this);
 
@@ -22114,44 +22697,44 @@
 
   static const int OPEN = 1;
 
-  /// @domName WebSocket.URL; @docsEditable true
   @JSName('URL')
+  @DocsEditable @DomName('WebSocket.URL')
   final String Url;
 
-  /// @domName WebSocket.binaryType; @docsEditable true
+  @DocsEditable @DomName('WebSocket.binaryType')
   String binaryType;
 
-  /// @domName WebSocket.bufferedAmount; @docsEditable true
+  @DocsEditable @DomName('WebSocket.bufferedAmount')
   final int bufferedAmount;
 
-  /// @domName WebSocket.extensions; @docsEditable true
+  @DocsEditable @DomName('WebSocket.extensions')
   final String extensions;
 
-  /// @domName WebSocket.protocol; @docsEditable true
+  @DocsEditable @DomName('WebSocket.protocol')
   final String protocol;
 
-  /// @domName WebSocket.readyState; @docsEditable true
+  @DocsEditable @DomName('WebSocket.readyState')
   final int readyState;
 
-  /// @domName WebSocket.url; @docsEditable true
+  @DocsEditable @DomName('WebSocket.url')
   final String url;
 
-  /// @domName WebSocket.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('WebSocket.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName WebSocket.close; @docsEditable true
+  @DocsEditable @DomName('WebSocket.close')
   void close([int code, String reason]) native;
 
-  /// @domName WebSocket.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('WebSocket.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName WebSocket.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('WebSocket.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName WebSocket.send; @docsEditable true
+  @DocsEditable @DomName('WebSocket.send')
   void send(data) native;
 
   Stream<CloseEvent> get onClose => closeEvent.forTarget(this);
@@ -22163,21 +22746,21 @@
   Stream<Event> get onOpen => openEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class WebSocketEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   WebSocketEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get close => this['close'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22185,17 +22768,80 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WheelEvent
+@DocsEditable
+@DomName('WheelEvent')
 class WheelEvent extends MouseEvent native "*WheelEvent" {
 
-  /// @domName WheelEvent.webkitDirectionInvertedFromDevice; @docsEditable true
+  factory WheelEvent(String type, Window view, int wheelDeltaX, int wheelDeltaY,
+      int detail, int screenX, int screenY, int clientX, int clientY,
+      int button,
+      [bool canBubble = true, bool cancelable = true, bool ctrlKey = false,
+      bool altKey = false, bool shiftKey = false, bool metaKey = false,
+      EventTarget relatedTarget = null]) {
+
+    var eventType = 'WheelEvent';
+    if (_Device.isFirefox) {
+      eventType = 'MouseScrollEvents';
+    }
+    final event = document.$dom_createEvent(eventType);
+    if (event._hasInitWheelEvent) {
+      var modifiers = [];
+      if (ctrlKey) {
+        modifiers.push('Control');
+      }
+      if (altKey) {
+        modifiers.push('Alt');
+      }
+      if (shiftKey) {
+        modifiers.push('Shift');
+      }
+      if (metaKey) {
+        modifiers.push('Meta');
+      }
+      event._initWheelEvent(type, canBubble, cancelable, view, detail, screenX,
+          screenY, clientX, clientY, button, relatedTarget, modifiers.join(' '),
+          wheelDeltaX, wheelDeltaY, 0, 0);
+    } else if (event._hasInitMouseScrollEvent) {
+      var axis = 0;
+      var detail = 0;
+      if (wheelDeltaX != 0 && wheelDeltaY != 0) {
+        throw UnsupportedError(
+            'Cannot modify wheelDeltaX and wheelDeltaY simultaneously');
+      }
+      if (wheelDeltaY != 0) {
+        detail = wheelDeltaY;
+        axis = JS('int', 'MouseScrollEvent.VERTICAL_AXIS');
+      } else if (wheelDeltaX != 0) {
+        detail = wheelDeltaX;
+        axis = JS('int', 'MouseScrollEvent.HORIZONTAL_AXIS');
+      }
+      event._initMouseScrollEvent(type, canBubble, cancelable, view, detail,
+          screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey, button, relatedTarget, axis);
+    } else {
+      // Fallthrough for Dartium.
+      event.$dom_initMouseEvent(type, canBubble, cancelable, view, detail,
+          screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey, button, relatedTarget);
+      event.$dom_initWebKitWheelEvent(wheelDeltaX,
+          wheelDeltaY ~/ 120, // Chrome does an auto-convert to pixels.
+          view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey);
+    }
+
+    return event;
+  }
+
+
+  @DocsEditable @DomName('WheelEvent.webkitDirectionInvertedFromDevice')
   final bool webkitDirectionInvertedFromDevice;
 
-  /// @domName WheelEvent.initWebKitWheelEvent; @docsEditable true
-  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
+  @JSName('initWebKitWheelEvent')
+  @DocsEditable @DomName('WheelEvent.initWebKitWheelEvent')
+  void $dom_initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
 
 
-  /** @domName WheelEvent.deltaY */
+  @DomName('WheelEvent.deltaY')
   num get deltaY {
     if (JS('bool', '#.deltaY !== undefined', this)) {
       // W3C WheelEvent
@@ -22223,7 +22869,7 @@
         'deltaY is not supported');
   }
 
-  /** @domName WheelEvent.deltaX */
+  @DomName('WheelEvent.deltaX')
   num get deltaX {
     if (JS('bool', '#.deltaX !== undefined', this)) {
       // W3C WheelEvent
@@ -22237,7 +22883,8 @@
 
       // Handle DOMMouseScroll case where it uses detail and the axis to
       // differentiate.
-      if (JS('bool', '#.axis !== undefined && #.axis == MouseScrollEvent.HORIZONTAL_AXIS', this, this)) {
+      if (JS('bool', '#.axis !== undefined && '
+        '#.axis == MouseScrollEvent.HORIZONTAL_AXIS', this, this)) {
         var detail = this._detail;
         // Firefox is normally the number of lines to scale (normally 3)
         // so multiply it by 40 to get pixels to move, matching IE & WebKit.
@@ -22267,13 +22914,57 @@
   num get _detail => JS('num', '#.detail', this);
   int get _deltaMode => JS('int', '#.deltaMode', this);
 
+  bool get _hasInitMouseScrollEvent =>
+      JS('bool', '!!(#.initMouseScrollEvent)', this);
+
+  @JSName('initMouseScrollEvent')
+  void _initMouseScrollEvent(
+      String type,
+      bool canBubble,
+      bool cancelable,
+      Window view,
+      int detail,
+      int screenX,
+      int screenY,
+      int clientX,
+      int clientY,
+      bool ctrlKey,
+      bool altKey,
+      bool shiftKey,
+      bool metaKey,
+      int button,
+      EventTarget relatedTarget,
+      int axis) native;
+
+  bool get _hasInitWheelEvent =>
+      JS('bool', '!!(#.initWheelEvent)', this);
+  @JSName('initWheelEvent')
+  void _initWheelEvent(
+      String eventType,
+      bool canBubble,
+      bool cancelable,
+      Window view,
+      int detail,
+      int screenX,
+      int screenY,
+      int clientX,
+      int clientY,
+      int button,
+      EventTarget relatedTarget,
+      String modifiersList,
+      int deltaX,
+      int deltaY,
+      int deltaZ,
+      int deltaMode) native;
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Window
+@DocsEditable
+@DomName('Window')
 class Window extends EventTarget implements WindowBase native "@*DOMWindow" {
 
   Document get document => JS('Document', '#.document', this);
@@ -22349,7 +23040,7 @@
     _addMeasurementFrameCallback(callback);
   }
 
-  /** @domName DOMWindow.requestAnimationFrame */
+  @DomName('DOMWindow.requestAnimationFrame')
   int requestAnimationFrame(RequestAnimationFrameCallback callback) {
     _ensureRequestAnimationFrame();
     return _requestAnimationFrame(callback);
@@ -22426,92 +23117,22 @@
     document.documentElement.attributes['dart-port:$name'] = json.stringify(serialized);
   }
 
-  /// @domName Window.console; @docsEditable true
+  @DomName('Window.console')
   Console get console => Console.safeConsole;
 
 
   static const EventStreamProvider<Event> contentLoadedEvent = const EventStreamProvider<Event>('DOMContentLoaded');
 
-  static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
-
   static const EventStreamProvider<Event> beforeUnloadEvent = const EventStreamProvider<Event>('beforeunload');
 
-  static const EventStreamProvider<Event> blurEvent = const EventStreamProvider<Event>('blur');
-
-  static const EventStreamProvider<Event> canPlayEvent = const EventStreamProvider<Event>('canplay');
-
-  static const EventStreamProvider<Event> canPlayThroughEvent = const EventStreamProvider<Event>('canplaythrough');
-
-  static const EventStreamProvider<Event> changeEvent = const EventStreamProvider<Event>('change');
-
-  static const EventStreamProvider<MouseEvent> clickEvent = const EventStreamProvider<MouseEvent>('click');
-
-  static const EventStreamProvider<MouseEvent> contextMenuEvent = const EventStreamProvider<MouseEvent>('contextmenu');
-
-  static const EventStreamProvider<Event> doubleClickEvent = const EventStreamProvider<Event>('dblclick');
-
   static const EventStreamProvider<DeviceMotionEvent> deviceMotionEvent = const EventStreamProvider<DeviceMotionEvent>('devicemotion');
 
   static const EventStreamProvider<DeviceOrientationEvent> deviceOrientationEvent = const EventStreamProvider<DeviceOrientationEvent>('deviceorientation');
 
-  static const EventStreamProvider<MouseEvent> dragEvent = const EventStreamProvider<MouseEvent>('drag');
-
-  static const EventStreamProvider<MouseEvent> dragEndEvent = const EventStreamProvider<MouseEvent>('dragend');
-
-  static const EventStreamProvider<MouseEvent> dragEnterEvent = const EventStreamProvider<MouseEvent>('dragenter');
-
-  static const EventStreamProvider<MouseEvent> dragLeaveEvent = const EventStreamProvider<MouseEvent>('dragleave');
-
-  static const EventStreamProvider<MouseEvent> dragOverEvent = const EventStreamProvider<MouseEvent>('dragover');
-
-  static const EventStreamProvider<MouseEvent> dragStartEvent = const EventStreamProvider<MouseEvent>('dragstart');
-
-  static const EventStreamProvider<MouseEvent> dropEvent = const EventStreamProvider<MouseEvent>('drop');
-
-  static const EventStreamProvider<Event> durationChangeEvent = const EventStreamProvider<Event>('durationchange');
-
-  static const EventStreamProvider<Event> emptiedEvent = const EventStreamProvider<Event>('emptied');
-
-  static const EventStreamProvider<Event> endedEvent = const EventStreamProvider<Event>('ended');
-
-  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
-
-  static const EventStreamProvider<Event> focusEvent = const EventStreamProvider<Event>('focus');
-
   static const EventStreamProvider<HashChangeEvent> hashChangeEvent = const EventStreamProvider<HashChangeEvent>('hashchange');
 
-  static const EventStreamProvider<Event> inputEvent = const EventStreamProvider<Event>('input');
-
-  static const EventStreamProvider<Event> invalidEvent = const EventStreamProvider<Event>('invalid');
-
-  static const EventStreamProvider<KeyboardEvent> keyDownEvent = const EventStreamProvider<KeyboardEvent>('keydown');
-
-  static const EventStreamProvider<KeyboardEvent> keyPressEvent = const EventStreamProvider<KeyboardEvent>('keypress');
-
-  static const EventStreamProvider<KeyboardEvent> keyUpEvent = const EventStreamProvider<KeyboardEvent>('keyup');
-
-  static const EventStreamProvider<Event> loadEvent = const EventStreamProvider<Event>('load');
-
-  static const EventStreamProvider<Event> loadedDataEvent = const EventStreamProvider<Event>('loadeddata');
-
-  static const EventStreamProvider<Event> loadedMetadataEvent = const EventStreamProvider<Event>('loadedmetadata');
-
-  static const EventStreamProvider<Event> loadStartEvent = const EventStreamProvider<Event>('loadstart');
-
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  static const EventStreamProvider<MouseEvent> mouseDownEvent = const EventStreamProvider<MouseEvent>('mousedown');
-
-  static const EventStreamProvider<MouseEvent> mouseMoveEvent = const EventStreamProvider<MouseEvent>('mousemove');
-
-  static const EventStreamProvider<MouseEvent> mouseOutEvent = const EventStreamProvider<MouseEvent>('mouseout');
-
-  static const EventStreamProvider<MouseEvent> mouseOverEvent = const EventStreamProvider<MouseEvent>('mouseover');
-
-  static const EventStreamProvider<MouseEvent> mouseUpEvent = const EventStreamProvider<MouseEvent>('mouseup');
-
-  static const EventStreamProvider<WheelEvent> mouseWheelEvent = const EventStreamProvider<WheelEvent>('mousewheel');
-
   static const EventStreamProvider<Event> offlineEvent = const EventStreamProvider<Event>('offline');
 
   static const EventStreamProvider<Event> onlineEvent = const EventStreamProvider<Event>('online');
@@ -22520,65 +23141,22 @@
 
   static const EventStreamProvider<Event> pageShowEvent = const EventStreamProvider<Event>('pageshow');
 
-  static const EventStreamProvider<Event> pauseEvent = const EventStreamProvider<Event>('pause');
-
-  static const EventStreamProvider<Event> playEvent = const EventStreamProvider<Event>('play');
-
-  static const EventStreamProvider<Event> playingEvent = const EventStreamProvider<Event>('playing');
-
   static const EventStreamProvider<PopStateEvent> popStateEvent = const EventStreamProvider<PopStateEvent>('popstate');
 
-  static const EventStreamProvider<Event> progressEvent = const EventStreamProvider<Event>('progress');
-
-  static const EventStreamProvider<Event> rateChangeEvent = const EventStreamProvider<Event>('ratechange');
-
-  static const EventStreamProvider<Event> resetEvent = const EventStreamProvider<Event>('reset');
-
   static const EventStreamProvider<Event> resizeEvent = const EventStreamProvider<Event>('resize');
 
-  static const EventStreamProvider<Event> scrollEvent = const EventStreamProvider<Event>('scroll');
-
-  static const EventStreamProvider<Event> searchEvent = const EventStreamProvider<Event>('search');
-
-  static const EventStreamProvider<Event> seekedEvent = const EventStreamProvider<Event>('seeked');
-
-  static const EventStreamProvider<Event> seekingEvent = const EventStreamProvider<Event>('seeking');
-
-  static const EventStreamProvider<Event> selectEvent = const EventStreamProvider<Event>('select');
-
-  static const EventStreamProvider<Event> stalledEvent = const EventStreamProvider<Event>('stalled');
-
   static const EventStreamProvider<StorageEvent> storageEvent = const EventStreamProvider<StorageEvent>('storage');
 
-  static const EventStreamProvider<Event> submitEvent = const EventStreamProvider<Event>('submit');
-
-  static const EventStreamProvider<Event> suspendEvent = const EventStreamProvider<Event>('suspend');
-
-  static const EventStreamProvider<Event> timeUpdateEvent = const EventStreamProvider<Event>('timeupdate');
-
-  static const EventStreamProvider<TouchEvent> touchCancelEvent = const EventStreamProvider<TouchEvent>('touchcancel');
-
-  static const EventStreamProvider<TouchEvent> touchEndEvent = const EventStreamProvider<TouchEvent>('touchend');
-
-  static const EventStreamProvider<TouchEvent> touchMoveEvent = const EventStreamProvider<TouchEvent>('touchmove');
-
-  static const EventStreamProvider<TouchEvent> touchStartEvent = const EventStreamProvider<TouchEvent>('touchstart');
-
   static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
 
-  static const EventStreamProvider<Event> volumeChangeEvent = const EventStreamProvider<Event>('volumechange');
-
-  static const EventStreamProvider<Event> waitingEvent = const EventStreamProvider<Event>('waiting');
-
   static const EventStreamProvider<AnimationEvent> animationEndEvent = const EventStreamProvider<AnimationEvent>('webkitAnimationEnd');
 
   static const EventStreamProvider<AnimationEvent> animationIterationEvent = const EventStreamProvider<AnimationEvent>('webkitAnimationIteration');
 
   static const EventStreamProvider<AnimationEvent> animationStartEvent = const EventStreamProvider<AnimationEvent>('webkitAnimationStart');
 
-  static const EventStreamProvider<TransitionEvent> transitionEndEvent = const EventStreamProvider<TransitionEvent>('webkitTransitionEnd');
-
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WindowEvents get on =>
     new WindowEvents(this);
 
@@ -22586,212 +23164,205 @@
 
   static const int TEMPORARY = 0;
 
-  /// @domName Window.applicationCache; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.applicationCache')
   final ApplicationCache applicationCache;
 
-  /// @domName Window.closed; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.closed')
   final bool closed;
 
-  /// @domName Window.crypto; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.crypto')
   final Crypto crypto;
 
-  /// @domName Window.defaultStatus; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.defaultStatus')
   String defaultStatus;
 
-  /// @domName Window.defaultstatus; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.defaultstatus')
   String defaultstatus;
 
-  /// @domName Window.devicePixelRatio; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.devicePixelRatio')
   final num devicePixelRatio;
 
-  /// @domName Window.event; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.event')
   final Event event;
 
-  /// @domName Window.history; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.history')
   final History history;
 
-  /// @domName Window.innerHeight; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.innerHeight')
   final int innerHeight;
 
-  /// @domName Window.innerWidth; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.innerWidth')
   final int innerWidth;
 
-  /// @domName Window.localStorage; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.localStorage')
   final Storage localStorage;
 
-  /// @domName Window.locationbar; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.locationbar')
   final BarInfo locationbar;
 
-  /// @domName Window.menubar; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.menubar')
   final BarInfo menubar;
 
-  /// @domName Window.name; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.name')
   String name;
 
-  /// @domName Window.navigator; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.navigator')
   final Navigator navigator;
 
-  /// @domName Window.offscreenBuffering; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.offscreenBuffering')
   final bool offscreenBuffering;
 
-  /// @domName Window.opener; @docsEditable true
   WindowBase get opener => _convertNativeToDart_Window(this._opener);
   @JSName('opener')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('DOMWindow.opener') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _opener;
 
-  /// @domName Window.outerHeight; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.outerHeight')
   final int outerHeight;
 
-  /// @domName Window.outerWidth; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.outerWidth')
   final int outerWidth;
 
-  /// @domName DOMWindow.pagePopupController; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.pagePopupController')
   final PagePopupController pagePopupController;
 
-  /// @domName Window.pageXOffset; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.pageXOffset')
   final int pageXOffset;
 
-  /// @domName Window.pageYOffset; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.pageYOffset')
   final int pageYOffset;
 
-  /// @domName Window.parent; @docsEditable true
   WindowBase get parent => _convertNativeToDart_Window(this._parent);
   @JSName('parent')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('DOMWindow.parent') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _parent;
 
-  /// @domName Window.performance; @docsEditable true
-  @SupportedBrowser(SupportedBrowser.CHROME) @SupportedBrowser(SupportedBrowser.FIREFOX) @SupportedBrowser(SupportedBrowser.IE)
+  @DocsEditable @DomName('DOMWindow.performance') @SupportedBrowser(SupportedBrowser.CHROME) @SupportedBrowser(SupportedBrowser.FIREFOX) @SupportedBrowser(SupportedBrowser.IE)
   final Performance performance;
 
-  /// @domName Window.personalbar; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.personalbar')
   final BarInfo personalbar;
 
-  /// @domName Window.screen; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.screen')
   final Screen screen;
 
-  /// @domName Window.screenLeft; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.screenLeft')
   final int screenLeft;
 
-  /// @domName Window.screenTop; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.screenTop')
   final int screenTop;
 
-  /// @domName Window.screenX; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.screenX')
   final int screenX;
 
-  /// @domName Window.screenY; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.screenY')
   final int screenY;
 
-  /// @domName Window.scrollX; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.scrollX')
   final int scrollX;
 
-  /// @domName Window.scrollY; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.scrollY')
   final int scrollY;
 
-  /// @domName Window.scrollbars; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.scrollbars')
   final BarInfo scrollbars;
 
-  /// @domName Window.self; @docsEditable true
   WindowBase get self => _convertNativeToDart_Window(this._self);
   @JSName('self')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('DOMWindow.self') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _self;
 
-  /// @domName Window.sessionStorage; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.sessionStorage')
   final Storage sessionStorage;
 
-  /// @domName Window.status; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.status')
   String status;
 
-  /// @domName Window.statusbar; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.statusbar')
   final BarInfo statusbar;
 
-  /// @domName Window.styleMedia; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.styleMedia')
   final StyleMedia styleMedia;
 
-  /// @domName Window.toolbar; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.toolbar')
   final BarInfo toolbar;
 
-  /// @domName Window.top; @docsEditable true
   WindowBase get top => _convertNativeToDart_Window(this._top);
   @JSName('top')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('DOMWindow.top') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _top;
 
-  /// @domName DOMWindow.webkitNotifications; @docsEditable true
-  final NotificationCenter webkitNotifications;
+  @JSName('webkitNotifications')
+  @DocsEditable @DomName('DOMWindow.webkitNotifications') @SupportedBrowser(SupportedBrowser.CHROME) @SupportedBrowser(SupportedBrowser.SAFARI) @Experimental()
+  final NotificationCenter notifications;
 
-  /// @domName DOMWindow.webkitStorageInfo; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.webkitStorageInfo')
   final StorageInfo webkitStorageInfo;
 
-  /// @domName Window.window; @docsEditable true
   WindowBase get window => _convertNativeToDart_Window(this._window);
   @JSName('window')
-  @Creates('Window|=Object') @Returns('Window|=Object')
+  @DocsEditable @DomName('DOMWindow.window') @Creates('Window|=Object') @Returns('Window|=Object')
   final dynamic _window;
 
-  /// @domName Window.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('DOMWindow.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName Window.alert; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.alert')
   void alert(String message) native;
 
-  /// @domName Window.atob; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.atob')
   String atob(String string) native;
 
-  /// @domName Window.btoa; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.btoa')
   String btoa(String string) native;
 
-  /// @domName Window.captureEvents; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.captureEvents')
   void captureEvents() native;
 
-  /// @domName Window.clearInterval; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.clearInterval')
   void clearInterval(int handle) native;
 
-  /// @domName Window.clearTimeout; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.clearTimeout')
   void clearTimeout(int handle) native;
 
-  /// @domName Window.close; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.close')
   void close() native;
 
-  /// @domName Window.confirm; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.confirm')
   bool confirm(String message) native;
 
-  /// @domName Window.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('DOMWindow.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName Window.find; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.find')
   bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native;
 
-  /// @domName Window.getComputedStyle; @docsEditable true
   @JSName('getComputedStyle')
+  @DocsEditable @DomName('DOMWindow.getComputedStyle')
   CssStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native;
 
-  /// @domName Window.getMatchedCSSRules; @docsEditable true
   @JSName('getMatchedCSSRules')
+  @DocsEditable @DomName('DOMWindow.getMatchedCSSRules')
   @Returns('_CssRuleList') @Creates('_CssRuleList')
   List<CssRule> getMatchedCssRules(Element element, String pseudoElement) native;
 
-  /// @domName Window.getSelection; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.getSelection')
   DomSelection getSelection() native;
 
-  /// @domName Window.matchMedia; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.matchMedia')
   MediaQueryList matchMedia(String query) native;
 
-  /// @domName Window.moveBy; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.moveBy')
   void moveBy(num x, num y) native;
 
-  /// @domName Window.moveTo; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.moveTo')
   void moveTo(num x, num y) native;
 
-  /// @domName DOMWindow.openDatabase; @docsEditable true
-  @Creates('Database') @Creates('DatabaseSync')
+  @DocsEditable @DomName('DOMWindow.openDatabase') @Creates('Database') @Creates('DatabaseSync')
   Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
 
-  /// @domName Window.postMessage; @docsEditable true
   void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) {
     if (?message &&
         !?messagePorts) {
@@ -22807,144 +23378,128 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('postMessage')
+  @DocsEditable @DomName('DOMWindow.postMessage')
   void _postMessage_1(message, targetOrigin) native;
   @JSName('postMessage')
+  @DocsEditable @DomName('DOMWindow.postMessage')
   void _postMessage_2(message, targetOrigin, List messagePorts) native;
 
-  /// @domName Window.print; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.print')
   void print() native;
 
-  /// @domName Window.releaseEvents; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.releaseEvents')
   void releaseEvents() native;
 
-  /// @domName Window.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('DOMWindow.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName Window.resizeBy; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.resizeBy')
   void resizeBy(num x, num y) native;
 
-  /// @domName Window.resizeTo; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.resizeTo')
   void resizeTo(num width, num height) native;
 
-  /// @domName Window.scroll; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.scroll')
   void scroll(int x, int y) native;
 
-  /// @domName Window.scrollBy; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.scrollBy')
   void scrollBy(int x, int y) native;
 
-  /// @domName Window.scrollTo; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.scrollTo')
   void scrollTo(int x, int y) native;
 
-  /// @domName Window.setInterval; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.setInterval')
   int setInterval(TimeoutHandler handler, int timeout) native;
 
-  /// @domName Window.setTimeout; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.setTimeout')
   int setTimeout(TimeoutHandler handler, int timeout) native;
 
-  /// @domName Window.showModalDialog; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.showModalDialog')
   Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native;
 
-  /// @domName Window.stop; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.stop')
   void stop() native;
 
-  /// @domName Window.webkitConvertPointFromNodeToPage; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.webkitConvertPointFromNodeToPage')
   Point webkitConvertPointFromNodeToPage(Node node, Point p) native;
 
-  /// @domName Window.webkitConvertPointFromPageToNode; @docsEditable true
+  @DocsEditable @DomName('DOMWindow.webkitConvertPointFromPageToNode')
   Point webkitConvertPointFromPageToNode(Node node, Point p) native;
 
-  /// @domName DOMWindow.webkitRequestFileSystem; @docsEditable true
   @JSName('webkitRequestFileSystem')
-  @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
+  @DocsEditable @DomName('DOMWindow.webkitRequestFileSystem') @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
   void requestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /// @domName DOMWindow.webkitResolveLocalFileSystemURL; @docsEditable true
   @JSName('webkitResolveLocalFileSystemURL')
-  @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
+  @DocsEditable @DomName('DOMWindow.webkitResolveLocalFileSystemURL') @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
   void resolveLocalFileSystemUrl(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
 
   Stream<Event> get onContentLoaded => contentLoadedEvent.forTarget(this);
 
-  Stream<Event> get onAbort => abortEvent.forTarget(this);
+  Stream<Event> get onAbort => Element.abortEvent.forTarget(this);
 
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
-  Stream<Event> get onBlur => blurEvent.forTarget(this);
+  Stream<Event> get onBlur => Element.blurEvent.forTarget(this);
 
-  Stream<Event> get onCanPlay => canPlayEvent.forTarget(this);
+  Stream<Event> get onChange => Element.changeEvent.forTarget(this);
 
-  Stream<Event> get onCanPlayThrough => canPlayThroughEvent.forTarget(this);
+  Stream<MouseEvent> get onClick => Element.clickEvent.forTarget(this);
 
-  Stream<Event> get onChange => changeEvent.forTarget(this);
+  Stream<MouseEvent> get onContextMenu => Element.contextMenuEvent.forTarget(this);
 
-  Stream<MouseEvent> get onClick => clickEvent.forTarget(this);
-
-  Stream<MouseEvent> get onContextMenu => contextMenuEvent.forTarget(this);
-
-  Stream<Event> get onDoubleClick => doubleClickEvent.forTarget(this);
+  Stream<Event> get onDoubleClick => Element.doubleClickEvent.forTarget(this);
 
   Stream<DeviceMotionEvent> get onDeviceMotion => deviceMotionEvent.forTarget(this);
 
   Stream<DeviceOrientationEvent> get onDeviceOrientation => deviceOrientationEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrag => dragEvent.forTarget(this);
+  Stream<MouseEvent> get onDrag => Element.dragEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnd => dragEndEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnd => Element.dragEndEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnter => dragEnterEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnter => Element.dragEnterEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragLeave => dragLeaveEvent.forTarget(this);
+  Stream<MouseEvent> get onDragLeave => Element.dragLeaveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragOver => dragOverEvent.forTarget(this);
+  Stream<MouseEvent> get onDragOver => Element.dragOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragStart => dragStartEvent.forTarget(this);
+  Stream<MouseEvent> get onDragStart => Element.dragStartEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrop => dropEvent.forTarget(this);
+  Stream<MouseEvent> get onDrop => Element.dropEvent.forTarget(this);
 
-  Stream<Event> get onDurationChange => durationChangeEvent.forTarget(this);
+  Stream<Event> get onError => Element.errorEvent.forTarget(this);
 
-  Stream<Event> get onEmptied => emptiedEvent.forTarget(this);
-
-  Stream<Event> get onEnded => endedEvent.forTarget(this);
-
-  Stream<Event> get onError => errorEvent.forTarget(this);
-
-  Stream<Event> get onFocus => focusEvent.forTarget(this);
+  Stream<Event> get onFocus => Element.focusEvent.forTarget(this);
 
   Stream<HashChangeEvent> get onHashChange => hashChangeEvent.forTarget(this);
 
-  Stream<Event> get onInput => inputEvent.forTarget(this);
+  Stream<Event> get onInput => Element.inputEvent.forTarget(this);
 
-  Stream<Event> get onInvalid => invalidEvent.forTarget(this);
+  Stream<Event> get onInvalid => Element.invalidEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyDown => keyDownEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyDown => Element.keyDownEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyPress => keyPressEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyPress => Element.keyPressEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyUp => keyUpEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyUp => Element.keyUpEvent.forTarget(this);
 
-  Stream<Event> get onLoad => loadEvent.forTarget(this);
-
-  Stream<Event> get onLoadedData => loadedDataEvent.forTarget(this);
-
-  Stream<Event> get onLoadedMetadata => loadedMetadataEvent.forTarget(this);
-
-  Stream<Event> get onLoadStart => loadStartEvent.forTarget(this);
+  Stream<Event> get onLoad => Element.loadEvent.forTarget(this);
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseDown => mouseDownEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseDown => Element.mouseDownEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseMove => mouseMoveEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseMove => Element.mouseMoveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOut => mouseOutEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOut => Element.mouseOutEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOver => mouseOverEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOver => Element.mouseOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseUp => Element.mouseUpEvent.forTarget(this);
 
-  Stream<WheelEvent> get onMouseWheel => mouseWheelEvent.forTarget(this);
+  Stream<WheelEvent> get onMouseWheel => Element.mouseWheelEvent.forTarget(this);
 
   Stream<Event> get onOffline => offlineEvent.forTarget(this);
 
@@ -22954,291 +23509,267 @@
 
   Stream<Event> get onPageShow => pageShowEvent.forTarget(this);
 
-  Stream<Event> get onPause => pauseEvent.forTarget(this);
-
-  Stream<Event> get onPlay => playEvent.forTarget(this);
-
-  Stream<Event> get onPlaying => playingEvent.forTarget(this);
-
   Stream<PopStateEvent> get onPopState => popStateEvent.forTarget(this);
 
-  Stream<Event> get onProgress => progressEvent.forTarget(this);
-
-  Stream<Event> get onRateChange => rateChangeEvent.forTarget(this);
-
-  Stream<Event> get onReset => resetEvent.forTarget(this);
+  Stream<Event> get onReset => Element.resetEvent.forTarget(this);
 
   Stream<Event> get onResize => resizeEvent.forTarget(this);
 
-  Stream<Event> get onScroll => scrollEvent.forTarget(this);
+  Stream<Event> get onScroll => Element.scrollEvent.forTarget(this);
 
-  Stream<Event> get onSearch => searchEvent.forTarget(this);
+  Stream<Event> get onSearch => Element.searchEvent.forTarget(this);
 
-  Stream<Event> get onSeeked => seekedEvent.forTarget(this);
-
-  Stream<Event> get onSeeking => seekingEvent.forTarget(this);
-
-  Stream<Event> get onSelect => selectEvent.forTarget(this);
-
-  Stream<Event> get onStalled => stalledEvent.forTarget(this);
+  Stream<Event> get onSelect => Element.selectEvent.forTarget(this);
 
   Stream<StorageEvent> get onStorage => storageEvent.forTarget(this);
 
-  Stream<Event> get onSubmit => submitEvent.forTarget(this);
+  Stream<Event> get onSubmit => Element.submitEvent.forTarget(this);
 
-  Stream<Event> get onSuspend => suspendEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchCancel => Element.touchCancelEvent.forTarget(this);
 
-  Stream<Event> get onTimeUpdate => timeUpdateEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchEnd => Element.touchEndEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchCancel => touchCancelEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchEnd => touchEndEvent.forTarget(this);
-
-  Stream<TouchEvent> get onTouchMove => touchMoveEvent.forTarget(this);
-
-  Stream<TouchEvent> get onTouchStart => touchStartEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchStart => Element.touchStartEvent.forTarget(this);
 
   Stream<Event> get onUnload => unloadEvent.forTarget(this);
 
-  Stream<Event> get onVolumeChange => volumeChangeEvent.forTarget(this);
-
-  Stream<Event> get onWaiting => waitingEvent.forTarget(this);
-
   Stream<AnimationEvent> get onAnimationEnd => animationEndEvent.forTarget(this);
 
   Stream<AnimationEvent> get onAnimationIteration => animationIterationEvent.forTarget(this);
 
   Stream<AnimationEvent> get onAnimationStart => animationStartEvent.forTarget(this);
 
-  Stream<TransitionEvent> get onTransitionEnd => transitionEndEvent.forTarget(this);
+  Stream<TransitionEvent> get onTransitionEnd => Element.transitionEndEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class WindowEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   WindowEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contentLoaded => this['DOMContentLoaded'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeUnload => this['beforeunload'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlay => this['canplay'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlayThrough => this['canplaythrough'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get change => this['change'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contextMenu => this['contextmenu'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get doubleClick => this['dblclick'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get deviceMotion => this['devicemotion'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get deviceOrientation => this['deviceorientation'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drag => this['drag'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnd => this['dragend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnter => this['dragenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragLeave => this['dragleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragOver => this['dragover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragStart => this['dragstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drop => this['drop'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get durationChange => this['durationchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get emptied => this['emptied'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get ended => this['ended'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get hashChange => this['hashchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get input => this['input'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get invalid => this['invalid'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyDown => this['keydown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyPress => this['keypress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyUp => this['keyup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedData => this['loadeddata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedMetadata => this['loadedmetadata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseDown => this['mousedown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseMove => this['mousemove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOut => this['mouseout'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOver => this['mouseover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseUp => this['mouseup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseWheel => this['mousewheel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get offline => this['offline'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get online => this['online'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pageHide => this['pagehide'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pageShow => this['pageshow'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pause => this['pause'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get play => this['play'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get playing => this['playing'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get popState => this['popstate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get rateChange => this['ratechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get reset => this['reset'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get resize => this['resize'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get scroll => this['scroll'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get search => this['search'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeked => this['seeked'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeking => this['seeking'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get select => this['select'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get stalled => this['stalled'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get storage => this['storage'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get submit => this['submit'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get suspend => this['suspend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get timeUpdate => this['timeupdate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchCancel => this['touchcancel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchEnd => this['touchend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchMove => this['touchmove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchStart => this['touchstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unload => this['unload'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get volumeChange => this['volumechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get waiting => this['waiting'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get animationEnd => this['webkitAnimationEnd'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get animationIteration => this['webkitAnimationIteration'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get animationStart => this['webkitAnimationStart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get transitionEnd => this['webkitTransitionEnd'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23246,20 +23777,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Worker; @docsEditable true
+
+@DocsEditable
+@DomName('Worker')
 class Worker extends AbstractWorker native "*Worker" {
 
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  ///@docsEditable true
+  @DocsEditable
   factory Worker(String scriptUrl) => Worker._create(scriptUrl);
   static Worker _create(String scriptUrl) => JS('Worker', 'new Worker(#)', scriptUrl);
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WorkerEvents get on =>
     new WorkerEvents(this);
 
-  /// @domName Worker.postMessage; @docsEditable true
   void postMessage(/*SerializedScriptValue*/ message, [List messagePorts]) {
     if (?messagePorts) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
@@ -23271,22 +23804,24 @@
     return;
   }
   @JSName('postMessage')
+  @DocsEditable @DomName('Worker.postMessage')
   void _postMessage_1(message, List messagePorts) native;
   @JSName('postMessage')
+  @DocsEditable @DomName('Worker.postMessage')
   void _postMessage_2(message) native;
 
-  /// @domName Worker.terminate; @docsEditable true
+  @DocsEditable @DomName('Worker.terminate')
   void terminate() native;
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class WorkerEvents extends AbstractWorkerEvents {
-  /// @docsEditable true
+  @DocsEditable
   WorkerEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23294,12 +23829,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WorkerContext
+@DocsEditable
+@DomName('WorkerContext')
 class WorkerContext extends EventTarget native "*WorkerContext" {
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WorkerContextEvents get on =>
     new WorkerContextEvents(this);
 
@@ -23307,72 +23844,68 @@
 
   static const int TEMPORARY = 0;
 
-  /// @domName WorkerContext.location; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.location')
   final WorkerLocation location;
 
-  /// @domName WorkerContext.navigator; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.navigator')
   final WorkerNavigator navigator;
 
-  /// @domName WorkerContext.self; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.self')
   final WorkerContext self;
 
-  /// @domName WorkerContext.webkitNotifications; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.webkitNotifications')
   final NotificationCenter webkitNotifications;
 
-  /// @domName WorkerContext.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('WorkerContext.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName WorkerContext.clearInterval; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.clearInterval')
   void clearInterval(int handle) native;
 
-  /// @domName WorkerContext.clearTimeout; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.clearTimeout')
   void clearTimeout(int handle) native;
 
-  /// @domName WorkerContext.close; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.close')
   void close() native;
 
-  /// @domName WorkerContext.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('WorkerContext.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName WorkerContext.importScripts; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.importScripts')
   void importScripts() native;
 
-  /// @domName WorkerContext.openDatabase; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.openDatabase')
   Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
 
-  /// @domName WorkerContext.openDatabaseSync; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.openDatabaseSync')
   DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
 
-  /// @domName WorkerContext.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('WorkerContext.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName WorkerContext.setInterval; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.setInterval')
   int setInterval(TimeoutHandler handler, int timeout) native;
 
-  /// @domName WorkerContext.setTimeout; @docsEditable true
+  @DocsEditable @DomName('WorkerContext.setTimeout')
   int setTimeout(TimeoutHandler handler, int timeout) native;
 
-  /// @domName WorkerContext.webkitRequestFileSystem; @docsEditable true
   @JSName('webkitRequestFileSystem')
-  @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
+  @DocsEditable @DomName('WorkerContext.webkitRequestFileSystem') @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
   void requestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /// @domName WorkerContext.webkitRequestFileSystemSync; @docsEditable true
   @JSName('webkitRequestFileSystemSync')
-  @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
+  @DocsEditable @DomName('WorkerContext.webkitRequestFileSystemSync') @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
   FileSystemSync requestFileSystemSync(int type, int size) native;
 
-  /// @domName WorkerContext.webkitResolveLocalFileSystemSyncURL; @docsEditable true
   @JSName('webkitResolveLocalFileSystemSyncURL')
-  @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
+  @DocsEditable @DomName('WorkerContext.webkitResolveLocalFileSystemSyncURL') @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
   EntrySync resolveLocalFileSystemSyncUrl(String url) native;
 
-  /// @domName WorkerContext.webkitResolveLocalFileSystemURL; @docsEditable true
   @JSName('webkitResolveLocalFileSystemURL')
-  @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
+  @DocsEditable @DomName('WorkerContext.webkitResolveLocalFileSystemURL') @SupportedBrowser(SupportedBrowser.CHROME) @Experimental()
   void resolveLocalFileSystemUrl(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
 
   Stream<Event> get onError => errorEvent.forTarget(this);
@@ -23394,12 +23927,12 @@
          this, this, this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class WorkerContextEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   WorkerContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23407,34 +23940,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WorkerLocation; @docsEditable true
+
+@DocsEditable
+@DomName('WorkerLocation')
 class WorkerLocation native "*WorkerLocation" {
 
-  /// @domName WorkerLocation.hash; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.hash')
   final String hash;
 
-  /// @domName WorkerLocation.host; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.host')
   final String host;
 
-  /// @domName WorkerLocation.hostname; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.hostname')
   final String hostname;
 
-  /// @domName WorkerLocation.href; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.href')
   final String href;
 
-  /// @domName WorkerLocation.pathname; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.pathname')
   final String pathname;
 
-  /// @domName WorkerLocation.port; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.port')
   final String port;
 
-  /// @domName WorkerLocation.protocol; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.protocol')
   final String protocol;
 
-  /// @domName WorkerLocation.search; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.search')
   final String search;
 
-  /// @domName WorkerLocation.toString; @docsEditable true
+  @DocsEditable @DomName('WorkerLocation.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23442,22 +23977,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WorkerNavigator; @docsEditable true
+
+@DocsEditable
+@DomName('WorkerNavigator')
 class WorkerNavigator native "*WorkerNavigator" {
 
-  /// @domName WorkerNavigator.appName; @docsEditable true
+  @DocsEditable @DomName('WorkerNavigator.appName')
   final String appName;
 
-  /// @domName WorkerNavigator.appVersion; @docsEditable true
+  @DocsEditable @DomName('WorkerNavigator.appVersion')
   final String appVersion;
 
-  /// @domName WorkerNavigator.onLine; @docsEditable true
+  @DocsEditable @DomName('WorkerNavigator.onLine')
   final bool onLine;
 
-  /// @domName WorkerNavigator.platform; @docsEditable true
+  @DocsEditable @DomName('WorkerNavigator.platform')
   final String platform;
 
-  /// @domName WorkerNavigator.userAgent; @docsEditable true
+  @DocsEditable @DomName('WorkerNavigator.userAgent')
   final String userAgent;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23465,20 +24002,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathEvaluator; @docsEditable true
+
+@DocsEditable
+@DomName('XPathEvaluator')
 class XPathEvaluator native "*XPathEvaluator" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory XPathEvaluator() => XPathEvaluator._create();
   static XPathEvaluator _create() => JS('XPathEvaluator', 'new XPathEvaluator()');
 
-  /// @domName XPathEvaluator.createExpression; @docsEditable true
+  @DocsEditable @DomName('XPathEvaluator.createExpression')
   XPathExpression createExpression(String expression, XPathNSResolver resolver) native;
 
-  /// @domName XPathEvaluator.createNSResolver; @docsEditable true
+  @DocsEditable @DomName('XPathEvaluator.createNSResolver')
   XPathNSResolver createNSResolver(Node nodeResolver) native;
 
-  /// @domName XPathEvaluator.evaluate; @docsEditable true
+  @DocsEditable @DomName('XPathEvaluator.evaluate')
   XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23486,23 +24025,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathException; @docsEditable true
+
+@DocsEditable
+@DomName('XPathException')
 class XPathException native "*XPathException" {
 
   static const int INVALID_EXPRESSION_ERR = 51;
 
   static const int TYPE_ERR = 52;
 
-  /// @domName XPathException.code; @docsEditable true
+  @DocsEditable @DomName('XPathException.code')
   final int code;
 
-  /// @domName XPathException.message; @docsEditable true
+  @DocsEditable @DomName('XPathException.message')
   final String message;
 
-  /// @domName XPathException.name; @docsEditable true
+  @DocsEditable @DomName('XPathException.name')
   final String name;
 
-  /// @domName XPathException.toString; @docsEditable true
+  @DocsEditable @DomName('XPathException.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23510,10 +24051,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathExpression; @docsEditable true
+
+@DocsEditable
+@DomName('XPathExpression')
 class XPathExpression native "*XPathExpression" {
 
-  /// @domName XPathExpression.evaluate; @docsEditable true
+  @DocsEditable @DomName('XPathExpression.evaluate')
   XPathResult evaluate(Node contextNode, int type, XPathResult inResult) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23521,11 +24064,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathNSResolver; @docsEditable true
+
+@DocsEditable
+@DomName('XPathNSResolver')
 class XPathNSResolver native "*XPathNSResolver" {
 
-  /// @domName XPathNSResolver.lookupNamespaceURI; @docsEditable true
   @JSName('lookupNamespaceURI')
+  @DocsEditable @DomName('XPathNSResolver.lookupNamespaceURI')
   String lookupNamespaceUri(String prefix) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23533,7 +24078,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathResult; @docsEditable true
+
+@DocsEditable
+@DomName('XPathResult')
 class XPathResult native "*XPathResult" {
 
   static const int ANY_TYPE = 0;
@@ -23556,31 +24103,31 @@
 
   static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
 
-  /// @domName XPathResult.booleanValue; @docsEditable true
+  @DocsEditable @DomName('XPathResult.booleanValue')
   final bool booleanValue;
 
-  /// @domName XPathResult.invalidIteratorState; @docsEditable true
+  @DocsEditable @DomName('XPathResult.invalidIteratorState')
   final bool invalidIteratorState;
 
-  /// @domName XPathResult.numberValue; @docsEditable true
+  @DocsEditable @DomName('XPathResult.numberValue')
   final num numberValue;
 
-  /// @domName XPathResult.resultType; @docsEditable true
+  @DocsEditable @DomName('XPathResult.resultType')
   final int resultType;
 
-  /// @domName XPathResult.singleNodeValue; @docsEditable true
+  @DocsEditable @DomName('XPathResult.singleNodeValue')
   final Node singleNodeValue;
 
-  /// @domName XPathResult.snapshotLength; @docsEditable true
+  @DocsEditable @DomName('XPathResult.snapshotLength')
   final int snapshotLength;
 
-  /// @domName XPathResult.stringValue; @docsEditable true
+  @DocsEditable @DomName('XPathResult.stringValue')
   final String stringValue;
 
-  /// @domName XPathResult.iterateNext; @docsEditable true
+  @DocsEditable @DomName('XPathResult.iterateNext')
   Node iterateNext() native;
 
-  /// @domName XPathResult.snapshotItem; @docsEditable true
+  @DocsEditable @DomName('XPathResult.snapshotItem')
   Node snapshotItem(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23588,14 +24135,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLSerializer; @docsEditable true
+
+@DocsEditable
+@DomName('XMLSerializer')
 class XmlSerializer native "*XMLSerializer" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory XmlSerializer() => XmlSerializer._create();
   static XmlSerializer _create() => JS('XmlSerializer', 'new XMLSerializer()');
 
-  /// @domName XMLSerializer.serializeToString; @docsEditable true
+  @DocsEditable @DomName('XMLSerializer.serializeToString')
   String serializeToString(Node node) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23603,35 +24152,37 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XSLTProcessor; @docsEditable true
+
+@DocsEditable
+@DomName('XSLTProcessor')
 class XsltProcessor native "*XSLTProcessor" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory XsltProcessor() => XsltProcessor._create();
   static XsltProcessor _create() => JS('XsltProcessor', 'new XSLTProcessor()');
 
-  /// @domName XSLTProcessor.clearParameters; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.clearParameters')
   void clearParameters() native;
 
-  /// @domName XSLTProcessor.getParameter; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.getParameter')
   String getParameter(String namespaceURI, String localName) native;
 
-  /// @domName XSLTProcessor.importStylesheet; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.importStylesheet')
   void importStylesheet(Node stylesheet) native;
 
-  /// @domName XSLTProcessor.removeParameter; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.removeParameter')
   void removeParameter(String namespaceURI, String localName) native;
 
-  /// @domName XSLTProcessor.reset; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.reset')
   void reset() native;
 
-  /// @domName XSLTProcessor.setParameter; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.setParameter')
   void setParameter(String namespaceURI, String localName, String value) native;
 
-  /// @domName XSLTProcessor.transformToDocument; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.transformToDocument')
   Document transformToDocument(Node source) native;
 
-  /// @domName XSLTProcessor.transformToFragment; @docsEditable true
+  @DocsEditable @DomName('XSLTProcessor.transformToFragment')
   DocumentFragment transformToFragment(Node source, Document docVal) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23639,10 +24190,32 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ClientRectList; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLAppletElement')
+class _AppletElement extends Element native "*HTMLAppletElement" {
+}
+// Copyright (c) 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.
+
+
+
+@DocsEditable
+@DomName('HTMLBaseFontElement')
+class _BaseFontElement extends Element native "*HTMLBaseFontElement" {
+}
+// Copyright (c) 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.
+
+
+
+@DocsEditable
+@DomName('ClientRectList')
 class _ClientRectList implements JavaScriptIndexingBehavior, List<ClientRect> native "*ClientRectList" {
 
-  /// @domName ClientRectList.length; @docsEditable true
+  @DocsEditable @DomName('ClientRectList.length')
   int get length => JS("int", "#.length", this);
 
   ClientRect operator[](int index) => JS("ClientRect", "#[#]", this, index);
@@ -23663,50 +24236,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, ClientRect)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(ClientRect element) => Collections.contains(this, element);
+  bool contains(ClientRect element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(ClientRect element)) => Collections.forEach(this, f);
+  void forEach(void f(ClientRect element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(ClientRect element)) => new MappedList<ClientRect, dynamic>(this, f);
+  List mappedBy(f(ClientRect element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<ClientRect> where(bool f(ClientRect element)) => new WhereIterable<ClientRect>(this, f);
+  Iterable<ClientRect> where(bool f(ClientRect element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(ClientRect element)) => Collections.every(this, f);
+  bool every(bool f(ClientRect element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(ClientRect element)) => Collections.any(this, f);
+  bool any(bool f(ClientRect element)) => IterableMixinWorkaround.any(this, f);
 
   List<ClientRect> toList() => new List<ClientRect>.from(this);
   Set<ClientRect> toSet() => new Set<ClientRect>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<ClientRect> take(int n) => new ListView<ClientRect>(this, 0, n);
+  List<ClientRect> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<ClientRect> takeWhile(bool test(ClientRect value)) {
-    return new TakeWhileIterable<ClientRect>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<ClientRect> skip(int n) => new ListView<ClientRect>(this, n, null);
+  List<ClientRect> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<ClientRect> skipWhile(bool test(ClientRect value)) {
-    return new SkipWhileIterable<ClientRect>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   ClientRect firstMatching(bool test(ClientRect value), { ClientRect orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   ClientRect lastMatching(bool test(ClientRect value), {ClientRect orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   ClientRect singleMatching(bool test(ClientRect value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   ClientRect elementAt(int index) {
@@ -23764,16 +24337,36 @@
     throw new StateError("More than one element");
   }
 
-  ClientRect min([int compare(ClientRect a, ClientRect b)]) => Collections.min(this, compare);
+  ClientRect min([int compare(ClientRect a, ClientRect b)]) => IterableMixinWorkaround.min(this, compare);
 
-  ClientRect max([int compare(ClientRect a, ClientRect b)]) => Collections.max(this, compare);
+  ClientRect max([int compare(ClientRect a, ClientRect b)]) => IterableMixinWorkaround.max(this, compare);
 
   ClientRect removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   ClientRect removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(ClientRect element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(ClientRect element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
@@ -23793,7 +24386,7 @@
 
   // -- end List<ClientRect> mixins.
 
-  /// @domName ClientRectList.item; @docsEditable true
+  @DocsEditable @DomName('ClientRectList.item')
   ClientRect item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23801,10 +24394,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSRuleList; @docsEditable true
+
+@DocsEditable
+@DomName('CSSRuleList')
 class _CssRuleList implements JavaScriptIndexingBehavior, List<CssRule> native "*CSSRuleList" {
 
-  /// @domName CSSRuleList.length; @docsEditable true
+  @DocsEditable @DomName('CSSRuleList.length')
   int get length => JS("int", "#.length", this);
 
   CssRule operator[](int index) => JS("CssRule", "#[#]", this, index);
@@ -23825,50 +24420,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, CssRule)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(CssRule element) => Collections.contains(this, element);
+  bool contains(CssRule element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(CssRule element)) => Collections.forEach(this, f);
+  void forEach(void f(CssRule element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(CssRule element)) => new MappedList<CssRule, dynamic>(this, f);
+  List mappedBy(f(CssRule element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<CssRule> where(bool f(CssRule element)) => new WhereIterable<CssRule>(this, f);
+  Iterable<CssRule> where(bool f(CssRule element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(CssRule element)) => Collections.every(this, f);
+  bool every(bool f(CssRule element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(CssRule element)) => Collections.any(this, f);
+  bool any(bool f(CssRule element)) => IterableMixinWorkaround.any(this, f);
 
   List<CssRule> toList() => new List<CssRule>.from(this);
   Set<CssRule> toSet() => new Set<CssRule>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<CssRule> take(int n) => new ListView<CssRule>(this, 0, n);
+  List<CssRule> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<CssRule> takeWhile(bool test(CssRule value)) {
-    return new TakeWhileIterable<CssRule>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<CssRule> skip(int n) => new ListView<CssRule>(this, n, null);
+  List<CssRule> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<CssRule> skipWhile(bool test(CssRule value)) {
-    return new SkipWhileIterable<CssRule>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   CssRule firstMatching(bool test(CssRule value), { CssRule orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   CssRule lastMatching(bool test(CssRule value), {CssRule orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   CssRule singleMatching(bool test(CssRule value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   CssRule elementAt(int index) {
@@ -23926,16 +24521,36 @@
     throw new StateError("More than one element");
   }
 
-  CssRule min([int compare(CssRule a, CssRule b)]) => Collections.min(this, compare);
+  CssRule min([int compare(CssRule a, CssRule b)]) => IterableMixinWorkaround.min(this, compare);
 
-  CssRule max([int compare(CssRule a, CssRule b)]) => Collections.max(this, compare);
+  CssRule max([int compare(CssRule a, CssRule b)]) => IterableMixinWorkaround.max(this, compare);
 
   CssRule removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   CssRule removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(CssRule element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(CssRule element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CssRule> from, [int startFrom]) {
@@ -23955,7 +24570,7 @@
 
   // -- end List<CssRule> mixins.
 
-  /// @domName CSSRuleList.item; @docsEditable true
+  @DocsEditable @DomName('CSSRuleList.item')
   CssRule item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23963,10 +24578,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSValueList; @docsEditable true
+
+@DocsEditable
+@DomName('CSSValueList')
 class _CssValueList extends CssValue implements List<CssValue>, JavaScriptIndexingBehavior native "*CSSValueList" {
 
-  /// @domName CSSValueList.length; @docsEditable true
+  @DocsEditable @DomName('CSSValueList.length')
   int get length => JS("int", "#.length", this);
 
   CssValue operator[](int index) => JS("CssValue", "#[#]", this, index);
@@ -23987,50 +24604,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, CssValue)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(CssValue element) => Collections.contains(this, element);
+  bool contains(CssValue element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(CssValue element)) => Collections.forEach(this, f);
+  void forEach(void f(CssValue element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(CssValue element)) => new MappedList<CssValue, dynamic>(this, f);
+  List mappedBy(f(CssValue element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<CssValue> where(bool f(CssValue element)) => new WhereIterable<CssValue>(this, f);
+  Iterable<CssValue> where(bool f(CssValue element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(CssValue element)) => Collections.every(this, f);
+  bool every(bool f(CssValue element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(CssValue element)) => Collections.any(this, f);
+  bool any(bool f(CssValue element)) => IterableMixinWorkaround.any(this, f);
 
   List<CssValue> toList() => new List<CssValue>.from(this);
   Set<CssValue> toSet() => new Set<CssValue>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<CssValue> take(int n) => new ListView<CssValue>(this, 0, n);
+  List<CssValue> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<CssValue> takeWhile(bool test(CssValue value)) {
-    return new TakeWhileIterable<CssValue>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<CssValue> skip(int n) => new ListView<CssValue>(this, n, null);
+  List<CssValue> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<CssValue> skipWhile(bool test(CssValue value)) {
-    return new SkipWhileIterable<CssValue>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   CssValue firstMatching(bool test(CssValue value), { CssValue orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   CssValue lastMatching(bool test(CssValue value), {CssValue orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   CssValue singleMatching(bool test(CssValue value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   CssValue elementAt(int index) {
@@ -24088,16 +24705,36 @@
     throw new StateError("More than one element");
   }
 
-  CssValue min([int compare(CssValue a, CssValue b)]) => Collections.min(this, compare);
+  CssValue min([int compare(CssValue a, CssValue b)]) => IterableMixinWorkaround.min(this, compare);
 
-  CssValue max([int compare(CssValue a, CssValue b)]) => Collections.max(this, compare);
+  CssValue max([int compare(CssValue a, CssValue b)]) => IterableMixinWorkaround.max(this, compare);
 
   CssValue removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   CssValue removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(CssValue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(CssValue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CssValue> from, [int startFrom]) {
@@ -24117,7 +24754,7 @@
 
   // -- end List<CssValue> mixins.
 
-  /// @domName CSSValueList.item; @docsEditable true
+  @DocsEditable @DomName('CSSValueList.item')
   CssValue item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24125,10 +24762,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EntryArray; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLDirectoryElement')
+class _DirectoryElement extends Element native "*HTMLDirectoryElement" {
+}
+// Copyright (c) 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.
+
+
+
+@DocsEditable
+@DomName('EntryArray')
 class _EntryArray implements JavaScriptIndexingBehavior, List<Entry> native "*EntryArray" {
 
-  /// @domName EntryArray.length; @docsEditable true
+  @DocsEditable @DomName('EntryArray.length')
   int get length => JS("int", "#.length", this);
 
   Entry operator[](int index) => JS("Entry", "#[#]", this, index);
@@ -24149,50 +24798,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Entry)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Entry element) => Collections.contains(this, element);
+  bool contains(Entry element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Entry element)) => Collections.forEach(this, f);
+  void forEach(void f(Entry element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Entry element)) => new MappedList<Entry, dynamic>(this, f);
+  List mappedBy(f(Entry element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Entry> where(bool f(Entry element)) => new WhereIterable<Entry>(this, f);
+  Iterable<Entry> where(bool f(Entry element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Entry element)) => Collections.every(this, f);
+  bool every(bool f(Entry element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Entry element)) => Collections.any(this, f);
+  bool any(bool f(Entry element)) => IterableMixinWorkaround.any(this, f);
 
   List<Entry> toList() => new List<Entry>.from(this);
   Set<Entry> toSet() => new Set<Entry>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Entry> take(int n) => new ListView<Entry>(this, 0, n);
+  List<Entry> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Entry> takeWhile(bool test(Entry value)) {
-    return new TakeWhileIterable<Entry>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Entry> skip(int n) => new ListView<Entry>(this, n, null);
+  List<Entry> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Entry> skipWhile(bool test(Entry value)) {
-    return new SkipWhileIterable<Entry>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Entry firstMatching(bool test(Entry value), { Entry orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Entry lastMatching(bool test(Entry value), {Entry orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Entry singleMatching(bool test(Entry value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Entry elementAt(int index) {
@@ -24250,16 +24899,36 @@
     throw new StateError("More than one element");
   }
 
-  Entry min([int compare(Entry a, Entry b)]) => Collections.min(this, compare);
+  Entry min([int compare(Entry a, Entry b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Entry max([int compare(Entry a, Entry b)]) => Collections.max(this, compare);
+  Entry max([int compare(Entry a, Entry b)]) => IterableMixinWorkaround.max(this, compare);
 
   Entry removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Entry removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Entry element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Entry element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
@@ -24279,7 +24948,7 @@
 
   // -- end List<Entry> mixins.
 
-  /// @domName EntryArray.item; @docsEditable true
+  @DocsEditable @DomName('EntryArray.item')
   Entry item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24287,10 +24956,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EntryArraySync; @docsEditable true
+
+@DocsEditable
+@DomName('EntryArraySync')
 class _EntryArraySync implements JavaScriptIndexingBehavior, List<EntrySync> native "*EntryArraySync" {
 
-  /// @domName EntryArraySync.length; @docsEditable true
+  @DocsEditable @DomName('EntryArraySync.length')
   int get length => JS("int", "#.length", this);
 
   EntrySync operator[](int index) => JS("EntrySync", "#[#]", this, index);
@@ -24311,50 +24982,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, EntrySync)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(EntrySync element) => Collections.contains(this, element);
+  bool contains(EntrySync element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(EntrySync element)) => Collections.forEach(this, f);
+  void forEach(void f(EntrySync element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(EntrySync element)) => new MappedList<EntrySync, dynamic>(this, f);
+  List mappedBy(f(EntrySync element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<EntrySync> where(bool f(EntrySync element)) => new WhereIterable<EntrySync>(this, f);
+  Iterable<EntrySync> where(bool f(EntrySync element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(EntrySync element)) => Collections.every(this, f);
+  bool every(bool f(EntrySync element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(EntrySync element)) => Collections.any(this, f);
+  bool any(bool f(EntrySync element)) => IterableMixinWorkaround.any(this, f);
 
   List<EntrySync> toList() => new List<EntrySync>.from(this);
   Set<EntrySync> toSet() => new Set<EntrySync>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<EntrySync> take(int n) => new ListView<EntrySync>(this, 0, n);
+  List<EntrySync> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<EntrySync> takeWhile(bool test(EntrySync value)) {
-    return new TakeWhileIterable<EntrySync>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<EntrySync> skip(int n) => new ListView<EntrySync>(this, n, null);
+  List<EntrySync> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<EntrySync> skipWhile(bool test(EntrySync value)) {
-    return new SkipWhileIterable<EntrySync>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   EntrySync firstMatching(bool test(EntrySync value), { EntrySync orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   EntrySync lastMatching(bool test(EntrySync value), {EntrySync orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   EntrySync singleMatching(bool test(EntrySync value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   EntrySync elementAt(int index) {
@@ -24412,16 +25083,36 @@
     throw new StateError("More than one element");
   }
 
-  EntrySync min([int compare(EntrySync a, EntrySync b)]) => Collections.min(this, compare);
+  EntrySync min([int compare(EntrySync a, EntrySync b)]) => IterableMixinWorkaround.min(this, compare);
 
-  EntrySync max([int compare(EntrySync a, EntrySync b)]) => Collections.max(this, compare);
+  EntrySync max([int compare(EntrySync a, EntrySync b)]) => IterableMixinWorkaround.max(this, compare);
 
   EntrySync removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   EntrySync removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(EntrySync element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(EntrySync element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
@@ -24441,7 +25132,7 @@
 
   // -- end List<EntrySync> mixins.
 
-  /// @domName EntryArraySync.item; @docsEditable true
+  @DocsEditable @DomName('EntryArraySync.item')
   EntrySync item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24449,10 +25140,92 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName GamepadList; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLFontElement')
+class _FontElement extends Element native "*HTMLFontElement" {
+}
+// Copyright (c) 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.
+
+
+
+@DocsEditable
+@DomName('HTMLFrameElement')
+class _FrameElement extends Element native "*HTMLFrameElement" {
+}
+// Copyright (c) 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.
+
+
+
+@DocsEditable
+@DomName('HTMLFrameSetElement')
+class _FrameSetElement extends Element native "*HTMLFrameSetElement" {
+
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
+  _FrameSetElementEvents get on =>
+    new _FrameSetElementEvents(this);
+}
+
+@DocsEditable
+class _FrameSetElementEvents extends ElementEvents {
+  @DocsEditable
+  _FrameSetElementEvents(EventTarget _ptr) : super(_ptr);
+
+  @DocsEditable
+  EventListenerList get beforeUnload => this['beforeunload'];
+
+  @DocsEditable
+  EventListenerList get blur => this['blur'];
+
+  @DocsEditable
+  EventListenerList get error => this['error'];
+
+  @DocsEditable
+  EventListenerList get focus => this['focus'];
+
+  @DocsEditable
+  EventListenerList get hashChange => this['hashchange'];
+
+  @DocsEditable
+  EventListenerList get load => this['load'];
+
+  @DocsEditable
+  EventListenerList get message => this['message'];
+
+  @DocsEditable
+  EventListenerList get offline => this['offline'];
+
+  @DocsEditable
+  EventListenerList get online => this['online'];
+
+  @DocsEditable
+  EventListenerList get popState => this['popstate'];
+
+  @DocsEditable
+  EventListenerList get resize => this['resize'];
+
+  @DocsEditable
+  EventListenerList get storage => this['storage'];
+
+  @DocsEditable
+  EventListenerList get unload => this['unload'];
+}
+// Copyright (c) 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.
+
+
+
+@DocsEditable
+@DomName('GamepadList')
 class _GamepadList implements JavaScriptIndexingBehavior, List<Gamepad> native "*GamepadList" {
 
-  /// @domName GamepadList.length; @docsEditable true
+  @DocsEditable @DomName('GamepadList.length')
   int get length => JS("int", "#.length", this);
 
   Gamepad operator[](int index) => JS("Gamepad", "#[#]", this, index);
@@ -24473,50 +25246,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Gamepad)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Gamepad element) => Collections.contains(this, element);
+  bool contains(Gamepad element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Gamepad element)) => Collections.forEach(this, f);
+  void forEach(void f(Gamepad element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Gamepad element)) => new MappedList<Gamepad, dynamic>(this, f);
+  List mappedBy(f(Gamepad element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Gamepad> where(bool f(Gamepad element)) => new WhereIterable<Gamepad>(this, f);
+  Iterable<Gamepad> where(bool f(Gamepad element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Gamepad element)) => Collections.every(this, f);
+  bool every(bool f(Gamepad element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Gamepad element)) => Collections.any(this, f);
+  bool any(bool f(Gamepad element)) => IterableMixinWorkaround.any(this, f);
 
   List<Gamepad> toList() => new List<Gamepad>.from(this);
   Set<Gamepad> toSet() => new Set<Gamepad>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Gamepad> take(int n) => new ListView<Gamepad>(this, 0, n);
+  List<Gamepad> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Gamepad> takeWhile(bool test(Gamepad value)) {
-    return new TakeWhileIterable<Gamepad>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Gamepad> skip(int n) => new ListView<Gamepad>(this, n, null);
+  List<Gamepad> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Gamepad> skipWhile(bool test(Gamepad value)) {
-    return new SkipWhileIterable<Gamepad>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Gamepad firstMatching(bool test(Gamepad value), { Gamepad orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Gamepad lastMatching(bool test(Gamepad value), {Gamepad orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Gamepad singleMatching(bool test(Gamepad value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Gamepad elementAt(int index) {
@@ -24574,16 +25347,36 @@
     throw new StateError("More than one element");
   }
 
-  Gamepad min([int compare(Gamepad a, Gamepad b)]) => Collections.min(this, compare);
+  Gamepad min([int compare(Gamepad a, Gamepad b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Gamepad max([int compare(Gamepad a, Gamepad b)]) => Collections.max(this, compare);
+  Gamepad max([int compare(Gamepad a, Gamepad b)]) => IterableMixinWorkaround.max(this, compare);
 
   Gamepad removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Gamepad removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Gamepad element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Gamepad element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
@@ -24603,7 +25396,7 @@
 
   // -- end List<Gamepad> mixins.
 
-  /// @domName GamepadList.item; @docsEditable true
+  @DocsEditable @DomName('GamepadList.item')
   Gamepad item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24611,10 +25404,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamList; @docsEditable true
+
+@DocsEditable
+@DomName('HTMLMarqueeElement')
+class _MarqueeElement extends Element native "*HTMLMarqueeElement" {
+}
+// Copyright (c) 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.
+
+
+
+@DocsEditable
+@DomName('MediaStreamList')
 class _MediaStreamList implements JavaScriptIndexingBehavior, List<MediaStream> native "*MediaStreamList" {
 
-  /// @domName MediaStreamList.length; @docsEditable true
+  @DocsEditable @DomName('MediaStreamList.length')
   int get length => JS("int", "#.length", this);
 
   MediaStream operator[](int index) => JS("MediaStream", "#[#]", this, index);
@@ -24635,50 +25440,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, MediaStream)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(MediaStream element) => Collections.contains(this, element);
+  bool contains(MediaStream element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(MediaStream element)) => Collections.forEach(this, f);
+  void forEach(void f(MediaStream element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(MediaStream element)) => new MappedList<MediaStream, dynamic>(this, f);
+  List mappedBy(f(MediaStream element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<MediaStream> where(bool f(MediaStream element)) => new WhereIterable<MediaStream>(this, f);
+  Iterable<MediaStream> where(bool f(MediaStream element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(MediaStream element)) => Collections.every(this, f);
+  bool every(bool f(MediaStream element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(MediaStream element)) => Collections.any(this, f);
+  bool any(bool f(MediaStream element)) => IterableMixinWorkaround.any(this, f);
 
   List<MediaStream> toList() => new List<MediaStream>.from(this);
   Set<MediaStream> toSet() => new Set<MediaStream>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<MediaStream> take(int n) => new ListView<MediaStream>(this, 0, n);
+  List<MediaStream> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<MediaStream> takeWhile(bool test(MediaStream value)) {
-    return new TakeWhileIterable<MediaStream>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<MediaStream> skip(int n) => new ListView<MediaStream>(this, n, null);
+  List<MediaStream> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<MediaStream> skipWhile(bool test(MediaStream value)) {
-    return new SkipWhileIterable<MediaStream>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   MediaStream firstMatching(bool test(MediaStream value), { MediaStream orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   MediaStream lastMatching(bool test(MediaStream value), {MediaStream orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   MediaStream singleMatching(bool test(MediaStream value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   MediaStream elementAt(int index) {
@@ -24736,16 +25541,36 @@
     throw new StateError("More than one element");
   }
 
-  MediaStream min([int compare(MediaStream a, MediaStream b)]) => Collections.min(this, compare);
+  MediaStream min([int compare(MediaStream a, MediaStream b)]) => IterableMixinWorkaround.min(this, compare);
 
-  MediaStream max([int compare(MediaStream a, MediaStream b)]) => Collections.max(this, compare);
+  MediaStream max([int compare(MediaStream a, MediaStream b)]) => IterableMixinWorkaround.max(this, compare);
 
   MediaStream removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   MediaStream removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(MediaStream element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(MediaStream element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
@@ -24765,7 +25590,7 @@
 
   // -- end List<MediaStream> mixins.
 
-  /// @domName MediaStreamList.item; @docsEditable true
+  @DocsEditable @DomName('MediaStreamList.item')
   MediaStream item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24773,10 +25598,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechInputResultList; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechInputResultList')
 class _SpeechInputResultList implements JavaScriptIndexingBehavior, List<SpeechInputResult> native "*SpeechInputResultList" {
 
-  /// @domName SpeechInputResultList.length; @docsEditable true
+  @DocsEditable @DomName('SpeechInputResultList.length')
   int get length => JS("int", "#.length", this);
 
   SpeechInputResult operator[](int index) => JS("SpeechInputResult", "#[#]", this, index);
@@ -24797,50 +25624,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SpeechInputResult)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SpeechInputResult element) => Collections.contains(this, element);
+  bool contains(SpeechInputResult element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SpeechInputResult element)) => Collections.forEach(this, f);
+  void forEach(void f(SpeechInputResult element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SpeechInputResult element)) => new MappedList<SpeechInputResult, dynamic>(this, f);
+  List mappedBy(f(SpeechInputResult element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SpeechInputResult> where(bool f(SpeechInputResult element)) => new WhereIterable<SpeechInputResult>(this, f);
+  Iterable<SpeechInputResult> where(bool f(SpeechInputResult element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SpeechInputResult element)) => Collections.every(this, f);
+  bool every(bool f(SpeechInputResult element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SpeechInputResult element)) => Collections.any(this, f);
+  bool any(bool f(SpeechInputResult element)) => IterableMixinWorkaround.any(this, f);
 
   List<SpeechInputResult> toList() => new List<SpeechInputResult>.from(this);
   Set<SpeechInputResult> toSet() => new Set<SpeechInputResult>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SpeechInputResult> take(int n) => new ListView<SpeechInputResult>(this, 0, n);
+  List<SpeechInputResult> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SpeechInputResult> takeWhile(bool test(SpeechInputResult value)) {
-    return new TakeWhileIterable<SpeechInputResult>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SpeechInputResult> skip(int n) => new ListView<SpeechInputResult>(this, n, null);
+  List<SpeechInputResult> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SpeechInputResult> skipWhile(bool test(SpeechInputResult value)) {
-    return new SkipWhileIterable<SpeechInputResult>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SpeechInputResult firstMatching(bool test(SpeechInputResult value), { SpeechInputResult orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SpeechInputResult lastMatching(bool test(SpeechInputResult value), {SpeechInputResult orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SpeechInputResult singleMatching(bool test(SpeechInputResult value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SpeechInputResult elementAt(int index) {
@@ -24898,16 +25725,36 @@
     throw new StateError("More than one element");
   }
 
-  SpeechInputResult min([int compare(SpeechInputResult a, SpeechInputResult b)]) => Collections.min(this, compare);
+  SpeechInputResult min([int compare(SpeechInputResult a, SpeechInputResult b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SpeechInputResult max([int compare(SpeechInputResult a, SpeechInputResult b)]) => Collections.max(this, compare);
+  SpeechInputResult max([int compare(SpeechInputResult a, SpeechInputResult b)]) => IterableMixinWorkaround.max(this, compare);
 
   SpeechInputResult removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SpeechInputResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SpeechInputResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SpeechInputResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
@@ -24927,7 +25774,7 @@
 
   // -- end List<SpeechInputResult> mixins.
 
-  /// @domName SpeechInputResultList.item; @docsEditable true
+  @DocsEditable @DomName('SpeechInputResultList.item')
   SpeechInputResult item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24935,10 +25782,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionResultList; @docsEditable true
+
+@DocsEditable
+@DomName('SpeechRecognitionResultList')
 class _SpeechRecognitionResultList implements JavaScriptIndexingBehavior, List<SpeechRecognitionResult> native "*SpeechRecognitionResultList" {
 
-  /// @domName SpeechRecognitionResultList.length; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionResultList.length')
   int get length => JS("int", "#.length", this);
 
   SpeechRecognitionResult operator[](int index) => JS("SpeechRecognitionResult", "#[#]", this, index);
@@ -24959,50 +25808,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SpeechRecognitionResult)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SpeechRecognitionResult element) => Collections.contains(this, element);
+  bool contains(SpeechRecognitionResult element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SpeechRecognitionResult element)) => Collections.forEach(this, f);
+  void forEach(void f(SpeechRecognitionResult element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SpeechRecognitionResult element)) => new MappedList<SpeechRecognitionResult, dynamic>(this, f);
+  List mappedBy(f(SpeechRecognitionResult element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SpeechRecognitionResult> where(bool f(SpeechRecognitionResult element)) => new WhereIterable<SpeechRecognitionResult>(this, f);
+  Iterable<SpeechRecognitionResult> where(bool f(SpeechRecognitionResult element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SpeechRecognitionResult element)) => Collections.every(this, f);
+  bool every(bool f(SpeechRecognitionResult element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SpeechRecognitionResult element)) => Collections.any(this, f);
+  bool any(bool f(SpeechRecognitionResult element)) => IterableMixinWorkaround.any(this, f);
 
   List<SpeechRecognitionResult> toList() => new List<SpeechRecognitionResult>.from(this);
   Set<SpeechRecognitionResult> toSet() => new Set<SpeechRecognitionResult>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SpeechRecognitionResult> take(int n) => new ListView<SpeechRecognitionResult>(this, 0, n);
+  List<SpeechRecognitionResult> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SpeechRecognitionResult> takeWhile(bool test(SpeechRecognitionResult value)) {
-    return new TakeWhileIterable<SpeechRecognitionResult>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SpeechRecognitionResult> skip(int n) => new ListView<SpeechRecognitionResult>(this, n, null);
+  List<SpeechRecognitionResult> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SpeechRecognitionResult> skipWhile(bool test(SpeechRecognitionResult value)) {
-    return new SkipWhileIterable<SpeechRecognitionResult>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SpeechRecognitionResult firstMatching(bool test(SpeechRecognitionResult value), { SpeechRecognitionResult orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SpeechRecognitionResult lastMatching(bool test(SpeechRecognitionResult value), {SpeechRecognitionResult orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SpeechRecognitionResult singleMatching(bool test(SpeechRecognitionResult value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SpeechRecognitionResult elementAt(int index) {
@@ -25060,16 +25909,36 @@
     throw new StateError("More than one element");
   }
 
-  SpeechRecognitionResult min([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => Collections.min(this, compare);
+  SpeechRecognitionResult min([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SpeechRecognitionResult max([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => Collections.max(this, compare);
+  SpeechRecognitionResult max([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => IterableMixinWorkaround.max(this, compare);
 
   SpeechRecognitionResult removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SpeechRecognitionResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SpeechRecognitionResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SpeechRecognitionResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
@@ -25089,7 +25958,7 @@
 
   // -- end List<SpeechRecognitionResult> mixins.
 
-  /// @domName SpeechRecognitionResultList.item; @docsEditable true
+  @DocsEditable @DomName('SpeechRecognitionResultList.item')
   SpeechRecognitionResult item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25097,10 +25966,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StyleSheetList; @docsEditable true
+
+@DocsEditable
+@DomName('StyleSheetList')
 class _StyleSheetList implements JavaScriptIndexingBehavior, List<StyleSheet> native "*StyleSheetList" {
 
-  /// @domName StyleSheetList.length; @docsEditable true
+  @DocsEditable @DomName('StyleSheetList.length')
   int get length => JS("int", "#.length", this);
 
   StyleSheet operator[](int index) => JS("StyleSheet", "#[#]", this, index);
@@ -25121,50 +25992,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, StyleSheet)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(StyleSheet element) => Collections.contains(this, element);
+  bool contains(StyleSheet element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(StyleSheet element)) => Collections.forEach(this, f);
+  void forEach(void f(StyleSheet element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(StyleSheet element)) => new MappedList<StyleSheet, dynamic>(this, f);
+  List mappedBy(f(StyleSheet element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<StyleSheet> where(bool f(StyleSheet element)) => new WhereIterable<StyleSheet>(this, f);
+  Iterable<StyleSheet> where(bool f(StyleSheet element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(StyleSheet element)) => Collections.every(this, f);
+  bool every(bool f(StyleSheet element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(StyleSheet element)) => Collections.any(this, f);
+  bool any(bool f(StyleSheet element)) => IterableMixinWorkaround.any(this, f);
 
   List<StyleSheet> toList() => new List<StyleSheet>.from(this);
   Set<StyleSheet> toSet() => new Set<StyleSheet>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<StyleSheet> take(int n) => new ListView<StyleSheet>(this, 0, n);
+  List<StyleSheet> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<StyleSheet> takeWhile(bool test(StyleSheet value)) {
-    return new TakeWhileIterable<StyleSheet>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<StyleSheet> skip(int n) => new ListView<StyleSheet>(this, n, null);
+  List<StyleSheet> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<StyleSheet> skipWhile(bool test(StyleSheet value)) {
-    return new SkipWhileIterable<StyleSheet>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   StyleSheet firstMatching(bool test(StyleSheet value), { StyleSheet orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   StyleSheet lastMatching(bool test(StyleSheet value), {StyleSheet orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   StyleSheet singleMatching(bool test(StyleSheet value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   StyleSheet elementAt(int index) {
@@ -25222,16 +26093,36 @@
     throw new StateError("More than one element");
   }
 
-  StyleSheet min([int compare(StyleSheet a, StyleSheet b)]) => Collections.min(this, compare);
+  StyleSheet min([int compare(StyleSheet a, StyleSheet b)]) => IterableMixinWorkaround.min(this, compare);
 
-  StyleSheet max([int compare(StyleSheet a, StyleSheet b)]) => Collections.max(this, compare);
+  StyleSheet max([int compare(StyleSheet a, StyleSheet b)]) => IterableMixinWorkaround.max(this, compare);
 
   StyleSheet removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   StyleSheet removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(StyleSheet element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(StyleSheet element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
@@ -25251,7 +26142,7 @@
 
   // -- end List<StyleSheet> mixins.
 
-  /// @domName StyleSheetList.item; @docsEditable true
+  @DocsEditable @DomName('StyleSheetList.item')
   StyleSheet item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25672,11 +26563,12 @@
 
   void add(String value) {
     // TODO - figure out if we need to do any validation here
-    // or if the browser natively does enough
+    // or if the browser natively does enough.
     _modify((s) => s.add(value));
   }
 
-  bool remove(String value) {
+  bool remove(Object value) {
+    if (value is! String) return false;
     Set<String> s = readClasses();
     bool result = s.remove(value);
     writeClasses(s);
@@ -25684,7 +26576,7 @@
   }
 
   void addAll(Iterable<String> iterable) {
-    // TODO - see comment above about validation
+    // TODO - see comment above about validation.
     _modify((s) => s.addAll(iterable));
   }
 
@@ -25692,6 +26584,18 @@
     _modify((s) => s.removeAll(iterable));
   }
 
+  void retainAll(Iterable<String> iterable) {
+    _modify((s) => s.retainAll(iterable));
+  }
+
+  void removeMatching(bool test(String name)) {
+    _modify((s) => s.removeMatching(test));
+  }
+
+  void retainMatching(bool test(String name)) {
+    _modify((s) => s.retainMatching(test));
+  }
+
   bool isSubsetOf(Collection<String> collection) =>
     readClasses().isSubsetOf(collection);
 
@@ -25936,6 +26840,21 @@
     return new _EventStream(e, _eventType, useCapture);
   }
 }
+
+/**
+ * A factory to expose DOM events as streams, where the DOM event name has to
+ * be determined on the fly (for example, mouse wheel events).
+ */
+class _CustomEventStreamProvider<T extends Event>
+    implements EventStreamProvider<T> {
+
+  final _eventTypeGetter;
+  const _CustomEventStreamProvider(this._eventTypeGetter);
+
+  Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
+    return new _EventStream(e, _eventTypeGetter(e), useCapture);
+  }
+}
 // Copyright (c) 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.
@@ -27840,7 +28759,7 @@
 }
 
 class _DocumentFragmentFactoryProvider {
-  /** @domName Document.createDocumentFragment */
+  @DomName('Document.createDocumentFragment')
   static DocumentFragment createDocumentFragment() =>
       document.createDocumentFragment();
 
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 8b45bec..82f4968 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -2,6 +2,7 @@
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:collection-dev';
 import 'dart:html_common';
 import 'dart:indexed_db';
 import 'dart:isolate';
@@ -72,38 +73,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AbstractWorker
+@DocsEditable
+@DomName('AbstractWorker')
 class AbstractWorker extends EventTarget {
   AbstractWorker.internal() : super.internal();
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   AbstractWorkerEvents get on =>
     new AbstractWorkerEvents(this);
 
-
-  /** @domName AbstractWorker.addEventListener */
+  @DocsEditable
+  @DomName('AbstractWorker.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "AbstractWorker_addEventListener_Callback";
 
-
-  /** @domName AbstractWorker.dispatchEvent */
+  @DocsEditable
+  @DomName('AbstractWorker.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "AbstractWorker_dispatchEvent_Callback";
 
-
-  /** @domName AbstractWorker.removeEventListener */
+  @DocsEditable
+  @DomName('AbstractWorker.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "AbstractWorker_removeEventListener_Callback";
 
   Stream<Event> get onError => errorEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class AbstractWorkerEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   AbstractWorkerEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -113,143 +116,144 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLAnchorElement
+@DocsEditable
+@DomName('HTMLAnchorElement')
 class AnchorElement extends _Element_Merged {
   AnchorElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnchorElement({String href}) {
     var e = document.$dom_createElement("a");
     if (href != null) e.href = href;
     return e;
   }
 
-
-  /** @domName HTMLAnchorElement.download */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.download')
   String get download native "HTMLAnchorElement_download_Getter";
 
-
-  /** @domName HTMLAnchorElement.download */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.download')
   void set download(String value) native "HTMLAnchorElement_download_Setter";
 
-
-  /** @domName HTMLAnchorElement.hash */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.hash')
   String get hash native "HTMLAnchorElement_hash_Getter";
 
-
-  /** @domName HTMLAnchorElement.hash */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.hash')
   void set hash(String value) native "HTMLAnchorElement_hash_Setter";
 
-
-  /** @domName HTMLAnchorElement.host */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.host')
   String get host native "HTMLAnchorElement_host_Getter";
 
-
-  /** @domName HTMLAnchorElement.host */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.host')
   void set host(String value) native "HTMLAnchorElement_host_Setter";
 
-
-  /** @domName HTMLAnchorElement.hostname */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.hostname')
   String get hostname native "HTMLAnchorElement_hostname_Getter";
 
-
-  /** @domName HTMLAnchorElement.hostname */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.hostname')
   void set hostname(String value) native "HTMLAnchorElement_hostname_Setter";
 
-
-  /** @domName HTMLAnchorElement.href */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.href')
   String get href native "HTMLAnchorElement_href_Getter";
 
-
-  /** @domName HTMLAnchorElement.href */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.href')
   void set href(String value) native "HTMLAnchorElement_href_Setter";
 
-
-  /** @domName HTMLAnchorElement.hreflang */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.hreflang')
   String get hreflang native "HTMLAnchorElement_hreflang_Getter";
 
-
-  /** @domName HTMLAnchorElement.hreflang */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.hreflang')
   void set hreflang(String value) native "HTMLAnchorElement_hreflang_Setter";
 
-
-  /** @domName HTMLAnchorElement.name */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.name')
   String get name native "HTMLAnchorElement_name_Getter";
 
-
-  /** @domName HTMLAnchorElement.name */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.name')
   void set name(String value) native "HTMLAnchorElement_name_Setter";
 
-
-  /** @domName HTMLAnchorElement.origin */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.origin')
   String get origin native "HTMLAnchorElement_origin_Getter";
 
-
-  /** @domName HTMLAnchorElement.pathname */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.pathname')
   String get pathname native "HTMLAnchorElement_pathname_Getter";
 
-
-  /** @domName HTMLAnchorElement.pathname */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.pathname')
   void set pathname(String value) native "HTMLAnchorElement_pathname_Setter";
 
-
-  /** @domName HTMLAnchorElement.ping */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.ping')
   String get ping native "HTMLAnchorElement_ping_Getter";
 
-
-  /** @domName HTMLAnchorElement.ping */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.ping')
   void set ping(String value) native "HTMLAnchorElement_ping_Setter";
 
-
-  /** @domName HTMLAnchorElement.port */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.port')
   String get port native "HTMLAnchorElement_port_Getter";
 
-
-  /** @domName HTMLAnchorElement.port */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.port')
   void set port(String value) native "HTMLAnchorElement_port_Setter";
 
-
-  /** @domName HTMLAnchorElement.protocol */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.protocol')
   String get protocol native "HTMLAnchorElement_protocol_Getter";
 
-
-  /** @domName HTMLAnchorElement.protocol */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.protocol')
   void set protocol(String value) native "HTMLAnchorElement_protocol_Setter";
 
-
-  /** @domName HTMLAnchorElement.rel */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.rel')
   String get rel native "HTMLAnchorElement_rel_Getter";
 
-
-  /** @domName HTMLAnchorElement.rel */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.rel')
   void set rel(String value) native "HTMLAnchorElement_rel_Setter";
 
-
-  /** @domName HTMLAnchorElement.search */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.search')
   String get search native "HTMLAnchorElement_search_Getter";
 
-
-  /** @domName HTMLAnchorElement.search */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.search')
   void set search(String value) native "HTMLAnchorElement_search_Setter";
 
-
-  /** @domName HTMLAnchorElement.target */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.target')
   String get target native "HTMLAnchorElement_target_Getter";
 
-
-  /** @domName HTMLAnchorElement.target */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.target')
   void set target(String value) native "HTMLAnchorElement_target_Setter";
 
-
-  /** @domName HTMLAnchorElement.type */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.type')
   String get type native "HTMLAnchorElement_type_Getter";
 
-
-  /** @domName HTMLAnchorElement.type */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.type')
   void set type(String value) native "HTMLAnchorElement_type_Setter";
 
-
-  /** @domName HTMLAnchorElement.toString */
+  @DocsEditable
+  @DomName('HTMLAnchorElement.toString')
   String toString() native "HTMLAnchorElement_toString_Callback";
 
 }
@@ -260,16 +264,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitAnimationEvent
+@DocsEditable
+@DomName('WebKitAnimationEvent')
 class AnimationEvent extends Event {
   AnimationEvent.internal() : super.internal();
 
-
-  /** @domName WebKitAnimationEvent.animationName */
+  @DocsEditable
+  @DomName('WebKitAnimationEvent.animationName')
   String get animationName native "WebKitAnimationEvent_animationName_Getter";
 
-
-  /** @domName WebKitAnimationEvent.elapsedTime */
+  @DocsEditable
+  @DomName('WebKitAnimationEvent.elapsedTime')
   num get elapsedTime native "WebKitAnimationEvent_elapsedTime_Getter";
 
 }
@@ -280,107 +285,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLAppletElement
-class AppletElement extends _Element_Merged {
-  AppletElement.internal() : super.internal();
-
-
-  /** @domName HTMLAppletElement.align */
-  String get align native "HTMLAppletElement_align_Getter";
-
-
-  /** @domName HTMLAppletElement.align */
-  void set align(String value) native "HTMLAppletElement_align_Setter";
-
-
-  /** @domName HTMLAppletElement.alt */
-  String get alt native "HTMLAppletElement_alt_Getter";
-
-
-  /** @domName HTMLAppletElement.alt */
-  void set alt(String value) native "HTMLAppletElement_alt_Setter";
-
-
-  /** @domName HTMLAppletElement.archive */
-  String get archive native "HTMLAppletElement_archive_Getter";
-
-
-  /** @domName HTMLAppletElement.archive */
-  void set archive(String value) native "HTMLAppletElement_archive_Setter";
-
-
-  /** @domName HTMLAppletElement.code */
-  String get code native "HTMLAppletElement_code_Getter";
-
-
-  /** @domName HTMLAppletElement.code */
-  void set code(String value) native "HTMLAppletElement_code_Setter";
-
-
-  /** @domName HTMLAppletElement.codeBase */
-  String get codeBase native "HTMLAppletElement_codeBase_Getter";
-
-
-  /** @domName HTMLAppletElement.codeBase */
-  void set codeBase(String value) native "HTMLAppletElement_codeBase_Setter";
-
-
-  /** @domName HTMLAppletElement.height */
-  String get height native "HTMLAppletElement_height_Getter";
-
-
-  /** @domName HTMLAppletElement.height */
-  void set height(String value) native "HTMLAppletElement_height_Setter";
-
-
-  /** @domName HTMLAppletElement.hspace */
-  String get hspace native "HTMLAppletElement_hspace_Getter";
-
-
-  /** @domName HTMLAppletElement.hspace */
-  void set hspace(String value) native "HTMLAppletElement_hspace_Setter";
-
-
-  /** @domName HTMLAppletElement.name */
-  String get name native "HTMLAppletElement_name_Getter";
-
-
-  /** @domName HTMLAppletElement.name */
-  void set name(String value) native "HTMLAppletElement_name_Setter";
-
-
-  /** @domName HTMLAppletElement.object */
-  String get object native "HTMLAppletElement_object_Getter";
-
-
-  /** @domName HTMLAppletElement.object */
-  void set object(String value) native "HTMLAppletElement_object_Setter";
-
-
-  /** @domName HTMLAppletElement.vspace */
-  String get vspace native "HTMLAppletElement_vspace_Getter";
-
-
-  /** @domName HTMLAppletElement.vspace */
-  void set vspace(String value) native "HTMLAppletElement_vspace_Setter";
-
-
-  /** @domName HTMLAppletElement.width */
-  String get width native "HTMLAppletElement_width_Getter";
-
-
-  /** @domName HTMLAppletElement.width */
-  void set width(String value) native "HTMLAppletElement_width_Setter";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName DOMApplicationCache
+@DocsEditable
+@DomName('DOMApplicationCache')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.FIREFOX)
+@SupportedBrowser(SupportedBrowser.IE, '10')
+@SupportedBrowser(SupportedBrowser.OPERA)
+@SupportedBrowser(SupportedBrowser.SAFARI)
 class ApplicationCache extends EventTarget {
   ApplicationCache.internal() : super.internal();
 
@@ -400,7 +311,11 @@
 
   static const EventStreamProvider<Event> updateReadyEvent = const EventStreamProvider<Event>('updateready');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  /// Checks if this type is supported on the current platform.
+  static bool get supported => true;
+
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ApplicationCacheEvents get on =>
     new ApplicationCacheEvents(this);
 
@@ -416,32 +331,32 @@
 
   static const int UPDATEREADY = 4;
 
-
-  /** @domName DOMApplicationCache.status */
+  @DocsEditable
+  @DomName('DOMApplicationCache.status')
   int get status native "DOMApplicationCache_status_Getter";
 
-
-  /** @domName DOMApplicationCache.abort */
+  @DocsEditable
+  @DomName('DOMApplicationCache.abort')
   void abort() native "DOMApplicationCache_abort_Callback";
 
-
-  /** @domName DOMApplicationCache.addEventListener */
+  @DocsEditable
+  @DomName('DOMApplicationCache.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "DOMApplicationCache_addEventListener_Callback";
 
-
-  /** @domName DOMApplicationCache.dispatchEvent */
+  @DocsEditable
+  @DomName('DOMApplicationCache.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "DOMApplicationCache_dispatchEvent_Callback";
 
-
-  /** @domName DOMApplicationCache.removeEventListener */
+  @DocsEditable
+  @DomName('DOMApplicationCache.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "DOMApplicationCache_removeEventListener_Callback";
 
-
-  /** @domName DOMApplicationCache.swapCache */
+  @DocsEditable
+  @DomName('DOMApplicationCache.swapCache')
   void swapCache() native "DOMApplicationCache_swapCache_Callback";
 
-
-  /** @domName DOMApplicationCache.update */
+  @DocsEditable
+  @DomName('DOMApplicationCache.update')
   void update() native "DOMApplicationCache_update_Callback";
 
   Stream<Event> get onCached => cachedEvent.forTarget(this);
@@ -462,33 +377,33 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class ApplicationCacheEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   ApplicationCacheEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cached => this['cached'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get checking => this['checking'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get downloading => this['downloading'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get noUpdate => this['noupdate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get obsolete => this['obsolete'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get updateReady => this['updateready'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -498,87 +413,88 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLAreaElement
+@DocsEditable
+@DomName('HTMLAreaElement')
 class AreaElement extends _Element_Merged {
   AreaElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AreaElement() => document.$dom_createElement("area");
 
-
-  /** @domName HTMLAreaElement.alt */
+  @DocsEditable
+  @DomName('HTMLAreaElement.alt')
   String get alt native "HTMLAreaElement_alt_Getter";
 
-
-  /** @domName HTMLAreaElement.alt */
+  @DocsEditable
+  @DomName('HTMLAreaElement.alt')
   void set alt(String value) native "HTMLAreaElement_alt_Setter";
 
-
-  /** @domName HTMLAreaElement.coords */
+  @DocsEditable
+  @DomName('HTMLAreaElement.coords')
   String get coords native "HTMLAreaElement_coords_Getter";
 
-
-  /** @domName HTMLAreaElement.coords */
+  @DocsEditable
+  @DomName('HTMLAreaElement.coords')
   void set coords(String value) native "HTMLAreaElement_coords_Setter";
 
-
-  /** @domName HTMLAreaElement.hash */
+  @DocsEditable
+  @DomName('HTMLAreaElement.hash')
   String get hash native "HTMLAreaElement_hash_Getter";
 
-
-  /** @domName HTMLAreaElement.host */
+  @DocsEditable
+  @DomName('HTMLAreaElement.host')
   String get host native "HTMLAreaElement_host_Getter";
 
-
-  /** @domName HTMLAreaElement.hostname */
+  @DocsEditable
+  @DomName('HTMLAreaElement.hostname')
   String get hostname native "HTMLAreaElement_hostname_Getter";
 
-
-  /** @domName HTMLAreaElement.href */
+  @DocsEditable
+  @DomName('HTMLAreaElement.href')
   String get href native "HTMLAreaElement_href_Getter";
 
-
-  /** @domName HTMLAreaElement.href */
+  @DocsEditable
+  @DomName('HTMLAreaElement.href')
   void set href(String value) native "HTMLAreaElement_href_Setter";
 
-
-  /** @domName HTMLAreaElement.pathname */
+  @DocsEditable
+  @DomName('HTMLAreaElement.pathname')
   String get pathname native "HTMLAreaElement_pathname_Getter";
 
-
-  /** @domName HTMLAreaElement.ping */
+  @DocsEditable
+  @DomName('HTMLAreaElement.ping')
   String get ping native "HTMLAreaElement_ping_Getter";
 
-
-  /** @domName HTMLAreaElement.ping */
+  @DocsEditable
+  @DomName('HTMLAreaElement.ping')
   void set ping(String value) native "HTMLAreaElement_ping_Setter";
 
-
-  /** @domName HTMLAreaElement.port */
+  @DocsEditable
+  @DomName('HTMLAreaElement.port')
   String get port native "HTMLAreaElement_port_Getter";
 
-
-  /** @domName HTMLAreaElement.protocol */
+  @DocsEditable
+  @DomName('HTMLAreaElement.protocol')
   String get protocol native "HTMLAreaElement_protocol_Getter";
 
-
-  /** @domName HTMLAreaElement.search */
+  @DocsEditable
+  @DomName('HTMLAreaElement.search')
   String get search native "HTMLAreaElement_search_Getter";
 
-
-  /** @domName HTMLAreaElement.shape */
+  @DocsEditable
+  @DomName('HTMLAreaElement.shape')
   String get shape native "HTMLAreaElement_shape_Getter";
 
-
-  /** @domName HTMLAreaElement.shape */
+  @DocsEditable
+  @DomName('HTMLAreaElement.shape')
   void set shape(String value) native "HTMLAreaElement_shape_Setter";
 
-
-  /** @domName HTMLAreaElement.target */
+  @DocsEditable
+  @DomName('HTMLAreaElement.target')
   String get target native "HTMLAreaElement_target_Getter";
 
-
-  /** @domName HTMLAreaElement.target */
+  @DocsEditable
+  @DomName('HTMLAreaElement.target')
   void set target(String value) native "HTMLAreaElement_target_Setter";
 
 }
@@ -589,7 +505,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ArrayBuffer
+@DocsEditable
+@DomName('ArrayBuffer')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -597,30 +514,30 @@
 class ArrayBuffer extends NativeFieldWrapperClass1 {
   ArrayBuffer.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ArrayBuffer(int length) => ArrayBuffer._create(length);
   static ArrayBuffer _create(int length) native "ArrayBuffer_constructor_Callback";
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName ArrayBuffer.byteLength */
+  @DocsEditable
+  @DomName('ArrayBuffer.byteLength')
   int get byteLength native "ArrayBuffer_byteLength_Getter";
 
-  ArrayBuffer slice(/*long*/ begin, [/*long*/ end]) {
+  ArrayBuffer slice(int begin, [int end]) {
     if (?end) {
       return _slice_1(begin, end);
     }
     return _slice_2(begin);
   }
 
-
-  /** @domName ArrayBuffer.slice_1 */
+  @DocsEditable
+  @DomName('ArrayBuffer.slice_1')
   ArrayBuffer _slice_1(begin, end) native "ArrayBuffer_slice_1_Callback";
 
-
-  /** @domName ArrayBuffer.slice_2 */
+  @DocsEditable
+  @DomName('ArrayBuffer.slice_2')
   ArrayBuffer _slice_2(begin) native "ArrayBuffer_slice_2_Callback";
 
 }
@@ -631,7 +548,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ArrayBufferView
+@DocsEditable
+@DomName('ArrayBufferView')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -639,16 +557,16 @@
 class ArrayBufferView extends NativeFieldWrapperClass1 {
   ArrayBufferView.internal();
 
-
-  /** @domName ArrayBufferView.buffer */
+  @DocsEditable
+  @DomName('ArrayBufferView.buffer')
   ArrayBuffer get buffer native "ArrayBufferView_buffer_Getter";
 
-
-  /** @domName ArrayBufferView.byteLength */
+  @DocsEditable
+  @DomName('ArrayBufferView.byteLength')
   int get byteLength native "ArrayBufferView_byteLength_Getter";
 
-
-  /** @domName ArrayBufferView.byteOffset */
+  @DocsEditable
+  @DomName('ArrayBufferView.byteOffset')
   int get byteOffset native "ArrayBufferView_byteOffset_Getter";
 
 }
@@ -659,34 +577,11 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Attr
+@DocsEditable
+@DomName('Attr')
 class Attr extends Node {
   Attr.internal() : super.internal();
 
-
-  /** @domName Attr.isId */
-  bool get isId native "Attr_isId_Getter";
-
-
-  /** @domName Attr.name */
-  String get name native "Attr_name_Getter";
-
-
-  /** @domName Attr.ownerElement */
-  Element get ownerElement native "Attr_ownerElement_Getter";
-
-
-  /** @domName Attr.specified */
-  bool get specified native "Attr_specified_Getter";
-
-
-  /** @domName Attr.value */
-  String get value native "Attr_value_Getter";
-
-
-  /** @domName Attr.value */
-  void set value(String value) native "Attr_value_Setter";
-
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -695,11 +590,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLAudioElement
+@DocsEditable
+@DomName('HTMLAudioElement')
 class AudioElement extends MediaElement {
   AudioElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AudioElement([String src]) {
     if (!?src) {
       return AudioElement._create();
@@ -716,11 +612,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLBRElement
+@DocsEditable
+@DomName('HTMLBRElement')
 class BRElement extends _Element_Merged {
   BRElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory BRElement() => document.$dom_createElement("br");
 
 }
@@ -731,12 +628,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName BarInfo
+@DocsEditable
+@DomName('BarInfo')
 class BarInfo extends NativeFieldWrapperClass1 {
   BarInfo.internal();
 
-
-  /** @domName BarInfo.visible */
+  @DocsEditable
+  @DomName('BarInfo.visible')
   bool get visible native "BarInfo_visible_Getter";
 
 }
@@ -747,27 +645,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLBaseElement
+@DocsEditable
+@DomName('HTMLBaseElement')
 class BaseElement extends _Element_Merged {
   BaseElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory BaseElement() => document.$dom_createElement("base");
 
-
-  /** @domName HTMLBaseElement.href */
+  @DocsEditable
+  @DomName('HTMLBaseElement.href')
   String get href native "HTMLBaseElement_href_Getter";
 
-
-  /** @domName HTMLBaseElement.href */
+  @DocsEditable
+  @DomName('HTMLBaseElement.href')
   void set href(String value) native "HTMLBaseElement_href_Setter";
 
-
-  /** @domName HTMLBaseElement.target */
+  @DocsEditable
+  @DomName('HTMLBaseElement.target')
   String get target native "HTMLBaseElement_target_Getter";
 
-
-  /** @domName HTMLBaseElement.target */
+  @DocsEditable
+  @DomName('HTMLBaseElement.target')
   void set target(String value) native "HTMLBaseElement_target_Setter";
 
 }
@@ -778,43 +677,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLBaseFontElement
-class BaseFontElement extends _Element_Merged {
-  BaseFontElement.internal() : super.internal();
-
-
-  /** @domName HTMLBaseFontElement.color */
-  String get color native "HTMLBaseFontElement_color_Getter";
-
-
-  /** @domName HTMLBaseFontElement.color */
-  void set color(String value) native "HTMLBaseFontElement_color_Setter";
-
-
-  /** @domName HTMLBaseFontElement.face */
-  String get face native "HTMLBaseFontElement_face_Getter";
-
-
-  /** @domName HTMLBaseFontElement.face */
-  void set face(String value) native "HTMLBaseFontElement_face_Setter";
-
-
-  /** @domName HTMLBaseFontElement.size */
-  int get size native "HTMLBaseFontElement_size_Getter";
-
-
-  /** @domName HTMLBaseFontElement.size */
-  void set size(int value) native "HTMLBaseFontElement_size_Setter";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName BatteryManager
+@DocsEditable
+@DomName('BatteryManager')
 class BatteryManager extends EventTarget {
   BatteryManager.internal() : super.internal();
 
@@ -826,36 +690,37 @@
 
   static const EventStreamProvider<Event> levelChangeEvent = const EventStreamProvider<Event>('levelchange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   BatteryManagerEvents get on =>
     new BatteryManagerEvents(this);
 
-
-  /** @domName BatteryManager.charging */
+  @DocsEditable
+  @DomName('BatteryManager.charging')
   bool get charging native "BatteryManager_charging_Getter";
 
-
-  /** @domName BatteryManager.chargingTime */
+  @DocsEditable
+  @DomName('BatteryManager.chargingTime')
   num get chargingTime native "BatteryManager_chargingTime_Getter";
 
-
-  /** @domName BatteryManager.dischargingTime */
+  @DocsEditable
+  @DomName('BatteryManager.dischargingTime')
   num get dischargingTime native "BatteryManager_dischargingTime_Getter";
 
-
-  /** @domName BatteryManager.level */
+  @DocsEditable
+  @DomName('BatteryManager.level')
   num get level native "BatteryManager_level_Getter";
 
-
-  /** @domName BatteryManager.addEventListener */
+  @DocsEditable
+  @DomName('BatteryManager.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "BatteryManager_addEventListener_Callback";
 
-
-  /** @domName BatteryManager.dispatchEvent */
+  @DocsEditable
+  @DomName('BatteryManager.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "BatteryManager_dispatchEvent_Callback";
 
-
-  /** @domName BatteryManager.removeEventListener */
+  @DocsEditable
+  @DomName('BatteryManager.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "BatteryManager_removeEventListener_Callback";
 
   Stream<Event> get onChargingChange => chargingChangeEvent.forTarget(this);
@@ -868,21 +733,21 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class BatteryManagerEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   BatteryManagerEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get chargingChange => this['chargingchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get chargingTimeChange => this['chargingtimechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dischargingTimeChange => this['dischargingtimechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get levelChange => this['levelchange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -892,12 +757,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName BeforeLoadEvent
+@DocsEditable
+@DomName('BeforeLoadEvent')
 class BeforeLoadEvent extends Event {
   BeforeLoadEvent.internal() : super.internal();
 
-
-  /** @domName BeforeLoadEvent.url */
+  @DocsEditable
+  @DomName('BeforeLoadEvent.url')
   String get url native "BeforeLoadEvent_url_Getter";
 
 }
@@ -906,11 +772,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Blob
+@DocsEditable
+@DomName('Blob')
 class Blob extends NativeFieldWrapperClass1 {
   Blob.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory Blob(List blobParts, [String type, String endings]) {
     if (!?type) {
       return Blob._create(blobParts);
@@ -922,15 +789,15 @@
   }
   static Blob _create(List blobParts, [String type, String endings]) native "Blob_constructor_Callback";
 
-
-  /** @domName Blob.size */
+  @DocsEditable
+  @DomName('Blob.size')
   int get size native "Blob_size_Getter";
 
-
-  /** @domName Blob.type */
+  @DocsEditable
+  @DomName('Blob.type')
   String get type native "Blob_type_Getter";
 
-  Blob slice([/*long long*/ start, /*long long*/ end, /*DOMString*/ contentType]) {
+  Blob slice([int start, int end, String contentType]) {
     if (?contentType) {
       return _slice_1(start, end, contentType);
     }
@@ -943,20 +810,20 @@
     return _slice_4();
   }
 
-
-  /** @domName Blob.slice_1 */
+  @DocsEditable
+  @DomName('Blob.slice_1')
   Blob _slice_1(start, end, contentType) native "Blob_slice_1_Callback";
 
-
-  /** @domName Blob.slice_2 */
+  @DocsEditable
+  @DomName('Blob.slice_2')
   Blob _slice_2(start, end) native "Blob_slice_2_Callback";
 
-
-  /** @domName Blob.slice_3 */
+  @DocsEditable
+  @DomName('Blob.slice_3')
   Blob _slice_3(start) native "Blob_slice_3_Callback";
 
-
-  /** @domName Blob.slice_4 */
+  @DocsEditable
+  @DomName('Blob.slice_4')
   Blob _slice_4() native "Blob_slice_4_Callback";
 
 }
@@ -968,7 +835,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLBodyElement
+@DocsEditable
+@DomName('HTMLBodyElement')
 class BodyElement extends _Element_Merged {
   BodyElement.internal() : super.internal();
 
@@ -998,21 +866,14 @@
 
   static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
 
-  ///@docsEditable true
+  @DocsEditable
   factory BodyElement() => document.$dom_createElement("body");
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   BodyElementEvents get on =>
     new BodyElementEvents(this);
 
-
-  /** @domName HTMLBodyElement.vLink */
-  String get vLink native "HTMLBodyElement_vLink_Getter";
-
-
-  /** @domName HTMLBodyElement.vLink */
-  void set vLink(String value) native "HTMLBodyElement_vLink_Setter";
-
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
   Stream<Event> get onBlur => blurEvent.forTarget(this);
@@ -1041,48 +902,48 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class BodyElementEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   BodyElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeUnload => this['beforeunload'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get hashChange => this['hashchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get offline => this['offline'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get online => this['online'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get popState => this['popstate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get resize => this['resize'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get storage => this['storage'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unload => this['unload'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1092,119 +953,120 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLButtonElement
+@DocsEditable
+@DomName('HTMLButtonElement')
 class ButtonElement extends _Element_Merged {
   ButtonElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ButtonElement() => document.$dom_createElement("button");
 
-
-  /** @domName HTMLButtonElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLButtonElement.autofocus')
   bool get autofocus native "HTMLButtonElement_autofocus_Getter";
 
-
-  /** @domName HTMLButtonElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLButtonElement.autofocus')
   void set autofocus(bool value) native "HTMLButtonElement_autofocus_Setter";
 
-
-  /** @domName HTMLButtonElement.disabled */
+  @DocsEditable
+  @DomName('HTMLButtonElement.disabled')
   bool get disabled native "HTMLButtonElement_disabled_Getter";
 
-
-  /** @domName HTMLButtonElement.disabled */
+  @DocsEditable
+  @DomName('HTMLButtonElement.disabled')
   void set disabled(bool value) native "HTMLButtonElement_disabled_Setter";
 
-
-  /** @domName HTMLButtonElement.form */
+  @DocsEditable
+  @DomName('HTMLButtonElement.form')
   FormElement get form native "HTMLButtonElement_form_Getter";
 
-
-  /** @domName HTMLButtonElement.formAction */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formAction')
   String get formAction native "HTMLButtonElement_formAction_Getter";
 
-
-  /** @domName HTMLButtonElement.formAction */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formAction')
   void set formAction(String value) native "HTMLButtonElement_formAction_Setter";
 
-
-  /** @domName HTMLButtonElement.formEnctype */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formEnctype')
   String get formEnctype native "HTMLButtonElement_formEnctype_Getter";
 
-
-  /** @domName HTMLButtonElement.formEnctype */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formEnctype')
   void set formEnctype(String value) native "HTMLButtonElement_formEnctype_Setter";
 
-
-  /** @domName HTMLButtonElement.formMethod */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formMethod')
   String get formMethod native "HTMLButtonElement_formMethod_Getter";
 
-
-  /** @domName HTMLButtonElement.formMethod */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formMethod')
   void set formMethod(String value) native "HTMLButtonElement_formMethod_Setter";
 
-
-  /** @domName HTMLButtonElement.formNoValidate */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formNoValidate')
   bool get formNoValidate native "HTMLButtonElement_formNoValidate_Getter";
 
-
-  /** @domName HTMLButtonElement.formNoValidate */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formNoValidate')
   void set formNoValidate(bool value) native "HTMLButtonElement_formNoValidate_Setter";
 
-
-  /** @domName HTMLButtonElement.formTarget */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formTarget')
   String get formTarget native "HTMLButtonElement_formTarget_Getter";
 
-
-  /** @domName HTMLButtonElement.formTarget */
+  @DocsEditable
+  @DomName('HTMLButtonElement.formTarget')
   void set formTarget(String value) native "HTMLButtonElement_formTarget_Setter";
 
-
-  /** @domName HTMLButtonElement.labels */
+  @DocsEditable
+  @DomName('HTMLButtonElement.labels')
   List<Node> get labels native "HTMLButtonElement_labels_Getter";
 
-
-  /** @domName HTMLButtonElement.name */
+  @DocsEditable
+  @DomName('HTMLButtonElement.name')
   String get name native "HTMLButtonElement_name_Getter";
 
-
-  /** @domName HTMLButtonElement.name */
+  @DocsEditable
+  @DomName('HTMLButtonElement.name')
   void set name(String value) native "HTMLButtonElement_name_Setter";
 
-
-  /** @domName HTMLButtonElement.type */
+  @DocsEditable
+  @DomName('HTMLButtonElement.type')
   String get type native "HTMLButtonElement_type_Getter";
 
-
-  /** @domName HTMLButtonElement.type */
+  @DocsEditable
+  @DomName('HTMLButtonElement.type')
   void set type(String value) native "HTMLButtonElement_type_Setter";
 
-
-  /** @domName HTMLButtonElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLButtonElement.validationMessage')
   String get validationMessage native "HTMLButtonElement_validationMessage_Getter";
 
-
-  /** @domName HTMLButtonElement.validity */
+  @DocsEditable
+  @DomName('HTMLButtonElement.validity')
   ValidityState get validity native "HTMLButtonElement_validity_Getter";
 
-
-  /** @domName HTMLButtonElement.value */
+  @DocsEditable
+  @DomName('HTMLButtonElement.value')
   String get value native "HTMLButtonElement_value_Getter";
 
-
-  /** @domName HTMLButtonElement.value */
+  @DocsEditable
+  @DomName('HTMLButtonElement.value')
   void set value(String value) native "HTMLButtonElement_value_Setter";
 
-
-  /** @domName HTMLButtonElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLButtonElement.willValidate')
   bool get willValidate native "HTMLButtonElement_willValidate_Getter";
 
-
-  /** @domName HTMLButtonElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLButtonElement.checkValidity')
   bool checkValidity() native "HTMLButtonElement_checkValidity_Callback";
 
-
-  /** @domName HTMLButtonElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLButtonElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLButtonElement_setCustomValidity_Callback";
 
 }
@@ -1215,7 +1077,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CDATASection
+@DocsEditable
+@DomName('CDATASection')
 class CDataSection extends Text {
   CDataSection.internal() : super.internal();
 
@@ -1225,11 +1088,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLCanvasElement
+@DocsEditable
+@DomName('HTMLCanvasElement')
 class CanvasElement extends _Element_Merged {
   CanvasElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory CanvasElement({int width, int height}) {
     var e = document.$dom_createElement("canvas");
     if (width != null) e.width = width;
@@ -1237,28 +1101,28 @@
     return e;
   }
 
-
-  /** @domName HTMLCanvasElement.height */
+  @DocsEditable
+  @DomName('HTMLCanvasElement.height')
   int get height native "HTMLCanvasElement_height_Getter";
 
-
-  /** @domName HTMLCanvasElement.height */
+  @DocsEditable
+  @DomName('HTMLCanvasElement.height')
   void set height(int value) native "HTMLCanvasElement_height_Setter";
 
-
-  /** @domName HTMLCanvasElement.width */
+  @DocsEditable
+  @DomName('HTMLCanvasElement.width')
   int get width native "HTMLCanvasElement_width_Getter";
 
-
-  /** @domName HTMLCanvasElement.width */
+  @DocsEditable
+  @DomName('HTMLCanvasElement.width')
   void set width(int value) native "HTMLCanvasElement_width_Setter";
 
-
-  /** @domName HTMLCanvasElement.getContext */
+  @DocsEditable
+  @DomName('HTMLCanvasElement.getContext')
   Object getContext(String contextId) native "HTMLCanvasElement_getContext_Callback";
 
-
-  /** @domName HTMLCanvasElement.toDataURL */
+  @DocsEditable
+  @DomName('HTMLCanvasElement.toDataURL')
   String toDataUrl(String type, [num quality]) native "HTMLCanvasElement_toDataURL_Callback";
 
 
@@ -1271,12 +1135,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CanvasGradient
+@DocsEditable
+@DomName('CanvasGradient')
 class CanvasGradient extends NativeFieldWrapperClass1 {
   CanvasGradient.internal();
 
-
-  /** @domName CanvasGradient.addColorStop */
+  @DocsEditable
+  @DomName('CanvasGradient.addColorStop')
   void addColorStop(num offset, String color) native "CanvasGradient_addColorStop_Callback";
 
 }
@@ -1287,7 +1152,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CanvasPattern
+@DocsEditable
+@DomName('CanvasPattern')
 class CanvasPattern extends NativeFieldWrapperClass1 {
   CanvasPattern.internal();
 
@@ -1299,12 +1165,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CanvasRenderingContext
+@DocsEditable
+@DomName('CanvasRenderingContext')
 class CanvasRenderingContext extends NativeFieldWrapperClass1 {
   CanvasRenderingContext.internal();
 
-
-  /** @domName CanvasRenderingContext.canvas */
+  @DocsEditable
+  @DomName('CanvasRenderingContext.canvas')
   CanvasElement get canvas native "CanvasRenderingContext_canvas_Getter";
 
 }
@@ -1313,195 +1180,196 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CanvasRenderingContext2D
+@DocsEditable
+@DomName('CanvasRenderingContext2D')
 class CanvasRenderingContext2D extends CanvasRenderingContext {
   CanvasRenderingContext2D.internal() : super.internal();
 
-
-  /** @domName CanvasRenderingContext2D.fillStyle */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.fillStyle')
   dynamic get fillStyle native "CanvasRenderingContext2D_fillStyle_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.fillStyle */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.fillStyle')
   void set fillStyle(dynamic value) native "CanvasRenderingContext2D_fillStyle_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.font */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.font')
   String get font native "CanvasRenderingContext2D_font_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.font */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.font')
   void set font(String value) native "CanvasRenderingContext2D_font_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.globalAlpha */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.globalAlpha')
   num get globalAlpha native "CanvasRenderingContext2D_globalAlpha_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.globalAlpha */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.globalAlpha')
   void set globalAlpha(num value) native "CanvasRenderingContext2D_globalAlpha_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   String get globalCompositeOperation native "CanvasRenderingContext2D_globalCompositeOperation_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   void set globalCompositeOperation(String value) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.lineCap */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineCap')
   String get lineCap native "CanvasRenderingContext2D_lineCap_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.lineCap */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineCap')
   void set lineCap(String value) native "CanvasRenderingContext2D_lineCap_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.lineDashOffset */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineDashOffset')
   num get lineDashOffset native "CanvasRenderingContext2D_lineDashOffset_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.lineDashOffset */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineDashOffset')
   void set lineDashOffset(num value) native "CanvasRenderingContext2D_lineDashOffset_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.lineJoin */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineJoin')
   String get lineJoin native "CanvasRenderingContext2D_lineJoin_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.lineJoin */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineJoin')
   void set lineJoin(String value) native "CanvasRenderingContext2D_lineJoin_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.lineWidth */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineWidth')
   num get lineWidth native "CanvasRenderingContext2D_lineWidth_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.lineWidth */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineWidth')
   void set lineWidth(num value) native "CanvasRenderingContext2D_lineWidth_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.miterLimit */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.miterLimit')
   num get miterLimit native "CanvasRenderingContext2D_miterLimit_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.miterLimit */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.miterLimit')
   void set miterLimit(num value) native "CanvasRenderingContext2D_miterLimit_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowBlur */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowBlur')
   num get shadowBlur native "CanvasRenderingContext2D_shadowBlur_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowBlur */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowBlur')
   void set shadowBlur(num value) native "CanvasRenderingContext2D_shadowBlur_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowColor */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowColor')
   String get shadowColor native "CanvasRenderingContext2D_shadowColor_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowColor */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowColor')
   void set shadowColor(String value) native "CanvasRenderingContext2D_shadowColor_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetX */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowOffsetX')
   num get shadowOffsetX native "CanvasRenderingContext2D_shadowOffsetX_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetX */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowOffsetX')
   void set shadowOffsetX(num value) native "CanvasRenderingContext2D_shadowOffsetX_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetY */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowOffsetY')
   num get shadowOffsetY native "CanvasRenderingContext2D_shadowOffsetY_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetY */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.shadowOffsetY')
   void set shadowOffsetY(num value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.strokeStyle */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.strokeStyle')
   dynamic get strokeStyle native "CanvasRenderingContext2D_strokeStyle_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.strokeStyle */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.strokeStyle')
   void set strokeStyle(dynamic value) native "CanvasRenderingContext2D_strokeStyle_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.textAlign */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.textAlign')
   String get textAlign native "CanvasRenderingContext2D_textAlign_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.textAlign */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.textAlign')
   void set textAlign(String value) native "CanvasRenderingContext2D_textAlign_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.textBaseline */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.textBaseline')
   String get textBaseline native "CanvasRenderingContext2D_textBaseline_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.textBaseline */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.textBaseline')
   void set textBaseline(String value) native "CanvasRenderingContext2D_textBaseline_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitBackingStorePixelRatio')
   num get webkitBackingStorePixelRatio native "CanvasRenderingContext2D_webkitBackingStorePixelRatio_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitImageSmoothingEnabled')
   bool get webkitImageSmoothingEnabled native "CanvasRenderingContext2D_webkitImageSmoothingEnabled_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitImageSmoothingEnabled')
   void set webkitImageSmoothingEnabled(bool value) native "CanvasRenderingContext2D_webkitImageSmoothingEnabled_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.webkitLineDash */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitLineDash')
   List get webkitLineDash native "CanvasRenderingContext2D_webkitLineDash_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.webkitLineDash */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitLineDash')
   void set webkitLineDash(List value) native "CanvasRenderingContext2D_webkitLineDash_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitLineDashOffset')
   num get webkitLineDashOffset native "CanvasRenderingContext2D_webkitLineDashOffset_Getter";
 
-
-  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitLineDashOffset')
   void set webkitLineDashOffset(num value) native "CanvasRenderingContext2D_webkitLineDashOffset_Setter";
 
-
-  /** @domName CanvasRenderingContext2D.arc */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.arc')
   void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) native "CanvasRenderingContext2D_arc_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.arcTo */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.arcTo')
   void arcTo(num x1, num y1, num x2, num y2, num radius) native "CanvasRenderingContext2D_arcTo_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.beginPath */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.beginPath')
   void beginPath() native "CanvasRenderingContext2D_beginPath_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.bezierCurveTo */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.bezierCurveTo')
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.clearRect */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.clearRect')
   void clearRect(num x, num y, num width, num height) native "CanvasRenderingContext2D_clearRect_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.clip */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.clip')
   void clip() native "CanvasRenderingContext2D_clip_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.closePath */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.closePath')
   void closePath() native "CanvasRenderingContext2D_closePath_Callback";
 
-  ImageData createImageData(imagedata_OR_sw, [/*float*/ sh]) {
+  ImageData createImageData(imagedata_OR_sw, [num sh]) {
     if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) && !?sh) {
       return _createImageData_1(imagedata_OR_sw);
     }
@@ -1511,19 +1379,19 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName CanvasRenderingContext2D.createImageData_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.createImageData_1')
   ImageData _createImageData_1(imagedata_OR_sw) native "CanvasRenderingContext2D_createImageData_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.createImageData_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.createImageData_2')
   ImageData _createImageData_2(imagedata_OR_sw, sh) native "CanvasRenderingContext2D_createImageData_2_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.createLinearGradient */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.createLinearGradient')
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native "CanvasRenderingContext2D_createLinearGradient_Callback";
 
-  CanvasPattern createPattern(canvas_OR_image, /*DOMString*/ repetitionType) {
+  CanvasPattern createPattern(canvas_OR_image, String repetitionType) {
     if ((canvas_OR_image is CanvasElement || canvas_OR_image == null) && (repetitionType is String || repetitionType == null)) {
       return _createPattern_1(canvas_OR_image, repetitionType);
     }
@@ -1533,19 +1401,19 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName CanvasRenderingContext2D.createPattern_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.createPattern_1')
   CanvasPattern _createPattern_1(canvas_OR_image, repetitionType) native "CanvasRenderingContext2D_createPattern_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.createPattern_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.createPattern_2')
   CanvasPattern _createPattern_2(canvas_OR_image, repetitionType) native "CanvasRenderingContext2D_createPattern_2_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.createRadialGradient */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.createRadialGradient')
   CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native "CanvasRenderingContext2D_createRadialGradient_Callback";
 
-  void drawImage(canvas_OR_image_OR_video, /*float*/ sx_OR_x, /*float*/ sy_OR_y, [/*float*/ sw_OR_width, /*float*/ height_OR_sh, /*float*/ dx, /*float*/ dy, /*float*/ dw, /*float*/ dh]) {
+  void drawImage(canvas_OR_image_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]) {
     if ((canvas_OR_image_OR_video is ImageElement || canvas_OR_image_OR_video == null) && (sx_OR_x is num || sx_OR_x == null) && (sy_OR_y is num || sy_OR_y == null) && !?sw_OR_width && !?height_OR_sh && !?dx && !?dy && !?dw && !?dh) {
       _drawImage_1(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y);
       return;
@@ -1585,51 +1453,51 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_1')
   void _drawImage_1(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_2')
   void _drawImage_2(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_2_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_3 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_3')
   void _drawImage_3(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_3_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_4 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_4')
   void _drawImage_4(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_4_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_5 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_5')
   void _drawImage_5(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_5_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_6 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_6')
   void _drawImage_6(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_6_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_7 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_7')
   void _drawImage_7(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_7_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_8 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_8')
   void _drawImage_8(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_8_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.drawImage_9 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.drawImage_9')
   void _drawImage_9(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_9_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.fill */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.fill')
   void fill() native "CanvasRenderingContext2D_fill_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.fillRect */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.fillRect')
   void fillRect(num x, num y, num width, num height) native "CanvasRenderingContext2D_fillRect_Callback";
 
-  void fillText(/*DOMString*/ text, /*float*/ x, /*float*/ y, [/*float*/ maxWidth]) {
+  void fillText(String text, num x, num y, [num maxWidth]) {
     if (?maxWidth) {
       _fillText_1(text, x, y, maxWidth);
       return;
@@ -1637,39 +1505,39 @@
     _fillText_2(text, x, y);
   }
 
-
-  /** @domName CanvasRenderingContext2D.fillText_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.fillText_1')
   void _fillText_1(text, x, y, maxWidth) native "CanvasRenderingContext2D_fillText_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.fillText_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.fillText_2')
   void _fillText_2(text, x, y) native "CanvasRenderingContext2D_fillText_2_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.getImageData */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.getImageData')
   ImageData getImageData(num sx, num sy, num sw, num sh) native "CanvasRenderingContext2D_getImageData_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.getLineDash */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.getLineDash')
   List<num> getLineDash() native "CanvasRenderingContext2D_getLineDash_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.isPointInPath */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.isPointInPath')
   bool isPointInPath(num x, num y) native "CanvasRenderingContext2D_isPointInPath_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.lineTo */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.lineTo')
   void lineTo(num x, num y) native "CanvasRenderingContext2D_lineTo_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.measureText */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.measureText')
   TextMetrics measureText(String text) native "CanvasRenderingContext2D_measureText_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.moveTo */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.moveTo')
   void moveTo(num x, num y) native "CanvasRenderingContext2D_moveTo_Callback";
 
-  void putImageData(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
+  void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
       _putImageData_1(imagedata, dx, dy);
       return;
@@ -1681,51 +1549,51 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName CanvasRenderingContext2D.putImageData_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.putImageData_1')
   void _putImageData_1(imagedata, dx, dy) native "CanvasRenderingContext2D_putImageData_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.putImageData_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.putImageData_2')
   void _putImageData_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_putImageData_2_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.quadraticCurveTo */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.quadraticCurveTo')
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.rect */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.rect')
   void rect(num x, num y, num width, num height) native "CanvasRenderingContext2D_rect_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.restore */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.restore')
   void restore() native "CanvasRenderingContext2D_restore_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.rotate */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.rotate')
   void rotate(num angle) native "CanvasRenderingContext2D_rotate_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.save */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.save')
   void save() native "CanvasRenderingContext2D_save_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.scale */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.scale')
   void scale(num sx, num sy) native "CanvasRenderingContext2D_scale_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.setLineDash */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.setLineDash')
   void setLineDash(List<num> dash) native "CanvasRenderingContext2D_setLineDash_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.setTransform */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.setTransform')
   void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) native "CanvasRenderingContext2D_setTransform_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.stroke */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.stroke')
   void stroke() native "CanvasRenderingContext2D_stroke_Callback";
 
-  void strokeRect(/*float*/ x, /*float*/ y, /*float*/ width, /*float*/ height, [/*float*/ lineWidth]) {
+  void strokeRect(num x, num y, num width, num height, [num lineWidth]) {
     if (?lineWidth) {
       _strokeRect_1(x, y, width, height, lineWidth);
       return;
@@ -1733,15 +1601,15 @@
     _strokeRect_2(x, y, width, height);
   }
 
-
-  /** @domName CanvasRenderingContext2D.strokeRect_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.strokeRect_1')
   void _strokeRect_1(x, y, width, height, lineWidth) native "CanvasRenderingContext2D_strokeRect_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.strokeRect_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.strokeRect_2')
   void _strokeRect_2(x, y, width, height) native "CanvasRenderingContext2D_strokeRect_2_Callback";
 
-  void strokeText(/*DOMString*/ text, /*float*/ x, /*float*/ y, [/*float*/ maxWidth]) {
+  void strokeText(String text, num x, num y, [num maxWidth]) {
     if (?maxWidth) {
       _strokeText_1(text, x, y, maxWidth);
       return;
@@ -1749,27 +1617,27 @@
     _strokeText_2(text, x, y);
   }
 
-
-  /** @domName CanvasRenderingContext2D.strokeText_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.strokeText_1')
   void _strokeText_1(text, x, y, maxWidth) native "CanvasRenderingContext2D_strokeText_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.strokeText_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.strokeText_2')
   void _strokeText_2(text, x, y) native "CanvasRenderingContext2D_strokeText_2_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.transform */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.transform')
   void transform(num m11, num m12, num m21, num m22, num dx, num dy) native "CanvasRenderingContext2D_transform_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.translate */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.translate')
   void translate(num tx, num ty) native "CanvasRenderingContext2D_translate_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.webkitGetImageDataHD */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitGetImageDataHD')
   ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) native "CanvasRenderingContext2D_webkitGetImageDataHD_Callback";
 
-  void webkitPutImageDataHD(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
+  void webkitPutImageDataHD(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if ((imagedata is ImageData || imagedata == null) && (dx is num || dx == null) && (dy is num || dy == null) && !?dirtyX && !?dirtyY && !?dirtyWidth && !?dirtyHeight) {
       _webkitPutImageDataHD_1(imagedata, dx, dy);
       return;
@@ -1781,12 +1649,12 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD_1 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitPutImageDataHD_1')
   void _webkitPutImageDataHD_1(imagedata, dx, dy) native "CanvasRenderingContext2D_webkitPutImageDataHD_1_Callback";
 
-
-  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD_2 */
+  @DocsEditable
+  @DomName('CanvasRenderingContext2D.webkitPutImageDataHD_2')
   void _webkitPutImageDataHD_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_webkitPutImageDataHD_2_Callback";
 
 
@@ -1833,44 +1701,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CharacterData
+@DocsEditable
+@DomName('CharacterData')
 class CharacterData extends Node {
   CharacterData.internal() : super.internal();
 
-
-  /** @domName CharacterData.data */
+  @DocsEditable
+  @DomName('CharacterData.data')
   String get data native "CharacterData_data_Getter";
 
-
-  /** @domName CharacterData.data */
+  @DocsEditable
+  @DomName('CharacterData.data')
   void set data(String value) native "CharacterData_data_Setter";
 
-
-  /** @domName CharacterData.length */
+  @DocsEditable
+  @DomName('CharacterData.length')
   int get length native "CharacterData_length_Getter";
 
-
-  /** @domName CharacterData.appendData */
+  @DocsEditable
+  @DomName('CharacterData.appendData')
   void appendData(String data) native "CharacterData_appendData_Callback";
 
-
-  /** @domName CharacterData.deleteData */
+  @DocsEditable
+  @DomName('CharacterData.deleteData')
   void deleteData(int offset, int length) native "CharacterData_deleteData_Callback";
 
-
-  /** @domName CharacterData.insertData */
+  @DocsEditable
+  @DomName('CharacterData.insertData')
   void insertData(int offset, String data) native "CharacterData_insertData_Callback";
 
-
-  /** @domName CharacterData.remove */
+  @DocsEditable
+  @DomName('CharacterData.remove')
   void remove() native "CharacterData_remove_Callback";
 
-
-  /** @domName CharacterData.replaceData */
+  @DocsEditable
+  @DomName('CharacterData.replaceData')
   void replaceData(int offset, int length, String data) native "CharacterData_replaceData_Callback";
 
-
-  /** @domName CharacterData.substringData */
+  @DocsEditable
+  @DomName('CharacterData.substringData')
   String substringData(int offset, int length) native "CharacterData_substringData_Callback";
 
 }
@@ -1881,32 +1750,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ClientRect
+@DocsEditable
+@DomName('ClientRect')
 class ClientRect extends NativeFieldWrapperClass1 {
   ClientRect.internal();
 
-
-  /** @domName ClientRect.bottom */
+  @DocsEditable
+  @DomName('ClientRect.bottom')
   num get bottom native "ClientRect_bottom_Getter";
 
-
-  /** @domName ClientRect.height */
+  @DocsEditable
+  @DomName('ClientRect.height')
   num get height native "ClientRect_height_Getter";
 
-
-  /** @domName ClientRect.left */
+  @DocsEditable
+  @DomName('ClientRect.left')
   num get left native "ClientRect_left_Getter";
 
-
-  /** @domName ClientRect.right */
+  @DocsEditable
+  @DomName('ClientRect.right')
   num get right native "ClientRect_right_Getter";
 
-
-  /** @domName ClientRect.top */
+  @DocsEditable
+  @DomName('ClientRect.top')
   num get top native "ClientRect_top_Getter";
 
-
-  /** @domName ClientRect.width */
+  @DocsEditable
+  @DomName('ClientRect.width')
   num get width native "ClientRect_width_Getter";
 
 }
@@ -1917,52 +1787,53 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Clipboard
+@DocsEditable
+@DomName('Clipboard')
 class Clipboard extends NativeFieldWrapperClass1 {
   Clipboard.internal();
 
-
-  /** @domName Clipboard.dropEffect */
+  @DocsEditable
+  @DomName('Clipboard.dropEffect')
   String get dropEffect native "Clipboard_dropEffect_Getter";
 
-
-  /** @domName Clipboard.dropEffect */
+  @DocsEditable
+  @DomName('Clipboard.dropEffect')
   void set dropEffect(String value) native "Clipboard_dropEffect_Setter";
 
-
-  /** @domName Clipboard.effectAllowed */
+  @DocsEditable
+  @DomName('Clipboard.effectAllowed')
   String get effectAllowed native "Clipboard_effectAllowed_Getter";
 
-
-  /** @domName Clipboard.effectAllowed */
+  @DocsEditable
+  @DomName('Clipboard.effectAllowed')
   void set effectAllowed(String value) native "Clipboard_effectAllowed_Setter";
 
-
-  /** @domName Clipboard.files */
+  @DocsEditable
+  @DomName('Clipboard.files')
   List<File> get files native "Clipboard_files_Getter";
 
-
-  /** @domName Clipboard.items */
+  @DocsEditable
+  @DomName('Clipboard.items')
   DataTransferItemList get items native "Clipboard_items_Getter";
 
-
-  /** @domName Clipboard.types */
+  @DocsEditable
+  @DomName('Clipboard.types')
   List get types native "Clipboard_types_Getter";
 
-
-  /** @domName Clipboard.clearData */
+  @DocsEditable
+  @DomName('Clipboard.clearData')
   void clearData([String type]) native "Clipboard_clearData_Callback";
 
-
-  /** @domName Clipboard.getData */
+  @DocsEditable
+  @DomName('Clipboard.getData')
   String getData(String type) native "Clipboard_getData_Callback";
 
-
-  /** @domName Clipboard.setData */
+  @DocsEditable
+  @DomName('Clipboard.setData')
   bool setData(String type, String data) native "Clipboard_setData_Callback";
 
-
-  /** @domName Clipboard.setDragImage */
+  @DocsEditable
+  @DomName('Clipboard.setDragImage')
   void setDragImage(ImageElement image, int x, int y) native "Clipboard_setDragImage_Callback";
 
 }
@@ -1973,20 +1844,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CloseEvent
+@DocsEditable
+@DomName('CloseEvent')
 class CloseEvent extends Event {
   CloseEvent.internal() : super.internal();
 
-
-  /** @domName CloseEvent.code */
+  @DocsEditable
+  @DomName('CloseEvent.code')
   int get code native "CloseEvent_code_Getter";
 
-
-  /** @domName CloseEvent.reason */
+  @DocsEditable
+  @DomName('CloseEvent.reason')
   String get reason native "CloseEvent_reason_Getter";
 
-
-  /** @domName CloseEvent.wasClean */
+  @DocsEditable
+  @DomName('CloseEvent.wasClean')
   bool get wasClean native "CloseEvent_wasClean_Getter";
 
 }
@@ -1997,7 +1869,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Comment
+@DocsEditable
+@DomName('Comment')
 class Comment extends CharacterData {
   Comment.internal() : super.internal();
 
@@ -2009,16 +1882,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CompositionEvent
+@DocsEditable
+@DomName('CompositionEvent')
 class CompositionEvent extends UIEvent {
   CompositionEvent.internal() : super.internal();
 
-
-  /** @domName CompositionEvent.data */
+  @DocsEditable
+  @DomName('CompositionEvent.data')
   String get data native "CompositionEvent_data_Getter";
 
-
-  /** @domName CompositionEvent.initCompositionEvent */
+  @DocsEditable
+  @DomName('CompositionEvent.initCompositionEvent')
   void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) native "CompositionEvent_initCompositionEvent_Callback";
 
 }
@@ -2029,96 +1903,97 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Console
+@DocsEditable
+@DomName('Console')
 class Console extends NativeFieldWrapperClass1 {
   Console.internal();
 
-
-  /** @domName Console.memory */
+  @DocsEditable
+  @DomName('Console.memory')
   MemoryInfo get memory native "Console_memory_Getter";
 
-
-  /** @domName Console.profiles */
+  @DocsEditable
+  @DomName('Console.profiles')
   List<ScriptProfile> get profiles native "Console_profiles_Getter";
 
-
-  /** @domName Console.assertCondition */
+  @DocsEditable
+  @DomName('Console.assertCondition')
   void assertCondition(bool condition, Object arg) native "Console_assertCondition_Callback";
 
-
-  /** @domName Console.clear */
+  @DocsEditable
+  @DomName('Console.clear')
   void clear(Object arg) native "Console_clear_Callback";
 
-
-  /** @domName Console.count */
+  @DocsEditable
+  @DomName('Console.count')
   void count(Object arg) native "Console_count_Callback";
 
-
-  /** @domName Console.debug */
+  @DocsEditable
+  @DomName('Console.debug')
   void debug(Object arg) native "Console_debug_Callback";
 
-
-  /** @domName Console.dir */
+  @DocsEditable
+  @DomName('Console.dir')
   void dir(Object arg) native "Console_dir_Callback";
 
-
-  /** @domName Console.dirxml */
+  @DocsEditable
+  @DomName('Console.dirxml')
   void dirxml(Object arg) native "Console_dirxml_Callback";
 
-
-  /** @domName Console.error */
+  @DocsEditable
+  @DomName('Console.error')
   void error(Object arg) native "Console_error_Callback";
 
-
-  /** @domName Console.group */
+  @DocsEditable
+  @DomName('Console.group')
   void group(Object arg) native "Console_group_Callback";
 
-
-  /** @domName Console.groupCollapsed */
+  @DocsEditable
+  @DomName('Console.groupCollapsed')
   void groupCollapsed(Object arg) native "Console_groupCollapsed_Callback";
 
-
-  /** @domName Console.groupEnd */
+  @DocsEditable
+  @DomName('Console.groupEnd')
   void groupEnd() native "Console_groupEnd_Callback";
 
-
-  /** @domName Console.info */
+  @DocsEditable
+  @DomName('Console.info')
   void info(Object arg) native "Console_info_Callback";
 
-
-  /** @domName Console.log */
+  @DocsEditable
+  @DomName('Console.log')
   void log(Object arg) native "Console_log_Callback";
 
-
-  /** @domName Console.markTimeline */
+  @DocsEditable
+  @DomName('Console.markTimeline')
   void markTimeline() native "Console_markTimeline_Callback";
 
-
-  /** @domName Console.profile */
+  @DocsEditable
+  @DomName('Console.profile')
   void profile(String title) native "Console_profile_Callback";
 
-
-  /** @domName Console.profileEnd */
+  @DocsEditable
+  @DomName('Console.profileEnd')
   void profileEnd(String title) native "Console_profileEnd_Callback";
 
-
-  /** @domName Console.time */
+  @DocsEditable
+  @DomName('Console.time')
   void time(String title) native "Console_time_Callback";
 
-
-  /** @domName Console.timeEnd */
+  @DocsEditable
+  @DomName('Console.timeEnd')
   void timeEnd(String title) native "Console_timeEnd_Callback";
 
-
-  /** @domName Console.timeStamp */
+  @DocsEditable
+  @DomName('Console.timeStamp')
   void timeStamp() native "Console_timeStamp_Callback";
 
-
-  /** @domName Console.trace */
+  @DocsEditable
+  @DomName('Console.trace')
   void trace(Object arg) native "Console_trace_Callback";
 
-
-  /** @domName Console.warn */
+  @DocsEditable
+  @DomName('Console.warn')
   void warn(Object arg) native "Console_warn_Callback";
 
 }
@@ -2129,36 +2004,37 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLContentElement
+@DocsEditable
+@DomName('HTMLContentElement')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 class ContentElement extends _Element_Merged {
   ContentElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ContentElement() => document.$dom_createElement("content");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLContentElement.resetStyleInheritance */
+  @DocsEditable
+  @DomName('HTMLContentElement.resetStyleInheritance')
   bool get resetStyleInheritance native "HTMLContentElement_resetStyleInheritance_Getter";
 
-
-  /** @domName HTMLContentElement.resetStyleInheritance */
+  @DocsEditable
+  @DomName('HTMLContentElement.resetStyleInheritance')
   void set resetStyleInheritance(bool value) native "HTMLContentElement_resetStyleInheritance_Setter";
 
-
-  /** @domName HTMLContentElement.select */
+  @DocsEditable
+  @DomName('HTMLContentElement.select')
   String get select native "HTMLContentElement_select_Getter";
 
-
-  /** @domName HTMLContentElement.select */
+  @DocsEditable
+  @DomName('HTMLContentElement.select')
   void set select(String value) native "HTMLContentElement_select_Setter";
 
-
-  /** @domName HTMLContentElement.getDistributedNodes */
+  @DocsEditable
+  @DomName('HTMLContentElement.getDistributedNodes')
   List<Node> getDistributedNodes() native "HTMLContentElement_getDistributedNodes_Callback";
 
 }
@@ -2169,36 +2045,37 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Coordinates
+@DocsEditable
+@DomName('Coordinates')
 class Coordinates extends NativeFieldWrapperClass1 {
   Coordinates.internal();
 
-
-  /** @domName Coordinates.accuracy */
+  @DocsEditable
+  @DomName('Coordinates.accuracy')
   num get accuracy native "Coordinates_accuracy_Getter";
 
-
-  /** @domName Coordinates.altitude */
+  @DocsEditable
+  @DomName('Coordinates.altitude')
   num get altitude native "Coordinates_altitude_Getter";
 
-
-  /** @domName Coordinates.altitudeAccuracy */
+  @DocsEditable
+  @DomName('Coordinates.altitudeAccuracy')
   num get altitudeAccuracy native "Coordinates_altitudeAccuracy_Getter";
 
-
-  /** @domName Coordinates.heading */
+  @DocsEditable
+  @DomName('Coordinates.heading')
   num get heading native "Coordinates_heading_Getter";
 
-
-  /** @domName Coordinates.latitude */
+  @DocsEditable
+  @DomName('Coordinates.latitude')
   num get latitude native "Coordinates_latitude_Getter";
 
-
-  /** @domName Coordinates.longitude */
+  @DocsEditable
+  @DomName('Coordinates.longitude')
   num get longitude native "Coordinates_longitude_Getter";
 
-
-  /** @domName Coordinates.speed */
+  @DocsEditable
+  @DomName('Coordinates.speed')
   num get speed native "Coordinates_speed_Getter";
 
 }
@@ -2209,20 +2086,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Counter
+@DocsEditable
+@DomName('Counter')
 class Counter extends NativeFieldWrapperClass1 {
   Counter.internal();
 
-
-  /** @domName Counter.identifier */
+  @DocsEditable
+  @DomName('Counter.identifier')
   String get identifier native "Counter_identifier_Getter";
 
-
-  /** @domName Counter.listStyle */
+  @DocsEditable
+  @DomName('Counter.listStyle')
   String get listStyle native "Counter_listStyle_Getter";
 
-
-  /** @domName Counter.separator */
+  @DocsEditable
+  @DomName('Counter.separator')
   String get separator native "Counter_separator_Getter";
 
 }
@@ -2233,13 +2111,14 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Crypto
+@DocsEditable
+@DomName('Crypto')
 class Crypto extends NativeFieldWrapperClass1 {
   Crypto.internal();
 
-
-  /** @domName Crypto.getRandomValues */
-  void getRandomValues(ArrayBufferView array) native "Crypto_getRandomValues_Callback";
+  @DocsEditable
+  @DomName('Crypto.getRandomValues')
+  ArrayBufferView getRandomValues(ArrayBufferView array) native "Crypto_getRandomValues_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2249,16 +2128,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSCharsetRule
+@DocsEditable
+@DomName('CSSCharsetRule')
 class CssCharsetRule extends CssRule {
   CssCharsetRule.internal() : super.internal();
 
-
-  /** @domName CSSCharsetRule.encoding */
+  @DocsEditable
+  @DomName('CSSCharsetRule.encoding')
   String get encoding native "CSSCharsetRule_encoding_Getter";
 
-
-  /** @domName CSSCharsetRule.encoding */
+  @DocsEditable
+  @DomName('CSSCharsetRule.encoding')
   void set encoding(String value) native "CSSCharsetRule_encoding_Setter";
 
 }
@@ -2269,12 +2149,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSFontFaceRule
+@DocsEditable
+@DomName('CSSFontFaceRule')
 class CssFontFaceRule extends CssRule {
   CssFontFaceRule.internal() : super.internal();
 
-
-  /** @domName CSSFontFaceRule.style */
+  @DocsEditable
+  @DomName('CSSFontFaceRule.style')
   CssStyleDeclaration get style native "CSSFontFaceRule_style_Getter";
 
 }
@@ -2285,20 +2166,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSImportRule
+@DocsEditable
+@DomName('CSSImportRule')
 class CssImportRule extends CssRule {
   CssImportRule.internal() : super.internal();
 
-
-  /** @domName CSSImportRule.href */
+  @DocsEditable
+  @DomName('CSSImportRule.href')
   String get href native "CSSImportRule_href_Getter";
 
-
-  /** @domName CSSImportRule.media */
+  @DocsEditable
+  @DomName('CSSImportRule.media')
   MediaList get media native "CSSImportRule_media_Getter";
 
-
-  /** @domName CSSImportRule.styleSheet */
+  @DocsEditable
+  @DomName('CSSImportRule.styleSheet')
   CssStyleSheet get styleSheet native "CSSImportRule_styleSheet_Getter";
 
 }
@@ -2309,20 +2191,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitCSSKeyframeRule
+@DocsEditable
+@DomName('WebKitCSSKeyframeRule')
 class CssKeyframeRule extends CssRule {
   CssKeyframeRule.internal() : super.internal();
 
-
-  /** @domName WebKitCSSKeyframeRule.keyText */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframeRule.keyText')
   String get keyText native "WebKitCSSKeyframeRule_keyText_Getter";
 
-
-  /** @domName WebKitCSSKeyframeRule.keyText */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframeRule.keyText')
   void set keyText(String value) native "WebKitCSSKeyframeRule_keyText_Setter";
 
-
-  /** @domName WebKitCSSKeyframeRule.style */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframeRule.style')
   CssStyleDeclaration get style native "WebKitCSSKeyframeRule_style_Getter";
 
 }
@@ -2333,32 +2216,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitCSSKeyframesRule
+@DocsEditable
+@DomName('WebKitCSSKeyframesRule')
 class CssKeyframesRule extends CssRule {
   CssKeyframesRule.internal() : super.internal();
 
-
-  /** @domName WebKitCSSKeyframesRule.cssRules */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframesRule.cssRules')
   List<CssRule> get cssRules native "WebKitCSSKeyframesRule_cssRules_Getter";
 
-
-  /** @domName WebKitCSSKeyframesRule.name */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframesRule.name')
   String get name native "WebKitCSSKeyframesRule_name_Getter";
 
-
-  /** @domName WebKitCSSKeyframesRule.name */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframesRule.name')
   void set name(String value) native "WebKitCSSKeyframesRule_name_Setter";
 
-
-  /** @domName WebKitCSSKeyframesRule.deleteRule */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframesRule.deleteRule')
   void deleteRule(String key) native "WebKitCSSKeyframesRule_deleteRule_Callback";
 
-
-  /** @domName WebKitCSSKeyframesRule.findRule */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframesRule.findRule')
   CssKeyframeRule findRule(String key) native "WebKitCSSKeyframesRule_findRule_Callback";
 
-
-  /** @domName WebKitCSSKeyframesRule.insertRule */
+  @DocsEditable
+  @DomName('WebKitCSSKeyframesRule.insertRule')
   void insertRule(String rule) native "WebKitCSSKeyframesRule_insertRule_Callback";
 
 }
@@ -2369,11 +2253,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitCSSMatrix
+@DocsEditable
+@DomName('WebKitCSSMatrix')
 class CssMatrix extends NativeFieldWrapperClass1 {
   CssMatrix.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory CssMatrix([String cssValue]) {
     if (!?cssValue) {
       return CssMatrix._create();
@@ -2382,220 +2267,220 @@
   }
   static CssMatrix _create([String cssValue]) native "WebKitCSSMatrix_constructor_Callback";
 
-
-  /** @domName WebKitCSSMatrix.a */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.a')
   num get a native "WebKitCSSMatrix_a_Getter";
 
-
-  /** @domName WebKitCSSMatrix.a */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.a')
   void set a(num value) native "WebKitCSSMatrix_a_Setter";
 
-
-  /** @domName WebKitCSSMatrix.b */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.b')
   num get b native "WebKitCSSMatrix_b_Getter";
 
-
-  /** @domName WebKitCSSMatrix.b */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.b')
   void set b(num value) native "WebKitCSSMatrix_b_Setter";
 
-
-  /** @domName WebKitCSSMatrix.c */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.c')
   num get c native "WebKitCSSMatrix_c_Getter";
 
-
-  /** @domName WebKitCSSMatrix.c */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.c')
   void set c(num value) native "WebKitCSSMatrix_c_Setter";
 
-
-  /** @domName WebKitCSSMatrix.d */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.d')
   num get d native "WebKitCSSMatrix_d_Getter";
 
-
-  /** @domName WebKitCSSMatrix.d */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.d')
   void set d(num value) native "WebKitCSSMatrix_d_Setter";
 
-
-  /** @domName WebKitCSSMatrix.e */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.e')
   num get e native "WebKitCSSMatrix_e_Getter";
 
-
-  /** @domName WebKitCSSMatrix.e */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.e')
   void set e(num value) native "WebKitCSSMatrix_e_Setter";
 
-
-  /** @domName WebKitCSSMatrix.f */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.f')
   num get f native "WebKitCSSMatrix_f_Getter";
 
-
-  /** @domName WebKitCSSMatrix.f */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.f')
   void set f(num value) native "WebKitCSSMatrix_f_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m11 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m11')
   num get m11 native "WebKitCSSMatrix_m11_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m11 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m11')
   void set m11(num value) native "WebKitCSSMatrix_m11_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m12 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m12')
   num get m12 native "WebKitCSSMatrix_m12_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m12 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m12')
   void set m12(num value) native "WebKitCSSMatrix_m12_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m13 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m13')
   num get m13 native "WebKitCSSMatrix_m13_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m13 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m13')
   void set m13(num value) native "WebKitCSSMatrix_m13_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m14 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m14')
   num get m14 native "WebKitCSSMatrix_m14_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m14 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m14')
   void set m14(num value) native "WebKitCSSMatrix_m14_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m21 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m21')
   num get m21 native "WebKitCSSMatrix_m21_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m21 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m21')
   void set m21(num value) native "WebKitCSSMatrix_m21_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m22 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m22')
   num get m22 native "WebKitCSSMatrix_m22_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m22 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m22')
   void set m22(num value) native "WebKitCSSMatrix_m22_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m23 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m23')
   num get m23 native "WebKitCSSMatrix_m23_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m23 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m23')
   void set m23(num value) native "WebKitCSSMatrix_m23_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m24 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m24')
   num get m24 native "WebKitCSSMatrix_m24_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m24 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m24')
   void set m24(num value) native "WebKitCSSMatrix_m24_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m31 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m31')
   num get m31 native "WebKitCSSMatrix_m31_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m31 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m31')
   void set m31(num value) native "WebKitCSSMatrix_m31_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m32 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m32')
   num get m32 native "WebKitCSSMatrix_m32_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m32 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m32')
   void set m32(num value) native "WebKitCSSMatrix_m32_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m33 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m33')
   num get m33 native "WebKitCSSMatrix_m33_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m33 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m33')
   void set m33(num value) native "WebKitCSSMatrix_m33_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m34 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m34')
   num get m34 native "WebKitCSSMatrix_m34_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m34 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m34')
   void set m34(num value) native "WebKitCSSMatrix_m34_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m41 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m41')
   num get m41 native "WebKitCSSMatrix_m41_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m41 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m41')
   void set m41(num value) native "WebKitCSSMatrix_m41_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m42 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m42')
   num get m42 native "WebKitCSSMatrix_m42_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m42 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m42')
   void set m42(num value) native "WebKitCSSMatrix_m42_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m43 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m43')
   num get m43 native "WebKitCSSMatrix_m43_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m43 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m43')
   void set m43(num value) native "WebKitCSSMatrix_m43_Setter";
 
-
-  /** @domName WebKitCSSMatrix.m44 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m44')
   num get m44 native "WebKitCSSMatrix_m44_Getter";
 
-
-  /** @domName WebKitCSSMatrix.m44 */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.m44')
   void set m44(num value) native "WebKitCSSMatrix_m44_Setter";
 
-
-  /** @domName WebKitCSSMatrix.inverse */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.inverse')
   CssMatrix inverse() native "WebKitCSSMatrix_inverse_Callback";
 
-
-  /** @domName WebKitCSSMatrix.multiply */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.multiply')
   CssMatrix multiply(CssMatrix secondMatrix) native "WebKitCSSMatrix_multiply_Callback";
 
-
-  /** @domName WebKitCSSMatrix.rotate */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.rotate')
   CssMatrix rotate(num rotX, num rotY, num rotZ) native "WebKitCSSMatrix_rotate_Callback";
 
-
-  /** @domName WebKitCSSMatrix.rotateAxisAngle */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.rotateAxisAngle')
   CssMatrix rotateAxisAngle(num x, num y, num z, num angle) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
 
-
-  /** @domName WebKitCSSMatrix.scale */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.scale')
   CssMatrix scale(num scaleX, num scaleY, num scaleZ) native "WebKitCSSMatrix_scale_Callback";
 
-
-  /** @domName WebKitCSSMatrix.setMatrixValue */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.setMatrixValue')
   void setMatrixValue(String string) native "WebKitCSSMatrix_setMatrixValue_Callback";
 
-
-  /** @domName WebKitCSSMatrix.skewX */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.skewX')
   CssMatrix skewX(num angle) native "WebKitCSSMatrix_skewX_Callback";
 
-
-  /** @domName WebKitCSSMatrix.skewY */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.skewY')
   CssMatrix skewY(num angle) native "WebKitCSSMatrix_skewY_Callback";
 
-
-  /** @domName WebKitCSSMatrix.toString */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.toString')
   String toString() native "WebKitCSSMatrix_toString_Callback";
 
-
-  /** @domName WebKitCSSMatrix.translate */
+  @DocsEditable
+  @DomName('WebKitCSSMatrix.translate')
   CssMatrix translate(num x, num y, num z) native "WebKitCSSMatrix_translate_Callback";
 
 }
@@ -2606,24 +2491,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSMediaRule
+@DocsEditable
+@DomName('CSSMediaRule')
 class CssMediaRule extends CssRule {
   CssMediaRule.internal() : super.internal();
 
-
-  /** @domName CSSMediaRule.cssRules */
+  @DocsEditable
+  @DomName('CSSMediaRule.cssRules')
   List<CssRule> get cssRules native "CSSMediaRule_cssRules_Getter";
 
-
-  /** @domName CSSMediaRule.media */
+  @DocsEditable
+  @DomName('CSSMediaRule.media')
   MediaList get media native "CSSMediaRule_media_Getter";
 
-
-  /** @domName CSSMediaRule.deleteRule */
+  @DocsEditable
+  @DomName('CSSMediaRule.deleteRule')
   void deleteRule(int index) native "CSSMediaRule_deleteRule_Callback";
 
-
-  /** @domName CSSMediaRule.insertRule */
+  @DocsEditable
+  @DomName('CSSMediaRule.insertRule')
   int insertRule(String rule, int index) native "CSSMediaRule_insertRule_Callback";
 
 }
@@ -2634,20 +2520,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSPageRule
+@DocsEditable
+@DomName('CSSPageRule')
 class CssPageRule extends CssRule {
   CssPageRule.internal() : super.internal();
 
-
-  /** @domName CSSPageRule.selectorText */
+  @DocsEditable
+  @DomName('CSSPageRule.selectorText')
   String get selectorText native "CSSPageRule_selectorText_Getter";
 
-
-  /** @domName CSSPageRule.selectorText */
+  @DocsEditable
+  @DomName('CSSPageRule.selectorText')
   void set selectorText(String value) native "CSSPageRule_selectorText_Setter";
 
-
-  /** @domName CSSPageRule.style */
+  @DocsEditable
+  @DomName('CSSPageRule.style')
   CssStyleDeclaration get style native "CSSPageRule_style_Getter";
 
 }
@@ -2658,7 +2545,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSPrimitiveValue
+@DocsEditable
+@DomName('CSSPrimitiveValue')
 class CssPrimitiveValue extends CssValue {
   CssPrimitiveValue.internal() : super.internal();
 
@@ -2720,36 +2608,36 @@
 
   static const int CSS_VW = 26;
 
-
-  /** @domName CSSPrimitiveValue.primitiveType */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.primitiveType')
   int get primitiveType native "CSSPrimitiveValue_primitiveType_Getter";
 
-
-  /** @domName CSSPrimitiveValue.getCounterValue */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.getCounterValue')
   Counter getCounterValue() native "CSSPrimitiveValue_getCounterValue_Callback";
 
-
-  /** @domName CSSPrimitiveValue.getFloatValue */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.getFloatValue')
   num getFloatValue(int unitType) native "CSSPrimitiveValue_getFloatValue_Callback";
 
-
-  /** @domName CSSPrimitiveValue.getRGBColorValue */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.getRGBColorValue')
   RgbColor getRgbColorValue() native "CSSPrimitiveValue_getRGBColorValue_Callback";
 
-
-  /** @domName CSSPrimitiveValue.getRectValue */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.getRectValue')
   Rect getRectValue() native "CSSPrimitiveValue_getRectValue_Callback";
 
-
-  /** @domName CSSPrimitiveValue.getStringValue */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.getStringValue')
   String getStringValue() native "CSSPrimitiveValue_getStringValue_Callback";
 
-
-  /** @domName CSSPrimitiveValue.setFloatValue */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.setFloatValue')
   void setFloatValue(int unitType, num floatValue) native "CSSPrimitiveValue_setFloatValue_Callback";
 
-
-  /** @domName CSSPrimitiveValue.setStringValue */
+  @DocsEditable
+  @DomName('CSSPrimitiveValue.setStringValue')
   void setStringValue(int stringType, String stringValue) native "CSSPrimitiveValue_setStringValue_Callback";
 
 }
@@ -2760,7 +2648,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSRule
+@DocsEditable
+@DomName('CSSRule')
 class CssRule extends NativeFieldWrapperClass1 {
   CssRule.internal();
 
@@ -2782,24 +2671,24 @@
 
   static const int WEBKIT_KEYFRAME_RULE = 8;
 
-
-  /** @domName CSSRule.cssText */
+  @DocsEditable
+  @DomName('CSSRule.cssText')
   String get cssText native "CSSRule_cssText_Getter";
 
-
-  /** @domName CSSRule.cssText */
+  @DocsEditable
+  @DomName('CSSRule.cssText')
   void set cssText(String value) native "CSSRule_cssText_Setter";
 
-
-  /** @domName CSSRule.parentRule */
+  @DocsEditable
+  @DomName('CSSRule.parentRule')
   CssRule get parentRule native "CSSRule_parentRule_Getter";
 
-
-  /** @domName CSSRule.parentStyleSheet */
+  @DocsEditable
+  @DomName('CSSRule.parentStyleSheet')
   CssStyleSheet get parentStyleSheet native "CSSRule_parentStyleSheet_Getter";
 
-
-  /** @domName CSSRule.type */
+  @DocsEditable
+  @DomName('CSSRule.type')
   int get type native "CSSRule_type_Getter";
 
 }
@@ -2825,7 +2714,8 @@
   return _cachedBrowserPrefix;
 }
 
-/// @domName CSSStyleDeclaration
+@DocsEditable
+@DomName('CSSStyleDeclaration')
 class CssStyleDeclaration extends NativeFieldWrapperClass1 {
   factory CssStyleDeclaration() => _CssStyleDeclarationFactoryProvider.createCssStyleDeclaration();
   factory CssStyleDeclaration.css(String css) =>
@@ -2833,52 +2723,52 @@
 
   CssStyleDeclaration.internal();
 
-
-  /** @domName CSSStyleDeclaration.cssText */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.cssText')
   String get cssText native "CSSStyleDeclaration_cssText_Getter";
 
-
-  /** @domName CSSStyleDeclaration.cssText */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.cssText')
   void set cssText(String value) native "CSSStyleDeclaration_cssText_Setter";
 
-
-  /** @domName CSSStyleDeclaration.length */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.length')
   int get length native "CSSStyleDeclaration_length_Getter";
 
-
-  /** @domName CSSStyleDeclaration.parentRule */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.parentRule')
   CssRule get parentRule native "CSSStyleDeclaration_parentRule_Getter";
 
-
-  /** @domName CSSStyleDeclaration.getPropertyCSSValue */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.getPropertyCSSValue')
   CssValue getPropertyCssValue(String propertyName) native "CSSStyleDeclaration_getPropertyCSSValue_Callback";
 
-
-  /** @domName CSSStyleDeclaration.getPropertyPriority */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.getPropertyPriority')
   String getPropertyPriority(String propertyName) native "CSSStyleDeclaration_getPropertyPriority_Callback";
 
-
-  /** @domName CSSStyleDeclaration.getPropertyShorthand */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.getPropertyShorthand')
   String getPropertyShorthand(String propertyName) native "CSSStyleDeclaration_getPropertyShorthand_Callback";
 
-
-  /** @domName CSSStyleDeclaration._getPropertyValue */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration._getPropertyValue')
   String _getPropertyValue(String propertyName) native "CSSStyleDeclaration__getPropertyValue_Callback";
 
-
-  /** @domName CSSStyleDeclaration.isPropertyImplicit */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.isPropertyImplicit')
   bool isPropertyImplicit(String propertyName) native "CSSStyleDeclaration_isPropertyImplicit_Callback";
 
-
-  /** @domName CSSStyleDeclaration.item */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.item')
   String item(int index) native "CSSStyleDeclaration_item_Callback";
 
-
-  /** @domName CSSStyleDeclaration.removeProperty */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.removeProperty')
   String removeProperty(String propertyName) native "CSSStyleDeclaration_removeProperty_Callback";
 
-
-  /** @domName CSSStyleDeclaration.setProperty */
+  @DocsEditable
+  @DomName('CSSStyleDeclaration.setProperty')
   void setProperty(String propertyName, String value, [String priority]) native "CSSStyleDeclaration_setProperty_Callback";
 
 
@@ -6046,20 +5936,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSStyleRule
+@DocsEditable
+@DomName('CSSStyleRule')
 class CssStyleRule extends CssRule {
   CssStyleRule.internal() : super.internal();
 
-
-  /** @domName CSSStyleRule.selectorText */
+  @DocsEditable
+  @DomName('CSSStyleRule.selectorText')
   String get selectorText native "CSSStyleRule_selectorText_Getter";
 
-
-  /** @domName CSSStyleRule.selectorText */
+  @DocsEditable
+  @DomName('CSSStyleRule.selectorText')
   void set selectorText(String value) native "CSSStyleRule_selectorText_Setter";
 
-
-  /** @domName CSSStyleRule.style */
+  @DocsEditable
+  @DomName('CSSStyleRule.style')
   CssStyleDeclaration get style native "CSSStyleRule_style_Getter";
 
 }
@@ -6070,47 +5961,48 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSStyleSheet
+@DocsEditable
+@DomName('CSSStyleSheet')
 class CssStyleSheet extends StyleSheet {
   CssStyleSheet.internal() : super.internal();
 
-
-  /** @domName CSSStyleSheet.cssRules */
+  @DocsEditable
+  @DomName('CSSStyleSheet.cssRules')
   List<CssRule> get cssRules native "CSSStyleSheet_cssRules_Getter";
 
-
-  /** @domName CSSStyleSheet.ownerRule */
+  @DocsEditable
+  @DomName('CSSStyleSheet.ownerRule')
   CssRule get ownerRule native "CSSStyleSheet_ownerRule_Getter";
 
-
-  /** @domName CSSStyleSheet.rules */
+  @DocsEditable
+  @DomName('CSSStyleSheet.rules')
   List<CssRule> get rules native "CSSStyleSheet_rules_Getter";
 
-  int addRule(/*DOMString*/ selector, /*DOMString*/ style, [/*unsigned long*/ index]) {
+  int addRule(String selector, String style, [int index]) {
     if (?index) {
       return _addRule_1(selector, style, index);
     }
     return _addRule_2(selector, style);
   }
 
-
-  /** @domName CSSStyleSheet.addRule_1 */
+  @DocsEditable
+  @DomName('CSSStyleSheet.addRule_1')
   int _addRule_1(selector, style, index) native "CSSStyleSheet_addRule_1_Callback";
 
-
-  /** @domName CSSStyleSheet.addRule_2 */
+  @DocsEditable
+  @DomName('CSSStyleSheet.addRule_2')
   int _addRule_2(selector, style) native "CSSStyleSheet_addRule_2_Callback";
 
-
-  /** @domName CSSStyleSheet.deleteRule */
+  @DocsEditable
+  @DomName('CSSStyleSheet.deleteRule')
   void deleteRule(int index) native "CSSStyleSheet_deleteRule_Callback";
 
-
-  /** @domName CSSStyleSheet.insertRule */
+  @DocsEditable
+  @DomName('CSSStyleSheet.insertRule')
   int insertRule(String rule, int index) native "CSSStyleSheet_insertRule_Callback";
 
-
-  /** @domName CSSStyleSheet.removeRule */
+  @DocsEditable
+  @DomName('CSSStyleSheet.removeRule')
   void removeRule(int index) native "CSSStyleSheet_removeRule_Callback";
 
 }
@@ -6121,7 +6013,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitCSSTransformValue
+@DocsEditable
+@DomName('WebKitCSSTransformValue')
 class CssTransformValue extends _CssValueList {
   CssTransformValue.internal() : super.internal();
 
@@ -6167,8 +6060,8 @@
 
   static const int CSS_TRANSLATEZ = 12;
 
-
-  /** @domName WebKitCSSTransformValue.operationType */
+  @DocsEditable
+  @DomName('WebKitCSSTransformValue.operationType')
   int get operationType native "WebKitCSSTransformValue_operationType_Getter";
 
 }
@@ -6179,7 +6072,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSUnknownRule
+@DocsEditable
+@DomName('CSSUnknownRule')
 class CssUnknownRule extends CssRule {
   CssUnknownRule.internal() : super.internal();
 
@@ -6191,7 +6085,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSValue
+@DocsEditable
+@DomName('CSSValue')
 class CssValue extends NativeFieldWrapperClass1 {
   CssValue.internal();
 
@@ -6203,16 +6098,16 @@
 
   static const int CSS_VALUE_LIST = 2;
 
-
-  /** @domName CSSValue.cssText */
+  @DocsEditable
+  @DomName('CSSValue.cssText')
   String get cssText native "CSSValue_cssText_Getter";
 
-
-  /** @domName CSSValue.cssText */
+  @DocsEditable
+  @DomName('CSSValue.cssText')
   void set cssText(String value) native "CSSValue_cssText_Setter";
 
-
-  /** @domName CSSValue.cssValueType */
+  @DocsEditable
+  @DomName('CSSValue.cssValueType')
   int get cssValueType native "CSSValue_cssValueType_Getter";
 
 }
@@ -6223,19 +6118,20 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CustomEvent
+@DocsEditable
+@DomName('CustomEvent')
 class CustomEvent extends Event {
   factory CustomEvent(String type, [bool canBubble = true, bool cancelable = true,
       Object detail]) => _CustomEventFactoryProvider.createCustomEvent(
       type, canBubble, cancelable, detail);
   CustomEvent.internal() : super.internal();
 
-
-  /** @domName CustomEvent.detail */
+  @DocsEditable
+  @DomName('CustomEvent.detail')
   Object get detail native "CustomEvent_detail_Getter";
 
-
-  /** @domName CustomEvent.initCustomEvent */
+  @DocsEditable
+  @DomName('CustomEvent.initCustomEvent')
   void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) native "CustomEvent_initCustomEvent_Callback";
 
 }
@@ -6246,11 +6142,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLDListElement
+@DocsEditable
+@DomName('HTMLDListElement')
 class DListElement extends _Element_Merged {
   DListElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DListElement() => document.$dom_createElement("dl");
 
 }
@@ -6261,7 +6158,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLDataListElement
+@DocsEditable
+@DomName('HTMLDataListElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -6269,14 +6167,14 @@
 class DataListElement extends _Element_Merged {
   DataListElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DataListElement() => document.$dom_createElement("datalist");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLDataListElement.options */
+  @DocsEditable
+  @DomName('HTMLDataListElement.options')
   HtmlCollection get options native "HTMLDataListElement_options_Getter";
 
 }
@@ -6287,28 +6185,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DataTransferItem
+@DocsEditable
+@DomName('DataTransferItem')
 class DataTransferItem extends NativeFieldWrapperClass1 {
   DataTransferItem.internal();
 
-
-  /** @domName DataTransferItem.kind */
+  @DocsEditable
+  @DomName('DataTransferItem.kind')
   String get kind native "DataTransferItem_kind_Getter";
 
-
-  /** @domName DataTransferItem.type */
+  @DocsEditable
+  @DomName('DataTransferItem.type')
   String get type native "DataTransferItem_type_Getter";
 
-
-  /** @domName DataTransferItem.getAsFile */
+  @DocsEditable
+  @DomName('DataTransferItem.getAsFile')
   Blob getAsFile() native "DataTransferItem_getAsFile_Callback";
 
-
-  /** @domName DataTransferItem.getAsString */
+  @DocsEditable
+  @DomName('DataTransferItem.getAsString')
   void getAsString([StringCallback callback]) native "DataTransferItem_getAsString_Callback";
 
-
-  /** @domName DataTransferItem.webkitGetAsEntry */
+  @DocsEditable
+  @DomName('DataTransferItem.webkitGetAsEntry')
   Entry webkitGetAsEntry() native "DataTransferItem_webkitGetAsEntry_Callback";
 
 }
@@ -6319,15 +6218,16 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DataTransferItemList
+@DocsEditable
+@DomName('DataTransferItemList')
 class DataTransferItemList extends NativeFieldWrapperClass1 {
   DataTransferItemList.internal();
 
-
-  /** @domName DataTransferItemList.length */
+  @DocsEditable
+  @DomName('DataTransferItemList.length')
   int get length native "DataTransferItemList_length_Getter";
 
-  void add(data_OR_file, [/*DOMString*/ type]) {
+  void add(data_OR_file, [String type]) {
     if ((data_OR_file is File || data_OR_file == null) && !?type) {
       _add_1(data_OR_file);
       return;
@@ -6339,20 +6239,20 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName DataTransferItemList.add_1 */
+  @DocsEditable
+  @DomName('DataTransferItemList.add_1')
   void _add_1(data_OR_file) native "DataTransferItemList_add_1_Callback";
 
-
-  /** @domName DataTransferItemList.add_2 */
+  @DocsEditable
+  @DomName('DataTransferItemList.add_2')
   void _add_2(data_OR_file, type) native "DataTransferItemList_add_2_Callback";
 
-
-  /** @domName DataTransferItemList.clear */
+  @DocsEditable
+  @DomName('DataTransferItemList.clear')
   void clear() native "DataTransferItemList_clear_Callback";
 
-
-  /** @domName DataTransferItemList.item */
+  @DocsEditable
+  @DomName('DataTransferItemList.item')
   DataTransferItem item(int index) native "DataTransferItemList_item_Callback";
 
 }
@@ -6363,11 +6263,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DataView
+@DocsEditable
+@DomName('DataView')
 class DataView extends ArrayBufferView {
   DataView.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) {
     if (!?byteOffset) {
       return DataView._create(buffer);
@@ -6379,105 +6280,105 @@
   }
   static DataView _create(ArrayBuffer buffer, [int byteOffset, int byteLength]) native "DataView_constructor_Callback";
 
-  num getFloat32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
+  num getFloat32(int byteOffset, {bool littleEndian}) {
     if (?littleEndian) {
       return _getFloat32_1(byteOffset, littleEndian);
     }
     return _getFloat32_2(byteOffset);
   }
 
-
-  /** @domName DataView.getFloat32_1 */
+  @DocsEditable
+  @DomName('DataView.getFloat32_1')
   num _getFloat32_1(byteOffset, littleEndian) native "DataView_getFloat32_1_Callback";
 
-
-  /** @domName DataView.getFloat32_2 */
+  @DocsEditable
+  @DomName('DataView.getFloat32_2')
   num _getFloat32_2(byteOffset) native "DataView_getFloat32_2_Callback";
 
-  num getFloat64(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
+  num getFloat64(int byteOffset, {bool littleEndian}) {
     if (?littleEndian) {
       return _getFloat64_1(byteOffset, littleEndian);
     }
     return _getFloat64_2(byteOffset);
   }
 
-
-  /** @domName DataView.getFloat64_1 */
+  @DocsEditable
+  @DomName('DataView.getFloat64_1')
   num _getFloat64_1(byteOffset, littleEndian) native "DataView_getFloat64_1_Callback";
 
-
-  /** @domName DataView.getFloat64_2 */
+  @DocsEditable
+  @DomName('DataView.getFloat64_2')
   num _getFloat64_2(byteOffset) native "DataView_getFloat64_2_Callback";
 
-  int getInt16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
+  int getInt16(int byteOffset, {bool littleEndian}) {
     if (?littleEndian) {
       return _getInt16_1(byteOffset, littleEndian);
     }
     return _getInt16_2(byteOffset);
   }
 
-
-  /** @domName DataView.getInt16_1 */
+  @DocsEditable
+  @DomName('DataView.getInt16_1')
   int _getInt16_1(byteOffset, littleEndian) native "DataView_getInt16_1_Callback";
 
-
-  /** @domName DataView.getInt16_2 */
+  @DocsEditable
+  @DomName('DataView.getInt16_2')
   int _getInt16_2(byteOffset) native "DataView_getInt16_2_Callback";
 
-  int getInt32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
+  int getInt32(int byteOffset, {bool littleEndian}) {
     if (?littleEndian) {
       return _getInt32_1(byteOffset, littleEndian);
     }
     return _getInt32_2(byteOffset);
   }
 
-
-  /** @domName DataView.getInt32_1 */
+  @DocsEditable
+  @DomName('DataView.getInt32_1')
   int _getInt32_1(byteOffset, littleEndian) native "DataView_getInt32_1_Callback";
 
-
-  /** @domName DataView.getInt32_2 */
+  @DocsEditable
+  @DomName('DataView.getInt32_2')
   int _getInt32_2(byteOffset) native "DataView_getInt32_2_Callback";
 
-
-  /** @domName DataView.getInt8 */
+  @DocsEditable
+  @DomName('DataView.getInt8')
   int getInt8(int byteOffset) native "DataView_getInt8_Callback";
 
-  int getUint16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
+  int getUint16(int byteOffset, {bool littleEndian}) {
     if (?littleEndian) {
       return _getUint16_1(byteOffset, littleEndian);
     }
     return _getUint16_2(byteOffset);
   }
 
-
-  /** @domName DataView.getUint16_1 */
+  @DocsEditable
+  @DomName('DataView.getUint16_1')
   int _getUint16_1(byteOffset, littleEndian) native "DataView_getUint16_1_Callback";
 
-
-  /** @domName DataView.getUint16_2 */
+  @DocsEditable
+  @DomName('DataView.getUint16_2')
   int _getUint16_2(byteOffset) native "DataView_getUint16_2_Callback";
 
-  int getUint32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
+  int getUint32(int byteOffset, {bool littleEndian}) {
     if (?littleEndian) {
       return _getUint32_1(byteOffset, littleEndian);
     }
     return _getUint32_2(byteOffset);
   }
 
-
-  /** @domName DataView.getUint32_1 */
+  @DocsEditable
+  @DomName('DataView.getUint32_1')
   int _getUint32_1(byteOffset, littleEndian) native "DataView_getUint32_1_Callback";
 
-
-  /** @domName DataView.getUint32_2 */
+  @DocsEditable
+  @DomName('DataView.getUint32_2')
   int _getUint32_2(byteOffset) native "DataView_getUint32_2_Callback";
 
-
-  /** @domName DataView.getUint8 */
+  @DocsEditable
+  @DomName('DataView.getUint8')
   int getUint8(int byteOffset) native "DataView_getUint8_Callback";
 
-  void setFloat32(/*unsigned long*/ byteOffset, /*float*/ value, {/*boolean*/ littleEndian}) {
+  void setFloat32(int byteOffset, num value, {bool littleEndian}) {
     if (?littleEndian) {
       _setFloat32_1(byteOffset, value, littleEndian);
       return;
@@ -6485,15 +6386,15 @@
     _setFloat32_2(byteOffset, value);
   }
 
-
-  /** @domName DataView.setFloat32_1 */
+  @DocsEditable
+  @DomName('DataView.setFloat32_1')
   void _setFloat32_1(byteOffset, value, littleEndian) native "DataView_setFloat32_1_Callback";
 
-
-  /** @domName DataView.setFloat32_2 */
+  @DocsEditable
+  @DomName('DataView.setFloat32_2')
   void _setFloat32_2(byteOffset, value) native "DataView_setFloat32_2_Callback";
 
-  void setFloat64(/*unsigned long*/ byteOffset, /*double*/ value, {/*boolean*/ littleEndian}) {
+  void setFloat64(int byteOffset, num value, {bool littleEndian}) {
     if (?littleEndian) {
       _setFloat64_1(byteOffset, value, littleEndian);
       return;
@@ -6501,15 +6402,15 @@
     _setFloat64_2(byteOffset, value);
   }
 
-
-  /** @domName DataView.setFloat64_1 */
+  @DocsEditable
+  @DomName('DataView.setFloat64_1')
   void _setFloat64_1(byteOffset, value, littleEndian) native "DataView_setFloat64_1_Callback";
 
-
-  /** @domName DataView.setFloat64_2 */
+  @DocsEditable
+  @DomName('DataView.setFloat64_2')
   void _setFloat64_2(byteOffset, value) native "DataView_setFloat64_2_Callback";
 
-  void setInt16(/*unsigned long*/ byteOffset, /*short*/ value, {/*boolean*/ littleEndian}) {
+  void setInt16(int byteOffset, int value, {bool littleEndian}) {
     if (?littleEndian) {
       _setInt16_1(byteOffset, value, littleEndian);
       return;
@@ -6517,15 +6418,15 @@
     _setInt16_2(byteOffset, value);
   }
 
-
-  /** @domName DataView.setInt16_1 */
+  @DocsEditable
+  @DomName('DataView.setInt16_1')
   void _setInt16_1(byteOffset, value, littleEndian) native "DataView_setInt16_1_Callback";
 
-
-  /** @domName DataView.setInt16_2 */
+  @DocsEditable
+  @DomName('DataView.setInt16_2')
   void _setInt16_2(byteOffset, value) native "DataView_setInt16_2_Callback";
 
-  void setInt32(/*unsigned long*/ byteOffset, /*long*/ value, {/*boolean*/ littleEndian}) {
+  void setInt32(int byteOffset, int value, {bool littleEndian}) {
     if (?littleEndian) {
       _setInt32_1(byteOffset, value, littleEndian);
       return;
@@ -6533,19 +6434,19 @@
     _setInt32_2(byteOffset, value);
   }
 
-
-  /** @domName DataView.setInt32_1 */
+  @DocsEditable
+  @DomName('DataView.setInt32_1')
   void _setInt32_1(byteOffset, value, littleEndian) native "DataView_setInt32_1_Callback";
 
-
-  /** @domName DataView.setInt32_2 */
+  @DocsEditable
+  @DomName('DataView.setInt32_2')
   void _setInt32_2(byteOffset, value) native "DataView_setInt32_2_Callback";
 
-
-  /** @domName DataView.setInt8 */
+  @DocsEditable
+  @DomName('DataView.setInt8')
   void setInt8(int byteOffset, int value) native "DataView_setInt8_Callback";
 
-  void setUint16(/*unsigned long*/ byteOffset, /*unsigned short*/ value, {/*boolean*/ littleEndian}) {
+  void setUint16(int byteOffset, int value, {bool littleEndian}) {
     if (?littleEndian) {
       _setUint16_1(byteOffset, value, littleEndian);
       return;
@@ -6553,15 +6454,15 @@
     _setUint16_2(byteOffset, value);
   }
 
-
-  /** @domName DataView.setUint16_1 */
+  @DocsEditable
+  @DomName('DataView.setUint16_1')
   void _setUint16_1(byteOffset, value, littleEndian) native "DataView_setUint16_1_Callback";
 
-
-  /** @domName DataView.setUint16_2 */
+  @DocsEditable
+  @DomName('DataView.setUint16_2')
   void _setUint16_2(byteOffset, value) native "DataView_setUint16_2_Callback";
 
-  void setUint32(/*unsigned long*/ byteOffset, /*unsigned long*/ value, {/*boolean*/ littleEndian}) {
+  void setUint32(int byteOffset, int value, {bool littleEndian}) {
     if (?littleEndian) {
       _setUint32_1(byteOffset, value, littleEndian);
       return;
@@ -6569,16 +6470,16 @@
     _setUint32_2(byteOffset, value);
   }
 
-
-  /** @domName DataView.setUint32_1 */
+  @DocsEditable
+  @DomName('DataView.setUint32_1')
   void _setUint32_1(byteOffset, value, littleEndian) native "DataView_setUint32_1_Callback";
 
-
-  /** @domName DataView.setUint32_2 */
+  @DocsEditable
+  @DomName('DataView.setUint32_2')
   void _setUint32_2(byteOffset, value) native "DataView_setUint32_2_Callback";
 
-
-  /** @domName DataView.setUint8 */
+  @DocsEditable
+  @DomName('DataView.setUint8')
   void setUint8(int byteOffset, int value) native "DataView_setUint8_Callback";
 
 }
@@ -6589,24 +6490,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Database
+@DocsEditable
+@DomName('Database')
 class Database extends NativeFieldWrapperClass1 {
   Database.internal();
 
-
-  /** @domName Database.version */
+  @DocsEditable
+  @DomName('Database.version')
   String get version native "Database_version_Getter";
 
-
-  /** @domName Database.changeVersion */
+  @DocsEditable
+  @DomName('Database.changeVersion')
   void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_changeVersion_Callback";
 
-
-  /** @domName Database.readTransaction */
+  @DocsEditable
+  @DomName('Database.readTransaction')
   void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_readTransaction_Callback";
 
-
-  /** @domName Database.transaction */
+  @DocsEditable
+  @DomName('Database.transaction')
   void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_transaction_Callback";
 
 }
@@ -6625,28 +6527,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DatabaseSync
+@DocsEditable
+@DomName('DatabaseSync')
 class DatabaseSync extends NativeFieldWrapperClass1 {
   DatabaseSync.internal();
 
-
-  /** @domName DatabaseSync.lastErrorMessage */
+  @DocsEditable
+  @DomName('DatabaseSync.lastErrorMessage')
   String get lastErrorMessage native "DatabaseSync_lastErrorMessage_Getter";
 
-
-  /** @domName DatabaseSync.version */
+  @DocsEditable
+  @DomName('DatabaseSync.version')
   String get version native "DatabaseSync_version_Getter";
 
-
-  /** @domName DatabaseSync.changeVersion */
+  @DocsEditable
+  @DomName('DatabaseSync.changeVersion')
   void changeVersion(String oldVersion, String newVersion, [SqlTransactionSyncCallback callback]) native "DatabaseSync_changeVersion_Callback";
 
-
-  /** @domName DatabaseSync.readTransaction */
+  @DocsEditable
+  @DomName('DatabaseSync.readTransaction')
   void readTransaction(SqlTransactionSyncCallback callback) native "DatabaseSync_readTransaction_Callback";
 
-
-  /** @domName DatabaseSync.transaction */
+  @DocsEditable
+  @DomName('DatabaseSync.transaction')
   void transaction(SqlTransactionSyncCallback callback) native "DatabaseSync_transaction_Callback";
 
 }
@@ -6657,30 +6560,32 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DedicatedWorkerContext
+@DocsEditable
+@DomName('DedicatedWorkerContext')
 class DedicatedWorkerContext extends WorkerContext {
   DedicatedWorkerContext.internal() : super.internal();
 
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   DedicatedWorkerContextEvents get on =>
     new DedicatedWorkerContextEvents(this);
 
-
-  /** @domName DedicatedWorkerContext.postMessage */
+  @DocsEditable
+  @DomName('DedicatedWorkerContext.postMessage')
   void postMessage(Object message, [List messagePorts]) native "DedicatedWorkerContext_postMessage_Callback";
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class DedicatedWorkerContextEvents extends WorkerContextEvents {
-  /// @docsEditable true
+  @DocsEditable
   DedicatedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6690,25 +6595,26 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLDetailsElement
+@DocsEditable
+@DomName('HTMLDetailsElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 class DetailsElement extends _Element_Merged {
   DetailsElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DetailsElement() => document.$dom_createElement("details");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLDetailsElement.open */
+  @DocsEditable
+  @DomName('HTMLDetailsElement.open')
   bool get open native "HTMLDetailsElement_open_Getter";
 
-
-  /** @domName HTMLDetailsElement.open */
+  @DocsEditable
+  @DomName('HTMLDetailsElement.open')
   void set open(bool value) native "HTMLDetailsElement_open_Setter";
 
 }
@@ -6719,12 +6625,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DeviceMotionEvent
+@DocsEditable
+@DomName('DeviceMotionEvent')
 class DeviceMotionEvent extends Event {
   DeviceMotionEvent.internal() : super.internal();
 
-
-  /** @domName DeviceMotionEvent.interval */
+  @DocsEditable
+  @DomName('DeviceMotionEvent.interval')
   num get interval native "DeviceMotionEvent_interval_Getter";
 
 }
@@ -6735,28 +6642,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DeviceOrientationEvent
+@DocsEditable
+@DomName('DeviceOrientationEvent')
 class DeviceOrientationEvent extends Event {
   DeviceOrientationEvent.internal() : super.internal();
 
-
-  /** @domName DeviceOrientationEvent.absolute */
+  @DocsEditable
+  @DomName('DeviceOrientationEvent.absolute')
   bool get absolute native "DeviceOrientationEvent_absolute_Getter";
 
-
-  /** @domName DeviceOrientationEvent.alpha */
+  @DocsEditable
+  @DomName('DeviceOrientationEvent.alpha')
   num get alpha native "DeviceOrientationEvent_alpha_Getter";
 
-
-  /** @domName DeviceOrientationEvent.beta */
+  @DocsEditable
+  @DomName('DeviceOrientationEvent.beta')
   num get beta native "DeviceOrientationEvent_beta_Getter";
 
-
-  /** @domName DeviceOrientationEvent.gamma */
+  @DocsEditable
+  @DomName('DeviceOrientationEvent.gamma')
   num get gamma native "DeviceOrientationEvent_gamma_Getter";
 
-
-  /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
+  @DocsEditable
+  @DomName('DeviceOrientationEvent.initDeviceOrientationEvent')
   void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
 
 }
@@ -6767,44 +6675,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLDirectoryElement
-class DirectoryElement extends _Element_Merged {
-  DirectoryElement.internal() : super.internal();
-
-
-  /** @domName HTMLDirectoryElement.compact */
-  bool get compact native "HTMLDirectoryElement_compact_Getter";
-
-
-  /** @domName HTMLDirectoryElement.compact */
-  void set compact(bool value) native "HTMLDirectoryElement_compact_Setter";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName DirectoryEntry
+@DocsEditable
+@DomName('DirectoryEntry')
 class DirectoryEntry extends Entry {
   DirectoryEntry.internal() : super.internal();
 
-
-  /** @domName DirectoryEntry.createReader */
+  @DocsEditable
+  @DomName('DirectoryEntry.createReader')
   DirectoryReader createReader() native "DirectoryEntry_createReader_Callback";
 
-
-  /** @domName DirectoryEntry.getDirectory */
+  @DocsEditable
+  @DomName('DirectoryEntry.getDirectory')
   void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) native "DirectoryEntry_getDirectory_Callback";
 
-
-  /** @domName DirectoryEntry.getFile */
+  @DocsEditable
+  @DomName('DirectoryEntry.getFile')
   void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) native "DirectoryEntry_getFile_Callback";
 
-
-  /** @domName DirectoryEntry.removeRecursively */
+  @DocsEditable
+  @DomName('DirectoryEntry.removeRecursively')
   void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]) native "DirectoryEntry_removeRecursively_Callback";
 
 }
@@ -6815,24 +6704,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DirectoryEntrySync
+@DocsEditable
+@DomName('DirectoryEntrySync')
 class DirectoryEntrySync extends EntrySync {
   DirectoryEntrySync.internal() : super.internal();
 
-
-  /** @domName DirectoryEntrySync.createReader */
+  @DocsEditable
+  @DomName('DirectoryEntrySync.createReader')
   DirectoryReaderSync createReader() native "DirectoryEntrySync_createReader_Callback";
 
-
-  /** @domName DirectoryEntrySync.getDirectory */
+  @DocsEditable
+  @DomName('DirectoryEntrySync.getDirectory')
   DirectoryEntrySync getDirectory(String path, Map flags) native "DirectoryEntrySync_getDirectory_Callback";
 
-
-  /** @domName DirectoryEntrySync.getFile */
+  @DocsEditable
+  @DomName('DirectoryEntrySync.getFile')
   FileEntrySync getFile(String path, Map flags) native "DirectoryEntrySync_getFile_Callback";
 
-
-  /** @domName DirectoryEntrySync.removeRecursively */
+  @DocsEditable
+  @DomName('DirectoryEntrySync.removeRecursively')
   void removeRecursively() native "DirectoryEntrySync_removeRecursively_Callback";
 
 }
@@ -6843,12 +6733,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DirectoryReader
+@DocsEditable
+@DomName('DirectoryReader')
 class DirectoryReader extends NativeFieldWrapperClass1 {
   DirectoryReader.internal();
 
-
-  /** @domName DirectoryReader.readEntries */
+  @DocsEditable
+  @DomName('DirectoryReader.readEntries')
   void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]) native "DirectoryReader_readEntries_Callback";
 
 }
@@ -6859,12 +6750,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DirectoryReaderSync
+@DocsEditable
+@DomName('DirectoryReaderSync')
 class DirectoryReaderSync extends NativeFieldWrapperClass1 {
   DirectoryReaderSync.internal();
 
-
-  /** @domName DirectoryReaderSync.readEntries */
+  @DocsEditable
+  @DomName('DirectoryReaderSync.readEntries')
   List<EntrySync> readEntries() native "DirectoryReaderSync_readEntries_Callback";
 
 }
@@ -6875,11 +6767,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLDivElement
+@DocsEditable
+@DomName('HTMLDivElement')
 class DivElement extends _Element_Merged {
   DivElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DivElement() => document.$dom_createElement("div");
 
 }
@@ -6888,7 +6781,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Document
+@DocsEditable
+@DomName('Document')
 /**
  * The base class for all documents.
  *
@@ -6903,413 +6797,324 @@
 
   Document.internal() : super.internal();
 
-  static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
-
-  static const EventStreamProvider<Event> beforeCopyEvent = const EventStreamProvider<Event>('beforecopy');
-
-  static const EventStreamProvider<Event> beforeCutEvent = const EventStreamProvider<Event>('beforecut');
-
-  static const EventStreamProvider<Event> beforePasteEvent = const EventStreamProvider<Event>('beforepaste');
-
-  static const EventStreamProvider<Event> blurEvent = const EventStreamProvider<Event>('blur');
-
-  static const EventStreamProvider<Event> changeEvent = const EventStreamProvider<Event>('change');
-
-  static const EventStreamProvider<MouseEvent> clickEvent = const EventStreamProvider<MouseEvent>('click');
-
-  static const EventStreamProvider<MouseEvent> contextMenuEvent = const EventStreamProvider<MouseEvent>('contextmenu');
-
-  static const EventStreamProvider<Event> copyEvent = const EventStreamProvider<Event>('copy');
-
-  static const EventStreamProvider<Event> cutEvent = const EventStreamProvider<Event>('cut');
-
-  static const EventStreamProvider<Event> doubleClickEvent = const EventStreamProvider<Event>('dblclick');
-
-  static const EventStreamProvider<MouseEvent> dragEvent = const EventStreamProvider<MouseEvent>('drag');
-
-  static const EventStreamProvider<MouseEvent> dragEndEvent = const EventStreamProvider<MouseEvent>('dragend');
-
-  static const EventStreamProvider<MouseEvent> dragEnterEvent = const EventStreamProvider<MouseEvent>('dragenter');
-
-  static const EventStreamProvider<MouseEvent> dragLeaveEvent = const EventStreamProvider<MouseEvent>('dragleave');
-
-  static const EventStreamProvider<MouseEvent> dragOverEvent = const EventStreamProvider<MouseEvent>('dragover');
-
-  static const EventStreamProvider<MouseEvent> dragStartEvent = const EventStreamProvider<MouseEvent>('dragstart');
-
-  static const EventStreamProvider<MouseEvent> dropEvent = const EventStreamProvider<MouseEvent>('drop');
-
-  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
-
-  static const EventStreamProvider<Event> focusEvent = const EventStreamProvider<Event>('focus');
-
-  static const EventStreamProvider<Event> inputEvent = const EventStreamProvider<Event>('input');
-
-  static const EventStreamProvider<Event> invalidEvent = const EventStreamProvider<Event>('invalid');
-
-  static const EventStreamProvider<KeyboardEvent> keyDownEvent = const EventStreamProvider<KeyboardEvent>('keydown');
-
-  static const EventStreamProvider<KeyboardEvent> keyPressEvent = const EventStreamProvider<KeyboardEvent>('keypress');
-
-  static const EventStreamProvider<KeyboardEvent> keyUpEvent = const EventStreamProvider<KeyboardEvent>('keyup');
-
-  static const EventStreamProvider<Event> loadEvent = const EventStreamProvider<Event>('load');
-
-  static const EventStreamProvider<MouseEvent> mouseDownEvent = const EventStreamProvider<MouseEvent>('mousedown');
-
-  static const EventStreamProvider<MouseEvent> mouseMoveEvent = const EventStreamProvider<MouseEvent>('mousemove');
-
-  static const EventStreamProvider<MouseEvent> mouseOutEvent = const EventStreamProvider<MouseEvent>('mouseout');
-
-  static const EventStreamProvider<MouseEvent> mouseOverEvent = const EventStreamProvider<MouseEvent>('mouseover');
-
-  static const EventStreamProvider<MouseEvent> mouseUpEvent = const EventStreamProvider<MouseEvent>('mouseup');
-
-  static const EventStreamProvider<WheelEvent> mouseWheelEvent = const EventStreamProvider<WheelEvent>('mousewheel');
-
-  static const EventStreamProvider<Event> pasteEvent = const EventStreamProvider<Event>('paste');
-
   static const EventStreamProvider<Event> readyStateChangeEvent = const EventStreamProvider<Event>('readystatechange');
 
-  static const EventStreamProvider<Event> resetEvent = const EventStreamProvider<Event>('reset');
-
-  static const EventStreamProvider<Event> scrollEvent = const EventStreamProvider<Event>('scroll');
-
-  static const EventStreamProvider<Event> searchEvent = const EventStreamProvider<Event>('search');
-
-  static const EventStreamProvider<Event> selectEvent = const EventStreamProvider<Event>('select');
-
   static const EventStreamProvider<Event> selectionChangeEvent = const EventStreamProvider<Event>('selectionchange');
 
-  static const EventStreamProvider<Event> selectStartEvent = const EventStreamProvider<Event>('selectstart');
-
-  static const EventStreamProvider<Event> submitEvent = const EventStreamProvider<Event>('submit');
-
-  static const EventStreamProvider<TouchEvent> touchCancelEvent = const EventStreamProvider<TouchEvent>('touchcancel');
-
-  static const EventStreamProvider<TouchEvent> touchEndEvent = const EventStreamProvider<TouchEvent>('touchend');
-
-  static const EventStreamProvider<TouchEvent> touchMoveEvent = const EventStreamProvider<TouchEvent>('touchmove');
-
-  static const EventStreamProvider<TouchEvent> touchStartEvent = const EventStreamProvider<TouchEvent>('touchstart');
-
-  static const EventStreamProvider<Event> fullscreenChangeEvent = const EventStreamProvider<Event>('webkitfullscreenchange');
-
-  static const EventStreamProvider<Event> fullscreenErrorEvent = const EventStreamProvider<Event>('webkitfullscreenerror');
-
   static const EventStreamProvider<Event> pointerLockChangeEvent = const EventStreamProvider<Event>('webkitpointerlockchange');
 
   static const EventStreamProvider<Event> pointerLockErrorEvent = const EventStreamProvider<Event>('webkitpointerlockerror');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   DocumentEvents get on =>
     new DocumentEvents(this);
 
-
-  /** @domName Document.body */
+  @DocsEditable
+  @DomName('Document.body')
   Element get $dom_body native "Document_body_Getter";
 
-
-  /** @domName Document.body */
+  @DocsEditable
+  @DomName('Document.body')
   void set $dom_body(Element value) native "Document_body_Setter";
 
-
-  /** @domName Document.charset */
+  @DocsEditable
+  @DomName('Document.charset')
   String get charset native "Document_charset_Getter";
 
-
-  /** @domName Document.charset */
+  @DocsEditable
+  @DomName('Document.charset')
   void set charset(String value) native "Document_charset_Setter";
 
-
-  /** @domName Document.cookie */
+  @DocsEditable
+  @DomName('Document.cookie')
   String get cookie native "Document_cookie_Getter";
 
-
-  /** @domName Document.cookie */
+  @DocsEditable
+  @DomName('Document.cookie')
   void set cookie(String value) native "Document_cookie_Setter";
 
-
-  /** @domName Document.defaultView */
+  @DocsEditable
+  @DomName('Document.defaultView')
   WindowBase get window native "Document_defaultView_Getter";
 
-
-  /** @domName Document.documentElement */
+  @DocsEditable
+  @DomName('Document.documentElement')
   Element get documentElement native "Document_documentElement_Getter";
 
-
-  /** @domName Document.domain */
+  @DocsEditable
+  @DomName('Document.domain')
   String get domain native "Document_domain_Getter";
 
-
-  /** @domName Document.head */
+  @DocsEditable
+  @DomName('Document.head')
   HeadElement get $dom_head native "Document_head_Getter";
 
-
-  /** @domName Document.implementation */
+  @DocsEditable
+  @DomName('Document.implementation')
   DomImplementation get implementation native "Document_implementation_Getter";
 
-
-  /** @domName Document.lastModified */
+  @DocsEditable
+  @DomName('Document.lastModified')
   String get $dom_lastModified native "Document_lastModified_Getter";
 
-
-  /** @domName Document.preferredStylesheetSet */
+  @DocsEditable
+  @DomName('Document.preferredStylesheetSet')
   String get $dom_preferredStylesheetSet native "Document_preferredStylesheetSet_Getter";
 
-
-  /** @domName Document.readyState */
+  @DocsEditable
+  @DomName('Document.readyState')
   String get readyState native "Document_readyState_Getter";
 
-
-  /** @domName Document.referrer */
+  @DocsEditable
+  @DomName('Document.referrer')
   String get $dom_referrer native "Document_referrer_Getter";
 
-
-  /** @domName Document.selectedStylesheetSet */
+  @DocsEditable
+  @DomName('Document.selectedStylesheetSet')
   String get $dom_selectedStylesheetSet native "Document_selectedStylesheetSet_Getter";
 
-
-  /** @domName Document.selectedStylesheetSet */
+  @DocsEditable
+  @DomName('Document.selectedStylesheetSet')
   void set $dom_selectedStylesheetSet(String value) native "Document_selectedStylesheetSet_Setter";
 
-
-  /** @domName Document.styleSheets */
+  @DocsEditable
+  @DomName('Document.styleSheets')
   List<StyleSheet> get $dom_styleSheets native "Document_styleSheets_Getter";
 
-
-  /** @domName Document.title */
+  @DocsEditable
+  @DomName('Document.title')
   String get $dom_title native "Document_title_Getter";
 
-
-  /** @domName Document.title */
+  @DocsEditable
+  @DomName('Document.title')
   void set $dom_title(String value) native "Document_title_Setter";
 
-
-  /** @domName Document.webkitFullscreenElement */
+  @DocsEditable
+  @DomName('Document.webkitFullscreenElement')
   Element get $dom_webkitFullscreenElement native "Document_webkitFullscreenElement_Getter";
 
-
-  /** @domName Document.webkitFullscreenEnabled */
+  @DocsEditable
+  @DomName('Document.webkitFullscreenEnabled')
   bool get $dom_webkitFullscreenEnabled native "Document_webkitFullscreenEnabled_Getter";
 
-
-  /** @domName Document.webkitHidden */
+  @DocsEditable
+  @DomName('Document.webkitHidden')
   bool get $dom_webkitHidden native "Document_webkitHidden_Getter";
 
-
-  /** @domName Document.webkitIsFullScreen */
+  @DocsEditable
+  @DomName('Document.webkitIsFullScreen')
   bool get $dom_webkitIsFullScreen native "Document_webkitIsFullScreen_Getter";
 
-
-  /** @domName Document.webkitPointerLockElement */
+  @DocsEditable
+  @DomName('Document.webkitPointerLockElement')
   Element get $dom_webkitPointerLockElement native "Document_webkitPointerLockElement_Getter";
 
-
-  /** @domName Document.webkitVisibilityState */
+  @DocsEditable
+  @DomName('Document.webkitVisibilityState')
   String get $dom_webkitVisibilityState native "Document_webkitVisibilityState_Getter";
 
-
-  /** @domName Document.caretRangeFromPoint */
+  @DocsEditable
+  @DomName('Document.caretRangeFromPoint')
   Range $dom_caretRangeFromPoint(int x, int y) native "Document_caretRangeFromPoint_Callback";
 
-
-  /** @domName Document.createCDATASection */
+  @DocsEditable
+  @DomName('Document.createCDATASection')
   CDataSection createCDataSection(String data) native "Document_createCDATASection_Callback";
 
-
-  /** @domName Document.createDocumentFragment */
+  @DocsEditable
+  @DomName('Document.createDocumentFragment')
   DocumentFragment createDocumentFragment() native "Document_createDocumentFragment_Callback";
 
-
-  /** @domName Document.createElement */
+  @DocsEditable
+  @DomName('Document.createElement')
   Element $dom_createElement(String tagName) native "Document_createElement_Callback";
 
-
-  /** @domName Document.createElementNS */
+  @DocsEditable
+  @DomName('Document.createElementNS')
   Element $dom_createElementNS(String namespaceURI, String qualifiedName) native "Document_createElementNS_Callback";
 
-
-  /** @domName Document.createEvent */
+  @DocsEditable
+  @DomName('Document.createEvent')
   Event $dom_createEvent(String eventType) native "Document_createEvent_Callback";
 
-
-  /** @domName Document.createRange */
+  @DocsEditable
+  @DomName('Document.createRange')
   Range $dom_createRange() native "Document_createRange_Callback";
 
-
-  /** @domName Document.createTextNode */
+  @DocsEditable
+  @DomName('Document.createTextNode')
   Text $dom_createTextNode(String data) native "Document_createTextNode_Callback";
 
-
-  /** @domName Document.createTouch */
+  @DocsEditable
+  @DomName('Document.createTouch')
   Touch $dom_createTouch(Window window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) native "Document_createTouch_Callback";
 
-
-  /** @domName Document.createTouchList */
+  @DocsEditable
+  @DomName('Document.createTouchList')
   TouchList $dom_createTouchList() native "Document_createTouchList_Callback";
 
-
-  /** @domName Document.elementFromPoint */
+  @DocsEditable
+  @DomName('Document.elementFromPoint')
   Element $dom_elementFromPoint(int x, int y) native "Document_elementFromPoint_Callback";
 
-
-  /** @domName Document.execCommand */
+  @DocsEditable
+  @DomName('Document.execCommand')
   bool execCommand(String command, bool userInterface, String value) native "Document_execCommand_Callback";
 
-
-  /** @domName Document.getCSSCanvasContext */
+  @DocsEditable
+  @DomName('Document.getCSSCanvasContext')
   CanvasRenderingContext $dom_getCssCanvasContext(String contextId, String name, int width, int height) native "Document_getCSSCanvasContext_Callback";
 
-
-  /** @domName Document.getElementById */
+  @DocsEditable
+  @DomName('Document.getElementById')
   Element $dom_getElementById(String elementId) native "Document_getElementById_Callback";
 
-
-  /** @domName Document.getElementsByClassName */
+  @DocsEditable
+  @DomName('Document.getElementsByClassName')
   List<Node> $dom_getElementsByClassName(String tagname) native "Document_getElementsByClassName_Callback";
 
-
-  /** @domName Document.getElementsByName */
+  @DocsEditable
+  @DomName('Document.getElementsByName')
   List<Node> $dom_getElementsByName(String elementName) native "Document_getElementsByName_Callback";
 
-
-  /** @domName Document.getElementsByTagName */
+  @DocsEditable
+  @DomName('Document.getElementsByTagName')
   List<Node> $dom_getElementsByTagName(String tagname) native "Document_getElementsByTagName_Callback";
 
-
-  /** @domName Document.queryCommandEnabled */
+  @DocsEditable
+  @DomName('Document.queryCommandEnabled')
   bool queryCommandEnabled(String command) native "Document_queryCommandEnabled_Callback";
 
-
-  /** @domName Document.queryCommandIndeterm */
+  @DocsEditable
+  @DomName('Document.queryCommandIndeterm')
   bool queryCommandIndeterm(String command) native "Document_queryCommandIndeterm_Callback";
 
-
-  /** @domName Document.queryCommandState */
+  @DocsEditable
+  @DomName('Document.queryCommandState')
   bool queryCommandState(String command) native "Document_queryCommandState_Callback";
 
-
-  /** @domName Document.queryCommandSupported */
+  @DocsEditable
+  @DomName('Document.queryCommandSupported')
   bool queryCommandSupported(String command) native "Document_queryCommandSupported_Callback";
 
-
-  /** @domName Document.queryCommandValue */
+  @DocsEditable
+  @DomName('Document.queryCommandValue')
   String queryCommandValue(String command) native "Document_queryCommandValue_Callback";
 
-
-  /** @domName Document.querySelector */
+  @DocsEditable
+  @DomName('Document.querySelector')
   Element $dom_querySelector(String selectors) native "Document_querySelector_Callback";
 
-
-  /** @domName Document.querySelectorAll */
+  @DocsEditable
+  @DomName('Document.querySelectorAll')
   List<Node> $dom_querySelectorAll(String selectors) native "Document_querySelectorAll_Callback";
 
-
-  /** @domName Document.webkitCancelFullScreen */
+  @DocsEditable
+  @DomName('Document.webkitCancelFullScreen')
   void $dom_webkitCancelFullScreen() native "Document_webkitCancelFullScreen_Callback";
 
-
-  /** @domName Document.webkitExitFullscreen */
+  @DocsEditable
+  @DomName('Document.webkitExitFullscreen')
   void $dom_webkitExitFullscreen() native "Document_webkitExitFullscreen_Callback";
 
-
-  /** @domName Document.webkitExitPointerLock */
+  @DocsEditable
+  @DomName('Document.webkitExitPointerLock')
   void $dom_webkitExitPointerLock() native "Document_webkitExitPointerLock_Callback";
 
-  Stream<Event> get onAbort => abortEvent.forTarget(this);
+  Stream<Event> get onAbort => Element.abortEvent.forTarget(this);
 
-  Stream<Event> get onBeforeCopy => beforeCopyEvent.forTarget(this);
+  Stream<Event> get onBeforeCopy => Element.beforeCopyEvent.forTarget(this);
 
-  Stream<Event> get onBeforeCut => beforeCutEvent.forTarget(this);
+  Stream<Event> get onBeforeCut => Element.beforeCutEvent.forTarget(this);
 
-  Stream<Event> get onBeforePaste => beforePasteEvent.forTarget(this);
+  Stream<Event> get onBeforePaste => Element.beforePasteEvent.forTarget(this);
 
-  Stream<Event> get onBlur => blurEvent.forTarget(this);
+  Stream<Event> get onBlur => Element.blurEvent.forTarget(this);
 
-  Stream<Event> get onChange => changeEvent.forTarget(this);
+  Stream<Event> get onChange => Element.changeEvent.forTarget(this);
 
-  Stream<MouseEvent> get onClick => clickEvent.forTarget(this);
+  Stream<MouseEvent> get onClick => Element.clickEvent.forTarget(this);
 
-  Stream<MouseEvent> get onContextMenu => contextMenuEvent.forTarget(this);
+  Stream<MouseEvent> get onContextMenu => Element.contextMenuEvent.forTarget(this);
 
-  Stream<Event> get onCopy => copyEvent.forTarget(this);
+  Stream<Event> get onCopy => Element.copyEvent.forTarget(this);
 
-  Stream<Event> get onCut => cutEvent.forTarget(this);
+  Stream<Event> get onCut => Element.cutEvent.forTarget(this);
 
-  Stream<Event> get onDoubleClick => doubleClickEvent.forTarget(this);
+  Stream<Event> get onDoubleClick => Element.doubleClickEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrag => dragEvent.forTarget(this);
+  Stream<MouseEvent> get onDrag => Element.dragEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnd => dragEndEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnd => Element.dragEndEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnter => dragEnterEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnter => Element.dragEnterEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragLeave => dragLeaveEvent.forTarget(this);
+  Stream<MouseEvent> get onDragLeave => Element.dragLeaveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragOver => dragOverEvent.forTarget(this);
+  Stream<MouseEvent> get onDragOver => Element.dragOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragStart => dragStartEvent.forTarget(this);
+  Stream<MouseEvent> get onDragStart => Element.dragStartEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrop => dropEvent.forTarget(this);
+  Stream<MouseEvent> get onDrop => Element.dropEvent.forTarget(this);
 
-  Stream<Event> get onError => errorEvent.forTarget(this);
+  Stream<Event> get onError => Element.errorEvent.forTarget(this);
 
-  Stream<Event> get onFocus => focusEvent.forTarget(this);
+  Stream<Event> get onFocus => Element.focusEvent.forTarget(this);
 
-  Stream<Event> get onInput => inputEvent.forTarget(this);
+  Stream<Event> get onInput => Element.inputEvent.forTarget(this);
 
-  Stream<Event> get onInvalid => invalidEvent.forTarget(this);
+  Stream<Event> get onInvalid => Element.invalidEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyDown => keyDownEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyDown => Element.keyDownEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyPress => keyPressEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyPress => Element.keyPressEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyUp => keyUpEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyUp => Element.keyUpEvent.forTarget(this);
 
-  Stream<Event> get onLoad => loadEvent.forTarget(this);
+  Stream<Event> get onLoad => Element.loadEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseDown => mouseDownEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseDown => Element.mouseDownEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseMove => mouseMoveEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseMove => Element.mouseMoveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOut => mouseOutEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOut => Element.mouseOutEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOver => mouseOverEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOver => Element.mouseOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseUp => Element.mouseUpEvent.forTarget(this);
 
-  Stream<WheelEvent> get onMouseWheel => mouseWheelEvent.forTarget(this);
+  Stream<WheelEvent> get onMouseWheel => Element.mouseWheelEvent.forTarget(this);
 
-  Stream<Event> get onPaste => pasteEvent.forTarget(this);
+  Stream<Event> get onPaste => Element.pasteEvent.forTarget(this);
 
   Stream<Event> get onReadyStateChange => readyStateChangeEvent.forTarget(this);
 
-  Stream<Event> get onReset => resetEvent.forTarget(this);
+  Stream<Event> get onReset => Element.resetEvent.forTarget(this);
 
-  Stream<Event> get onScroll => scrollEvent.forTarget(this);
+  Stream<Event> get onScroll => Element.scrollEvent.forTarget(this);
 
-  Stream<Event> get onSearch => searchEvent.forTarget(this);
+  Stream<Event> get onSearch => Element.searchEvent.forTarget(this);
 
-  Stream<Event> get onSelect => selectEvent.forTarget(this);
+  Stream<Event> get onSelect => Element.selectEvent.forTarget(this);
 
   Stream<Event> get onSelectionChange => selectionChangeEvent.forTarget(this);
 
-  Stream<Event> get onSelectStart => selectStartEvent.forTarget(this);
+  Stream<Event> get onSelectStart => Element.selectStartEvent.forTarget(this);
 
-  Stream<Event> get onSubmit => submitEvent.forTarget(this);
+  Stream<Event> get onSubmit => Element.submitEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchCancel => touchCancelEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchCancel => Element.touchCancelEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchEnd => touchEndEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchEnd => Element.touchEndEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchMove => touchMoveEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchStart => touchStartEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchStart => Element.touchStartEvent.forTarget(this);
 
-  Stream<Event> get onFullscreenChange => fullscreenChangeEvent.forTarget(this);
+  Stream<Event> get onFullscreenChange => Element.fullscreenChangeEvent.forTarget(this);
 
-  Stream<Event> get onFullscreenError => fullscreenErrorEvent.forTarget(this);
+  Stream<Event> get onFullscreenError => Element.fullscreenErrorEvent.forTarget(this);
 
   Stream<Event> get onPointerLockChange => pointerLockChangeEvent.forTarget(this);
 
@@ -7378,21 +7183,21 @@
   }
 }
 
-/// @docsEditable true
+@DocsEditable
 class DocumentEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   DocumentEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get readyStateChange => this['readystatechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get selectionChange => this['selectionchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pointerLockChange => this['webkitpointerlockchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pointerLockError => this['webkitpointerlockerror'];
 }
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
@@ -7415,7 +7220,8 @@
   bool get frozen => true;
 }
 
-/// @domName DocumentFragment
+@DocsEditable
+@DomName('DocumentFragment')
 class DocumentFragment extends Node {
   factory DocumentFragment() => _DocumentFragmentFactoryProvider.createDocumentFragment();
 
@@ -7661,16 +7467,17 @@
 
   DocumentFragment.internal() : super.internal();
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ElementEvents get on =>
     new ElementEvents(this);
 
-
-  /** @domName DocumentFragment.querySelector */
+  @DocsEditable
+  @DomName('DocumentFragment.querySelector')
   Element $dom_querySelector(String selectors) native "DocumentFragment_querySelector_Callback";
 
-
-  /** @domName DocumentFragment.querySelectorAll */
+  @DocsEditable
+  @DomName('DocumentFragment.querySelectorAll')
   List<Node> $dom_querySelectorAll(String selectors) native "DocumentFragment_querySelectorAll_Callback";
 
 }
@@ -7681,38 +7488,11 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DocumentType
+@DocsEditable
+@DomName('DocumentType')
 class DocumentType extends Node {
   DocumentType.internal() : super.internal();
 
-
-  /** @domName DocumentType.entities */
-  NamedNodeMap get entities native "DocumentType_entities_Getter";
-
-
-  /** @domName DocumentType.internalSubset */
-  String get internalSubset native "DocumentType_internalSubset_Getter";
-
-
-  /** @domName DocumentType.name */
-  String get name native "DocumentType_name_Getter";
-
-
-  /** @domName DocumentType.notations */
-  NamedNodeMap get notations native "DocumentType_notations_Getter";
-
-
-  /** @domName DocumentType.publicId */
-  String get publicId native "DocumentType_publicId_Getter";
-
-
-  /** @domName DocumentType.systemId */
-  String get systemId native "DocumentType_systemId_Getter";
-
-
-  /** @domName DocumentType.remove */
-  void remove() native "DocumentType_remove_Callback";
-
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -7721,90 +7501,58 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMError
+@DocsEditable
+@DomName('DOMError')
 class DomError extends NativeFieldWrapperClass1 {
   DomError.internal();
 
-
-  /** @domName DOMError.name */
+  @DocsEditable
+  @DomName('DOMError.name')
   String get name native "DOMError_name_Getter";
 
 }
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
-// WARNING: Do not edit - generated code.
-
 
 /// @domName DOMException
 class DomException extends NativeFieldWrapperClass1 {
+
+  static const String INDEX_SIZE = 'IndexSizeError';
+  static const String HIERARCHY_REQUEST = 'HierarchyRequestError';
+  static const String WRONG_DOCUMENT = 'WrongDocumentError';
+  static const String INVALID_CHARACTER = 'InvalidCharacterError';
+  static const String NO_MODIFICATION_ALLOWED = 'NoModificationAllowedError';
+  static const String NOT_FOUND = 'NotFoundError';
+  static const String NOT_SUPPORTED = 'NotSupportedError';
+  static const String INVALID_STATE = 'InvalidStateError';
+  static const String SYNTAX = 'SyntaxError';
+  static const String INVALID_MODIFICATION = 'InvalidModificationError';
+  static const String NAMESPACE = 'NamespaceError';
+  static const String INVALID_ACCESS = 'InvalidAccessError';
+  static const String TYPE_MISMATCH = 'TypeMismatchError';
+  static const String SECURITY = 'SecurityError';
+  static const String NETWORK = 'NetworkError';
+  static const String ABORT = 'AbortError';
+  static const String URL_MISMATCH = 'URLMismatchError';
+  static const String QUOTA_EXCEEDED = 'QuotaExceededError';
+  static const String TIMEOUT = 'TimeoutError';
+  static const String INVALID_NODE_TYPE = 'InvalidNodeTypeError';
+  static const String DATA_CLONE = 'DataCloneError';
+
   DomException.internal();
 
-  static const int ABORT_ERR = 20;
-
-  static const int DATA_CLONE_ERR = 25;
-
-  static const int DOMSTRING_SIZE_ERR = 2;
-
-  static const int HIERARCHY_REQUEST_ERR = 3;
-
-  static const int INDEX_SIZE_ERR = 1;
-
-  static const int INUSE_ATTRIBUTE_ERR = 10;
-
-  static const int INVALID_ACCESS_ERR = 15;
-
-  static const int INVALID_CHARACTER_ERR = 5;
-
-  static const int INVALID_MODIFICATION_ERR = 13;
-
-  static const int INVALID_NODE_TYPE_ERR = 24;
-
-  static const int INVALID_STATE_ERR = 11;
-
-  static const int NAMESPACE_ERR = 14;
-
-  static const int NETWORK_ERR = 19;
-
-  static const int NOT_FOUND_ERR = 8;
-
-  static const int NOT_SUPPORTED_ERR = 9;
-
-  static const int NO_DATA_ALLOWED_ERR = 6;
-
-  static const int NO_MODIFICATION_ALLOWED_ERR = 7;
-
-  static const int QUOTA_EXCEEDED_ERR = 22;
-
-  static const int SECURITY_ERR = 18;
-
-  static const int SYNTAX_ERR = 12;
-
-  static const int TIMEOUT_ERR = 23;
-
-  static const int TYPE_MISMATCH_ERR = 17;
-
-  static const int URL_MISMATCH_ERR = 21;
-
-  static const int VALIDATION_ERR = 16;
-
-  static const int WRONG_DOCUMENT_ERR = 4;
-
-
-  /** @domName DOMCoreException.code */
-  int get code native "DOMCoreException_code_Getter";
-
-
-  /** @domName DOMCoreException.message */
+  @DocsEditable
+  @DomName('DOMCoreException.message')
   String get message native "DOMCoreException_message_Getter";
 
-
-  /** @domName DOMCoreException.name */
+  @DocsEditable
+  @DomName('DOMCoreException.name')
   String get name native "DOMCoreException_name_Getter";
 
-
-  /** @domName DOMCoreException.toString */
+  @DocsEditable
+  @DomName('DOMCoreException.toString')
   String toString() native "DOMCoreException_toString_Callback";
 
 }
@@ -7815,28 +7563,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMImplementation
+@DocsEditable
+@DomName('DOMImplementation')
 class DomImplementation extends NativeFieldWrapperClass1 {
   DomImplementation.internal();
 
-
-  /** @domName DOMImplementation.createCSSStyleSheet */
+  @DocsEditable
+  @DomName('DOMImplementation.createCSSStyleSheet')
   CssStyleSheet createCssStyleSheet(String title, String media) native "DOMImplementation_createCSSStyleSheet_Callback";
 
-
-  /** @domName DOMImplementation.createDocument */
+  @DocsEditable
+  @DomName('DOMImplementation.createDocument')
   Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype) native "DOMImplementation_createDocument_Callback";
 
-
-  /** @domName DOMImplementation.createDocumentType */
+  @DocsEditable
+  @DomName('DOMImplementation.createDocumentType')
   DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) native "DOMImplementation_createDocumentType_Callback";
 
-
-  /** @domName DOMImplementation.createHTMLDocument */
+  @DocsEditable
+  @DomName('DOMImplementation.createHTMLDocument')
   HtmlDocument createHtmlDocument(String title) native "DOMImplementation_createHTMLDocument_Callback";
 
-
-  /** @domName DOMImplementation.hasFeature */
+  @DocsEditable
+  @DomName('DOMImplementation.hasFeature')
   bool hasFeature(String feature, String version) native "DOMImplementation_hasFeature_Callback";
 
 }
@@ -7847,24 +7596,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MimeType
+@DocsEditable
+@DomName('MimeType')
 class DomMimeType extends NativeFieldWrapperClass1 {
   DomMimeType.internal();
 
-
-  /** @domName DOMMimeType.description */
+  @DocsEditable
+  @DomName('DOMMimeType.description')
   String get description native "DOMMimeType_description_Getter";
 
-
-  /** @domName DOMMimeType.enabledPlugin */
+  @DocsEditable
+  @DomName('DOMMimeType.enabledPlugin')
   DomPlugin get enabledPlugin native "DOMMimeType_enabledPlugin_Getter";
 
-
-  /** @domName DOMMimeType.suffixes */
+  @DocsEditable
+  @DomName('DOMMimeType.suffixes')
   String get suffixes native "DOMMimeType_suffixes_Getter";
 
-
-  /** @domName DOMMimeType.type */
+  @DocsEditable
+  @DomName('DOMMimeType.type')
   String get type native "DOMMimeType_type_Getter";
 
 }
@@ -7875,12 +7625,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MimeTypeArray
+@DocsEditable
+@DomName('MimeTypeArray')
 class DomMimeTypeArray extends NativeFieldWrapperClass1 implements List<DomMimeType> {
   DomMimeTypeArray.internal();
 
-
-  /** @domName DOMMimeTypeArray.length */
+  @DocsEditable
+  @DomName('DOMMimeTypeArray.length')
   int get length native "DOMMimeTypeArray_length_Getter";
 
   DomMimeType operator[](int index) native "DOMMimeTypeArray_item_Callback";
@@ -7901,50 +7652,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, DomMimeType)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(DomMimeType element) => Collections.contains(this, element);
+  bool contains(DomMimeType element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(DomMimeType element)) => Collections.forEach(this, f);
+  void forEach(void f(DomMimeType element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(DomMimeType element)) => new MappedList<DomMimeType, dynamic>(this, f);
+  List mappedBy(f(DomMimeType element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<DomMimeType> where(bool f(DomMimeType element)) => new WhereIterable<DomMimeType>(this, f);
+  Iterable<DomMimeType> where(bool f(DomMimeType element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(DomMimeType element)) => Collections.every(this, f);
+  bool every(bool f(DomMimeType element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(DomMimeType element)) => Collections.any(this, f);
+  bool any(bool f(DomMimeType element)) => IterableMixinWorkaround.any(this, f);
 
   List<DomMimeType> toList() => new List<DomMimeType>.from(this);
   Set<DomMimeType> toSet() => new Set<DomMimeType>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<DomMimeType> take(int n) => new ListView<DomMimeType>(this, 0, n);
+  List<DomMimeType> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<DomMimeType> takeWhile(bool test(DomMimeType value)) {
-    return new TakeWhileIterable<DomMimeType>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<DomMimeType> skip(int n) => new ListView<DomMimeType>(this, n, null);
+  List<DomMimeType> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<DomMimeType> skipWhile(bool test(DomMimeType value)) {
-    return new SkipWhileIterable<DomMimeType>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   DomMimeType firstMatching(bool test(DomMimeType value), { DomMimeType orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   DomMimeType lastMatching(bool test(DomMimeType value), {DomMimeType orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   DomMimeType singleMatching(bool test(DomMimeType value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   DomMimeType elementAt(int index) {
@@ -8002,16 +7753,36 @@
     throw new StateError("More than one element");
   }
 
-  DomMimeType min([int compare(DomMimeType a, DomMimeType b)]) => Collections.min(this, compare);
+  DomMimeType min([int compare(DomMimeType a, DomMimeType b)]) => IterableMixinWorkaround.min(this, compare);
 
-  DomMimeType max([int compare(DomMimeType a, DomMimeType b)]) => Collections.max(this, compare);
+  DomMimeType max([int compare(DomMimeType a, DomMimeType b)]) => IterableMixinWorkaround.max(this, compare);
 
   DomMimeType removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   DomMimeType removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(DomMimeType element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(DomMimeType element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DomMimeType> from, [int startFrom]) {
@@ -8031,12 +7802,12 @@
 
   // -- end List<DomMimeType> mixins.
 
-
-  /** @domName DOMMimeTypeArray.item */
+  @DocsEditable
+  @DomName('DOMMimeTypeArray.item')
   DomMimeType item(int index) native "DOMMimeTypeArray_item_Callback";
 
-
-  /** @domName DOMMimeTypeArray.namedItem */
+  @DocsEditable
+  @DomName('DOMMimeTypeArray.namedItem')
   DomMimeType namedItem(String name) native "DOMMimeTypeArray_namedItem_Callback";
 
 }
@@ -8047,16 +7818,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMParser
+@DocsEditable
+@DomName('DOMParser')
 class DomParser extends NativeFieldWrapperClass1 {
   DomParser.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DomParser() => DomParser._create();
   static DomParser _create() native "DOMParser_constructor_Callback";
 
-
-  /** @domName DOMParser.parseFromString */
+  @DocsEditable
+  @DomName('DOMParser.parseFromString')
   Document parseFromString(String str, String contentType) native "DOMParser_parseFromString_Callback";
 
 }
@@ -8067,32 +7839,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Plugin
+@DocsEditable
+@DomName('Plugin')
 class DomPlugin extends NativeFieldWrapperClass1 {
   DomPlugin.internal();
 
-
-  /** @domName DOMPlugin.description */
+  @DocsEditable
+  @DomName('DOMPlugin.description')
   String get description native "DOMPlugin_description_Getter";
 
-
-  /** @domName DOMPlugin.filename */
+  @DocsEditable
+  @DomName('DOMPlugin.filename')
   String get filename native "DOMPlugin_filename_Getter";
 
-
-  /** @domName DOMPlugin.length */
+  @DocsEditable
+  @DomName('DOMPlugin.length')
   int get length native "DOMPlugin_length_Getter";
 
-
-  /** @domName DOMPlugin.name */
+  @DocsEditable
+  @DomName('DOMPlugin.name')
   String get name native "DOMPlugin_name_Getter";
 
-
-  /** @domName DOMPlugin.item */
+  @DocsEditable
+  @DomName('DOMPlugin.item')
   DomMimeType item(int index) native "DOMPlugin_item_Callback";
 
-
-  /** @domName DOMPlugin.namedItem */
+  @DocsEditable
+  @DomName('DOMPlugin.namedItem')
   DomMimeType namedItem(String name) native "DOMPlugin_namedItem_Callback";
 
 }
@@ -8103,12 +7876,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PluginArray
+@DocsEditable
+@DomName('PluginArray')
 class DomPluginArray extends NativeFieldWrapperClass1 implements List<DomPlugin> {
   DomPluginArray.internal();
 
-
-  /** @domName DOMPluginArray.length */
+  @DocsEditable
+  @DomName('DOMPluginArray.length')
   int get length native "DOMPluginArray_length_Getter";
 
   DomPlugin operator[](int index) native "DOMPluginArray_item_Callback";
@@ -8129,50 +7903,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, DomPlugin)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(DomPlugin element) => Collections.contains(this, element);
+  bool contains(DomPlugin element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(DomPlugin element)) => Collections.forEach(this, f);
+  void forEach(void f(DomPlugin element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(DomPlugin element)) => new MappedList<DomPlugin, dynamic>(this, f);
+  List mappedBy(f(DomPlugin element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<DomPlugin> where(bool f(DomPlugin element)) => new WhereIterable<DomPlugin>(this, f);
+  Iterable<DomPlugin> where(bool f(DomPlugin element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(DomPlugin element)) => Collections.every(this, f);
+  bool every(bool f(DomPlugin element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(DomPlugin element)) => Collections.any(this, f);
+  bool any(bool f(DomPlugin element)) => IterableMixinWorkaround.any(this, f);
 
   List<DomPlugin> toList() => new List<DomPlugin>.from(this);
   Set<DomPlugin> toSet() => new Set<DomPlugin>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<DomPlugin> take(int n) => new ListView<DomPlugin>(this, 0, n);
+  List<DomPlugin> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<DomPlugin> takeWhile(bool test(DomPlugin value)) {
-    return new TakeWhileIterable<DomPlugin>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<DomPlugin> skip(int n) => new ListView<DomPlugin>(this, n, null);
+  List<DomPlugin> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<DomPlugin> skipWhile(bool test(DomPlugin value)) {
-    return new SkipWhileIterable<DomPlugin>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   DomPlugin firstMatching(bool test(DomPlugin value), { DomPlugin orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   DomPlugin lastMatching(bool test(DomPlugin value), {DomPlugin orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   DomPlugin singleMatching(bool test(DomPlugin value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   DomPlugin elementAt(int index) {
@@ -8230,16 +8004,36 @@
     throw new StateError("More than one element");
   }
 
-  DomPlugin min([int compare(DomPlugin a, DomPlugin b)]) => Collections.min(this, compare);
+  DomPlugin min([int compare(DomPlugin a, DomPlugin b)]) => IterableMixinWorkaround.min(this, compare);
 
-  DomPlugin max([int compare(DomPlugin a, DomPlugin b)]) => Collections.max(this, compare);
+  DomPlugin max([int compare(DomPlugin a, DomPlugin b)]) => IterableMixinWorkaround.max(this, compare);
 
   DomPlugin removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   DomPlugin removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(DomPlugin element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(DomPlugin element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<DomPlugin> from, [int startFrom]) {
@@ -8259,16 +8053,16 @@
 
   // -- end List<DomPlugin> mixins.
 
-
-  /** @domName DOMPluginArray.item */
+  @DocsEditable
+  @DomName('DOMPluginArray.item')
   DomPlugin item(int index) native "DOMPluginArray_item_Callback";
 
-
-  /** @domName DOMPluginArray.namedItem */
+  @DocsEditable
+  @DomName('DOMPluginArray.namedItem')
   DomPlugin namedItem(String name) native "DOMPluginArray_namedItem_Callback";
 
-
-  /** @domName DOMPluginArray.refresh */
+  @DocsEditable
+  @DomName('DOMPluginArray.refresh')
   void refresh(bool reload) native "DOMPluginArray_refresh_Callback";
 
 }
@@ -8279,112 +8073,113 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Selection
+@DocsEditable
+@DomName('Selection')
 class DomSelection extends NativeFieldWrapperClass1 {
   DomSelection.internal();
 
-
-  /** @domName DOMSelection.anchorNode */
+  @DocsEditable
+  @DomName('DOMSelection.anchorNode')
   Node get anchorNode native "DOMSelection_anchorNode_Getter";
 
-
-  /** @domName DOMSelection.anchorOffset */
+  @DocsEditable
+  @DomName('DOMSelection.anchorOffset')
   int get anchorOffset native "DOMSelection_anchorOffset_Getter";
 
-
-  /** @domName DOMSelection.baseNode */
+  @DocsEditable
+  @DomName('DOMSelection.baseNode')
   Node get baseNode native "DOMSelection_baseNode_Getter";
 
-
-  /** @domName DOMSelection.baseOffset */
+  @DocsEditable
+  @DomName('DOMSelection.baseOffset')
   int get baseOffset native "DOMSelection_baseOffset_Getter";
 
-
-  /** @domName DOMSelection.extentNode */
+  @DocsEditable
+  @DomName('DOMSelection.extentNode')
   Node get extentNode native "DOMSelection_extentNode_Getter";
 
-
-  /** @domName DOMSelection.extentOffset */
+  @DocsEditable
+  @DomName('DOMSelection.extentOffset')
   int get extentOffset native "DOMSelection_extentOffset_Getter";
 
-
-  /** @domName DOMSelection.focusNode */
+  @DocsEditable
+  @DomName('DOMSelection.focusNode')
   Node get focusNode native "DOMSelection_focusNode_Getter";
 
-
-  /** @domName DOMSelection.focusOffset */
+  @DocsEditable
+  @DomName('DOMSelection.focusOffset')
   int get focusOffset native "DOMSelection_focusOffset_Getter";
 
-
-  /** @domName DOMSelection.isCollapsed */
+  @DocsEditable
+  @DomName('DOMSelection.isCollapsed')
   bool get isCollapsed native "DOMSelection_isCollapsed_Getter";
 
-
-  /** @domName DOMSelection.rangeCount */
+  @DocsEditable
+  @DomName('DOMSelection.rangeCount')
   int get rangeCount native "DOMSelection_rangeCount_Getter";
 
-
-  /** @domName DOMSelection.type */
+  @DocsEditable
+  @DomName('DOMSelection.type')
   String get type native "DOMSelection_type_Getter";
 
-
-  /** @domName DOMSelection.addRange */
+  @DocsEditable
+  @DomName('DOMSelection.addRange')
   void addRange(Range range) native "DOMSelection_addRange_Callback";
 
-
-  /** @domName DOMSelection.collapse */
+  @DocsEditable
+  @DomName('DOMSelection.collapse')
   void collapse(Node node, int index) native "DOMSelection_collapse_Callback";
 
-
-  /** @domName DOMSelection.collapseToEnd */
+  @DocsEditable
+  @DomName('DOMSelection.collapseToEnd')
   void collapseToEnd() native "DOMSelection_collapseToEnd_Callback";
 
-
-  /** @domName DOMSelection.collapseToStart */
+  @DocsEditable
+  @DomName('DOMSelection.collapseToStart')
   void collapseToStart() native "DOMSelection_collapseToStart_Callback";
 
-
-  /** @domName DOMSelection.containsNode */
+  @DocsEditable
+  @DomName('DOMSelection.containsNode')
   bool containsNode(Node node, bool allowPartial) native "DOMSelection_containsNode_Callback";
 
-
-  /** @domName DOMSelection.deleteFromDocument */
+  @DocsEditable
+  @DomName('DOMSelection.deleteFromDocument')
   void deleteFromDocument() native "DOMSelection_deleteFromDocument_Callback";
 
-
-  /** @domName DOMSelection.empty */
+  @DocsEditable
+  @DomName('DOMSelection.empty')
   void empty() native "DOMSelection_empty_Callback";
 
-
-  /** @domName DOMSelection.extend */
+  @DocsEditable
+  @DomName('DOMSelection.extend')
   void extend(Node node, int offset) native "DOMSelection_extend_Callback";
 
-
-  /** @domName DOMSelection.getRangeAt */
+  @DocsEditable
+  @DomName('DOMSelection.getRangeAt')
   Range getRangeAt(int index) native "DOMSelection_getRangeAt_Callback";
 
-
-  /** @domName DOMSelection.modify */
+  @DocsEditable
+  @DomName('DOMSelection.modify')
   void modify(String alter, String direction, String granularity) native "DOMSelection_modify_Callback";
 
-
-  /** @domName DOMSelection.removeAllRanges */
+  @DocsEditable
+  @DomName('DOMSelection.removeAllRanges')
   void removeAllRanges() native "DOMSelection_removeAllRanges_Callback";
 
-
-  /** @domName DOMSelection.selectAllChildren */
+  @DocsEditable
+  @DomName('DOMSelection.selectAllChildren')
   void selectAllChildren(Node node) native "DOMSelection_selectAllChildren_Callback";
 
-
-  /** @domName DOMSelection.setBaseAndExtent */
+  @DocsEditable
+  @DomName('DOMSelection.setBaseAndExtent')
   void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) native "DOMSelection_setBaseAndExtent_Callback";
 
-
-  /** @domName DOMSelection.setPosition */
+  @DocsEditable
+  @DomName('DOMSelection.setPosition')
   void setPosition(Node node, int offset) native "DOMSelection_setPosition_Callback";
 
-
-  /** @domName DOMSelection.toString */
+  @DocsEditable
+  @DomName('DOMSelection.toString')
   String toString() native "DOMSelection_toString_Callback";
 
 }
@@ -8395,16 +8190,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMSettableTokenList
+@DocsEditable
+@DomName('DOMSettableTokenList')
 class DomSettableTokenList extends DomTokenList {
   DomSettableTokenList.internal() : super.internal();
 
-
-  /** @domName DOMSettableTokenList.value */
+  @DocsEditable
+  @DomName('DOMSettableTokenList.value')
   String get value native "DOMSettableTokenList_value_Getter";
 
-
-  /** @domName DOMSettableTokenList.value */
+  @DocsEditable
+  @DomName('DOMSettableTokenList.value')
   void set value(String value) native "DOMSettableTokenList_value_Setter";
 
 }
@@ -8415,12 +8211,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMStringList
+@DocsEditable
+@DomName('DOMStringList')
 class DomStringList extends NativeFieldWrapperClass1 implements List<String> {
   DomStringList.internal();
 
-
-  /** @domName DOMStringList.length */
+  @DocsEditable
+  @DomName('DOMStringList.length')
   int get length native "DOMStringList_length_Getter";
 
   String operator[](int index) native "DOMStringList_item_Callback";
@@ -8441,50 +8238,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, String)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   // contains() defined by IDL.
 
-  void forEach(void f(String element)) => Collections.forEach(this, f);
+  void forEach(void f(String element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(String element)) => new MappedList<String, dynamic>(this, f);
+  List mappedBy(f(String element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<String> where(bool f(String element)) => new WhereIterable<String>(this, f);
+  Iterable<String> where(bool f(String element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(String element)) => Collections.every(this, f);
+  bool every(bool f(String element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(String element)) => Collections.any(this, f);
+  bool any(bool f(String element)) => IterableMixinWorkaround.any(this, f);
 
   List<String> toList() => new List<String>.from(this);
   Set<String> toSet() => new Set<String>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<String> take(int n) => new ListView<String>(this, 0, n);
+  List<String> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<String> takeWhile(bool test(String value)) {
-    return new TakeWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<String> skip(int n) => new ListView<String>(this, n, null);
+  List<String> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<String> skipWhile(bool test(String value)) {
-    return new SkipWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   String firstMatching(bool test(String value), { String orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   String lastMatching(bool test(String value), {String orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   String singleMatching(bool test(String value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   String elementAt(int index) {
@@ -8542,16 +8339,36 @@
     throw new StateError("More than one element");
   }
 
-  String min([int compare(String a, String b)]) => Collections.min(this, compare);
+  String min([int compare(String a, String b)]) => IterableMixinWorkaround.min(this, compare);
 
-  String max([int compare(String a, String b)]) => Collections.max(this, compare);
+  String max([int compare(String a, String b)]) => IterableMixinWorkaround.max(this, compare);
 
   String removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   String removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
@@ -8571,12 +8388,12 @@
 
   // -- end List<String> mixins.
 
-
-  /** @domName DOMStringList.contains */
+  @DocsEditable
+  @DomName('DOMStringList.contains')
   bool contains(String string) native "DOMStringList_contains_Callback";
 
-
-  /** @domName DOMStringList.item */
+  @DocsEditable
+  @DomName('DOMStringList.item')
   String item(int index) native "DOMStringList_item_Callback";
 
 }
@@ -8587,7 +8404,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMStringMap
+@DocsEditable
+@DomName('DOMStringMap')
 class DomStringMap extends NativeFieldWrapperClass1 {
   DomStringMap.internal();
 
@@ -8599,39 +8417,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMTokenList
+@DocsEditable
+@DomName('DOMTokenList')
 class DomTokenList extends NativeFieldWrapperClass1 {
   DomTokenList.internal();
 
-
-  /** @domName DOMTokenList.length */
+  @DocsEditable
+  @DomName('DOMTokenList.length')
   int get length native "DOMTokenList_length_Getter";
 
-
-  /** @domName DOMTokenList.contains */
+  @DocsEditable
+  @DomName('DOMTokenList.contains')
   bool contains(String token) native "DOMTokenList_contains_Callback";
 
-
-  /** @domName DOMTokenList.item */
+  @DocsEditable
+  @DomName('DOMTokenList.item')
   String item(int index) native "DOMTokenList_item_Callback";
 
-
-  /** @domName DOMTokenList.toString */
+  @DocsEditable
+  @DomName('DOMTokenList.toString')
   String toString() native "DOMTokenList_toString_Callback";
 
-  bool toggle(/*DOMString*/ token, [/*boolean*/ force]) {
+  bool toggle(String token, [bool force]) {
     if (?force) {
       return _toggle_1(token, force);
     }
     return _toggle_2(token);
   }
 
-
-  /** @domName DOMTokenList.toggle_1 */
+  @DocsEditable
+  @DomName('DOMTokenList.toggle_1')
   bool _toggle_1(token, force) native "DOMTokenList_toggle_1_Callback";
 
-
-  /** @domName DOMTokenList.toggle_2 */
+  @DocsEditable
+  @DomName('DOMTokenList.toggle_2')
   bool _toggle_2(token) native "DOMTokenList_toggle_2_Callback";
 
 }
@@ -8694,46 +8513,47 @@
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   List mappedBy(f(Element element)) {
-    return new MappedList<Element, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
-  Iterable<Element> where(bool f(Element element))
-      => new WhereIterable(this, f);
+  Iterable<Element> where(bool f(Element element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
   bool get isEmpty {
     return _element.$dom_firstElementChild == null;
   }
 
   List<Element> take(int n) {
-    return new ListView<Element>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Element> takeWhile(bool test(Element value)) {
-    return new TakeWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Element> skip(int n) {
-    return new ListView<Element>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Element> skipWhile(bool test(Element value)) {
-    return new SkipWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Element firstMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Element lastMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Element singleMatching(bool test(Element value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Element elementAt(int index) {
@@ -8752,10 +8572,10 @@
     _element.$dom_replaceChild(value, _childElements[index]);
   }
 
-   void set length(int newLength) {
-     // TODO(jacobr): remove children when length is reduced.
-     throw new UnsupportedError('');
-   }
+  void set length(int newLength) {
+    // TODO(jacobr): remove children when length is reduced.
+    throw new UnsupportedError('');
+  }
 
   Element add(Element value) {
     _element.$dom_appendChild(value);
@@ -8778,13 +8598,38 @@
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Element element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
     throw new UnimplementedError();
   }
 
+  void remove(Object object) {
+    if (object is Element) {
+      Element element = object;
+      if (identical(element.parentNode, this)) {
+        _element.$dom_removeChild(element);
+      }
+    }
+  }
+
+  void removeAll(Iterable elements) {
+    Collections.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    Collections.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(Element element)) {
+    Collections.removeMatching(this, test);
+  }
+
+  void retainMatching(bool test(Element element)) {
+    Collections.retainMatching(this, test);
+  }
+
   void removeRange(int start, int rangeLength) {
     throw new UnimplementedError();
   }
@@ -8846,11 +8691,11 @@
   }
 
   Element min([int compare(Element a, Element b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Element max([int compare(Element a, Element b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 }
 
@@ -8877,15 +8722,16 @@
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   List mappedBy(f(Element element)) {
-    return new MappedList<Element, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
-  Iterable<Element> where(bool f(Element element))
-      => new WhereIterable(this, f);
+  Iterable<Element> where(bool f(Element element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
   bool every(bool f(Element element)) {
     for(Element element in this) {
@@ -8909,31 +8755,31 @@
   Set<Element> toSet() => new Set<Element>.from(this);
 
   List<Element> take(int n) {
-    return new ListView<Element>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Element> takeWhile(bool test(Element value)) {
-    return new TakeWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Element> skip(int n) {
-    return new ListView<Element>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Element> skipWhile(bool test(Element value)) {
-    return new SkipWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Element firstMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Element lastMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Element singleMatching(bool test(Element value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Element elementAt(int index) {
@@ -8974,7 +8820,7 @@
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Element element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -9010,6 +8856,26 @@
     throw new UnsupportedError('');
   }
 
+  void remove(Object element) {
+    throw new UnsupportedError('');
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError('');
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError('');
+  }
+
+  void removeMatching(bool test(Element element)) {
+    throw new UnsupportedError('');
+  }
+
+  void retainMatching(bool test(Element element)) {
+    throw new UnsupportedError('');
+  }
+
   Element get first => _nodeList.first;
 
   Element get last => _nodeList.last;
@@ -9017,11 +8883,11 @@
   Element get single => _nodeList.single;
 
   Element min([int compare(Element a, Element b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Element max([int compare(Element a, Element b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 }
 
@@ -9458,250 +9324,232 @@
 
   static const EventStreamProvider<Event> fullscreenErrorEvent = const EventStreamProvider<Event>('webkitfullscreenerror');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ElementEvents get on =>
     new ElementEvents(this);
 
-  /// @domName HTMLElement.children; @docsEditable true
   HtmlCollection get $dom_children;
 
-  /// @domName HTMLElement.contentEditable; @docsEditable true
   String contentEditable;
 
-  /// @domName HTMLElement.dir; @docsEditable true
   String dir;
 
-  /// @domName HTMLElement.draggable; @docsEditable true
   bool draggable;
 
-  /// @domName HTMLElement.hidden; @docsEditable true
   bool hidden;
 
-  /// @domName HTMLElement.id; @docsEditable true
   String id;
 
-  /// @domName HTMLElement.innerHTML; @docsEditable true
   String innerHtml;
 
-  /// @domName HTMLElement.isContentEditable; @docsEditable true
   bool get isContentEditable;
 
-  /// @domName HTMLElement.lang; @docsEditable true
   String lang;
 
-  /// @domName HTMLElement.outerHTML; @docsEditable true
   String get outerHtml;
 
-  /// @domName HTMLElement.spellcheck; @docsEditable true
   bool spellcheck;
 
-  /// @domName HTMLElement.tabIndex; @docsEditable true
   int tabIndex;
 
-  /// @domName HTMLElement.title; @docsEditable true
   String title;
 
-  /// @domName HTMLElement.translate; @docsEditable true
   bool translate;
 
-  /// @domName HTMLElement.webkitdropzone; @docsEditable true
   String webkitdropzone;
 
-  /// @domName HTMLElement.click; @docsEditable true
   void click();
 
-  /// @domName HTMLElement.insertAdjacentElement; @docsEditable true
   Element insertAdjacentElement(String where, Element element);
 
-  /// @domName HTMLElement.insertAdjacentHTML; @docsEditable true
   void insertAdjacentHtml(String where, String html);
 
-  /// @domName HTMLElement.insertAdjacentText; @docsEditable true
   void insertAdjacentText(String where, String text);
 
   static const int ALLOW_KEYBOARD_INPUT = 1;
 
-
-  /** @domName Element.childElementCount */
+  @DocsEditable
+  @DomName('Element.childElementCount')
   int get $dom_childElementCount native "Element_childElementCount_Getter";
 
-
-  /** @domName Element.className */
+  @DocsEditable
+  @DomName('Element.className')
   String get $dom_className native "Element_className_Getter";
 
-
-  /** @domName Element.className */
+  @DocsEditable
+  @DomName('Element.className')
   void set $dom_className(String value) native "Element_className_Setter";
 
-
-  /** @domName Element.clientHeight */
+  @DocsEditable
+  @DomName('Element.clientHeight')
   int get clientHeight native "Element_clientHeight_Getter";
 
-
-  /** @domName Element.clientLeft */
+  @DocsEditable
+  @DomName('Element.clientLeft')
   int get clientLeft native "Element_clientLeft_Getter";
 
-
-  /** @domName Element.clientTop */
+  @DocsEditable
+  @DomName('Element.clientTop')
   int get clientTop native "Element_clientTop_Getter";
 
-
-  /** @domName Element.clientWidth */
+  @DocsEditable
+  @DomName('Element.clientWidth')
   int get clientWidth native "Element_clientWidth_Getter";
 
-
-  /** @domName Element.dataset */
+  @DocsEditable
+  @DomName('Element.dataset')
   Map<String, String> get dataset native "Element_dataset_Getter";
 
-
-  /** @domName Element.firstElementChild */
+  @DocsEditable
+  @DomName('Element.firstElementChild')
   Element get $dom_firstElementChild native "Element_firstElementChild_Getter";
 
-
-  /** @domName Element.lastElementChild */
+  @DocsEditable
+  @DomName('Element.lastElementChild')
   Element get $dom_lastElementChild native "Element_lastElementChild_Getter";
 
-
-  /** @domName Element.nextElementSibling */
+  @DocsEditable
+  @DomName('Element.nextElementSibling')
   Element get nextElementSibling native "Element_nextElementSibling_Getter";
 
-
-  /** @domName Element.offsetHeight */
+  @DocsEditable
+  @DomName('Element.offsetHeight')
   int get offsetHeight native "Element_offsetHeight_Getter";
 
-
-  /** @domName Element.offsetLeft */
+  @DocsEditable
+  @DomName('Element.offsetLeft')
   int get offsetLeft native "Element_offsetLeft_Getter";
 
-
-  /** @domName Element.offsetParent */
+  @DocsEditable
+  @DomName('Element.offsetParent')
   Element get offsetParent native "Element_offsetParent_Getter";
 
-
-  /** @domName Element.offsetTop */
+  @DocsEditable
+  @DomName('Element.offsetTop')
   int get offsetTop native "Element_offsetTop_Getter";
 
-
-  /** @domName Element.offsetWidth */
+  @DocsEditable
+  @DomName('Element.offsetWidth')
   int get offsetWidth native "Element_offsetWidth_Getter";
 
-
-  /** @domName Element.previousElementSibling */
+  @DocsEditable
+  @DomName('Element.previousElementSibling')
   Element get previousElementSibling native "Element_previousElementSibling_Getter";
 
-
-  /** @domName Element.scrollHeight */
+  @DocsEditable
+  @DomName('Element.scrollHeight')
   int get scrollHeight native "Element_scrollHeight_Getter";
 
-
-  /** @domName Element.scrollLeft */
+  @DocsEditable
+  @DomName('Element.scrollLeft')
   int get scrollLeft native "Element_scrollLeft_Getter";
 
-
-  /** @domName Element.scrollLeft */
+  @DocsEditable
+  @DomName('Element.scrollLeft')
   void set scrollLeft(int value) native "Element_scrollLeft_Setter";
 
-
-  /** @domName Element.scrollTop */
+  @DocsEditable
+  @DomName('Element.scrollTop')
   int get scrollTop native "Element_scrollTop_Getter";
 
-
-  /** @domName Element.scrollTop */
+  @DocsEditable
+  @DomName('Element.scrollTop')
   void set scrollTop(int value) native "Element_scrollTop_Setter";
 
-
-  /** @domName Element.scrollWidth */
+  @DocsEditable
+  @DomName('Element.scrollWidth')
   int get scrollWidth native "Element_scrollWidth_Getter";
 
-
-  /** @domName Element.style */
+  @DocsEditable
+  @DomName('Element.style')
   CssStyleDeclaration get style native "Element_style_Getter";
 
-
-  /** @domName Element.tagName */
+  @DocsEditable
+  @DomName('Element.tagName')
   String get tagName native "Element_tagName_Getter";
 
-
-  /** @domName Element.webkitPseudo */
+  @DocsEditable
+  @DomName('Element.webkitPseudo')
   String get webkitPseudo native "Element_webkitPseudo_Getter";
 
-
-  /** @domName Element.webkitPseudo */
+  @DocsEditable
+  @DomName('Element.webkitPseudo')
   void set webkitPseudo(String value) native "Element_webkitPseudo_Setter";
 
-
-  /** @domName Element.webkitShadowRoot */
+  @DocsEditable
+  @DomName('Element.webkitShadowRoot')
   ShadowRoot get webkitShadowRoot native "Element_webkitShadowRoot_Getter";
 
-
-  /** @domName Element.blur */
+  @DocsEditable
+  @DomName('Element.blur')
   void blur() native "Element_blur_Callback";
 
-
-  /** @domName Element.focus */
+  @DocsEditable
+  @DomName('Element.focus')
   void focus() native "Element_focus_Callback";
 
-
-  /** @domName Element.getAttribute */
+  @DocsEditable
+  @DomName('Element.getAttribute')
   String $dom_getAttribute(String name) native "Element_getAttribute_Callback";
 
-
-  /** @domName Element.getAttributeNS */
+  @DocsEditable
+  @DomName('Element.getAttributeNS')
   String $dom_getAttributeNS(String namespaceURI, String localName) native "Element_getAttributeNS_Callback";
 
-
-  /** @domName Element.getBoundingClientRect */
+  @DocsEditable
+  @DomName('Element.getBoundingClientRect')
   ClientRect getBoundingClientRect() native "Element_getBoundingClientRect_Callback";
 
-
-  /** @domName Element.getClientRects */
+  @DocsEditable
+  @DomName('Element.getClientRects')
   List<ClientRect> getClientRects() native "Element_getClientRects_Callback";
 
-
-  /** @domName Element.getElementsByClassName */
+  @DocsEditable
+  @DomName('Element.getElementsByClassName')
   List<Node> $dom_getElementsByClassName(String name) native "Element_getElementsByClassName_Callback";
 
-
-  /** @domName Element.getElementsByTagName */
+  @DocsEditable
+  @DomName('Element.getElementsByTagName')
   List<Node> $dom_getElementsByTagName(String name) native "Element_getElementsByTagName_Callback";
 
-
-  /** @domName Element.hasAttribute */
+  @DocsEditable
+  @DomName('Element.hasAttribute')
   bool $dom_hasAttribute(String name) native "Element_hasAttribute_Callback";
 
-
-  /** @domName Element.hasAttributeNS */
+  @DocsEditable
+  @DomName('Element.hasAttributeNS')
   bool $dom_hasAttributeNS(String namespaceURI, String localName) native "Element_hasAttributeNS_Callback";
 
-
-  /** @domName Element.querySelector */
+  @DocsEditable
+  @DomName('Element.querySelector')
   Element $dom_querySelector(String selectors) native "Element_querySelector_Callback";
 
-
-  /** @domName Element.querySelectorAll */
+  @DocsEditable
+  @DomName('Element.querySelectorAll')
   List<Node> $dom_querySelectorAll(String selectors) native "Element_querySelectorAll_Callback";
 
-
-  /** @domName Element.remove */
+  @DocsEditable
+  @DomName('Element.remove')
   void remove() native "Element_remove_Callback";
 
-
-  /** @domName Element.removeAttribute */
+  @DocsEditable
+  @DomName('Element.removeAttribute')
   void $dom_removeAttribute(String name) native "Element_removeAttribute_Callback";
 
-
-  /** @domName Element.removeAttributeNS */
+  @DocsEditable
+  @DomName('Element.removeAttributeNS')
   void $dom_removeAttributeNS(String namespaceURI, String localName) native "Element_removeAttributeNS_Callback";
 
-
-  /** @domName Element.scrollByLines */
+  @DocsEditable
+  @DomName('Element.scrollByLines')
   void scrollByLines(int lines) native "Element_scrollByLines_Callback";
 
-
-  /** @domName Element.scrollByPages */
+  @DocsEditable
+  @DomName('Element.scrollByPages')
   void scrollByPages(int pages) native "Element_scrollByPages_Callback";
 
-  void scrollIntoView([/*boolean*/ centerIfNeeded]) {
+  void scrollIntoView([bool centerIfNeeded]) {
     if (?centerIfNeeded) {
       _scrollIntoViewIfNeeded_1(centerIfNeeded);
       return;
@@ -9709,42 +9557,42 @@
     _scrollIntoViewIfNeeded_2();
   }
 
-
-  /** @domName Element.scrollIntoViewIfNeeded_1 */
+  @DocsEditable
+  @DomName('Element.scrollIntoViewIfNeeded_1')
   void _scrollIntoViewIfNeeded_1(centerIfNeeded) native "Element_scrollIntoViewIfNeeded_1_Callback";
 
-
-  /** @domName Element.scrollIntoViewIfNeeded_2 */
+  @DocsEditable
+  @DomName('Element.scrollIntoViewIfNeeded_2')
   void _scrollIntoViewIfNeeded_2() native "Element_scrollIntoViewIfNeeded_2_Callback";
 
-
-  /** @domName Element.setAttribute */
+  @DocsEditable
+  @DomName('Element.setAttribute')
   void $dom_setAttribute(String name, String value) native "Element_setAttribute_Callback";
 
-
-  /** @domName Element.setAttributeNS */
+  @DocsEditable
+  @DomName('Element.setAttributeNS')
   void $dom_setAttributeNS(String namespaceURI, String qualifiedName, String value) native "Element_setAttributeNS_Callback";
 
-
-  /** @domName Element.webkitCreateShadowRoot */
+  @DocsEditable
+  @DomName('Element.webkitCreateShadowRoot')
   @SupportedBrowser(SupportedBrowser.CHROME, '25')
   @Experimental()
   ShadowRoot createShadowRoot() native "Element_webkitCreateShadowRoot_Callback";
 
-
-  /** @domName Element.webkitMatchesSelector */
+  @DocsEditable
+  @DomName('Element.webkitMatchesSelector')
   bool matches(String selectors) native "Element_webkitMatchesSelector_Callback";
 
-
-  /** @domName Element.webkitRequestFullScreen */
+  @DocsEditable
+  @DomName('Element.webkitRequestFullScreen')
   void webkitRequestFullScreen(int flags) native "Element_webkitRequestFullScreen_Callback";
 
-
-  /** @domName Element.webkitRequestFullscreen */
+  @DocsEditable
+  @DomName('Element.webkitRequestFullscreen')
   void webkitRequestFullscreen() native "Element_webkitRequestFullscreen_Callback";
 
-
-  /** @domName Element.webkitRequestPointerLock */
+  @DocsEditable
+  @DomName('Element.webkitRequestPointerLock')
   void webkitRequestPointerLock() native "Element_webkitRequestPointerLock_Callback";
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -9847,11 +9695,12 @@
 
 final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 class _ElementFactoryProvider {
-  static final _CUSTOM_PARENT_TAG_MAP = const {
+  static const _CUSTOM_PARENT_TAG_MAP = const {
     'body' : 'html',
     'head' : 'html',
     'caption' : 'table',
     'td': 'tr',
+    'th': 'tr',
     'colgroup': 'table',
     'col' : 'colgroup',
     'tr' : 'tbody',
@@ -9861,7 +9710,20 @@
     'track' : 'audio',
   };
 
-  /** @domName Document.createElement */
+  // TODO(jmesserly): const set would be better
+  static const _TABLE_TAGS = const {
+    'caption': null,
+    'col': null,
+    'colgroup': null,
+    'tbody': null,
+    'td': null,
+    'tfoot': null,
+    'th': null,
+    'thead': null,
+    'tr': null,
+  };
+
+  @DomName('Document.createElement')
   static Element createElement_html(String html) {
     // TODO(jacobr): this method can be made more robust and performant.
     // 1) Cache the dummy parent elements required to use innerHTML rather than
@@ -9874,181 +9736,241 @@
     final match = _START_TAG_REGEXP.firstMatch(html);
     if (match != null) {
       tag = match.group(1).toLowerCase();
-      if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
-        parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
+      if (_Device.isIE && _TABLE_TAGS.containsKey(tag)) {
+        return _createTableForIE(html, tag);
       }
+      parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
+      if (parentTag == null) parentTag = 'div';
     }
-    final Element temp = new Element.tag(parentTag);
+
+    final temp = new Element.tag(parentTag);
     temp.innerHtml = html;
 
     Element element;
     if (temp.children.length == 1) {
       element = temp.children[0];
     } else if (parentTag == 'html' && temp.children.length == 2) {
-      // Work around for edge case in WebKit and possibly other browsers where
-      // both body and head elements are created even though the inner html
-      // only contains a head or body element.
+      // In html5 the root <html> tag will always have a <body> and a <head>,
+      // even though the inner html only contains one of them.
       element = temp.children[tag == 'head' ? 0 : 1];
     } else {
-      throw new ArgumentError('HTML had ${temp.children.length} '
-          'top level elements but 1 expected');
+      _singleNode(temp.children);
     }
     element.remove();
     return element;
   }
 
-  /** @domName Document.createElement */
+  /**
+   * IE table elements don't support innerHTML (even in standards mode).
+   * Instead we use a div and inject the table element in the innerHtml string.
+   * This technique works on other browsers too, but it's probably slower,
+   * so we only use it when running on IE.
+   *
+   * See also innerHTML:
+   * <http://msdn.microsoft.com/en-us/library/ie/ms533897(v=vs.85).aspx>
+   * and Building Tables Dynamically:
+   * <http://msdn.microsoft.com/en-us/library/ie/ms532998(v=vs.85).aspx>.
+   */
+  static Element _createTableForIE(String html, String tag) {
+    var div = new Element.tag('div');
+    div.innerHtml = '<table>$html</table>';
+    var table = _singleNode(div.children);
+    Element element;
+    switch (tag) {
+      case 'td':
+      case 'th':
+        element = _singleNode(_singleNode(table.rows).cells);
+        break;
+      case 'tr':
+        element = _singleNode(table.rows);
+        break;
+      case 'tbody':
+        element = _singleNode(table.tBodies);
+        break;
+      case 'thead':
+        element = table.tHead;
+        break;
+      case 'tfoot':
+        element = table.tFoot;
+        break;
+      case 'caption':
+        element = table.caption;
+        break;
+      case 'colgroup':
+        element = _getColgroup(table);
+        break;
+      case 'col':
+        element = _singleNode(_getColgroup(table).children);
+        break;
+    }
+    element.remove();
+    return element;
+  }
+
+  static TableColElement _getColgroup(TableElement table) {
+    // TODO(jmesserly): is there a better way to do this?
+    return _singleNode(table.children.where((n) => n.tagName == 'COLGROUP')
+        .toList());
+  }
+
+  static Node _singleNode(List<Node> list) {
+    if (list.length == 1) return list[0];
+    throw new ArgumentError('HTML had ${list.length} '
+        'top level elements but 1 expected');
+  }
+
+  @DomName('Document.createElement')
   static Element createElement_tag(String tag) =>
       document.$dom_createElement(tag);
 }
 
-/// @docsEditable true
+@DocsEditable
 class ElementEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   ElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCopy => this['beforecopy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCut => this['beforecut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforePaste => this['beforepaste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get change => this['change'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contextMenu => this['contextmenu'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get copy => this['copy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cut => this['cut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get doubleClick => this['dblclick'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drag => this['drag'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnd => this['dragend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnter => this['dragenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragLeave => this['dragleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragOver => this['dragover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragStart => this['dragstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drop => this['drop'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get input => this['input'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get invalid => this['invalid'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyDown => this['keydown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyPress => this['keypress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyUp => this['keyup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseDown => this['mousedown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseMove => this['mousemove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOut => this['mouseout'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOver => this['mouseover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseUp => this['mouseup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseWheel => this['mousewheel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get paste => this['paste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get reset => this['reset'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get scroll => this['scroll'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get search => this['search'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get select => this['select'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get selectStart => this['selectstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get submit => this['submit'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchCancel => this['touchcancel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchEnd => this['touchend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchEnter => this['touchenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchLeave => this['touchleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchMove => this['touchmove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchStart => this['touchstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get transitionEnd => this['webkitTransitionEnd'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get fullscreenError => this['webkitfullscreenerror'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10058,28 +9980,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ElementTraversal
+@DocsEditable
+@DomName('ElementTraversal')
 class ElementTraversal extends NativeFieldWrapperClass1 {
   ElementTraversal.internal();
 
-
-  /** @domName ElementTraversal.childElementCount */
+  @DocsEditable
+  @DomName('ElementTraversal.childElementCount')
   int get $dom_childElementCount native "ElementTraversal_childElementCount_Getter";
 
-
-  /** @domName ElementTraversal.firstElementChild */
+  @DocsEditable
+  @DomName('ElementTraversal.firstElementChild')
   Element get $dom_firstElementChild native "ElementTraversal_firstElementChild_Getter";
 
-
-  /** @domName ElementTraversal.lastElementChild */
+  @DocsEditable
+  @DomName('ElementTraversal.lastElementChild')
   Element get $dom_lastElementChild native "ElementTraversal_lastElementChild_Getter";
 
-
-  /** @domName ElementTraversal.nextElementSibling */
+  @DocsEditable
+  @DomName('ElementTraversal.nextElementSibling')
   Element get nextElementSibling native "ElementTraversal_nextElementSibling_Getter";
 
-
-  /** @domName ElementTraversal.previousElementSibling */
+  @DocsEditable
+  @DomName('ElementTraversal.previousElementSibling')
   Element get previousElementSibling native "ElementTraversal_previousElementSibling_Getter";
 
 }
@@ -10090,65 +10013,66 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLEmbedElement
+@DocsEditable
+@DomName('HTMLEmbedElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class EmbedElement extends _Element_Merged {
   EmbedElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory EmbedElement() => document.$dom_createElement("embed");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLEmbedElement.align */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.align')
   String get align native "HTMLEmbedElement_align_Getter";
 
-
-  /** @domName HTMLEmbedElement.align */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.align')
   void set align(String value) native "HTMLEmbedElement_align_Setter";
 
-
-  /** @domName HTMLEmbedElement.height */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.height')
   String get height native "HTMLEmbedElement_height_Getter";
 
-
-  /** @domName HTMLEmbedElement.height */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.height')
   void set height(String value) native "HTMLEmbedElement_height_Setter";
 
-
-  /** @domName HTMLEmbedElement.name */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.name')
   String get name native "HTMLEmbedElement_name_Getter";
 
-
-  /** @domName HTMLEmbedElement.name */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.name')
   void set name(String value) native "HTMLEmbedElement_name_Setter";
 
-
-  /** @domName HTMLEmbedElement.src */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.src')
   String get src native "HTMLEmbedElement_src_Getter";
 
-
-  /** @domName HTMLEmbedElement.src */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.src')
   void set src(String value) native "HTMLEmbedElement_src_Setter";
 
-
-  /** @domName HTMLEmbedElement.type */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.type')
   String get type native "HTMLEmbedElement_type_Getter";
 
-
-  /** @domName HTMLEmbedElement.type */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.type')
   void set type(String value) native "HTMLEmbedElement_type_Setter";
 
-
-  /** @domName HTMLEmbedElement.width */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.width')
   String get width native "HTMLEmbedElement_width_Getter";
 
-
-  /** @domName HTMLEmbedElement.width */
+  @DocsEditable
+  @DomName('HTMLEmbedElement.width')
   void set width(String value) native "HTMLEmbedElement_width_Setter";
 
 }
@@ -10159,7 +10083,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName EntityReference
+@DocsEditable
+@DomName('EntityReference')
 class EntityReference extends Node {
   EntityReference.internal() : super.internal();
 
@@ -10179,31 +10104,32 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Entry
+@DocsEditable
+@DomName('Entry')
 class Entry extends NativeFieldWrapperClass1 {
   Entry.internal();
 
-
-  /** @domName Entry.filesystem */
+  @DocsEditable
+  @DomName('Entry.filesystem')
   FileSystem get filesystem native "Entry_filesystem_Getter";
 
-
-  /** @domName Entry.fullPath */
+  @DocsEditable
+  @DomName('Entry.fullPath')
   String get fullPath native "Entry_fullPath_Getter";
 
-
-  /** @domName Entry.isDirectory */
+  @DocsEditable
+  @DomName('Entry.isDirectory')
   bool get isDirectory native "Entry_isDirectory_Getter";
 
-
-  /** @domName Entry.isFile */
+  @DocsEditable
+  @DomName('Entry.isFile')
   bool get isFile native "Entry_isFile_Getter";
 
-
-  /** @domName Entry.name */
+  @DocsEditable
+  @DomName('Entry.name')
   String get name native "Entry_name_Getter";
 
-  void copyTo(/*DirectoryEntry*/ parent, [/*DOMString*/ name, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+  void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) {
     if (?name) {
       _copyTo_1(parent, name, successCallback, errorCallback);
       return;
@@ -10211,23 +10137,23 @@
     _copyTo_2(parent);
   }
 
-
-  /** @domName Entry.copyTo_1 */
+  @DocsEditable
+  @DomName('Entry.copyTo_1')
   void _copyTo_1(parent, name, successCallback, errorCallback) native "Entry_copyTo_1_Callback";
 
-
-  /** @domName Entry.copyTo_2 */
+  @DocsEditable
+  @DomName('Entry.copyTo_2')
   void _copyTo_2(parent) native "Entry_copyTo_2_Callback";
 
-
-  /** @domName Entry.getMetadata */
+  @DocsEditable
+  @DomName('Entry.getMetadata')
   void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]) native "Entry_getMetadata_Callback";
 
-
-  /** @domName Entry.getParent */
+  @DocsEditable
+  @DomName('Entry.getParent')
   void getParent([EntryCallback successCallback, ErrorCallback errorCallback]) native "Entry_getParent_Callback";
 
-  void moveTo(/*DirectoryEntry*/ parent, [/*DOMString*/ name, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+  void moveTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) {
     if (?name) {
       _moveTo_1(parent, name, successCallback, errorCallback);
       return;
@@ -10235,20 +10161,20 @@
     _moveTo_2(parent);
   }
 
-
-  /** @domName Entry.moveTo_1 */
+  @DocsEditable
+  @DomName('Entry.moveTo_1')
   void _moveTo_1(parent, name, successCallback, errorCallback) native "Entry_moveTo_1_Callback";
 
-
-  /** @domName Entry.moveTo_2 */
+  @DocsEditable
+  @DomName('Entry.moveTo_2')
   void _moveTo_2(parent) native "Entry_moveTo_2_Callback";
 
-
-  /** @domName Entry.remove */
+  @DocsEditable
+  @DomName('Entry.remove')
   void remove(VoidCallback successCallback, [ErrorCallback errorCallback]) native "Entry_remove_Callback";
 
-
-  /** @domName Entry.toURL */
+  @DocsEditable
+  @DomName('Entry.toURL')
   String toUrl() native "Entry_toURL_Callback";
 
 }
@@ -10267,52 +10193,53 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName EntrySync
+@DocsEditable
+@DomName('EntrySync')
 class EntrySync extends NativeFieldWrapperClass1 {
   EntrySync.internal();
 
-
-  /** @domName EntrySync.filesystem */
+  @DocsEditable
+  @DomName('EntrySync.filesystem')
   FileSystemSync get filesystem native "EntrySync_filesystem_Getter";
 
-
-  /** @domName EntrySync.fullPath */
+  @DocsEditable
+  @DomName('EntrySync.fullPath')
   String get fullPath native "EntrySync_fullPath_Getter";
 
-
-  /** @domName EntrySync.isDirectory */
+  @DocsEditable
+  @DomName('EntrySync.isDirectory')
   bool get isDirectory native "EntrySync_isDirectory_Getter";
 
-
-  /** @domName EntrySync.isFile */
+  @DocsEditable
+  @DomName('EntrySync.isFile')
   bool get isFile native "EntrySync_isFile_Getter";
 
-
-  /** @domName EntrySync.name */
+  @DocsEditable
+  @DomName('EntrySync.name')
   String get name native "EntrySync_name_Getter";
 
-
-  /** @domName EntrySync.copyTo */
+  @DocsEditable
+  @DomName('EntrySync.copyTo')
   EntrySync copyTo(DirectoryEntrySync parent, String name) native "EntrySync_copyTo_Callback";
 
-
-  /** @domName EntrySync.getMetadata */
+  @DocsEditable
+  @DomName('EntrySync.getMetadata')
   Metadata getMetadata() native "EntrySync_getMetadata_Callback";
 
-
-  /** @domName EntrySync.getParent */
+  @DocsEditable
+  @DomName('EntrySync.getParent')
   EntrySync getParent() native "EntrySync_getParent_Callback";
 
-
-  /** @domName EntrySync.moveTo */
+  @DocsEditable
+  @DomName('EntrySync.moveTo')
   EntrySync moveTo(DirectoryEntrySync parent, String name) native "EntrySync_moveTo_Callback";
 
-
-  /** @domName EntrySync.remove */
+  @DocsEditable
+  @DomName('EntrySync.remove')
   void remove() native "EntrySync_remove_Callback";
 
-
-  /** @domName EntrySync.toURL */
+  @DocsEditable
+  @DomName('EntrySync.toURL')
   String toUrl() native "EntrySync_toURL_Callback";
 
 }
@@ -10331,20 +10258,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ErrorEvent
+@DocsEditable
+@DomName('ErrorEvent')
 class ErrorEvent extends Event {
   ErrorEvent.internal() : super.internal();
 
-
-  /** @domName ErrorEvent.filename */
+  @DocsEditable
+  @DomName('ErrorEvent.filename')
   String get filename native "ErrorEvent_filename_Getter";
 
-
-  /** @domName ErrorEvent.lineno */
+  @DocsEditable
+  @DomName('ErrorEvent.lineno')
   int get lineno native "ErrorEvent_lineno_Getter";
 
-
-  /** @domName ErrorEvent.message */
+  @DocsEditable
+  @DomName('ErrorEvent.message')
   String get message native "ErrorEvent_message_Getter";
 
 }
@@ -10355,7 +10283,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Event
+@DocsEditable
+@DomName('Event')
 class Event extends NativeFieldWrapperClass1 {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
@@ -10407,72 +10336,72 @@
 
   static const int SELECT = 16384;
 
-
-  /** @domName Event.bubbles */
+  @DocsEditable
+  @DomName('Event.bubbles')
   bool get bubbles native "Event_bubbles_Getter";
 
-
-  /** @domName Event.cancelBubble */
+  @DocsEditable
+  @DomName('Event.cancelBubble')
   bool get cancelBubble native "Event_cancelBubble_Getter";
 
-
-  /** @domName Event.cancelBubble */
+  @DocsEditable
+  @DomName('Event.cancelBubble')
   void set cancelBubble(bool value) native "Event_cancelBubble_Setter";
 
-
-  /** @domName Event.cancelable */
+  @DocsEditable
+  @DomName('Event.cancelable')
   bool get cancelable native "Event_cancelable_Getter";
 
-
-  /** @domName Event.clipboardData */
+  @DocsEditable
+  @DomName('Event.clipboardData')
   Clipboard get clipboardData native "Event_clipboardData_Getter";
 
-
-  /** @domName Event.currentTarget */
+  @DocsEditable
+  @DomName('Event.currentTarget')
   EventTarget get currentTarget native "Event_currentTarget_Getter";
 
-
-  /** @domName Event.defaultPrevented */
+  @DocsEditable
+  @DomName('Event.defaultPrevented')
   bool get defaultPrevented native "Event_defaultPrevented_Getter";
 
-
-  /** @domName Event.eventPhase */
+  @DocsEditable
+  @DomName('Event.eventPhase')
   int get eventPhase native "Event_eventPhase_Getter";
 
-
-  /** @domName Event.returnValue */
+  @DocsEditable
+  @DomName('Event.returnValue')
   bool get returnValue native "Event_returnValue_Getter";
 
-
-  /** @domName Event.returnValue */
+  @DocsEditable
+  @DomName('Event.returnValue')
   void set returnValue(bool value) native "Event_returnValue_Setter";
 
-
-  /** @domName Event.target */
+  @DocsEditable
+  @DomName('Event.target')
   EventTarget get target native "Event_target_Getter";
 
-
-  /** @domName Event.timeStamp */
+  @DocsEditable
+  @DomName('Event.timeStamp')
   int get timeStamp native "Event_timeStamp_Getter";
 
-
-  /** @domName Event.type */
+  @DocsEditable
+  @DomName('Event.type')
   String get type native "Event_type_Getter";
 
-
-  /** @domName Event.initEvent */
+  @DocsEditable
+  @DomName('Event.initEvent')
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native "Event_initEvent_Callback";
 
-
-  /** @domName Event.preventDefault */
+  @DocsEditable
+  @DomName('Event.preventDefault')
   void preventDefault() native "Event_preventDefault_Callback";
 
-
-  /** @domName Event.stopImmediatePropagation */
+  @DocsEditable
+  @DomName('Event.stopImmediatePropagation')
   void stopImmediatePropagation() native "Event_stopImmediatePropagation_Callback";
 
-
-  /** @domName Event.stopPropagation */
+  @DocsEditable
+  @DomName('Event.stopPropagation')
   void stopPropagation() native "Event_stopPropagation_Callback";
 
 }
@@ -10483,7 +10412,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName EventException
+@DocsEditable
+@DomName('EventException')
 class EventException extends NativeFieldWrapperClass1 {
   EventException.internal();
 
@@ -10491,20 +10421,20 @@
 
   static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
 
-
-  /** @domName EventException.code */
+  @DocsEditable
+  @DomName('EventException.code')
   int get code native "EventException_code_Getter";
 
-
-  /** @domName EventException.message */
+  @DocsEditable
+  @DomName('EventException.message')
   String get message native "EventException_message_Getter";
 
-
-  /** @domName EventException.name */
+  @DocsEditable
+  @DomName('EventException.name')
   String get name native "EventException_name_Getter";
 
-
-  /** @domName EventException.toString */
+  @DocsEditable
+  @DomName('EventException.toString')
   String toString() native "EventException_toString_Callback";
 
 }
@@ -10515,7 +10445,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName EventSource
+@DocsEditable
+@DomName('EventSource')
 class EventSource extends EventTarget {
   EventSource.internal() : super.internal();
 
@@ -10525,11 +10456,17 @@
 
   static const EventStreamProvider<Event> openEvent = const EventStreamProvider<Event>('open');
 
-  ///@docsEditable true
-  factory EventSource(String scriptUrl) => EventSource._create(scriptUrl);
-  static EventSource _create(String scriptUrl) native "EventSource_constructor_Callback";
+  @DocsEditable
+  factory EventSource(String url, [Map eventSourceInit]) {
+    if (!?eventSourceInit) {
+      return EventSource._create(url);
+    }
+    return EventSource._create(url, eventSourceInit);
+  }
+  static EventSource _create(String url, [Map eventSourceInit]) native "EventSource_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   EventSourceEvents get on =>
     new EventSourceEvents(this);
 
@@ -10539,28 +10476,32 @@
 
   static const int OPEN = 1;
 
-
-  /** @domName EventSource.readyState */
+  @DocsEditable
+  @DomName('EventSource.readyState')
   int get readyState native "EventSource_readyState_Getter";
 
-
-  /** @domName EventSource.url */
+  @DocsEditable
+  @DomName('EventSource.url')
   String get url native "EventSource_url_Getter";
 
+  @DocsEditable
+  @DomName('EventSource.withCredentials')
+  bool get withCredentials native "EventSource_withCredentials_Getter";
 
-  /** @domName EventSource.addEventListener */
+  @DocsEditable
+  @DomName('EventSource.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "EventSource_addEventListener_Callback";
 
-
-  /** @domName EventSource.close */
+  @DocsEditable
+  @DomName('EventSource.close')
   void close() native "EventSource_close_Callback";
 
-
-  /** @domName EventSource.dispatchEvent */
+  @DocsEditable
+  @DomName('EventSource.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "EventSource_dispatchEvent_Callback";
 
-
-  /** @domName EventSource.removeEventListener */
+  @DocsEditable
+  @DomName('EventSource.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "EventSource_removeEventListener_Callback";
 
   Stream<Event> get onError => errorEvent.forTarget(this);
@@ -10571,18 +10512,18 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class EventSourceEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   EventSourceEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10651,7 +10592,8 @@
   }
 }
 
-/// @domName EventTarget
+@DocsEditable
+@DomName('EventTarget')
 /**
  * Base class for all browser objects that support events.
  *
@@ -10662,20 +10604,20 @@
  */ 
 class EventTarget extends NativeFieldWrapperClass1 {
 
-  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   Events get on => new Events(this);
   EventTarget.internal();
 
-
-  /** @domName EventTarget.addEventListener */
+  @DocsEditable
+  @DomName('EventTarget.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "EventTarget_addEventListener_Callback";
 
-
-  /** @domName EventTarget.dispatchEvent */
+  @DocsEditable
+  @DomName('EventTarget.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "EventTarget_dispatchEvent_Callback";
 
-
-  /** @domName EventTarget.removeEventListener */
+  @DocsEditable
+  @DomName('EventTarget.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "EventTarget_removeEventListener_Callback";
 
 }
@@ -10686,7 +10628,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName EXTTextureFilterAnisotropic
+@DocsEditable
+@DomName('EXTTextureFilterAnisotropic')
 class ExtTextureFilterAnisotropic extends NativeFieldWrapperClass1 {
   ExtTextureFilterAnisotropic.internal();
 
@@ -10702,59 +10645,60 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLFieldSetElement
+@DocsEditable
+@DomName('HTMLFieldSetElement')
 class FieldSetElement extends _Element_Merged {
   FieldSetElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FieldSetElement() => document.$dom_createElement("fieldset");
 
-
-  /** @domName HTMLFieldSetElement.disabled */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.disabled')
   bool get disabled native "HTMLFieldSetElement_disabled_Getter";
 
-
-  /** @domName HTMLFieldSetElement.disabled */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.disabled')
   void set disabled(bool value) native "HTMLFieldSetElement_disabled_Setter";
 
-
-  /** @domName HTMLFieldSetElement.elements */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.elements')
   HtmlCollection get elements native "HTMLFieldSetElement_elements_Getter";
 
-
-  /** @domName HTMLFieldSetElement.form */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.form')
   FormElement get form native "HTMLFieldSetElement_form_Getter";
 
-
-  /** @domName HTMLFieldSetElement.name */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.name')
   String get name native "HTMLFieldSetElement_name_Getter";
 
-
-  /** @domName HTMLFieldSetElement.name */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.name')
   void set name(String value) native "HTMLFieldSetElement_name_Setter";
 
-
-  /** @domName HTMLFieldSetElement.type */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.type')
   String get type native "HTMLFieldSetElement_type_Getter";
 
-
-  /** @domName HTMLFieldSetElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.validationMessage')
   String get validationMessage native "HTMLFieldSetElement_validationMessage_Getter";
 
-
-  /** @domName HTMLFieldSetElement.validity */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.validity')
   ValidityState get validity native "HTMLFieldSetElement_validity_Getter";
 
-
-  /** @domName HTMLFieldSetElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.willValidate')
   bool get willValidate native "HTMLFieldSetElement_willValidate_Getter";
 
-
-  /** @domName HTMLFieldSetElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.checkValidity')
   bool checkValidity() native "HTMLFieldSetElement_checkValidity_Callback";
 
-
-  /** @domName HTMLFieldSetElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLFieldSetElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLFieldSetElement_setCustomValidity_Callback";
 
 }
@@ -10765,20 +10709,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName File
+@DocsEditable
+@DomName('File')
 class File extends Blob {
   File.internal() : super.internal();
 
-
-  /** @domName File.lastModifiedDate */
+  @DocsEditable
+  @DomName('File.lastModifiedDate')
   Date get lastModifiedDate native "File_lastModifiedDate_Getter";
 
-
-  /** @domName File.name */
+  @DocsEditable
+  @DomName('File.name')
   String get name native "File_name_Getter";
 
-
-  /** @domName File.webkitRelativePath */
+  @DocsEditable
+  @DomName('File.webkitRelativePath')
   String get webkitRelativePath native "File_webkitRelativePath_Getter";
 
 }
@@ -10797,16 +10742,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileEntry
+@DocsEditable
+@DomName('FileEntry')
 class FileEntry extends Entry {
   FileEntry.internal() : super.internal();
 
-
-  /** @domName FileEntry.createWriter */
+  @DocsEditable
+  @DomName('FileEntry.createWriter')
   void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]) native "FileEntry_createWriter_Callback";
 
-
-  /** @domName FileEntry.file */
+  @DocsEditable
+  @DomName('FileEntry.file')
   void file(FileCallback successCallback, [ErrorCallback errorCallback]) native "FileEntry_file_Callback";
 
 }
@@ -10817,16 +10763,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileEntrySync
+@DocsEditable
+@DomName('FileEntrySync')
 class FileEntrySync extends EntrySync {
   FileEntrySync.internal() : super.internal();
 
-
-  /** @domName FileEntrySync.createWriter */
+  @DocsEditable
+  @DomName('FileEntrySync.createWriter')
   FileWriterSync createWriter() native "FileEntrySync_createWriter_Callback";
 
-
-  /** @domName FileEntrySync.file */
+  @DocsEditable
+  @DomName('FileEntrySync.file')
   File file() native "FileEntrySync_file_Callback";
 
 }
@@ -10837,7 +10784,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileError
+@DocsEditable
+@DomName('FileError')
 class FileError extends NativeFieldWrapperClass1 {
   FileError.internal();
 
@@ -10865,8 +10813,8 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
-
-  /** @domName FileError.code */
+  @DocsEditable
+  @DomName('FileError.code')
   int get code native "FileError_code_Getter";
 
 }
@@ -10877,7 +10825,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileException
+@DocsEditable
+@DomName('FileException')
 class FileException extends NativeFieldWrapperClass1 {
   FileException.internal();
 
@@ -10905,20 +10854,20 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
-
-  /** @domName FileException.code */
+  @DocsEditable
+  @DomName('FileException.code')
   int get code native "FileException_code_Getter";
 
-
-  /** @domName FileException.message */
+  @DocsEditable
+  @DomName('FileException.message')
   String get message native "FileException_message_Getter";
 
-
-  /** @domName FileException.name */
+  @DocsEditable
+  @DomName('FileException.name')
   String get name native "FileException_name_Getter";
 
-
-  /** @domName FileException.toString */
+  @DocsEditable
+  @DomName('FileException.toString')
   String toString() native "FileException_toString_Callback";
 
 }
@@ -10929,12 +10878,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileList
+@DocsEditable
+@DomName('FileList')
 class FileList extends NativeFieldWrapperClass1 implements List<File> {
   FileList.internal();
 
-
-  /** @domName FileList.length */
+  @DocsEditable
+  @DomName('FileList.length')
   int get length native "FileList_length_Getter";
 
   File operator[](int index) native "FileList_item_Callback";
@@ -10955,50 +10905,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, File)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(File element) => Collections.contains(this, element);
+  bool contains(File element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(File element)) => Collections.forEach(this, f);
+  void forEach(void f(File element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(File element)) => new MappedList<File, dynamic>(this, f);
+  List mappedBy(f(File element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<File> where(bool f(File element)) => new WhereIterable<File>(this, f);
+  Iterable<File> where(bool f(File element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(File element)) => Collections.every(this, f);
+  bool every(bool f(File element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(File element)) => Collections.any(this, f);
+  bool any(bool f(File element)) => IterableMixinWorkaround.any(this, f);
 
   List<File> toList() => new List<File>.from(this);
   Set<File> toSet() => new Set<File>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<File> take(int n) => new ListView<File>(this, 0, n);
+  List<File> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<File> takeWhile(bool test(File value)) {
-    return new TakeWhileIterable<File>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<File> skip(int n) => new ListView<File>(this, n, null);
+  List<File> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<File> skipWhile(bool test(File value)) {
-    return new SkipWhileIterable<File>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   File firstMatching(bool test(File value), { File orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   File lastMatching(bool test(File value), {File orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   File singleMatching(bool test(File value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   File elementAt(int index) {
@@ -11056,16 +11006,36 @@
     throw new StateError("More than one element");
   }
 
-  File min([int compare(File a, File b)]) => Collections.min(this, compare);
+  File min([int compare(File a, File b)]) => IterableMixinWorkaround.min(this, compare);
 
-  File max([int compare(File a, File b)]) => Collections.max(this, compare);
+  File max([int compare(File a, File b)]) => IterableMixinWorkaround.max(this, compare);
 
   File removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   File removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(File element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(File element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
@@ -11085,8 +11055,8 @@
 
   // -- end List<File> mixins.
 
-
-  /** @domName FileList.item */
+  @DocsEditable
+  @DomName('FileList.item')
   File item(int index) native "FileList_item_Callback";
 
 }
@@ -11097,7 +11067,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileReader
+@DocsEditable
+@DomName('FileReader')
 class FileReader extends EventTarget {
   FileReader.internal() : super.internal();
 
@@ -11113,11 +11084,12 @@
 
   static const EventStreamProvider<ProgressEvent> progressEvent = const EventStreamProvider<ProgressEvent>('progress');
 
-  ///@docsEditable true
+  @DocsEditable
   factory FileReader() => FileReader._create();
   static FileReader _create() native "FileReader_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   FileReaderEvents get on =>
     new FileReaderEvents(this);
 
@@ -11127,43 +11099,43 @@
 
   static const int LOADING = 1;
 
-
-  /** @domName FileReader.error */
+  @DocsEditable
+  @DomName('FileReader.error')
   FileError get error native "FileReader_error_Getter";
 
-
-  /** @domName FileReader.readyState */
+  @DocsEditable
+  @DomName('FileReader.readyState')
   int get readyState native "FileReader_readyState_Getter";
 
-
-  /** @domName FileReader.result */
+  @DocsEditable
+  @DomName('FileReader.result')
   Object get result native "FileReader_result_Getter";
 
-
-  /** @domName FileReader.abort */
+  @DocsEditable
+  @DomName('FileReader.abort')
   void abort() native "FileReader_abort_Callback";
 
-
-  /** @domName FileReader.addEventListener */
+  @DocsEditable
+  @DomName('FileReader.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "FileReader_addEventListener_Callback";
 
-
-  /** @domName FileReader.dispatchEvent */
+  @DocsEditable
+  @DomName('FileReader.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "FileReader_dispatchEvent_Callback";
 
-
-  /** @domName FileReader.readAsArrayBuffer */
+  @DocsEditable
+  @DomName('FileReader.readAsArrayBuffer')
   void readAsArrayBuffer(Blob blob) native "FileReader_readAsArrayBuffer_Callback";
 
-
-  /** @domName FileReader.readAsBinaryString */
+  @DocsEditable
+  @DomName('FileReader.readAsBinaryString')
   void readAsBinaryString(Blob blob) native "FileReader_readAsBinaryString_Callback";
 
-
-  /** @domName FileReader.readAsDataURL */
+  @DocsEditable
+  @DomName('FileReader.readAsDataURL')
   void readAsDataUrl(Blob blob) native "FileReader_readAsDataURL_Callback";
 
-  void readAsText(/*Blob*/ blob, [/*DOMString*/ encoding]) {
+  void readAsText(Blob blob, [String encoding]) {
     if (?encoding) {
       _readAsText_1(blob, encoding);
       return;
@@ -11171,16 +11143,16 @@
     _readAsText_2(blob);
   }
 
-
-  /** @domName FileReader.readAsText_1 */
+  @DocsEditable
+  @DomName('FileReader.readAsText_1')
   void _readAsText_1(blob, encoding) native "FileReader_readAsText_1_Callback";
 
-
-  /** @domName FileReader.readAsText_2 */
+  @DocsEditable
+  @DomName('FileReader.readAsText_2')
   void _readAsText_2(blob) native "FileReader_readAsText_2_Callback";
 
-
-  /** @domName FileReader.removeEventListener */
+  @DocsEditable
+  @DomName('FileReader.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "FileReader_removeEventListener_Callback";
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -11197,27 +11169,27 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class FileReaderEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   FileReaderEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadEnd => this['loadend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11227,39 +11199,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileReaderSync
+@DocsEditable
+@DomName('FileReaderSync')
 class FileReaderSync extends NativeFieldWrapperClass1 {
   FileReaderSync.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FileReaderSync() => FileReaderSync._create();
   static FileReaderSync _create() native "FileReaderSync_constructor_Callback";
 
-
-  /** @domName FileReaderSync.readAsArrayBuffer */
+  @DocsEditable
+  @DomName('FileReaderSync.readAsArrayBuffer')
   ArrayBuffer readAsArrayBuffer(Blob blob) native "FileReaderSync_readAsArrayBuffer_Callback";
 
-
-  /** @domName FileReaderSync.readAsBinaryString */
+  @DocsEditable
+  @DomName('FileReaderSync.readAsBinaryString')
   String readAsBinaryString(Blob blob) native "FileReaderSync_readAsBinaryString_Callback";
 
-
-  /** @domName FileReaderSync.readAsDataURL */
+  @DocsEditable
+  @DomName('FileReaderSync.readAsDataURL')
   String readAsDataUrl(Blob blob) native "FileReaderSync_readAsDataURL_Callback";
 
-  String readAsText(/*Blob*/ blob, [/*DOMString*/ encoding]) {
+  String readAsText(Blob blob, [String encoding]) {
     if (?encoding) {
       return _readAsText_1(blob, encoding);
     }
     return _readAsText_2(blob);
   }
 
-
-  /** @domName FileReaderSync.readAsText_1 */
+  @DocsEditable
+  @DomName('FileReaderSync.readAsText_1')
   String _readAsText_1(blob, encoding) native "FileReaderSync_readAsText_1_Callback";
 
-
-  /** @domName FileReaderSync.readAsText_2 */
+  @DocsEditable
+  @DomName('FileReaderSync.readAsText_2')
   String _readAsText_2(blob) native "FileReaderSync_readAsText_2_Callback";
 
 }
@@ -11270,19 +11243,20 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMFileSystem
+@DocsEditable
+@DomName('DOMFileSystem')
 class FileSystem extends NativeFieldWrapperClass1 {
   FileSystem.internal();
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName DOMFileSystem.name */
+  @DocsEditable
+  @DomName('DOMFileSystem.name')
   String get name native "DOMFileSystem_name_Getter";
 
-
-  /** @domName DOMFileSystem.root */
+  @DocsEditable
+  @DomName('DOMFileSystem.root')
   DirectoryEntry get root native "DOMFileSystem_root_Getter";
 
 }
@@ -11301,16 +11275,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DOMFileSystemSync
+@DocsEditable
+@DomName('DOMFileSystemSync')
 class FileSystemSync extends NativeFieldWrapperClass1 {
   FileSystemSync.internal();
 
-
-  /** @domName DOMFileSystemSync.name */
+  @DocsEditable
+  @DomName('DOMFileSystemSync.name')
   String get name native "DOMFileSystemSync_name_Getter";
 
-
-  /** @domName DOMFileSystemSync.root */
+  @DocsEditable
+  @DomName('DOMFileSystemSync.root')
   DirectoryEntrySync get root native "DOMFileSystemSync_root_Getter";
 
 }
@@ -11321,7 +11296,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileWriter
+@DocsEditable
+@DomName('FileWriter')
 class FileWriter extends EventTarget {
   FileWriter.internal() : super.internal();
 
@@ -11337,7 +11313,8 @@
 
   static const EventStreamProvider<ProgressEvent> writeStartEvent = const EventStreamProvider<ProgressEvent>('writestart');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   FileWriterEvents get on =>
     new FileWriterEvents(this);
 
@@ -11347,48 +11324,48 @@
 
   static const int WRITING = 1;
 
-
-  /** @domName FileWriter.error */
+  @DocsEditable
+  @DomName('FileWriter.error')
   FileError get error native "FileWriter_error_Getter";
 
-
-  /** @domName FileWriter.length */
+  @DocsEditable
+  @DomName('FileWriter.length')
   int get length native "FileWriter_length_Getter";
 
-
-  /** @domName FileWriter.position */
+  @DocsEditable
+  @DomName('FileWriter.position')
   int get position native "FileWriter_position_Getter";
 
-
-  /** @domName FileWriter.readyState */
+  @DocsEditable
+  @DomName('FileWriter.readyState')
   int get readyState native "FileWriter_readyState_Getter";
 
-
-  /** @domName FileWriter.abort */
+  @DocsEditable
+  @DomName('FileWriter.abort')
   void abort() native "FileWriter_abort_Callback";
 
-
-  /** @domName FileWriter.addEventListener */
+  @DocsEditable
+  @DomName('FileWriter.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "FileWriter_addEventListener_Callback";
 
-
-  /** @domName FileWriter.dispatchEvent */
+  @DocsEditable
+  @DomName('FileWriter.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "FileWriter_dispatchEvent_Callback";
 
-
-  /** @domName FileWriter.removeEventListener */
+  @DocsEditable
+  @DomName('FileWriter.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "FileWriter_removeEventListener_Callback";
 
-
-  /** @domName FileWriter.seek */
+  @DocsEditable
+  @DomName('FileWriter.seek')
   void seek(int position) native "FileWriter_seek_Callback";
 
-
-  /** @domName FileWriter.truncate */
+  @DocsEditable
+  @DomName('FileWriter.truncate')
   void truncate(int size) native "FileWriter_truncate_Callback";
 
-
-  /** @domName FileWriter.write */
+  @DocsEditable
+  @DomName('FileWriter.write')
   void write(Blob data) native "FileWriter_write_Callback";
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -11405,27 +11382,27 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class FileWriterEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   FileWriterEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get write => this['write'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get writeEnd => this['writeend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get writeStart => this['writestart'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11443,28 +11420,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName FileWriterSync
+@DocsEditable
+@DomName('FileWriterSync')
 class FileWriterSync extends NativeFieldWrapperClass1 {
   FileWriterSync.internal();
 
-
-  /** @domName FileWriterSync.length */
+  @DocsEditable
+  @DomName('FileWriterSync.length')
   int get length native "FileWriterSync_length_Getter";
 
-
-  /** @domName FileWriterSync.position */
+  @DocsEditable
+  @DomName('FileWriterSync.position')
   int get position native "FileWriterSync_position_Getter";
 
-
-  /** @domName FileWriterSync.seek */
+  @DocsEditable
+  @DomName('FileWriterSync.seek')
   void seek(int position) native "FileWriterSync_seek_Callback";
 
-
-  /** @domName FileWriterSync.truncate */
+  @DocsEditable
+  @DomName('FileWriterSync.truncate')
   void truncate(int size) native "FileWriterSync_truncate_Callback";
 
-
-  /** @domName FileWriterSync.write */
+  @DocsEditable
+  @DomName('FileWriterSync.write')
   void write(Blob data) native "FileWriterSync_write_Callback";
 
 }
@@ -11475,7 +11453,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Float32Array
+@DocsEditable
+@DomName('Float32Array')
 class Float32Array extends ArrayBufferView implements List<num> {
   Float32Array.internal() : super.internal();
 
@@ -11490,16 +11469,16 @@
 
   static const int BYTES_PER_ELEMENT = 4;
 
-
-  /** @domName Float32Array.length */
+  @DocsEditable
+  @DomName('Float32Array.length')
   int get length native "Float32Array_length_Getter";
 
-
-  /** @domName Float32Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Float32Array.numericIndexGetter')
   num operator[](int index) native "Float32Array_numericIndexGetter_Callback";
 
-
-  /** @domName Float32Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Float32Array.numericIndexSetter')
   void operator[]=(int index, num value) native "Float32Array_numericIndexSetter_Callback";
   // -- start List<num> mixins.
   // num is the element type.
@@ -11514,50 +11493,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, num)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(num element) => Collections.contains(this, element);
+  bool contains(num element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(num element)) => Collections.forEach(this, f);
+  void forEach(void f(num element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(num element)) => new MappedList<num, dynamic>(this, f);
+  List mappedBy(f(num element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<num> where(bool f(num element)) => new WhereIterable<num>(this, f);
+  Iterable<num> where(bool f(num element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(num element)) => Collections.every(this, f);
+  bool every(bool f(num element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(num element)) => Collections.any(this, f);
+  bool any(bool f(num element)) => IterableMixinWorkaround.any(this, f);
 
   List<num> toList() => new List<num>.from(this);
   Set<num> toSet() => new Set<num>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<num> take(int n) => new ListView<num>(this, 0, n);
+  List<num> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<num> takeWhile(bool test(num value)) {
-    return new TakeWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<num> skip(int n) => new ListView<num>(this, n, null);
+  List<num> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<num> skipWhile(bool test(num value)) {
-    return new SkipWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   num firstMatching(bool test(num value), { num orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   num lastMatching(bool test(num value), {num orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   num singleMatching(bool test(num value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   num elementAt(int index) {
@@ -11615,16 +11594,36 @@
     throw new StateError("More than one element");
   }
 
-  num min([int compare(num a, num b)]) => Collections.min(this, compare);
+  num min([int compare(num a, num b)]) => IterableMixinWorkaround.min(this, compare);
 
-  num max([int compare(num a, num b)]) => Collections.max(this, compare);
+  num max([int compare(num a, num b)]) => IterableMixinWorkaround.max(this, compare);
 
   num removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   num removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
@@ -11644,23 +11643,23 @@
 
   // -- end List<num> mixins.
 
-
-  /** @domName Float32Array.setElements */
+  @DocsEditable
+  @DomName('Float32Array.setElements')
   void setElements(Object array, [int offset]) native "Float32Array_setElements_Callback";
 
-  Float32Array subarray(/*long*/ start, [/*long*/ end]) {
+  Float32Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Float32Array.subarray_1 */
+  @DocsEditable
+  @DomName('Float32Array.subarray_1')
   Float32Array _subarray_1(start, end) native "Float32Array_subarray_1_Callback";
 
-
-  /** @domName Float32Array.subarray_2 */
+  @DocsEditable
+  @DomName('Float32Array.subarray_2')
   Float32Array _subarray_2(start) native "Float32Array_subarray_2_Callback";
 
 }
@@ -11671,7 +11670,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Float64Array
+@DocsEditable
+@DomName('Float64Array')
 class Float64Array extends ArrayBufferView implements List<num> {
   Float64Array.internal() : super.internal();
 
@@ -11686,16 +11686,16 @@
 
   static const int BYTES_PER_ELEMENT = 8;
 
-
-  /** @domName Float64Array.length */
+  @DocsEditable
+  @DomName('Float64Array.length')
   int get length native "Float64Array_length_Getter";
 
-
-  /** @domName Float64Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Float64Array.numericIndexGetter')
   num operator[](int index) native "Float64Array_numericIndexGetter_Callback";
 
-
-  /** @domName Float64Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Float64Array.numericIndexSetter')
   void operator[]=(int index, num value) native "Float64Array_numericIndexSetter_Callback";
   // -- start List<num> mixins.
   // num is the element type.
@@ -11710,50 +11710,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, num)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(num element) => Collections.contains(this, element);
+  bool contains(num element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(num element)) => Collections.forEach(this, f);
+  void forEach(void f(num element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(num element)) => new MappedList<num, dynamic>(this, f);
+  List mappedBy(f(num element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<num> where(bool f(num element)) => new WhereIterable<num>(this, f);
+  Iterable<num> where(bool f(num element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(num element)) => Collections.every(this, f);
+  bool every(bool f(num element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(num element)) => Collections.any(this, f);
+  bool any(bool f(num element)) => IterableMixinWorkaround.any(this, f);
 
   List<num> toList() => new List<num>.from(this);
   Set<num> toSet() => new Set<num>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<num> take(int n) => new ListView<num>(this, 0, n);
+  List<num> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<num> takeWhile(bool test(num value)) {
-    return new TakeWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<num> skip(int n) => new ListView<num>(this, n, null);
+  List<num> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<num> skipWhile(bool test(num value)) {
-    return new SkipWhileIterable<num>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   num firstMatching(bool test(num value), { num orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   num lastMatching(bool test(num value), {num orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   num singleMatching(bool test(num value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   num elementAt(int index) {
@@ -11811,16 +11811,36 @@
     throw new StateError("More than one element");
   }
 
-  num min([int compare(num a, num b)]) => Collections.min(this, compare);
+  num min([int compare(num a, num b)]) => IterableMixinWorkaround.min(this, compare);
 
-  num max([int compare(num a, num b)]) => Collections.max(this, compare);
+  num max([int compare(num a, num b)]) => IterableMixinWorkaround.max(this, compare);
 
   num removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   num removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(num element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
@@ -11840,23 +11860,23 @@
 
   // -- end List<num> mixins.
 
-
-  /** @domName Float64Array.setElements */
+  @DocsEditable
+  @DomName('Float64Array.setElements')
   void setElements(Object array, [int offset]) native "Float64Array_setElements_Callback";
 
-  Float64Array subarray(/*long*/ start, [/*long*/ end]) {
+  Float64Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Float64Array.subarray_1 */
+  @DocsEditable
+  @DomName('Float64Array.subarray_1')
   Float64Array _subarray_1(start, end) native "Float64Array_subarray_1_Callback";
 
-
-  /** @domName Float64Array.subarray_2 */
+  @DocsEditable
+  @DomName('Float64Array.subarray_2')
   Float64Array _subarray_2(start) native "Float64Array_subarray_2_Callback";
 
 }
@@ -11867,47 +11887,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLFontElement
-class FontElement extends _Element_Merged {
-  FontElement.internal() : super.internal();
-
-
-  /** @domName HTMLFontElement.color */
-  String get color native "HTMLFontElement_color_Getter";
-
-
-  /** @domName HTMLFontElement.color */
-  void set color(String value) native "HTMLFontElement_color_Setter";
-
-
-  /** @domName HTMLFontElement.face */
-  String get face native "HTMLFontElement_face_Getter";
-
-
-  /** @domName HTMLFontElement.face */
-  void set face(String value) native "HTMLFontElement_face_Setter";
-
-
-  /** @domName HTMLFontElement.size */
-  String get size native "HTMLFontElement_size_Getter";
-
-
-  /** @domName HTMLFontElement.size */
-  void set size(String value) native "HTMLFontElement_size_Setter";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName FormData
+@DocsEditable
+@DomName('FormData')
 class FormData extends NativeFieldWrapperClass1 {
   FormData.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FormData([FormElement form]) {
     if (!?form) {
       return FormData._create();
@@ -11916,8 +11901,8 @@
   }
   static FormData _create([FormElement form]) native "DOMFormData_constructor_Callback";
 
-
-  /** @domName DOMFormData.append */
+  @DocsEditable
+  @DomName('DOMFormData.append')
   void append(String name, value, [String filename]) native "DOMFormData_append_Callback";
 
 }
@@ -11928,99 +11913,100 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLFormElement
+@DocsEditable
+@DomName('HTMLFormElement')
 class FormElement extends _Element_Merged {
   FormElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FormElement() => document.$dom_createElement("form");
 
-
-  /** @domName HTMLFormElement.acceptCharset */
+  @DocsEditable
+  @DomName('HTMLFormElement.acceptCharset')
   String get acceptCharset native "HTMLFormElement_acceptCharset_Getter";
 
-
-  /** @domName HTMLFormElement.acceptCharset */
+  @DocsEditable
+  @DomName('HTMLFormElement.acceptCharset')
   void set acceptCharset(String value) native "HTMLFormElement_acceptCharset_Setter";
 
-
-  /** @domName HTMLFormElement.action */
+  @DocsEditable
+  @DomName('HTMLFormElement.action')
   String get action native "HTMLFormElement_action_Getter";
 
-
-  /** @domName HTMLFormElement.action */
+  @DocsEditable
+  @DomName('HTMLFormElement.action')
   void set action(String value) native "HTMLFormElement_action_Setter";
 
-
-  /** @domName HTMLFormElement.autocomplete */
+  @DocsEditable
+  @DomName('HTMLFormElement.autocomplete')
   String get autocomplete native "HTMLFormElement_autocomplete_Getter";
 
-
-  /** @domName HTMLFormElement.autocomplete */
+  @DocsEditable
+  @DomName('HTMLFormElement.autocomplete')
   void set autocomplete(String value) native "HTMLFormElement_autocomplete_Setter";
 
-
-  /** @domName HTMLFormElement.encoding */
+  @DocsEditable
+  @DomName('HTMLFormElement.encoding')
   String get encoding native "HTMLFormElement_encoding_Getter";
 
-
-  /** @domName HTMLFormElement.encoding */
+  @DocsEditable
+  @DomName('HTMLFormElement.encoding')
   void set encoding(String value) native "HTMLFormElement_encoding_Setter";
 
-
-  /** @domName HTMLFormElement.enctype */
+  @DocsEditable
+  @DomName('HTMLFormElement.enctype')
   String get enctype native "HTMLFormElement_enctype_Getter";
 
-
-  /** @domName HTMLFormElement.enctype */
+  @DocsEditable
+  @DomName('HTMLFormElement.enctype')
   void set enctype(String value) native "HTMLFormElement_enctype_Setter";
 
-
-  /** @domName HTMLFormElement.length */
+  @DocsEditable
+  @DomName('HTMLFormElement.length')
   int get length native "HTMLFormElement_length_Getter";
 
-
-  /** @domName HTMLFormElement.method */
+  @DocsEditable
+  @DomName('HTMLFormElement.method')
   String get method native "HTMLFormElement_method_Getter";
 
-
-  /** @domName HTMLFormElement.method */
+  @DocsEditable
+  @DomName('HTMLFormElement.method')
   void set method(String value) native "HTMLFormElement_method_Setter";
 
-
-  /** @domName HTMLFormElement.name */
+  @DocsEditable
+  @DomName('HTMLFormElement.name')
   String get name native "HTMLFormElement_name_Getter";
 
-
-  /** @domName HTMLFormElement.name */
+  @DocsEditable
+  @DomName('HTMLFormElement.name')
   void set name(String value) native "HTMLFormElement_name_Setter";
 
-
-  /** @domName HTMLFormElement.noValidate */
+  @DocsEditable
+  @DomName('HTMLFormElement.noValidate')
   bool get noValidate native "HTMLFormElement_noValidate_Getter";
 
-
-  /** @domName HTMLFormElement.noValidate */
+  @DocsEditable
+  @DomName('HTMLFormElement.noValidate')
   void set noValidate(bool value) native "HTMLFormElement_noValidate_Setter";
 
-
-  /** @domName HTMLFormElement.target */
+  @DocsEditable
+  @DomName('HTMLFormElement.target')
   String get target native "HTMLFormElement_target_Getter";
 
-
-  /** @domName HTMLFormElement.target */
+  @DocsEditable
+  @DomName('HTMLFormElement.target')
   void set target(String value) native "HTMLFormElement_target_Setter";
 
-
-  /** @domName HTMLFormElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLFormElement.checkValidity')
   bool checkValidity() native "HTMLFormElement_checkValidity_Callback";
 
-
-  /** @domName HTMLFormElement.reset */
+  @DocsEditable
+  @DomName('HTMLFormElement.reset')
   void reset() native "HTMLFormElement_reset_Callback";
 
-
-  /** @domName HTMLFormElement.submit */
+  @DocsEditable
+  @DomName('HTMLFormElement.submit')
   void submit() native "HTMLFormElement_submit_Callback";
 
 }
@@ -12031,253 +12017,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLFrameElement
-class FrameElement extends _Element_Merged {
-  FrameElement.internal() : super.internal();
-
-
-  /** @domName HTMLFrameElement.contentWindow */
-  WindowBase get contentWindow native "HTMLFrameElement_contentWindow_Getter";
-
-
-  /** @domName HTMLFrameElement.frameBorder */
-  String get frameBorder native "HTMLFrameElement_frameBorder_Getter";
-
-
-  /** @domName HTMLFrameElement.frameBorder */
-  void set frameBorder(String value) native "HTMLFrameElement_frameBorder_Setter";
-
-
-  /** @domName HTMLFrameElement.height */
-  int get height native "HTMLFrameElement_height_Getter";
-
-
-  /** @domName HTMLFrameElement.location */
-  String get location native "HTMLFrameElement_location_Getter";
-
-
-  /** @domName HTMLFrameElement.location */
-  void set location(String value) native "HTMLFrameElement_location_Setter";
-
-
-  /** @domName HTMLFrameElement.longDesc */
-  String get longDesc native "HTMLFrameElement_longDesc_Getter";
-
-
-  /** @domName HTMLFrameElement.longDesc */
-  void set longDesc(String value) native "HTMLFrameElement_longDesc_Setter";
-
-
-  /** @domName HTMLFrameElement.marginHeight */
-  String get marginHeight native "HTMLFrameElement_marginHeight_Getter";
-
-
-  /** @domName HTMLFrameElement.marginHeight */
-  void set marginHeight(String value) native "HTMLFrameElement_marginHeight_Setter";
-
-
-  /** @domName HTMLFrameElement.marginWidth */
-  String get marginWidth native "HTMLFrameElement_marginWidth_Getter";
-
-
-  /** @domName HTMLFrameElement.marginWidth */
-  void set marginWidth(String value) native "HTMLFrameElement_marginWidth_Setter";
-
-
-  /** @domName HTMLFrameElement.name */
-  String get name native "HTMLFrameElement_name_Getter";
-
-
-  /** @domName HTMLFrameElement.name */
-  void set name(String value) native "HTMLFrameElement_name_Setter";
-
-
-  /** @domName HTMLFrameElement.noResize */
-  bool get noResize native "HTMLFrameElement_noResize_Getter";
-
-
-  /** @domName HTMLFrameElement.noResize */
-  void set noResize(bool value) native "HTMLFrameElement_noResize_Setter";
-
-
-  /** @domName HTMLFrameElement.scrolling */
-  String get scrolling native "HTMLFrameElement_scrolling_Getter";
-
-
-  /** @domName HTMLFrameElement.scrolling */
-  void set scrolling(String value) native "HTMLFrameElement_scrolling_Setter";
-
-
-  /** @domName HTMLFrameElement.src */
-  String get src native "HTMLFrameElement_src_Getter";
-
-
-  /** @domName HTMLFrameElement.src */
-  void set src(String value) native "HTMLFrameElement_src_Setter";
-
-
-  /** @domName HTMLFrameElement.width */
-  int get width native "HTMLFrameElement_width_Getter";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName HTMLFrameSetElement
-class FrameSetElement extends _Element_Merged {
-  FrameSetElement.internal() : super.internal();
-
-  static const EventStreamProvider<Event> beforeUnloadEvent = const EventStreamProvider<Event>('beforeunload');
-
-  static const EventStreamProvider<Event> blurEvent = const EventStreamProvider<Event>('blur');
-
-  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
-
-  static const EventStreamProvider<Event> focusEvent = const EventStreamProvider<Event>('focus');
-
-  static const EventStreamProvider<HashChangeEvent> hashChangeEvent = const EventStreamProvider<HashChangeEvent>('hashchange');
-
-  static const EventStreamProvider<Event> loadEvent = const EventStreamProvider<Event>('load');
-
-  static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
-
-  static const EventStreamProvider<Event> offlineEvent = const EventStreamProvider<Event>('offline');
-
-  static const EventStreamProvider<Event> onlineEvent = const EventStreamProvider<Event>('online');
-
-  static const EventStreamProvider<PopStateEvent> popStateEvent = const EventStreamProvider<PopStateEvent>('popstate');
-
-  static const EventStreamProvider<Event> resizeEvent = const EventStreamProvider<Event>('resize');
-
-  static const EventStreamProvider<StorageEvent> storageEvent = const EventStreamProvider<StorageEvent>('storage');
-
-  static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
-
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
-  FrameSetElementEvents get on =>
-    new FrameSetElementEvents(this);
-
-
-  /** @domName HTMLFrameSetElement.cols */
-  String get cols native "HTMLFrameSetElement_cols_Getter";
-
-
-  /** @domName HTMLFrameSetElement.cols */
-  void set cols(String value) native "HTMLFrameSetElement_cols_Setter";
-
-
-  /** @domName HTMLFrameSetElement.rows */
-  String get rows native "HTMLFrameSetElement_rows_Getter";
-
-
-  /** @domName HTMLFrameSetElement.rows */
-  void set rows(String value) native "HTMLFrameSetElement_rows_Setter";
-
-  Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
-
-  Stream<Event> get onBlur => blurEvent.forTarget(this);
-
-  Stream<Event> get onError => errorEvent.forTarget(this);
-
-  Stream<Event> get onFocus => focusEvent.forTarget(this);
-
-  Stream<HashChangeEvent> get onHashChange => hashChangeEvent.forTarget(this);
-
-  Stream<Event> get onLoad => loadEvent.forTarget(this);
-
-  Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
-
-  Stream<Event> get onOffline => offlineEvent.forTarget(this);
-
-  Stream<Event> get onOnline => onlineEvent.forTarget(this);
-
-  Stream<PopStateEvent> get onPopState => popStateEvent.forTarget(this);
-
-  Stream<Event> get onResize => resizeEvent.forTarget(this);
-
-  Stream<StorageEvent> get onStorage => storageEvent.forTarget(this);
-
-  Stream<Event> get onUnload => unloadEvent.forTarget(this);
-
-}
-
-/// @docsEditable true
-class FrameSetElementEvents extends ElementEvents {
-  /// @docsEditable true
-  FrameSetElementEvents(EventTarget _ptr) : super(_ptr);
-
-  /// @docsEditable true
-  EventListenerList get beforeUnload => this['beforeunload'];
-
-  /// @docsEditable true
-  EventListenerList get blur => this['blur'];
-
-  /// @docsEditable true
-  EventListenerList get error => this['error'];
-
-  /// @docsEditable true
-  EventListenerList get focus => this['focus'];
-
-  /// @docsEditable true
-  EventListenerList get hashChange => this['hashchange'];
-
-  /// @docsEditable true
-  EventListenerList get load => this['load'];
-
-  /// @docsEditable true
-  EventListenerList get message => this['message'];
-
-  /// @docsEditable true
-  EventListenerList get offline => this['offline'];
-
-  /// @docsEditable true
-  EventListenerList get online => this['online'];
-
-  /// @docsEditable true
-  EventListenerList get popState => this['popstate'];
-
-  /// @docsEditable true
-  EventListenerList get resize => this['resize'];
-
-  /// @docsEditable true
-  EventListenerList get storage => this['storage'];
-
-  /// @docsEditable true
-  EventListenerList get unload => this['unload'];
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Gamepad
+@DocsEditable
+@DomName('Gamepad')
 class Gamepad extends NativeFieldWrapperClass1 {
   Gamepad.internal();
 
-
-  /** @domName Gamepad.axes */
+  @DocsEditable
+  @DomName('Gamepad.axes')
   List<num> get axes native "Gamepad_axes_Getter";
 
-
-  /** @domName Gamepad.buttons */
+  @DocsEditable
+  @DomName('Gamepad.buttons')
   List<num> get buttons native "Gamepad_buttons_Getter";
 
-
-  /** @domName Gamepad.id */
+  @DocsEditable
+  @DomName('Gamepad.id')
   String get id native "Gamepad_id_Getter";
 
-
-  /** @domName Gamepad.index */
+  @DocsEditable
+  @DomName('Gamepad.index')
   int get index native "Gamepad_index_Getter";
 
-
-  /** @domName Gamepad.timestamp */
+  @DocsEditable
+  @DomName('Gamepad.timestamp')
   int get timestamp native "Gamepad_timestamp_Getter";
 
 }
@@ -12288,20 +12050,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Geolocation
+@DocsEditable
+@DomName('Geolocation')
 class Geolocation extends NativeFieldWrapperClass1 {
   Geolocation.internal();
 
-
-  /** @domName Geolocation.clearWatch */
+  @DocsEditable
+  @DomName('Geolocation.clearWatch')
   void clearWatch(int watchId) native "Geolocation_clearWatch_Callback";
 
-
-  /** @domName Geolocation.getCurrentPosition */
+  @DocsEditable
+  @DomName('Geolocation.getCurrentPosition')
   void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native "Geolocation_getCurrentPosition_Callback";
 
-
-  /** @domName Geolocation.watchPosition */
+  @DocsEditable
+  @DomName('Geolocation.watchPosition')
   int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native "Geolocation_watchPosition_Callback";
 
 }
@@ -12312,16 +12075,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Geoposition
+@DocsEditable
+@DomName('Geoposition')
 class Geoposition extends NativeFieldWrapperClass1 {
   Geoposition.internal();
 
-
-  /** @domName Geoposition.coords */
+  @DocsEditable
+  @DomName('Geoposition.coords')
   Coordinates get coords native "Geoposition_coords_Getter";
 
-
-  /** @domName Geoposition.timestamp */
+  @DocsEditable
+  @DomName('Geoposition.timestamp')
   int get timestamp native "Geoposition_timestamp_Getter";
 
 }
@@ -12332,11 +12096,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLHRElement
+@DocsEditable
+@DomName('HTMLHRElement')
 class HRElement extends _Element_Merged {
   HRElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory HRElement() => document.$dom_createElement("hr");
 
 }
@@ -12347,20 +12112,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HashChangeEvent
+@DocsEditable
+@DomName('HashChangeEvent')
 class HashChangeEvent extends Event {
   HashChangeEvent.internal() : super.internal();
 
-
-  /** @domName HashChangeEvent.newURL */
+  @DocsEditable
+  @DomName('HashChangeEvent.newURL')
   String get newUrl native "HashChangeEvent_newURL_Getter";
 
-
-  /** @domName HashChangeEvent.oldURL */
+  @DocsEditable
+  @DomName('HashChangeEvent.oldURL')
   String get oldUrl native "HashChangeEvent_oldURL_Getter";
 
-
-  /** @domName HashChangeEvent.initHashChangeEvent */
+  @DocsEditable
+  @DomName('HashChangeEvent.initHashChangeEvent')
   void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) native "HashChangeEvent_initHashChangeEvent_Callback";
 
 }
@@ -12371,11 +12137,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLHeadElement
+@DocsEditable
+@DomName('HTMLHeadElement')
 class HeadElement extends _Element_Merged {
   HeadElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadElement() => document.$dom_createElement("head");
 
 }
@@ -12386,26 +12153,27 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLHeadingElement
+@DocsEditable
+@DomName('HTMLHeadingElement')
 class HeadingElement extends _Element_Merged {
   HeadingElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h1() => document.$dom_createElement("h1");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h2() => document.$dom_createElement("h2");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h3() => document.$dom_createElement("h3");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h4() => document.$dom_createElement("h4");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h5() => document.$dom_createElement("h5");
 
-  ///@docsEditable true
+  @DocsEditable
   factory HeadingElement.h6() => document.$dom_createElement("h6");
 
 }
@@ -12414,7 +12182,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName History; @docsEditable true
+
+@DocsEditable
+@DomName('History')
 class History extends NativeFieldWrapperClass1 implements HistoryBase {
 
   /**
@@ -12429,36 +12199,36 @@
   static bool get supportsState => true;
   History.internal();
 
-
-  /** @domName History.length */
+  @DocsEditable
+  @DomName('History.length')
   int get length native "History_length_Getter";
 
-
-  /** @domName History.state */
+  @DocsEditable
+  @DomName('History.state')
   dynamic get state native "History_state_Getter";
 
-
-  /** @domName History.back */
+  @DocsEditable
+  @DomName('History.back')
   void back() native "History_back_Callback";
 
-
-  /** @domName History.forward */
+  @DocsEditable
+  @DomName('History.forward')
   void forward() native "History_forward_Callback";
 
-
-  /** @domName History.go */
+  @DocsEditable
+  @DomName('History.go')
   void go(int distance) native "History_go_Callback";
 
-
-  /** @domName History.pushState */
+  @DocsEditable
+  @DomName('History.pushState')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
   void pushState(Object data, String title, [String url]) native "History_pushState_Callback";
 
-
-  /** @domName History.replaceState */
+  @DocsEditable
+  @DomName('History.replaceState')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -12472,12 +12242,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLAllCollection
+@DocsEditable
+@DomName('HTMLAllCollection')
 class HtmlAllCollection extends NativeFieldWrapperClass1 implements List<Node> {
   HtmlAllCollection.internal();
 
-
-  /** @domName HTMLAllCollection.length */
+  @DocsEditable
+  @DomName('HTMLAllCollection.length')
   int get length native "HTMLAllCollection_length_Getter";
 
   Node operator[](int index) native "HTMLAllCollection_item_Callback";
@@ -12498,50 +12269,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -12599,16 +12370,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -12628,16 +12419,16 @@
 
   // -- end List<Node> mixins.
 
-
-  /** @domName HTMLAllCollection.item */
+  @DocsEditable
+  @DomName('HTMLAllCollection.item')
   Node item(int index) native "HTMLAllCollection_item_Callback";
 
-
-  /** @domName HTMLAllCollection.namedItem */
+  @DocsEditable
+  @DomName('HTMLAllCollection.namedItem')
   Node namedItem(String name) native "HTMLAllCollection_namedItem_Callback";
 
-
-  /** @domName HTMLAllCollection.tags */
+  @DocsEditable
+  @DomName('HTMLAllCollection.tags')
   List<Node> tags(String name) native "HTMLAllCollection_tags_Callback";
 
 }
@@ -12648,12 +12439,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLCollection
+@DocsEditable
+@DomName('HTMLCollection')
 class HtmlCollection extends NativeFieldWrapperClass1 implements List<Node> {
   HtmlCollection.internal();
 
-
-  /** @domName HTMLCollection.length */
+  @DocsEditable
+  @DomName('HTMLCollection.length')
   int get length native "HTMLCollection_length_Getter";
 
   Node operator[](int index) native "HTMLCollection_item_Callback";
@@ -12674,50 +12466,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -12775,16 +12567,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -12804,12 +12616,12 @@
 
   // -- end List<Node> mixins.
 
-
-  /** @domName HTMLCollection.item */
+  @DocsEditable
+  @DomName('HTMLCollection.item')
   Node item(int index) native "HTMLCollection_item_Callback";
 
-
-  /** @domName HTMLCollection.namedItem */
+  @DocsEditable
+  @DomName('HTMLCollection.namedItem')
   Node namedItem(String name) native "HTMLCollection_namedItem_Callback";
 
 }
@@ -12820,28 +12632,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLDocument
+@DocsEditable
+@DomName('HTMLDocument')
 class HtmlDocument extends Document {
   HtmlDocument.internal() : super.internal();
 
-
-  /** @domName HTMLDocument.activeElement */
+  @DocsEditable
+  @DomName('HTMLDocument.activeElement')
   Element get activeElement native "HTMLDocument_activeElement_Getter";
 
-  /** @domName Document.body */
+  @DomName('Document.body')
   BodyElement get body => document.$dom_body;
 
-  /** @domName Document.body */
+  @DomName('Document.body')
   void set body(BodyElement value) {
     document.$dom_body = value;
   }
 
-  /** @domName Document.caretRangeFromPoint */
+  @DomName('Document.caretRangeFromPoint')
   Range caretRangeFromPoint(int x, int y) {
     return document.$dom_caretRangeFromPoint(x, y);
   }
 
-  /** @domName Document.elementFromPoint */
+  @DomName('Document.elementFromPoint')
   Element elementFromPoint(int x, int y) {
     return document.$dom_elementFromPoint(x, y);
   }
@@ -12879,72 +12692,73 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
+  @DomName('Document.getCSSCanvasContext')
   CanvasRenderingContext getCssCanvasContext(String contextId, String name,
       int width, int height) {
     return document.$dom_getCssCanvasContext(contextId, name, width, height);
   }
 
-  /** @domName Document.head */
+  @DomName('Document.head')
   HeadElement get head => document.$dom_head;
 
-  /** @domName Document.lastModified */
+  @DomName('Document.lastModified')
   String get lastModified => document.$dom_lastModified;
 
-  /** @domName Document.preferredStylesheetSet */
+  @DomName('Document.preferredStylesheetSet')
   String get preferredStylesheetSet => document.$dom_preferredStylesheetSet;
 
-  /** @domName Document.referrer */
+  @DomName('Document.referrer')
   String get referrer => document.$dom_referrer;
 
-  /** @domName Document.selectedStylesheetSet */
+  @DomName('Document.selectedStylesheetSet')
   String get selectedStylesheetSet => document.$dom_selectedStylesheetSet;
   void set selectedStylesheetSet(String value) {
     document.$dom_selectedStylesheetSet = value;
   }
 
-  /** @domName Document.styleSheets */
+  @DomName('Document.styleSheets')
   List<StyleSheet> get styleSheets => document.$dom_styleSheets;
 
-  /** @domName Document.title */
+  @DomName('Document.title')
   String get title => document.$dom_title;
 
-  /** @domName Document.title */
+  @DomName('Document.title')
   void set title(String value) {
     document.$dom_title = value;
   }
 
-  /** @domName Document.webkitCancelFullScreen */
+  @DomName('Document.webkitCancelFullScreen')
   void webkitCancelFullScreen() {
     document.$dom_webkitCancelFullScreen();
   }
 
-  /** @domName Document.webkitExitFullscreen */
+  @DomName('Document.webkitExitFullscreen')
   void webkitExitFullscreen() {
     document.$dom_webkitExitFullscreen();
   }
 
-  /** @domName Document.webkitExitPointerLock */
+  @DomName('Document.webkitExitPointerLock')
   void webkitExitPointerLock() {
     document.$dom_webkitExitPointerLock();
   }
 
-  /** @domName Document.webkitFullscreenElement */
+  @DomName('Document.webkitFullscreenElement')
   Element get webkitFullscreenElement => document.$dom_webkitFullscreenElement;
 
-  /** @domName Document.webkitFullscreenEnabled */
+  @DomName('Document.webkitFullscreenEnabled')
   bool get webkitFullscreenEnabled => document.$dom_webkitFullscreenEnabled;
 
-  /** @domName Document.webkitHidden */
+  @DomName('Document.webkitHidden')
   bool get webkitHidden => document.$dom_webkitHidden;
 
-  /** @domName Document.webkitIsFullScreen */
+  @DomName('Document.webkitIsFullScreen')
   bool get webkitIsFullScreen => document.$dom_webkitIsFullScreen;
 
-  /** @domName Document.webkitPointerLockElement */
+  @DomName('Document.webkitPointerLockElement')
   Element get webkitPointerLockElement =>
       document.$dom_webkitPointerLockElement;
 
-  /** @domName Document.webkitVisibilityState */
+  @DomName('Document.webkitVisibilityState')
   String get webkitVisibilityState => document.$dom_webkitVisibilityState;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12954,11 +12768,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLHtmlElement
+@DocsEditable
+@DomName('HTMLHtmlElement')
 class HtmlElement extends _Element_Merged {
   HtmlElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory HtmlElement() => document.$dom_createElement("html");
 
 }
@@ -12969,12 +12784,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLFormControlsCollection
+@DocsEditable
+@DomName('HTMLFormControlsCollection')
 class HtmlFormControlsCollection extends HtmlCollection {
   HtmlFormControlsCollection.internal() : super.internal();
 
-
-  /** @domName HTMLFormControlsCollection.namedItem */
+  @DocsEditable
+  @DomName('HTMLFormControlsCollection.namedItem')
   Node namedItem(String name) native "HTMLFormControlsCollection_namedItem_Callback";
 
 }
@@ -12985,38 +12801,15 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLOptionsCollection
+@DocsEditable
+@DomName('HTMLOptionsCollection')
 class HtmlOptionsCollection extends HtmlCollection {
   HtmlOptionsCollection.internal() : super.internal();
 
-
-  /** @domName HTMLOptionsCollection.length */
-  int get length native "HTMLOptionsCollection_length_Getter";
-
-
-  /** @domName HTMLOptionsCollection.length */
-  void set length(int value) native "HTMLOptionsCollection_length_Setter";
-
-
-  /** @domName HTMLOptionsCollection.selectedIndex */
-  int get selectedIndex native "HTMLOptionsCollection_selectedIndex_Getter";
-
-
-  /** @domName HTMLOptionsCollection.selectedIndex */
-  void set selectedIndex(int value) native "HTMLOptionsCollection_selectedIndex_Setter";
-
-
-  /** @domName HTMLOptionsCollection.numericIndexSetter */
+  @DocsEditable
+  @DomName('HTMLOptionsCollection.numericIndexSetter')
   void operator[]=(int index, Node value) native "HTMLOptionsCollection_numericIndexSetter_Callback";
 
-
-  /** @domName HTMLOptionsCollection.namedItem */
-  Node namedItem(String name) native "HTMLOptionsCollection_namedItem_Callback";
-
-
-  /** @domName HTMLOptionsCollection.remove */
-  void remove(int index) native "HTMLOptionsCollection_remove_Callback";
-
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -13048,7 +12841,7 @@
  * * [JS XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest)
  * * [Using XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest)
  */
-/// @domName XMLHttpRequest
+@DomName('XMLHttpRequest')
 class HttpRequest extends EventTarget {
   /**
    * Creates a URL get request for the specified `url`.
@@ -13097,11 +12890,12 @@
 
   static const EventStreamProvider<ProgressEvent> readyStateChangeEvent = const EventStreamProvider<ProgressEvent>('readystatechange');
 
-  ///@docsEditable true
+  @DocsEditable
   factory HttpRequest() => HttpRequest._create();
   static HttpRequest _create() native "XMLHttpRequest_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   HttpRequestEvents get on =>
     new HttpRequestEvents(this);
 
@@ -13115,88 +12909,88 @@
 
   static const int UNSENT = 0;
 
-
-  /** @domName XMLHttpRequest.readyState */
+  @DocsEditable
+  @DomName('XMLHttpRequest.readyState')
   int get readyState native "XMLHttpRequest_readyState_Getter";
 
-
-  /** @domName XMLHttpRequest.response */
+  @DocsEditable
+  @DomName('XMLHttpRequest.response')
   Object get response native "XMLHttpRequest_response_Getter";
 
-
-  /** @domName XMLHttpRequest.responseText */
+  @DocsEditable
+  @DomName('XMLHttpRequest.responseText')
   String get responseText native "XMLHttpRequest_responseText_Getter";
 
-
-  /** @domName XMLHttpRequest.responseType */
+  @DocsEditable
+  @DomName('XMLHttpRequest.responseType')
   String get responseType native "XMLHttpRequest_responseType_Getter";
 
-
-  /** @domName XMLHttpRequest.responseType */
+  @DocsEditable
+  @DomName('XMLHttpRequest.responseType')
   void set responseType(String value) native "XMLHttpRequest_responseType_Setter";
 
-
-  /** @domName XMLHttpRequest.responseXML */
+  @DocsEditable
+  @DomName('XMLHttpRequest.responseXML')
   Document get responseXml native "XMLHttpRequest_responseXML_Getter";
 
-
-  /** @domName XMLHttpRequest.status */
+  @DocsEditable
+  @DomName('XMLHttpRequest.status')
   int get status native "XMLHttpRequest_status_Getter";
 
-
-  /** @domName XMLHttpRequest.statusText */
+  @DocsEditable
+  @DomName('XMLHttpRequest.statusText')
   String get statusText native "XMLHttpRequest_statusText_Getter";
 
-
-  /** @domName XMLHttpRequest.upload */
+  @DocsEditable
+  @DomName('XMLHttpRequest.upload')
   HttpRequestUpload get upload native "XMLHttpRequest_upload_Getter";
 
-
-  /** @domName XMLHttpRequest.withCredentials */
+  @DocsEditable
+  @DomName('XMLHttpRequest.withCredentials')
   bool get withCredentials native "XMLHttpRequest_withCredentials_Getter";
 
-
-  /** @domName XMLHttpRequest.withCredentials */
+  @DocsEditable
+  @DomName('XMLHttpRequest.withCredentials')
   void set withCredentials(bool value) native "XMLHttpRequest_withCredentials_Setter";
 
-
-  /** @domName XMLHttpRequest.abort */
+  @DocsEditable
+  @DomName('XMLHttpRequest.abort')
   void abort() native "XMLHttpRequest_abort_Callback";
 
-
-  /** @domName XMLHttpRequest.addEventListener */
+  @DocsEditable
+  @DomName('XMLHttpRequest.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequest_addEventListener_Callback";
 
-
-  /** @domName XMLHttpRequest.dispatchEvent */
+  @DocsEditable
+  @DomName('XMLHttpRequest.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "XMLHttpRequest_dispatchEvent_Callback";
 
-
-  /** @domName XMLHttpRequest.getAllResponseHeaders */
+  @DocsEditable
+  @DomName('XMLHttpRequest.getAllResponseHeaders')
   String getAllResponseHeaders() native "XMLHttpRequest_getAllResponseHeaders_Callback";
 
-
-  /** @domName XMLHttpRequest.getResponseHeader */
+  @DocsEditable
+  @DomName('XMLHttpRequest.getResponseHeader')
   String getResponseHeader(String header) native "XMLHttpRequest_getResponseHeader_Callback";
 
-
-  /** @domName XMLHttpRequest.open */
+  @DocsEditable
+  @DomName('XMLHttpRequest.open')
   void open(String method, String url, [bool async, String user, String password]) native "XMLHttpRequest_open_Callback";
 
-
-  /** @domName XMLHttpRequest.overrideMimeType */
+  @DocsEditable
+  @DomName('XMLHttpRequest.overrideMimeType')
   void overrideMimeType(String override) native "XMLHttpRequest_overrideMimeType_Callback";
 
-
-  /** @domName XMLHttpRequest.removeEventListener */
+  @DocsEditable
+  @DomName('XMLHttpRequest.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequest_removeEventListener_Callback";
 
-
-  /** @domName XMLHttpRequest.send */
+  @DocsEditable
+  @DomName('XMLHttpRequest.send')
   void send([data]) native "XMLHttpRequest_send_Callback";
 
-
-  /** @domName XMLHttpRequest.setRequestHeader */
+  @DocsEditable
+  @DomName('XMLHttpRequest.setRequestHeader')
   void setRequestHeader(String header, String value) native "XMLHttpRequest_setRequestHeader_Callback";
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -13215,30 +13009,30 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class HttpRequestEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   HttpRequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadEnd => this['loadend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get readyStateChange => this['readystatechange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13248,7 +13042,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XMLHttpRequestException
+@DocsEditable
+@DomName('XMLHttpRequestException')
 class HttpRequestException extends NativeFieldWrapperClass1 {
   HttpRequestException.internal();
 
@@ -13256,20 +13051,20 @@
 
   static const int NETWORK_ERR = 101;
 
-
-  /** @domName XMLHttpRequestException.code */
+  @DocsEditable
+  @DomName('XMLHttpRequestException.code')
   int get code native "XMLHttpRequestException_code_Getter";
 
-
-  /** @domName XMLHttpRequestException.message */
+  @DocsEditable
+  @DomName('XMLHttpRequestException.message')
   String get message native "XMLHttpRequestException_message_Getter";
 
-
-  /** @domName XMLHttpRequestException.name */
+  @DocsEditable
+  @DomName('XMLHttpRequestException.name')
   String get name native "XMLHttpRequestException_name_Getter";
 
-
-  /** @domName XMLHttpRequestException.toString */
+  @DocsEditable
+  @DomName('XMLHttpRequestException.toString')
   String toString() native "XMLHttpRequestException_toString_Callback";
 
 }
@@ -13280,16 +13075,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XMLHttpRequestProgressEvent
+@DocsEditable
+@DomName('XMLHttpRequestProgressEvent')
 class HttpRequestProgressEvent extends ProgressEvent {
   HttpRequestProgressEvent.internal() : super.internal();
 
-
-  /** @domName XMLHttpRequestProgressEvent.position */
+  @DocsEditable
+  @DomName('XMLHttpRequestProgressEvent.position')
   int get position native "XMLHttpRequestProgressEvent_position_Getter";
 
-
-  /** @domName XMLHttpRequestProgressEvent.totalSize */
+  @DocsEditable
+  @DomName('XMLHttpRequestProgressEvent.totalSize')
   int get totalSize native "XMLHttpRequestProgressEvent_totalSize_Getter";
 
 }
@@ -13300,7 +13096,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XMLHttpRequestUpload
+@DocsEditable
+@DomName('XMLHttpRequestUpload')
 class HttpRequestUpload extends EventTarget {
   HttpRequestUpload.internal() : super.internal();
 
@@ -13316,20 +13113,21 @@
 
   static const EventStreamProvider<ProgressEvent> progressEvent = const EventStreamProvider<ProgressEvent>('progress');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   HttpRequestUploadEvents get on =>
     new HttpRequestUploadEvents(this);
 
-
-  /** @domName XMLHttpRequestUpload.addEventListener */
+  @DocsEditable
+  @DomName('XMLHttpRequestUpload.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequestUpload_addEventListener_Callback";
 
-
-  /** @domName XMLHttpRequestUpload.dispatchEvent */
+  @DocsEditable
+  @DomName('XMLHttpRequestUpload.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "XMLHttpRequestUpload_dispatchEvent_Callback";
 
-
-  /** @domName XMLHttpRequestUpload.removeEventListener */
+  @DocsEditable
+  @DomName('XMLHttpRequestUpload.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequestUpload_removeEventListener_Callback";
 
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
@@ -13346,27 +13144,27 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class HttpRequestUploadEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   HttpRequestUploadEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadEnd => this['loadend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13376,63 +13174,64 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLIFrameElement
+@DocsEditable
+@DomName('HTMLIFrameElement')
 class IFrameElement extends _Element_Merged {
   IFrameElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory IFrameElement() => document.$dom_createElement("iframe");
 
-
-  /** @domName HTMLIFrameElement.contentWindow */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.contentWindow')
   WindowBase get contentWindow native "HTMLIFrameElement_contentWindow_Getter";
 
-
-  /** @domName HTMLIFrameElement.height */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.height')
   String get height native "HTMLIFrameElement_height_Getter";
 
-
-  /** @domName HTMLIFrameElement.height */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.height')
   void set height(String value) native "HTMLIFrameElement_height_Setter";
 
-
-  /** @domName HTMLIFrameElement.name */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.name')
   String get name native "HTMLIFrameElement_name_Getter";
 
-
-  /** @domName HTMLIFrameElement.name */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.name')
   void set name(String value) native "HTMLIFrameElement_name_Setter";
 
-
-  /** @domName HTMLIFrameElement.sandbox */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.sandbox')
   String get sandbox native "HTMLIFrameElement_sandbox_Getter";
 
-
-  /** @domName HTMLIFrameElement.sandbox */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.sandbox')
   void set sandbox(String value) native "HTMLIFrameElement_sandbox_Setter";
 
-
-  /** @domName HTMLIFrameElement.src */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.src')
   String get src native "HTMLIFrameElement_src_Getter";
 
-
-  /** @domName HTMLIFrameElement.src */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.src')
   void set src(String value) native "HTMLIFrameElement_src_Setter";
 
-
-  /** @domName HTMLIFrameElement.srcdoc */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.srcdoc')
   String get srcdoc native "HTMLIFrameElement_srcdoc_Getter";
 
-
-  /** @domName HTMLIFrameElement.srcdoc */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.srcdoc')
   void set srcdoc(String value) native "HTMLIFrameElement_srcdoc_Setter";
 
-
-  /** @domName HTMLIFrameElement.width */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.width')
   String get width native "HTMLIFrameElement_width_Getter";
 
-
-  /** @domName HTMLIFrameElement.width */
+  @DocsEditable
+  @DomName('HTMLIFrameElement.width')
   void set width(String value) native "HTMLIFrameElement_width_Setter";
 
 }
@@ -13443,20 +13242,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ImageData
+@DocsEditable
+@DomName('ImageData')
 class ImageData extends NativeFieldWrapperClass1 {
   ImageData.internal();
 
-
-  /** @domName ImageData.data */
+  @DocsEditable
+  @DomName('ImageData.data')
   Uint8ClampedArray get data native "ImageData_data_Getter";
 
-
-  /** @domName ImageData.height */
+  @DocsEditable
+  @DomName('ImageData.height')
   int get height native "ImageData_height_Getter";
 
-
-  /** @domName ImageData.width */
+  @DocsEditable
+  @DomName('ImageData.width')
   int get width native "ImageData_width_Getter";
 
 }
@@ -13467,11 +13267,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLImageElement
+@DocsEditable
+@DomName('HTMLImageElement')
 class ImageElement extends _Element_Merged {
   ImageElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ImageElement({String src, int width, int height}) {
     var e = document.$dom_createElement("img");
     if (src != null) e.src = src;
@@ -13480,96 +13281,96 @@
     return e;
   }
 
-
-  /** @domName HTMLImageElement.alt */
+  @DocsEditable
+  @DomName('HTMLImageElement.alt')
   String get alt native "HTMLImageElement_alt_Getter";
 
-
-  /** @domName HTMLImageElement.alt */
+  @DocsEditable
+  @DomName('HTMLImageElement.alt')
   void set alt(String value) native "HTMLImageElement_alt_Setter";
 
-
-  /** @domName HTMLImageElement.border */
+  @DocsEditable
+  @DomName('HTMLImageElement.border')
   String get border native "HTMLImageElement_border_Getter";
 
-
-  /** @domName HTMLImageElement.border */
+  @DocsEditable
+  @DomName('HTMLImageElement.border')
   void set border(String value) native "HTMLImageElement_border_Setter";
 
-
-  /** @domName HTMLImageElement.complete */
+  @DocsEditable
+  @DomName('HTMLImageElement.complete')
   bool get complete native "HTMLImageElement_complete_Getter";
 
-
-  /** @domName HTMLImageElement.crossOrigin */
+  @DocsEditable
+  @DomName('HTMLImageElement.crossOrigin')
   String get crossOrigin native "HTMLImageElement_crossOrigin_Getter";
 
-
-  /** @domName HTMLImageElement.crossOrigin */
+  @DocsEditable
+  @DomName('HTMLImageElement.crossOrigin')
   void set crossOrigin(String value) native "HTMLImageElement_crossOrigin_Setter";
 
-
-  /** @domName HTMLImageElement.height */
+  @DocsEditable
+  @DomName('HTMLImageElement.height')
   int get height native "HTMLImageElement_height_Getter";
 
-
-  /** @domName HTMLImageElement.height */
+  @DocsEditable
+  @DomName('HTMLImageElement.height')
   void set height(int value) native "HTMLImageElement_height_Setter";
 
-
-  /** @domName HTMLImageElement.isMap */
+  @DocsEditable
+  @DomName('HTMLImageElement.isMap')
   bool get isMap native "HTMLImageElement_isMap_Getter";
 
-
-  /** @domName HTMLImageElement.isMap */
+  @DocsEditable
+  @DomName('HTMLImageElement.isMap')
   void set isMap(bool value) native "HTMLImageElement_isMap_Setter";
 
-
-  /** @domName HTMLImageElement.lowsrc */
+  @DocsEditable
+  @DomName('HTMLImageElement.lowsrc')
   String get lowsrc native "HTMLImageElement_lowsrc_Getter";
 
-
-  /** @domName HTMLImageElement.lowsrc */
+  @DocsEditable
+  @DomName('HTMLImageElement.lowsrc')
   void set lowsrc(String value) native "HTMLImageElement_lowsrc_Setter";
 
-
-  /** @domName HTMLImageElement.naturalHeight */
+  @DocsEditable
+  @DomName('HTMLImageElement.naturalHeight')
   int get naturalHeight native "HTMLImageElement_naturalHeight_Getter";
 
-
-  /** @domName HTMLImageElement.naturalWidth */
+  @DocsEditable
+  @DomName('HTMLImageElement.naturalWidth')
   int get naturalWidth native "HTMLImageElement_naturalWidth_Getter";
 
-
-  /** @domName HTMLImageElement.src */
+  @DocsEditable
+  @DomName('HTMLImageElement.src')
   String get src native "HTMLImageElement_src_Getter";
 
-
-  /** @domName HTMLImageElement.src */
+  @DocsEditable
+  @DomName('HTMLImageElement.src')
   void set src(String value) native "HTMLImageElement_src_Setter";
 
-
-  /** @domName HTMLImageElement.useMap */
+  @DocsEditable
+  @DomName('HTMLImageElement.useMap')
   String get useMap native "HTMLImageElement_useMap_Getter";
 
-
-  /** @domName HTMLImageElement.useMap */
+  @DocsEditable
+  @DomName('HTMLImageElement.useMap')
   void set useMap(String value) native "HTMLImageElement_useMap_Setter";
 
-
-  /** @domName HTMLImageElement.width */
+  @DocsEditable
+  @DomName('HTMLImageElement.width')
   int get width native "HTMLImageElement_width_Getter";
 
-
-  /** @domName HTMLImageElement.width */
+  @DocsEditable
+  @DomName('HTMLImageElement.width')
   void set width(int value) native "HTMLImageElement_width_Setter";
 
-
-  /** @domName HTMLImageElement.x */
+  @DocsEditable
+  @DomName('HTMLImageElement.x')
   int get x native "HTMLImageElement_x_Getter";
 
-
-  /** @domName HTMLImageElement.y */
+  @DocsEditable
+  @DomName('HTMLImageElement.y')
   int get y native "HTMLImageElement_y_Getter";
 
 }
@@ -13578,7 +13379,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLInputElement
+@DocsEditable
+@DomName('HTMLInputElement')
 class InputElement extends _Element_Merged implements
     HiddenInputElement,
     SearchInputElement,
@@ -13604,7 +13406,6 @@
     ButtonInputElement
      {
 
-  ///@docsEditable true
   factory InputElement({String type}) {
     var e = document.$dom_createElement("input");
     if (type != null) {
@@ -13619,387 +13420,388 @@
 
   static const EventStreamProvider<Event> speechChangeEvent = const EventStreamProvider<Event>('webkitSpeechChange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   InputElementEvents get on =>
     new InputElementEvents(this);
 
-
-  /** @domName HTMLInputElement.accept */
+  @DocsEditable
+  @DomName('HTMLInputElement.accept')
   String get accept native "HTMLInputElement_accept_Getter";
 
-
-  /** @domName HTMLInputElement.accept */
+  @DocsEditable
+  @DomName('HTMLInputElement.accept')
   void set accept(String value) native "HTMLInputElement_accept_Setter";
 
-
-  /** @domName HTMLInputElement.alt */
+  @DocsEditable
+  @DomName('HTMLInputElement.alt')
   String get alt native "HTMLInputElement_alt_Getter";
 
-
-  /** @domName HTMLInputElement.alt */
+  @DocsEditable
+  @DomName('HTMLInputElement.alt')
   void set alt(String value) native "HTMLInputElement_alt_Setter";
 
-
-  /** @domName HTMLInputElement.autocomplete */
+  @DocsEditable
+  @DomName('HTMLInputElement.autocomplete')
   String get autocomplete native "HTMLInputElement_autocomplete_Getter";
 
-
-  /** @domName HTMLInputElement.autocomplete */
+  @DocsEditable
+  @DomName('HTMLInputElement.autocomplete')
   void set autocomplete(String value) native "HTMLInputElement_autocomplete_Setter";
 
-
-  /** @domName HTMLInputElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLInputElement.autofocus')
   bool get autofocus native "HTMLInputElement_autofocus_Getter";
 
-
-  /** @domName HTMLInputElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLInputElement.autofocus')
   void set autofocus(bool value) native "HTMLInputElement_autofocus_Setter";
 
-
-  /** @domName HTMLInputElement.checked */
+  @DocsEditable
+  @DomName('HTMLInputElement.checked')
   bool get checked native "HTMLInputElement_checked_Getter";
 
-
-  /** @domName HTMLInputElement.checked */
+  @DocsEditable
+  @DomName('HTMLInputElement.checked')
   void set checked(bool value) native "HTMLInputElement_checked_Setter";
 
-
-  /** @domName HTMLInputElement.defaultChecked */
+  @DocsEditable
+  @DomName('HTMLInputElement.defaultChecked')
   bool get defaultChecked native "HTMLInputElement_defaultChecked_Getter";
 
-
-  /** @domName HTMLInputElement.defaultChecked */
+  @DocsEditable
+  @DomName('HTMLInputElement.defaultChecked')
   void set defaultChecked(bool value) native "HTMLInputElement_defaultChecked_Setter";
 
-
-  /** @domName HTMLInputElement.defaultValue */
+  @DocsEditable
+  @DomName('HTMLInputElement.defaultValue')
   String get defaultValue native "HTMLInputElement_defaultValue_Getter";
 
-
-  /** @domName HTMLInputElement.defaultValue */
+  @DocsEditable
+  @DomName('HTMLInputElement.defaultValue')
   void set defaultValue(String value) native "HTMLInputElement_defaultValue_Setter";
 
-
-  /** @domName HTMLInputElement.dirName */
+  @DocsEditable
+  @DomName('HTMLInputElement.dirName')
   String get dirName native "HTMLInputElement_dirName_Getter";
 
-
-  /** @domName HTMLInputElement.dirName */
+  @DocsEditable
+  @DomName('HTMLInputElement.dirName')
   void set dirName(String value) native "HTMLInputElement_dirName_Setter";
 
-
-  /** @domName HTMLInputElement.disabled */
+  @DocsEditable
+  @DomName('HTMLInputElement.disabled')
   bool get disabled native "HTMLInputElement_disabled_Getter";
 
-
-  /** @domName HTMLInputElement.disabled */
+  @DocsEditable
+  @DomName('HTMLInputElement.disabled')
   void set disabled(bool value) native "HTMLInputElement_disabled_Setter";
 
-
-  /** @domName HTMLInputElement.files */
+  @DocsEditable
+  @DomName('HTMLInputElement.files')
   List<File> get files native "HTMLInputElement_files_Getter";
 
-
-  /** @domName HTMLInputElement.files */
+  @DocsEditable
+  @DomName('HTMLInputElement.files')
   void set files(List<File> value) native "HTMLInputElement_files_Setter";
 
-
-  /** @domName HTMLInputElement.form */
+  @DocsEditable
+  @DomName('HTMLInputElement.form')
   FormElement get form native "HTMLInputElement_form_Getter";
 
-
-  /** @domName HTMLInputElement.formAction */
+  @DocsEditable
+  @DomName('HTMLInputElement.formAction')
   String get formAction native "HTMLInputElement_formAction_Getter";
 
-
-  /** @domName HTMLInputElement.formAction */
+  @DocsEditable
+  @DomName('HTMLInputElement.formAction')
   void set formAction(String value) native "HTMLInputElement_formAction_Setter";
 
-
-  /** @domName HTMLInputElement.formEnctype */
+  @DocsEditable
+  @DomName('HTMLInputElement.formEnctype')
   String get formEnctype native "HTMLInputElement_formEnctype_Getter";
 
-
-  /** @domName HTMLInputElement.formEnctype */
+  @DocsEditable
+  @DomName('HTMLInputElement.formEnctype')
   void set formEnctype(String value) native "HTMLInputElement_formEnctype_Setter";
 
-
-  /** @domName HTMLInputElement.formMethod */
+  @DocsEditable
+  @DomName('HTMLInputElement.formMethod')
   String get formMethod native "HTMLInputElement_formMethod_Getter";
 
-
-  /** @domName HTMLInputElement.formMethod */
+  @DocsEditable
+  @DomName('HTMLInputElement.formMethod')
   void set formMethod(String value) native "HTMLInputElement_formMethod_Setter";
 
-
-  /** @domName HTMLInputElement.formNoValidate */
+  @DocsEditable
+  @DomName('HTMLInputElement.formNoValidate')
   bool get formNoValidate native "HTMLInputElement_formNoValidate_Getter";
 
-
-  /** @domName HTMLInputElement.formNoValidate */
+  @DocsEditable
+  @DomName('HTMLInputElement.formNoValidate')
   void set formNoValidate(bool value) native "HTMLInputElement_formNoValidate_Setter";
 
-
-  /** @domName HTMLInputElement.formTarget */
+  @DocsEditable
+  @DomName('HTMLInputElement.formTarget')
   String get formTarget native "HTMLInputElement_formTarget_Getter";
 
-
-  /** @domName HTMLInputElement.formTarget */
+  @DocsEditable
+  @DomName('HTMLInputElement.formTarget')
   void set formTarget(String value) native "HTMLInputElement_formTarget_Setter";
 
-
-  /** @domName HTMLInputElement.height */
+  @DocsEditable
+  @DomName('HTMLInputElement.height')
   int get height native "HTMLInputElement_height_Getter";
 
-
-  /** @domName HTMLInputElement.height */
+  @DocsEditable
+  @DomName('HTMLInputElement.height')
   void set height(int value) native "HTMLInputElement_height_Setter";
 
-
-  /** @domName HTMLInputElement.incremental */
+  @DocsEditable
+  @DomName('HTMLInputElement.incremental')
   bool get incremental native "HTMLInputElement_incremental_Getter";
 
-
-  /** @domName HTMLInputElement.incremental */
+  @DocsEditable
+  @DomName('HTMLInputElement.incremental')
   void set incremental(bool value) native "HTMLInputElement_incremental_Setter";
 
-
-  /** @domName HTMLInputElement.indeterminate */
+  @DocsEditable
+  @DomName('HTMLInputElement.indeterminate')
   bool get indeterminate native "HTMLInputElement_indeterminate_Getter";
 
-
-  /** @domName HTMLInputElement.indeterminate */
+  @DocsEditable
+  @DomName('HTMLInputElement.indeterminate')
   void set indeterminate(bool value) native "HTMLInputElement_indeterminate_Setter";
 
-
-  /** @domName HTMLInputElement.labels */
+  @DocsEditable
+  @DomName('HTMLInputElement.labels')
   List<Node> get labels native "HTMLInputElement_labels_Getter";
 
-
-  /** @domName HTMLInputElement.list */
+  @DocsEditable
+  @DomName('HTMLInputElement.list')
   Element get list native "HTMLInputElement_list_Getter";
 
-
-  /** @domName HTMLInputElement.max */
+  @DocsEditable
+  @DomName('HTMLInputElement.max')
   String get max native "HTMLInputElement_max_Getter";
 
-
-  /** @domName HTMLInputElement.max */
+  @DocsEditable
+  @DomName('HTMLInputElement.max')
   void set max(String value) native "HTMLInputElement_max_Setter";
 
-
-  /** @domName HTMLInputElement.maxLength */
+  @DocsEditable
+  @DomName('HTMLInputElement.maxLength')
   int get maxLength native "HTMLInputElement_maxLength_Getter";
 
-
-  /** @domName HTMLInputElement.maxLength */
+  @DocsEditable
+  @DomName('HTMLInputElement.maxLength')
   void set maxLength(int value) native "HTMLInputElement_maxLength_Setter";
 
-
-  /** @domName HTMLInputElement.min */
+  @DocsEditable
+  @DomName('HTMLInputElement.min')
   String get min native "HTMLInputElement_min_Getter";
 
-
-  /** @domName HTMLInputElement.min */
+  @DocsEditable
+  @DomName('HTMLInputElement.min')
   void set min(String value) native "HTMLInputElement_min_Setter";
 
-
-  /** @domName HTMLInputElement.multiple */
+  @DocsEditable
+  @DomName('HTMLInputElement.multiple')
   bool get multiple native "HTMLInputElement_multiple_Getter";
 
-
-  /** @domName HTMLInputElement.multiple */
+  @DocsEditable
+  @DomName('HTMLInputElement.multiple')
   void set multiple(bool value) native "HTMLInputElement_multiple_Setter";
 
-
-  /** @domName HTMLInputElement.name */
+  @DocsEditable
+  @DomName('HTMLInputElement.name')
   String get name native "HTMLInputElement_name_Getter";
 
-
-  /** @domName HTMLInputElement.name */
+  @DocsEditable
+  @DomName('HTMLInputElement.name')
   void set name(String value) native "HTMLInputElement_name_Setter";
 
-
-  /** @domName HTMLInputElement.pattern */
+  @DocsEditable
+  @DomName('HTMLInputElement.pattern')
   String get pattern native "HTMLInputElement_pattern_Getter";
 
-
-  /** @domName HTMLInputElement.pattern */
+  @DocsEditable
+  @DomName('HTMLInputElement.pattern')
   void set pattern(String value) native "HTMLInputElement_pattern_Setter";
 
-
-  /** @domName HTMLInputElement.placeholder */
+  @DocsEditable
+  @DomName('HTMLInputElement.placeholder')
   String get placeholder native "HTMLInputElement_placeholder_Getter";
 
-
-  /** @domName HTMLInputElement.placeholder */
+  @DocsEditable
+  @DomName('HTMLInputElement.placeholder')
   void set placeholder(String value) native "HTMLInputElement_placeholder_Setter";
 
-
-  /** @domName HTMLInputElement.readOnly */
+  @DocsEditable
+  @DomName('HTMLInputElement.readOnly')
   bool get readOnly native "HTMLInputElement_readOnly_Getter";
 
-
-  /** @domName HTMLInputElement.readOnly */
+  @DocsEditable
+  @DomName('HTMLInputElement.readOnly')
   void set readOnly(bool value) native "HTMLInputElement_readOnly_Setter";
 
-
-  /** @domName HTMLInputElement.required */
+  @DocsEditable
+  @DomName('HTMLInputElement.required')
   bool get required native "HTMLInputElement_required_Getter";
 
-
-  /** @domName HTMLInputElement.required */
+  @DocsEditable
+  @DomName('HTMLInputElement.required')
   void set required(bool value) native "HTMLInputElement_required_Setter";
 
-
-  /** @domName HTMLInputElement.selectionDirection */
+  @DocsEditable
+  @DomName('HTMLInputElement.selectionDirection')
   String get selectionDirection native "HTMLInputElement_selectionDirection_Getter";
 
-
-  /** @domName HTMLInputElement.selectionDirection */
+  @DocsEditable
+  @DomName('HTMLInputElement.selectionDirection')
   void set selectionDirection(String value) native "HTMLInputElement_selectionDirection_Setter";
 
-
-  /** @domName HTMLInputElement.selectionEnd */
+  @DocsEditable
+  @DomName('HTMLInputElement.selectionEnd')
   int get selectionEnd native "HTMLInputElement_selectionEnd_Getter";
 
-
-  /** @domName HTMLInputElement.selectionEnd */
+  @DocsEditable
+  @DomName('HTMLInputElement.selectionEnd')
   void set selectionEnd(int value) native "HTMLInputElement_selectionEnd_Setter";
 
-
-  /** @domName HTMLInputElement.selectionStart */
+  @DocsEditable
+  @DomName('HTMLInputElement.selectionStart')
   int get selectionStart native "HTMLInputElement_selectionStart_Getter";
 
-
-  /** @domName HTMLInputElement.selectionStart */
+  @DocsEditable
+  @DomName('HTMLInputElement.selectionStart')
   void set selectionStart(int value) native "HTMLInputElement_selectionStart_Setter";
 
-
-  /** @domName HTMLInputElement.size */
+  @DocsEditable
+  @DomName('HTMLInputElement.size')
   int get size native "HTMLInputElement_size_Getter";
 
-
-  /** @domName HTMLInputElement.size */
+  @DocsEditable
+  @DomName('HTMLInputElement.size')
   void set size(int value) native "HTMLInputElement_size_Setter";
 
-
-  /** @domName HTMLInputElement.src */
+  @DocsEditable
+  @DomName('HTMLInputElement.src')
   String get src native "HTMLInputElement_src_Getter";
 
-
-  /** @domName HTMLInputElement.src */
+  @DocsEditable
+  @DomName('HTMLInputElement.src')
   void set src(String value) native "HTMLInputElement_src_Setter";
 
-
-  /** @domName HTMLInputElement.step */
+  @DocsEditable
+  @DomName('HTMLInputElement.step')
   String get step native "HTMLInputElement_step_Getter";
 
-
-  /** @domName HTMLInputElement.step */
+  @DocsEditable
+  @DomName('HTMLInputElement.step')
   void set step(String value) native "HTMLInputElement_step_Setter";
 
-
-  /** @domName HTMLInputElement.type */
+  @DocsEditable
+  @DomName('HTMLInputElement.type')
   String get type native "HTMLInputElement_type_Getter";
 
-
-  /** @domName HTMLInputElement.type */
+  @DocsEditable
+  @DomName('HTMLInputElement.type')
   void set type(String value) native "HTMLInputElement_type_Setter";
 
-
-  /** @domName HTMLInputElement.useMap */
+  @DocsEditable
+  @DomName('HTMLInputElement.useMap')
   String get useMap native "HTMLInputElement_useMap_Getter";
 
-
-  /** @domName HTMLInputElement.useMap */
+  @DocsEditable
+  @DomName('HTMLInputElement.useMap')
   void set useMap(String value) native "HTMLInputElement_useMap_Setter";
 
-
-  /** @domName HTMLInputElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLInputElement.validationMessage')
   String get validationMessage native "HTMLInputElement_validationMessage_Getter";
 
-
-  /** @domName HTMLInputElement.validity */
+  @DocsEditable
+  @DomName('HTMLInputElement.validity')
   ValidityState get validity native "HTMLInputElement_validity_Getter";
 
-
-  /** @domName HTMLInputElement.value */
+  @DocsEditable
+  @DomName('HTMLInputElement.value')
   String get value native "HTMLInputElement_value_Getter";
 
-
-  /** @domName HTMLInputElement.value */
+  @DocsEditable
+  @DomName('HTMLInputElement.value')
   void set value(String value) native "HTMLInputElement_value_Setter";
 
-
-  /** @domName HTMLInputElement.valueAsDate */
+  @DocsEditable
+  @DomName('HTMLInputElement.valueAsDate')
   Date get valueAsDate native "HTMLInputElement_valueAsDate_Getter";
 
-
-  /** @domName HTMLInputElement.valueAsDate */
+  @DocsEditable
+  @DomName('HTMLInputElement.valueAsDate')
   void set valueAsDate(Date value) native "HTMLInputElement_valueAsDate_Setter";
 
-
-  /** @domName HTMLInputElement.valueAsNumber */
+  @DocsEditable
+  @DomName('HTMLInputElement.valueAsNumber')
   num get valueAsNumber native "HTMLInputElement_valueAsNumber_Getter";
 
-
-  /** @domName HTMLInputElement.valueAsNumber */
+  @DocsEditable
+  @DomName('HTMLInputElement.valueAsNumber')
   void set valueAsNumber(num value) native "HTMLInputElement_valueAsNumber_Setter";
 
-
-  /** @domName HTMLInputElement.webkitEntries */
+  @DocsEditable
+  @DomName('HTMLInputElement.webkitEntries')
   List<Entry> get webkitEntries native "HTMLInputElement_webkitEntries_Getter";
 
-
-  /** @domName HTMLInputElement.webkitGrammar */
+  @DocsEditable
+  @DomName('HTMLInputElement.webkitGrammar')
   bool get webkitGrammar native "HTMLInputElement_webkitGrammar_Getter";
 
-
-  /** @domName HTMLInputElement.webkitGrammar */
+  @DocsEditable
+  @DomName('HTMLInputElement.webkitGrammar')
   void set webkitGrammar(bool value) native "HTMLInputElement_webkitGrammar_Setter";
 
-
-  /** @domName HTMLInputElement.webkitSpeech */
+  @DocsEditable
+  @DomName('HTMLInputElement.webkitSpeech')
   bool get webkitSpeech native "HTMLInputElement_webkitSpeech_Getter";
 
-
-  /** @domName HTMLInputElement.webkitSpeech */
+  @DocsEditable
+  @DomName('HTMLInputElement.webkitSpeech')
   void set webkitSpeech(bool value) native "HTMLInputElement_webkitSpeech_Setter";
 
-
-  /** @domName HTMLInputElement.webkitdirectory */
+  @DocsEditable
+  @DomName('HTMLInputElement.webkitdirectory')
   bool get webkitdirectory native "HTMLInputElement_webkitdirectory_Getter";
 
-
-  /** @domName HTMLInputElement.webkitdirectory */
+  @DocsEditable
+  @DomName('HTMLInputElement.webkitdirectory')
   void set webkitdirectory(bool value) native "HTMLInputElement_webkitdirectory_Setter";
 
-
-  /** @domName HTMLInputElement.width */
+  @DocsEditable
+  @DomName('HTMLInputElement.width')
   int get width native "HTMLInputElement_width_Getter";
 
-
-  /** @domName HTMLInputElement.width */
+  @DocsEditable
+  @DomName('HTMLInputElement.width')
   void set width(int value) native "HTMLInputElement_width_Setter";
 
-
-  /** @domName HTMLInputElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLInputElement.willValidate')
   bool get willValidate native "HTMLInputElement_willValidate_Getter";
 
-
-  /** @domName HTMLInputElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLInputElement.checkValidity')
   bool checkValidity() native "HTMLInputElement_checkValidity_Callback";
 
-
-  /** @domName HTMLInputElement.select */
+  @DocsEditable
+  @DomName('HTMLInputElement.select')
   void select() native "HTMLInputElement_select_Callback";
 
-
-  /** @domName HTMLInputElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLInputElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLInputElement_setCustomValidity_Callback";
 
-  void setRangeText(/*DOMString*/ replacement, [/*unsigned long*/ start, /*unsigned long*/ end, /*DOMString*/ selectionMode]) {
+  void setRangeText(String replacement, [int start, int end, String selectionMode]) {
     if ((replacement is String || replacement == null) && !?start && !?end && !?selectionMode) {
       _setRangeText_1(replacement);
       return;
@@ -14011,19 +13813,19 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName HTMLInputElement.setRangeText_1 */
+  @DocsEditable
+  @DomName('HTMLInputElement.setRangeText_1')
   void _setRangeText_1(replacement) native "HTMLInputElement_setRangeText_1_Callback";
 
-
-  /** @domName HTMLInputElement.setRangeText_2 */
+  @DocsEditable
+  @DomName('HTMLInputElement.setRangeText_2')
   void _setRangeText_2(replacement, start, end, selectionMode) native "HTMLInputElement_setRangeText_2_Callback";
 
-
-  /** @domName HTMLInputElement.setSelectionRange */
+  @DocsEditable
+  @DomName('HTMLInputElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]) native "HTMLInputElement_setSelectionRange_Callback";
 
-  void stepDown([/*long*/ n]) {
+  void stepDown([int n]) {
     if (?n) {
       _stepDown_1(n);
       return;
@@ -14031,15 +13833,15 @@
     _stepDown_2();
   }
 
-
-  /** @domName HTMLInputElement.stepDown_1 */
+  @DocsEditable
+  @DomName('HTMLInputElement.stepDown_1')
   void _stepDown_1(n) native "HTMLInputElement_stepDown_1_Callback";
 
-
-  /** @domName HTMLInputElement.stepDown_2 */
+  @DocsEditable
+  @DomName('HTMLInputElement.stepDown_2')
   void _stepDown_2() native "HTMLInputElement_stepDown_2_Callback";
 
-  void stepUp([/*long*/ n]) {
+  void stepUp([int n]) {
     if (?n) {
       _stepUp_1(n);
       return;
@@ -14047,12 +13849,12 @@
     _stepUp_2();
   }
 
-
-  /** @domName HTMLInputElement.stepUp_1 */
+  @DocsEditable
+  @DomName('HTMLInputElement.stepUp_1')
   void _stepUp_1(n) native "HTMLInputElement_stepUp_1_Callback";
 
-
-  /** @domName HTMLInputElement.stepUp_2 */
+  @DocsEditable
+  @DomName('HTMLInputElement.stepUp_2')
   void _stepUp_2() native "HTMLInputElement_stepUp_2_Callback";
 
   Stream<Event> get onSpeechChange => speechChangeEvent.forTarget(this);
@@ -14068,40 +13870,40 @@
  * Exposes the functionality common between all InputElement types.
  */
 abstract class InputElementBase implements Element {
-  /// @domName HTMLInputElement.autofocus
+  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLInputElement.disabled
+  @DomName('HTMLInputElement.disabled')
   bool disabled;
 
-  /// @domName HTMLInputElement.incremental
+  @DomName('HTMLInputElement.incremental')
   bool incremental;
 
-  /// @domName HTMLInputElement.indeterminate
+  @DomName('HTMLInputElement.indeterminate')
   bool indeterminate;
 
-  /// @domName HTMLInputElement.labels
+  @DomName('HTMLInputElement.labels')
   List<Node> get labels;
 
-  /// @domName HTMLInputElement.name
+  @DomName('HTMLInputElement.name')
   String name;
 
-  /// @domName HTMLInputElement.validationMessage
+  @DomName('HTMLInputElement.validationMessage')
   String get validationMessage;
 
-  /// @domName HTMLInputElement.validity
+  @DomName('HTMLInputElement.validity')
   ValidityState get validity;
 
-  /// @domName HTMLInputElement.value
+  @DomName('HTMLInputElement.value')
   String value;
 
-  /// @domName HTMLInputElement.willValidate
+  @DomName('HTMLInputElement.willValidate')
   bool get willValidate;
 
-  /// @domName HTMLInputElement.checkValidity
+  @DomName('HTMLInputElement.checkValidity')
   bool checkValidity();
 
-  /// @domName HTMLInputElement.setCustomValidity
+  @DomName('HTMLInputElement.setCustomValidity')
   void setCustomValidity(String error);
 }
 
@@ -14117,40 +13919,40 @@
  * Base interface for all inputs which involve text editing.
  */
 abstract class TextInputElementBase implements InputElementBase {
-  /// @domName HTMLInputElement.autocomplete
+  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLInputElement.maxLength
+  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLInputElement.pattern
+  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.size
+  @DomName('HTMLInputElement.size')
   int size;
 
-  /// @domName HTMLInputElement.select
+  @DomName('HTMLInputElement.select')
   void select();
 
-  /// @domName HTMLInputElement.selectionDirection
+  @DomName('HTMLInputElement.selectionDirection')
   String selectionDirection;
 
-  /// @domName HTMLInputElement.selectionEnd
+  @DomName('HTMLInputElement.selectionEnd')
   int selectionEnd;
 
-  /// @domName HTMLInputElement.selectionStart
+  @DomName('HTMLInputElement.selectionStart')
   int selectionStart;
 
-  /// @domName HTMLInputElement.setSelectionRange
+  @DomName('HTMLInputElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]);
 }
 
@@ -14167,10 +13969,10 @@
 abstract class SearchInputElement implements TextInputElementBase {
   factory SearchInputElement() => new InputElement(type: 'search');
 
-  /// @domName HTMLInputElement.dirName;
+  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14185,10 +13987,10 @@
 abstract class TextInputElement implements TextInputElementBase {
   factory TextInputElement() => new InputElement(type: 'text');
 
-  /// @domName HTMLInputElement.dirName;
+  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 }
 
@@ -14204,7 +14006,7 @@
 abstract class UrlInputElement implements TextInputElementBase {
   factory UrlInputElement() => new InputElement(type: 'url');
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14228,7 +14030,7 @@
 abstract class TelephoneInputElement implements TextInputElementBase {
   factory TelephoneInputElement() => new InputElement(type: 'tel');
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14249,34 +14051,34 @@
 abstract class EmailInputElement implements TextInputElementBase {
   factory EmailInputElement() => new InputElement(type: 'email');
 
-  /// @domName HTMLInputElement.autocomplete
+  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLInputElement.autofocus
+  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
-  /// @domName HTMLInputElement.maxLength
+  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLInputElement.multiple;
+  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  /// @domName HTMLInputElement.pattern
+  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.size
+  @DomName('HTMLInputElement.size')
   int size;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14297,25 +14099,25 @@
  */
 abstract class RangeInputElementBase implements InputElementBase {
 
-  /// @domName HTMLInputElement.list
+  @DomName('HTMLInputElement.list')
   Element get list;
 
-  /// @domName HTMLInputElement.max
+  @DomName('HTMLInputElement.max')
   String max;
 
-  /// @domName HTMLInputElement.min
+  @DomName('HTMLInputElement.min')
   String min;
 
-  /// @domName HTMLInputElement.step
+  @DomName('HTMLInputElement.step')
   String step;
 
-  /// @domName HTMLInputElement.valueAsNumber
+  @DomName('HTMLInputElement.valueAsNumber')
   num valueAsNumber;
 
-  /// @domName HTMLInputElement.stepDown
+  @DomName('HTMLInputElement.stepDown')
   void stepDown([int n]);
 
-  /// @domName HTMLInputElement.stepUp
+  @DomName('HTMLInputElement.stepUp')
   void stepUp([int n]);
 }
 
@@ -14330,13 +14132,13 @@
 abstract class DateTimeInputElement implements RangeInputElementBase {
   factory DateTimeInputElement() => new InputElement(type: 'datetime');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14355,13 +14157,13 @@
 abstract class DateInputElement implements RangeInputElementBase {
   factory DateInputElement() => new InputElement(type: 'date');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14380,13 +14182,13 @@
 abstract class MonthInputElement implements RangeInputElementBase {
   factory MonthInputElement() => new InputElement(type: 'month');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14405,13 +14207,13 @@
 abstract class WeekInputElement implements RangeInputElementBase {
   factory WeekInputElement() => new InputElement(type: 'week');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14430,13 +14232,13 @@
 abstract class TimeInputElement implements RangeInputElementBase {
   factory TimeInputElement() => new InputElement(type: 'time');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14457,10 +14259,10 @@
   factory LocalDateTimeInputElement() =>
       new InputElement(type: 'datetime-local');
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14479,13 +14281,13 @@
 abstract class NumberInputElement implements RangeInputElementBase {
   factory NumberInputElement() => new InputElement(type: 'number');
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -14521,10 +14323,10 @@
 abstract class CheckboxInputElement implements InputElementBase {
   factory CheckboxInputElement() => new InputElement(type: 'checkbox');
 
-  /// @domName HTMLInputElement.checked
+  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -14543,10 +14345,10 @@
 abstract class RadioButtonInputElement implements InputElementBase {
   factory RadioButtonInputElement() => new InputElement(type: 'radio');
 
-  /// @domName HTMLInputElement.checked
+  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -14556,16 +14358,16 @@
 abstract class FileUploadInputElement implements InputElementBase {
   factory FileUploadInputElement() => new InputElement(type: 'file');
 
-  /// @domName HTMLInputElement.accept
+  @DomName('HTMLInputElement.accept')
   String accept;
 
-  /// @domName HTMLInputElement.multiple
+  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.files
+  @DomName('HTMLInputElement.files')
   List<File> files;
 }
 
@@ -14575,19 +14377,19 @@
 abstract class SubmitButtonInputElement implements InputElementBase {
   factory SubmitButtonInputElement() => new InputElement(type: 'submit');
 
-  /// @domName HTMLInputElement.formAction
+  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  /// @domName HTMLInputElement.formEnctype
+  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLInputElement.formMethod
+  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLInputElement.formNoValidate
+  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLInputElement.formTarget
+  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 }
 
@@ -14598,31 +14400,31 @@
 abstract class ImageButtonInputElement implements InputElementBase {
   factory ImageButtonInputElement() => new InputElement(type: 'image');
 
-  /// @domName HTMLInputElement.alt
+  @DomName('HTMLInputElement.alt')
   String alt;
 
-  /// @domName HTMLInputElement.formAction
+  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  /// @domName HTMLInputElement.formEnctype
+  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLInputElement.formMethod
+  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLInputElement.formNoValidate
+  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLInputElement.formTarget
+  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 
-  /// @domName HTMLInputElement.height
+  @DomName('HTMLInputElement.height')
   int height;
 
-  /// @domName HTMLInputElement.src
+  @DomName('HTMLInputElement.src')
   String src;
 
-  /// @domName HTMLInputElement.width
+  @DomName('HTMLInputElement.width')
   int width;
 }
 
@@ -14641,12 +14443,12 @@
 }
 
 
-/// @docsEditable true
+@DocsEditable
 class InputElementEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   InputElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get speechChange => this['webkitSpeechChange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14656,7 +14458,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Int16Array
+@DocsEditable
+@DomName('Int16Array')
 class Int16Array extends ArrayBufferView implements List<int> {
   Int16Array.internal() : super.internal();
 
@@ -14671,16 +14474,16 @@
 
   static const int BYTES_PER_ELEMENT = 2;
 
-
-  /** @domName Int16Array.length */
+  @DocsEditable
+  @DomName('Int16Array.length')
   int get length native "Int16Array_length_Getter";
 
-
-  /** @domName Int16Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Int16Array.numericIndexGetter')
   int operator[](int index) native "Int16Array_numericIndexGetter_Callback";
 
-
-  /** @domName Int16Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Int16Array.numericIndexSetter')
   void operator[]=(int index, int value) native "Int16Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -14695,50 +14498,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -14796,16 +14599,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -14825,23 +14648,23 @@
 
   // -- end List<int> mixins.
 
-
-  /** @domName Int16Array.setElements */
+  @DocsEditable
+  @DomName('Int16Array.setElements')
   void setElements(Object array, [int offset]) native "Int16Array_setElements_Callback";
 
-  Int16Array subarray(/*long*/ start, [/*long*/ end]) {
+  Int16Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Int16Array.subarray_1 */
+  @DocsEditable
+  @DomName('Int16Array.subarray_1')
   Int16Array _subarray_1(start, end) native "Int16Array_subarray_1_Callback";
 
-
-  /** @domName Int16Array.subarray_2 */
+  @DocsEditable
+  @DomName('Int16Array.subarray_2')
   Int16Array _subarray_2(start) native "Int16Array_subarray_2_Callback";
 
 }
@@ -14852,7 +14675,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Int32Array
+@DocsEditable
+@DomName('Int32Array')
 class Int32Array extends ArrayBufferView implements List<int> {
   Int32Array.internal() : super.internal();
 
@@ -14867,16 +14691,16 @@
 
   static const int BYTES_PER_ELEMENT = 4;
 
-
-  /** @domName Int32Array.length */
+  @DocsEditable
+  @DomName('Int32Array.length')
   int get length native "Int32Array_length_Getter";
 
-
-  /** @domName Int32Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Int32Array.numericIndexGetter')
   int operator[](int index) native "Int32Array_numericIndexGetter_Callback";
 
-
-  /** @domName Int32Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Int32Array.numericIndexSetter')
   void operator[]=(int index, int value) native "Int32Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -14891,50 +14715,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -14992,16 +14816,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -15021,23 +14865,23 @@
 
   // -- end List<int> mixins.
 
-
-  /** @domName Int32Array.setElements */
+  @DocsEditable
+  @DomName('Int32Array.setElements')
   void setElements(Object array, [int offset]) native "Int32Array_setElements_Callback";
 
-  Int32Array subarray(/*long*/ start, [/*long*/ end]) {
+  Int32Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Int32Array.subarray_1 */
+  @DocsEditable
+  @DomName('Int32Array.subarray_1')
   Int32Array _subarray_1(start, end) native "Int32Array_subarray_1_Callback";
 
-
-  /** @domName Int32Array.subarray_2 */
+  @DocsEditable
+  @DomName('Int32Array.subarray_2')
   Int32Array _subarray_2(start) native "Int32Array_subarray_2_Callback";
 
 }
@@ -15048,7 +14892,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Int8Array
+@DocsEditable
+@DomName('Int8Array')
 class Int8Array extends ArrayBufferView implements List<int> {
   Int8Array.internal() : super.internal();
 
@@ -15063,16 +14908,16 @@
 
   static const int BYTES_PER_ELEMENT = 1;
 
-
-  /** @domName Int8Array.length */
+  @DocsEditable
+  @DomName('Int8Array.length')
   int get length native "Int8Array_length_Getter";
 
-
-  /** @domName Int8Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Int8Array.numericIndexGetter')
   int operator[](int index) native "Int8Array_numericIndexGetter_Callback";
 
-
-  /** @domName Int8Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Int8Array.numericIndexSetter')
   void operator[]=(int index, int value) native "Int8Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -15087,50 +14932,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -15188,16 +15033,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -15217,23 +15082,23 @@
 
   // -- end List<int> mixins.
 
-
-  /** @domName Int8Array.setElements */
+  @DocsEditable
+  @DomName('Int8Array.setElements')
   void setElements(Object array, [int offset]) native "Int8Array_setElements_Callback";
 
-  Int8Array subarray(/*long*/ start, [/*long*/ end]) {
+  Int8Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Int8Array.subarray_1 */
+  @DocsEditable
+  @DomName('Int8Array.subarray_1')
   Int8Array _subarray_1(start, end) native "Int8Array_subarray_1_Callback";
 
-
-  /** @domName Int8Array.subarray_2 */
+  @DocsEditable
+  @DomName('Int8Array.subarray_2')
   Int8Array _subarray_2(start) native "Int8Array_subarray_2_Callback";
 
 }
@@ -15244,7 +15109,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName JavaScriptCallFrame
+@DocsEditable
+@DomName('JavaScriptCallFrame')
 class JavaScriptCallFrame extends NativeFieldWrapperClass1 {
   JavaScriptCallFrame.internal();
 
@@ -15258,48 +15124,48 @@
 
   static const int WITH_SCOPE = 2;
 
-
-  /** @domName JavaScriptCallFrame.caller */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.caller')
   JavaScriptCallFrame get caller native "JavaScriptCallFrame_caller_Getter";
 
-
-  /** @domName JavaScriptCallFrame.column */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.column')
   int get column native "JavaScriptCallFrame_column_Getter";
 
-
-  /** @domName JavaScriptCallFrame.functionName */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.functionName')
   String get functionName native "JavaScriptCallFrame_functionName_Getter";
 
-
-  /** @domName JavaScriptCallFrame.line */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.line')
   int get line native "JavaScriptCallFrame_line_Getter";
 
-
-  /** @domName JavaScriptCallFrame.scopeChain */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.scopeChain')
   List get scopeChain native "JavaScriptCallFrame_scopeChain_Getter";
 
-
-  /** @domName JavaScriptCallFrame.sourceID */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.sourceID')
   int get sourceID native "JavaScriptCallFrame_sourceID_Getter";
 
-
-  /** @domName JavaScriptCallFrame.thisObject */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.thisObject')
   Object get thisObject native "JavaScriptCallFrame_thisObject_Getter";
 
-
-  /** @domName JavaScriptCallFrame.type */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.type')
   String get type native "JavaScriptCallFrame_type_Getter";
 
-
-  /** @domName JavaScriptCallFrame.evaluate */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.evaluate')
   void evaluate(String script) native "JavaScriptCallFrame_evaluate_Callback";
 
-
-  /** @domName JavaScriptCallFrame.restart */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.restart')
   Object restart() native "JavaScriptCallFrame_restart_Callback";
 
-
-  /** @domName JavaScriptCallFrame.scopeType */
+  @DocsEditable
+  @DomName('JavaScriptCallFrame.scopeType')
   int scopeType(int scopeIndex) native "JavaScriptCallFrame_scopeType_Callback";
 
 }
@@ -15308,7 +15174,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName KeyboardEvent; @docsEditable true
+@DomName('KeyboardEvent')
 class KeyboardEvent extends UIEvent {
 
   factory KeyboardEvent(String type, Window view,
@@ -15322,43 +15188,43 @@
     return e;
   }
 
-  /** @domName KeyboardEvent.keyCode */
+  @DomName('KeyboardEvent.keyCode')
   int get keyCode => $dom_keyCode;
   
-  /** @domName KeyboardEvent.charCode */
+  @DomName('KeyboardEvent.charCode')
   int get charCode => $dom_charCode;
   KeyboardEvent.internal() : super.internal();
 
-
-  /** @domName KeyboardEvent.altGraphKey */
+  @DocsEditable
+  @DomName('KeyboardEvent.altGraphKey')
   bool get altGraphKey native "KeyboardEvent_altGraphKey_Getter";
 
-
-  /** @domName KeyboardEvent.altKey */
+  @DocsEditable
+  @DomName('KeyboardEvent.altKey')
   bool get altKey native "KeyboardEvent_altKey_Getter";
 
-
-  /** @domName KeyboardEvent.ctrlKey */
+  @DocsEditable
+  @DomName('KeyboardEvent.ctrlKey')
   bool get ctrlKey native "KeyboardEvent_ctrlKey_Getter";
 
-
-  /** @domName KeyboardEvent.keyIdentifier */
+  @DocsEditable
+  @DomName('KeyboardEvent.keyIdentifier')
   String get $dom_keyIdentifier native "KeyboardEvent_keyIdentifier_Getter";
 
-
-  /** @domName KeyboardEvent.keyLocation */
+  @DocsEditable
+  @DomName('KeyboardEvent.keyLocation')
   int get keyLocation native "KeyboardEvent_keyLocation_Getter";
 
-
-  /** @domName KeyboardEvent.metaKey */
+  @DocsEditable
+  @DomName('KeyboardEvent.metaKey')
   bool get metaKey native "KeyboardEvent_metaKey_Getter";
 
-
-  /** @domName KeyboardEvent.shiftKey */
+  @DocsEditable
+  @DomName('KeyboardEvent.shiftKey')
   bool get shiftKey native "KeyboardEvent_shiftKey_Getter";
 
-
-  /** @domName KeyboardEvent.initKeyboardEvent */
+  @DocsEditable
+  @DomName('KeyboardEvent.initKeyboardEvent')
   void $dom_initKeyboardEvent(String type, bool canBubble, bool cancelable, Window view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) native "KeyboardEvent_initKeyboardEvent_Callback";
 
 }
@@ -15369,89 +15235,90 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLKeygenElement
+@DocsEditable
+@DomName('HTMLKeygenElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 class KeygenElement extends _Element_Merged {
   KeygenElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory KeygenElement() => document.$dom_createElement("keygen");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLKeygenElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.autofocus')
   bool get autofocus native "HTMLKeygenElement_autofocus_Getter";
 
-
-  /** @domName HTMLKeygenElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.autofocus')
   void set autofocus(bool value) native "HTMLKeygenElement_autofocus_Setter";
 
-
-  /** @domName HTMLKeygenElement.challenge */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.challenge')
   String get challenge native "HTMLKeygenElement_challenge_Getter";
 
-
-  /** @domName HTMLKeygenElement.challenge */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.challenge')
   void set challenge(String value) native "HTMLKeygenElement_challenge_Setter";
 
-
-  /** @domName HTMLKeygenElement.disabled */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.disabled')
   bool get disabled native "HTMLKeygenElement_disabled_Getter";
 
-
-  /** @domName HTMLKeygenElement.disabled */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.disabled')
   void set disabled(bool value) native "HTMLKeygenElement_disabled_Setter";
 
-
-  /** @domName HTMLKeygenElement.form */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.form')
   FormElement get form native "HTMLKeygenElement_form_Getter";
 
-
-  /** @domName HTMLKeygenElement.keytype */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.keytype')
   String get keytype native "HTMLKeygenElement_keytype_Getter";
 
-
-  /** @domName HTMLKeygenElement.keytype */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.keytype')
   void set keytype(String value) native "HTMLKeygenElement_keytype_Setter";
 
-
-  /** @domName HTMLKeygenElement.labels */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.labels')
   List<Node> get labels native "HTMLKeygenElement_labels_Getter";
 
-
-  /** @domName HTMLKeygenElement.name */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.name')
   String get name native "HTMLKeygenElement_name_Getter";
 
-
-  /** @domName HTMLKeygenElement.name */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.name')
   void set name(String value) native "HTMLKeygenElement_name_Setter";
 
-
-  /** @domName HTMLKeygenElement.type */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.type')
   String get type native "HTMLKeygenElement_type_Getter";
 
-
-  /** @domName HTMLKeygenElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.validationMessage')
   String get validationMessage native "HTMLKeygenElement_validationMessage_Getter";
 
-
-  /** @domName HTMLKeygenElement.validity */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.validity')
   ValidityState get validity native "HTMLKeygenElement_validity_Getter";
 
-
-  /** @domName HTMLKeygenElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.willValidate')
   bool get willValidate native "HTMLKeygenElement_willValidate_Getter";
 
-
-  /** @domName HTMLKeygenElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.checkValidity')
   bool checkValidity() native "HTMLKeygenElement_checkValidity_Callback";
 
-
-  /** @domName HTMLKeygenElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLKeygenElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLKeygenElement_setCustomValidity_Callback";
 
 }
@@ -15462,27 +15329,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLLIElement
+@DocsEditable
+@DomName('HTMLLIElement')
 class LIElement extends _Element_Merged {
   LIElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory LIElement() => document.$dom_createElement("li");
 
-
-  /** @domName HTMLLIElement.type */
+  @DocsEditable
+  @DomName('HTMLLIElement.type')
   String get type native "HTMLLIElement_type_Getter";
 
-
-  /** @domName HTMLLIElement.type */
+  @DocsEditable
+  @DomName('HTMLLIElement.type')
   void set type(String value) native "HTMLLIElement_type_Setter";
 
-
-  /** @domName HTMLLIElement.value */
+  @DocsEditable
+  @DomName('HTMLLIElement.value')
   int get value native "HTMLLIElement_value_Getter";
 
-
-  /** @domName HTMLLIElement.value */
+  @DocsEditable
+  @DomName('HTMLLIElement.value')
   void set value(int value) native "HTMLLIElement_value_Setter";
 
 }
@@ -15493,27 +15361,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLLabelElement
+@DocsEditable
+@DomName('HTMLLabelElement')
 class LabelElement extends _Element_Merged {
   LabelElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory LabelElement() => document.$dom_createElement("label");
 
-
-  /** @domName HTMLLabelElement.control */
+  @DocsEditable
+  @DomName('HTMLLabelElement.control')
   Element get control native "HTMLLabelElement_control_Getter";
 
-
-  /** @domName HTMLLabelElement.form */
+  @DocsEditable
+  @DomName('HTMLLabelElement.form')
   FormElement get form native "HTMLLabelElement_form_Getter";
 
-
-  /** @domName HTMLLabelElement.htmlFor */
+  @DocsEditable
+  @DomName('HTMLLabelElement.htmlFor')
   String get htmlFor native "HTMLLabelElement_htmlFor_Getter";
 
-
-  /** @domName HTMLLabelElement.htmlFor */
+  @DocsEditable
+  @DomName('HTMLLabelElement.htmlFor')
   void set htmlFor(String value) native "HTMLLabelElement_htmlFor_Setter";
 
 }
@@ -15524,23 +15393,16 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLLegendElement
+@DocsEditable
+@DomName('HTMLLegendElement')
 class LegendElement extends _Element_Merged {
   LegendElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory LegendElement() => document.$dom_createElement("legend");
 
-
-  /** @domName HTMLLegendElement.align */
-  String get align native "HTMLLegendElement_align_Getter";
-
-
-  /** @domName HTMLLegendElement.align */
-  void set align(String value) native "HTMLLegendElement_align_Setter";
-
-
-  /** @domName HTMLLegendElement.form */
+  @DocsEditable
+  @DomName('HTMLLegendElement.form')
   FormElement get form native "HTMLLegendElement_form_Getter";
 
 }
@@ -15551,71 +15413,72 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLLinkElement
+@DocsEditable
+@DomName('HTMLLinkElement')
 class LinkElement extends _Element_Merged {
   LinkElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory LinkElement() => document.$dom_createElement("link");
 
-
-  /** @domName HTMLLinkElement.disabled */
+  @DocsEditable
+  @DomName('HTMLLinkElement.disabled')
   bool get disabled native "HTMLLinkElement_disabled_Getter";
 
-
-  /** @domName HTMLLinkElement.disabled */
+  @DocsEditable
+  @DomName('HTMLLinkElement.disabled')
   void set disabled(bool value) native "HTMLLinkElement_disabled_Setter";
 
-
-  /** @domName HTMLLinkElement.href */
+  @DocsEditable
+  @DomName('HTMLLinkElement.href')
   String get href native "HTMLLinkElement_href_Getter";
 
-
-  /** @domName HTMLLinkElement.href */
+  @DocsEditable
+  @DomName('HTMLLinkElement.href')
   void set href(String value) native "HTMLLinkElement_href_Setter";
 
-
-  /** @domName HTMLLinkElement.hreflang */
+  @DocsEditable
+  @DomName('HTMLLinkElement.hreflang')
   String get hreflang native "HTMLLinkElement_hreflang_Getter";
 
-
-  /** @domName HTMLLinkElement.hreflang */
+  @DocsEditable
+  @DomName('HTMLLinkElement.hreflang')
   void set hreflang(String value) native "HTMLLinkElement_hreflang_Setter";
 
-
-  /** @domName HTMLLinkElement.media */
+  @DocsEditable
+  @DomName('HTMLLinkElement.media')
   String get media native "HTMLLinkElement_media_Getter";
 
-
-  /** @domName HTMLLinkElement.media */
+  @DocsEditable
+  @DomName('HTMLLinkElement.media')
   void set media(String value) native "HTMLLinkElement_media_Setter";
 
-
-  /** @domName HTMLLinkElement.rel */
+  @DocsEditable
+  @DomName('HTMLLinkElement.rel')
   String get rel native "HTMLLinkElement_rel_Getter";
 
-
-  /** @domName HTMLLinkElement.rel */
+  @DocsEditable
+  @DomName('HTMLLinkElement.rel')
   void set rel(String value) native "HTMLLinkElement_rel_Setter";
 
-
-  /** @domName HTMLLinkElement.sheet */
+  @DocsEditable
+  @DomName('HTMLLinkElement.sheet')
   StyleSheet get sheet native "HTMLLinkElement_sheet_Getter";
 
-
-  /** @domName HTMLLinkElement.sizes */
+  @DocsEditable
+  @DomName('HTMLLinkElement.sizes')
   DomSettableTokenList get sizes native "HTMLLinkElement_sizes_Getter";
 
-
-  /** @domName HTMLLinkElement.sizes */
+  @DocsEditable
+  @DomName('HTMLLinkElement.sizes')
   void set sizes(DomSettableTokenList value) native "HTMLLinkElement_sizes_Setter";
 
-
-  /** @domName HTMLLinkElement.type */
+  @DocsEditable
+  @DomName('HTMLLinkElement.type')
   String get type native "HTMLLinkElement_type_Getter";
 
-
-  /** @domName HTMLLinkElement.type */
+  @DocsEditable
+  @DomName('HTMLLinkElement.type')
   void set type(String value) native "HTMLLinkElement_type_Setter";
 
 }
@@ -15626,12 +15489,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName LocalMediaStream
+@DocsEditable
+@DomName('LocalMediaStream')
 class LocalMediaStream extends MediaStream implements EventTarget {
   LocalMediaStream.internal() : super.internal();
 
-
-  /** @domName LocalMediaStream.stop */
+  @DocsEditable
+  @DomName('LocalMediaStream.stop')
   void stop() native "LocalMediaStream_stop_Callback";
 
 }
@@ -15642,96 +15506,97 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Location
+@DocsEditable
+@DomName('Location')
 class Location extends NativeFieldWrapperClass1 implements LocationBase {
   Location.internal();
 
-
-  /** @domName Location.ancestorOrigins */
+  @DocsEditable
+  @DomName('Location.ancestorOrigins')
   List<String> get ancestorOrigins native "Location_ancestorOrigins_Getter";
 
-
-  /** @domName Location.hash */
+  @DocsEditable
+  @DomName('Location.hash')
   String get hash native "Location_hash_Getter";
 
-
-  /** @domName Location.hash */
+  @DocsEditable
+  @DomName('Location.hash')
   void set hash(String value) native "Location_hash_Setter";
 
-
-  /** @domName Location.host */
+  @DocsEditable
+  @DomName('Location.host')
   String get host native "Location_host_Getter";
 
-
-  /** @domName Location.host */
+  @DocsEditable
+  @DomName('Location.host')
   void set host(String value) native "Location_host_Setter";
 
-
-  /** @domName Location.hostname */
+  @DocsEditable
+  @DomName('Location.hostname')
   String get hostname native "Location_hostname_Getter";
 
-
-  /** @domName Location.hostname */
+  @DocsEditable
+  @DomName('Location.hostname')
   void set hostname(String value) native "Location_hostname_Setter";
 
-
-  /** @domName Location.href */
+  @DocsEditable
+  @DomName('Location.href')
   String get href native "Location_href_Getter";
 
-
-  /** @domName Location.href */
+  @DocsEditable
+  @DomName('Location.href')
   void set href(String value) native "Location_href_Setter";
 
-
-  /** @domName Location.origin */
+  @DocsEditable
+  @DomName('Location.origin')
   String get origin native "Location_origin_Getter";
 
-
-  /** @domName Location.pathname */
+  @DocsEditable
+  @DomName('Location.pathname')
   String get pathname native "Location_pathname_Getter";
 
-
-  /** @domName Location.pathname */
+  @DocsEditable
+  @DomName('Location.pathname')
   void set pathname(String value) native "Location_pathname_Setter";
 
-
-  /** @domName Location.port */
+  @DocsEditable
+  @DomName('Location.port')
   String get port native "Location_port_Getter";
 
-
-  /** @domName Location.port */
+  @DocsEditable
+  @DomName('Location.port')
   void set port(String value) native "Location_port_Setter";
 
-
-  /** @domName Location.protocol */
+  @DocsEditable
+  @DomName('Location.protocol')
   String get protocol native "Location_protocol_Getter";
 
-
-  /** @domName Location.protocol */
+  @DocsEditable
+  @DomName('Location.protocol')
   void set protocol(String value) native "Location_protocol_Setter";
 
-
-  /** @domName Location.search */
+  @DocsEditable
+  @DomName('Location.search')
   String get search native "Location_search_Getter";
 
-
-  /** @domName Location.search */
+  @DocsEditable
+  @DomName('Location.search')
   void set search(String value) native "Location_search_Setter";
 
-
-  /** @domName Location.assign */
+  @DocsEditable
+  @DomName('Location.assign')
   void assign(String url) native "Location_assign_Callback";
 
-
-  /** @domName Location.reload */
+  @DocsEditable
+  @DomName('Location.reload')
   void reload() native "Location_reload_Callback";
 
-
-  /** @domName Location.replace */
+  @DocsEditable
+  @DomName('Location.replace')
   void replace(String url) native "Location_replace_Callback";
 
-
-  /** @domName Location.toString */
+  @DocsEditable
+  @DomName('Location.toString')
   String toString() native "Location_toString_Callback";
 
 }
@@ -15742,23 +15607,24 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLMapElement
+@DocsEditable
+@DomName('HTMLMapElement')
 class MapElement extends _Element_Merged {
   MapElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MapElement() => document.$dom_createElement("map");
 
-
-  /** @domName HTMLMapElement.areas */
+  @DocsEditable
+  @DomName('HTMLMapElement.areas')
   HtmlCollection get areas native "HTMLMapElement_areas_Getter";
 
-
-  /** @domName HTMLMapElement.name */
+  @DocsEditable
+  @DomName('HTMLMapElement.name')
   String get name native "HTMLMapElement_name_Getter";
 
-
-  /** @domName HTMLMapElement.name */
+  @DocsEditable
+  @DomName('HTMLMapElement.name')
   void set name(String value) native "HTMLMapElement_name_Setter";
 
 }
@@ -15769,211 +15635,101 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLMarqueeElement
-class MarqueeElement extends _Element_Merged {
-  MarqueeElement.internal() : super.internal();
-
-  /// Checks if this type is supported on the current platform.
-  static bool get supported => true;
-
-
-  /** @domName HTMLMarqueeElement.behavior */
-  String get behavior native "HTMLMarqueeElement_behavior_Getter";
-
-
-  /** @domName HTMLMarqueeElement.behavior */
-  void set behavior(String value) native "HTMLMarqueeElement_behavior_Setter";
-
-
-  /** @domName HTMLMarqueeElement.bgColor */
-  String get bgColor native "HTMLMarqueeElement_bgColor_Getter";
-
-
-  /** @domName HTMLMarqueeElement.bgColor */
-  void set bgColor(String value) native "HTMLMarqueeElement_bgColor_Setter";
-
-
-  /** @domName HTMLMarqueeElement.direction */
-  String get direction native "HTMLMarqueeElement_direction_Getter";
-
-
-  /** @domName HTMLMarqueeElement.direction */
-  void set direction(String value) native "HTMLMarqueeElement_direction_Setter";
-
-
-  /** @domName HTMLMarqueeElement.height */
-  String get height native "HTMLMarqueeElement_height_Getter";
-
-
-  /** @domName HTMLMarqueeElement.height */
-  void set height(String value) native "HTMLMarqueeElement_height_Setter";
-
-
-  /** @domName HTMLMarqueeElement.hspace */
-  int get hspace native "HTMLMarqueeElement_hspace_Getter";
-
-
-  /** @domName HTMLMarqueeElement.hspace */
-  void set hspace(int value) native "HTMLMarqueeElement_hspace_Setter";
-
-
-  /** @domName HTMLMarqueeElement.loop */
-  int get loop native "HTMLMarqueeElement_loop_Getter";
-
-
-  /** @domName HTMLMarqueeElement.loop */
-  void set loop(int value) native "HTMLMarqueeElement_loop_Setter";
-
-
-  /** @domName HTMLMarqueeElement.scrollAmount */
-  int get scrollAmount native "HTMLMarqueeElement_scrollAmount_Getter";
-
-
-  /** @domName HTMLMarqueeElement.scrollAmount */
-  void set scrollAmount(int value) native "HTMLMarqueeElement_scrollAmount_Setter";
-
-
-  /** @domName HTMLMarqueeElement.scrollDelay */
-  int get scrollDelay native "HTMLMarqueeElement_scrollDelay_Getter";
-
-
-  /** @domName HTMLMarqueeElement.scrollDelay */
-  void set scrollDelay(int value) native "HTMLMarqueeElement_scrollDelay_Setter";
-
-
-  /** @domName HTMLMarqueeElement.trueSpeed */
-  bool get trueSpeed native "HTMLMarqueeElement_trueSpeed_Getter";
-
-
-  /** @domName HTMLMarqueeElement.trueSpeed */
-  void set trueSpeed(bool value) native "HTMLMarqueeElement_trueSpeed_Setter";
-
-
-  /** @domName HTMLMarqueeElement.vspace */
-  int get vspace native "HTMLMarqueeElement_vspace_Getter";
-
-
-  /** @domName HTMLMarqueeElement.vspace */
-  void set vspace(int value) native "HTMLMarqueeElement_vspace_Setter";
-
-
-  /** @domName HTMLMarqueeElement.width */
-  String get width native "HTMLMarqueeElement_width_Getter";
-
-
-  /** @domName HTMLMarqueeElement.width */
-  void set width(String value) native "HTMLMarqueeElement_width_Setter";
-
-
-  /** @domName HTMLMarqueeElement.start */
-  void start() native "HTMLMarqueeElement_start_Callback";
-
-
-  /** @domName HTMLMarqueeElement.stop */
-  void stop() native "HTMLMarqueeElement_stop_Callback";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName MediaController
+@DocsEditable
+@DomName('MediaController')
 class MediaController extends EventTarget {
   MediaController.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MediaController() => MediaController._create();
   static MediaController _create() native "MediaController_constructor_Callback";
 
-
-  /** @domName MediaController.buffered */
+  @DocsEditable
+  @DomName('MediaController.buffered')
   TimeRanges get buffered native "MediaController_buffered_Getter";
 
-
-  /** @domName MediaController.currentTime */
+  @DocsEditable
+  @DomName('MediaController.currentTime')
   num get currentTime native "MediaController_currentTime_Getter";
 
-
-  /** @domName MediaController.currentTime */
+  @DocsEditable
+  @DomName('MediaController.currentTime')
   void set currentTime(num value) native "MediaController_currentTime_Setter";
 
-
-  /** @domName MediaController.defaultPlaybackRate */
+  @DocsEditable
+  @DomName('MediaController.defaultPlaybackRate')
   num get defaultPlaybackRate native "MediaController_defaultPlaybackRate_Getter";
 
-
-  /** @domName MediaController.defaultPlaybackRate */
+  @DocsEditable
+  @DomName('MediaController.defaultPlaybackRate')
   void set defaultPlaybackRate(num value) native "MediaController_defaultPlaybackRate_Setter";
 
-
-  /** @domName MediaController.duration */
+  @DocsEditable
+  @DomName('MediaController.duration')
   num get duration native "MediaController_duration_Getter";
 
-
-  /** @domName MediaController.muted */
+  @DocsEditable
+  @DomName('MediaController.muted')
   bool get muted native "MediaController_muted_Getter";
 
-
-  /** @domName MediaController.muted */
+  @DocsEditable
+  @DomName('MediaController.muted')
   void set muted(bool value) native "MediaController_muted_Setter";
 
-
-  /** @domName MediaController.paused */
+  @DocsEditable
+  @DomName('MediaController.paused')
   bool get paused native "MediaController_paused_Getter";
 
-
-  /** @domName MediaController.playbackRate */
+  @DocsEditable
+  @DomName('MediaController.playbackRate')
   num get playbackRate native "MediaController_playbackRate_Getter";
 
-
-  /** @domName MediaController.playbackRate */
+  @DocsEditable
+  @DomName('MediaController.playbackRate')
   void set playbackRate(num value) native "MediaController_playbackRate_Setter";
 
-
-  /** @domName MediaController.playbackState */
+  @DocsEditable
+  @DomName('MediaController.playbackState')
   String get playbackState native "MediaController_playbackState_Getter";
 
-
-  /** @domName MediaController.played */
+  @DocsEditable
+  @DomName('MediaController.played')
   TimeRanges get played native "MediaController_played_Getter";
 
-
-  /** @domName MediaController.seekable */
+  @DocsEditable
+  @DomName('MediaController.seekable')
   TimeRanges get seekable native "MediaController_seekable_Getter";
 
-
-  /** @domName MediaController.volume */
+  @DocsEditable
+  @DomName('MediaController.volume')
   num get volume native "MediaController_volume_Getter";
 
-
-  /** @domName MediaController.volume */
+  @DocsEditable
+  @DomName('MediaController.volume')
   void set volume(num value) native "MediaController_volume_Setter";
 
-
-  /** @domName MediaController.addEventListener */
+  @DocsEditable
+  @DomName('MediaController.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaController_addEventListener_Callback";
 
-
-  /** @domName MediaController.dispatchEvent */
+  @DocsEditable
+  @DomName('MediaController.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "MediaController_dispatchEvent_Callback";
 
-
-  /** @domName MediaController.pause */
+  @DocsEditable
+  @DomName('MediaController.pause')
   void pause() native "MediaController_pause_Callback";
 
-
-  /** @domName MediaController.play */
+  @DocsEditable
+  @DomName('MediaController.play')
   void play() native "MediaController_play_Callback";
 
-
-  /** @domName MediaController.removeEventListener */
+  @DocsEditable
+  @DomName('MediaController.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaController_removeEventListener_Callback";
 
-
-  /** @domName MediaController.unpause */
+  @DocsEditable
+  @DomName('MediaController.unpause')
   void unpause() native "MediaController_unpause_Callback";
 
 }
@@ -15984,7 +15740,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLMediaElement
+@DocsEditable
+@DomName('HTMLMediaElement')
 class MediaElement extends _Element_Merged {
   MediaElement.internal() : super.internal();
 
@@ -16038,7 +15795,8 @@
 
   static const EventStreamProvider<MediaKeyEvent> needKeyEvent = const EventStreamProvider<MediaKeyEvent>('webkitneedkey');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MediaElementEvents get on =>
     new MediaElementEvents(this);
 
@@ -16060,195 +15818,195 @@
 
   static const int NETWORK_NO_SOURCE = 3;
 
-
-  /** @domName HTMLMediaElement.autoplay */
+  @DocsEditable
+  @DomName('HTMLMediaElement.autoplay')
   bool get autoplay native "HTMLMediaElement_autoplay_Getter";
 
-
-  /** @domName HTMLMediaElement.autoplay */
+  @DocsEditable
+  @DomName('HTMLMediaElement.autoplay')
   void set autoplay(bool value) native "HTMLMediaElement_autoplay_Setter";
 
-
-  /** @domName HTMLMediaElement.buffered */
+  @DocsEditable
+  @DomName('HTMLMediaElement.buffered')
   TimeRanges get buffered native "HTMLMediaElement_buffered_Getter";
 
-
-  /** @domName HTMLMediaElement.controller */
+  @DocsEditable
+  @DomName('HTMLMediaElement.controller')
   MediaController get controller native "HTMLMediaElement_controller_Getter";
 
-
-  /** @domName HTMLMediaElement.controller */
+  @DocsEditable
+  @DomName('HTMLMediaElement.controller')
   void set controller(MediaController value) native "HTMLMediaElement_controller_Setter";
 
-
-  /** @domName HTMLMediaElement.controls */
+  @DocsEditable
+  @DomName('HTMLMediaElement.controls')
   bool get controls native "HTMLMediaElement_controls_Getter";
 
-
-  /** @domName HTMLMediaElement.controls */
+  @DocsEditable
+  @DomName('HTMLMediaElement.controls')
   void set controls(bool value) native "HTMLMediaElement_controls_Setter";
 
-
-  /** @domName HTMLMediaElement.currentSrc */
+  @DocsEditable
+  @DomName('HTMLMediaElement.currentSrc')
   String get currentSrc native "HTMLMediaElement_currentSrc_Getter";
 
-
-  /** @domName HTMLMediaElement.currentTime */
+  @DocsEditable
+  @DomName('HTMLMediaElement.currentTime')
   num get currentTime native "HTMLMediaElement_currentTime_Getter";
 
-
-  /** @domName HTMLMediaElement.currentTime */
+  @DocsEditable
+  @DomName('HTMLMediaElement.currentTime')
   void set currentTime(num value) native "HTMLMediaElement_currentTime_Setter";
 
-
-  /** @domName HTMLMediaElement.defaultMuted */
+  @DocsEditable
+  @DomName('HTMLMediaElement.defaultMuted')
   bool get defaultMuted native "HTMLMediaElement_defaultMuted_Getter";
 
-
-  /** @domName HTMLMediaElement.defaultMuted */
+  @DocsEditable
+  @DomName('HTMLMediaElement.defaultMuted')
   void set defaultMuted(bool value) native "HTMLMediaElement_defaultMuted_Setter";
 
-
-  /** @domName HTMLMediaElement.defaultPlaybackRate */
+  @DocsEditable
+  @DomName('HTMLMediaElement.defaultPlaybackRate')
   num get defaultPlaybackRate native "HTMLMediaElement_defaultPlaybackRate_Getter";
 
-
-  /** @domName HTMLMediaElement.defaultPlaybackRate */
+  @DocsEditable
+  @DomName('HTMLMediaElement.defaultPlaybackRate')
   void set defaultPlaybackRate(num value) native "HTMLMediaElement_defaultPlaybackRate_Setter";
 
-
-  /** @domName HTMLMediaElement.duration */
+  @DocsEditable
+  @DomName('HTMLMediaElement.duration')
   num get duration native "HTMLMediaElement_duration_Getter";
 
-
-  /** @domName HTMLMediaElement.ended */
+  @DocsEditable
+  @DomName('HTMLMediaElement.ended')
   bool get ended native "HTMLMediaElement_ended_Getter";
 
-
-  /** @domName HTMLMediaElement.error */
+  @DocsEditable
+  @DomName('HTMLMediaElement.error')
   MediaError get error native "HTMLMediaElement_error_Getter";
 
-
-  /** @domName HTMLMediaElement.initialTime */
+  @DocsEditable
+  @DomName('HTMLMediaElement.initialTime')
   num get initialTime native "HTMLMediaElement_initialTime_Getter";
 
-
-  /** @domName HTMLMediaElement.loop */
+  @DocsEditable
+  @DomName('HTMLMediaElement.loop')
   bool get loop native "HTMLMediaElement_loop_Getter";
 
-
-  /** @domName HTMLMediaElement.loop */
+  @DocsEditable
+  @DomName('HTMLMediaElement.loop')
   void set loop(bool value) native "HTMLMediaElement_loop_Setter";
 
-
-  /** @domName HTMLMediaElement.mediaGroup */
+  @DocsEditable
+  @DomName('HTMLMediaElement.mediaGroup')
   String get mediaGroup native "HTMLMediaElement_mediaGroup_Getter";
 
-
-  /** @domName HTMLMediaElement.mediaGroup */
+  @DocsEditable
+  @DomName('HTMLMediaElement.mediaGroup')
   void set mediaGroup(String value) native "HTMLMediaElement_mediaGroup_Setter";
 
-
-  /** @domName HTMLMediaElement.muted */
+  @DocsEditable
+  @DomName('HTMLMediaElement.muted')
   bool get muted native "HTMLMediaElement_muted_Getter";
 
-
-  /** @domName HTMLMediaElement.muted */
+  @DocsEditable
+  @DomName('HTMLMediaElement.muted')
   void set muted(bool value) native "HTMLMediaElement_muted_Setter";
 
-
-  /** @domName HTMLMediaElement.networkState */
+  @DocsEditable
+  @DomName('HTMLMediaElement.networkState')
   int get networkState native "HTMLMediaElement_networkState_Getter";
 
-
-  /** @domName HTMLMediaElement.paused */
+  @DocsEditable
+  @DomName('HTMLMediaElement.paused')
   bool get paused native "HTMLMediaElement_paused_Getter";
 
-
-  /** @domName HTMLMediaElement.playbackRate */
+  @DocsEditable
+  @DomName('HTMLMediaElement.playbackRate')
   num get playbackRate native "HTMLMediaElement_playbackRate_Getter";
 
-
-  /** @domName HTMLMediaElement.playbackRate */
+  @DocsEditable
+  @DomName('HTMLMediaElement.playbackRate')
   void set playbackRate(num value) native "HTMLMediaElement_playbackRate_Setter";
 
-
-  /** @domName HTMLMediaElement.played */
+  @DocsEditable
+  @DomName('HTMLMediaElement.played')
   TimeRanges get played native "HTMLMediaElement_played_Getter";
 
-
-  /** @domName HTMLMediaElement.preload */
+  @DocsEditable
+  @DomName('HTMLMediaElement.preload')
   String get preload native "HTMLMediaElement_preload_Getter";
 
-
-  /** @domName HTMLMediaElement.preload */
+  @DocsEditable
+  @DomName('HTMLMediaElement.preload')
   void set preload(String value) native "HTMLMediaElement_preload_Setter";
 
-
-  /** @domName HTMLMediaElement.readyState */
+  @DocsEditable
+  @DomName('HTMLMediaElement.readyState')
   int get readyState native "HTMLMediaElement_readyState_Getter";
 
-
-  /** @domName HTMLMediaElement.seekable */
+  @DocsEditable
+  @DomName('HTMLMediaElement.seekable')
   TimeRanges get seekable native "HTMLMediaElement_seekable_Getter";
 
-
-  /** @domName HTMLMediaElement.seeking */
+  @DocsEditable
+  @DomName('HTMLMediaElement.seeking')
   bool get seeking native "HTMLMediaElement_seeking_Getter";
 
-
-  /** @domName HTMLMediaElement.src */
+  @DocsEditable
+  @DomName('HTMLMediaElement.src')
   String get src native "HTMLMediaElement_src_Getter";
 
-
-  /** @domName HTMLMediaElement.src */
+  @DocsEditable
+  @DomName('HTMLMediaElement.src')
   void set src(String value) native "HTMLMediaElement_src_Setter";
 
-
-  /** @domName HTMLMediaElement.startTime */
+  @DocsEditable
+  @DomName('HTMLMediaElement.startTime')
   num get startTime native "HTMLMediaElement_startTime_Getter";
 
-
-  /** @domName HTMLMediaElement.textTracks */
+  @DocsEditable
+  @DomName('HTMLMediaElement.textTracks')
   TextTrackList get textTracks native "HTMLMediaElement_textTracks_Getter";
 
-
-  /** @domName HTMLMediaElement.volume */
+  @DocsEditable
+  @DomName('HTMLMediaElement.volume')
   num get volume native "HTMLMediaElement_volume_Getter";
 
-
-  /** @domName HTMLMediaElement.volume */
+  @DocsEditable
+  @DomName('HTMLMediaElement.volume')
   void set volume(num value) native "HTMLMediaElement_volume_Setter";
 
-
-  /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitAudioDecodedByteCount')
   int get webkitAudioDecodedByteCount native "HTMLMediaElement_webkitAudioDecodedByteCount_Getter";
 
-
-  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitClosedCaptionsVisible')
   bool get webkitClosedCaptionsVisible native "HTMLMediaElement_webkitClosedCaptionsVisible_Getter";
 
-
-  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitClosedCaptionsVisible')
   void set webkitClosedCaptionsVisible(bool value) native "HTMLMediaElement_webkitClosedCaptionsVisible_Setter";
 
-
-  /** @domName HTMLMediaElement.webkitHasClosedCaptions */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitHasClosedCaptions')
   bool get webkitHasClosedCaptions native "HTMLMediaElement_webkitHasClosedCaptions_Getter";
 
-
-  /** @domName HTMLMediaElement.webkitPreservesPitch */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitPreservesPitch')
   bool get webkitPreservesPitch native "HTMLMediaElement_webkitPreservesPitch_Getter";
 
-
-  /** @domName HTMLMediaElement.webkitPreservesPitch */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitPreservesPitch')
   void set webkitPreservesPitch(bool value) native "HTMLMediaElement_webkitPreservesPitch_Setter";
 
-
-  /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitVideoDecodedByteCount')
   int get webkitVideoDecodedByteCount native "HTMLMediaElement_webkitVideoDecodedByteCount_Getter";
 
-  TextTrack addTextTrack(/*DOMString*/ kind, [/*DOMString*/ label, /*DOMString*/ language]) {
+  TextTrack addTextTrack(String kind, [String label, String language]) {
     if (?language) {
       return _addTextTrack_1(kind, label, language);
     }
@@ -16258,35 +16016,35 @@
     return _addTextTrack_3(kind);
   }
 
-
-  /** @domName HTMLMediaElement.addTextTrack_1 */
+  @DocsEditable
+  @DomName('HTMLMediaElement.addTextTrack_1')
   TextTrack _addTextTrack_1(kind, label, language) native "HTMLMediaElement_addTextTrack_1_Callback";
 
-
-  /** @domName HTMLMediaElement.addTextTrack_2 */
+  @DocsEditable
+  @DomName('HTMLMediaElement.addTextTrack_2')
   TextTrack _addTextTrack_2(kind, label) native "HTMLMediaElement_addTextTrack_2_Callback";
 
-
-  /** @domName HTMLMediaElement.addTextTrack_3 */
+  @DocsEditable
+  @DomName('HTMLMediaElement.addTextTrack_3')
   TextTrack _addTextTrack_3(kind) native "HTMLMediaElement_addTextTrack_3_Callback";
 
-
-  /** @domName HTMLMediaElement.canPlayType */
+  @DocsEditable
+  @DomName('HTMLMediaElement.canPlayType')
   String canPlayType(String type, String keySystem) native "HTMLMediaElement_canPlayType_Callback";
 
-
-  /** @domName HTMLMediaElement.load */
+  @DocsEditable
+  @DomName('HTMLMediaElement.load')
   void load() native "HTMLMediaElement_load_Callback";
 
-
-  /** @domName HTMLMediaElement.pause */
+  @DocsEditable
+  @DomName('HTMLMediaElement.pause')
   void pause() native "HTMLMediaElement_pause_Callback";
 
-
-  /** @domName HTMLMediaElement.play */
+  @DocsEditable
+  @DomName('HTMLMediaElement.play')
   void play() native "HTMLMediaElement_play_Callback";
 
-  void webkitAddKey(/*DOMString*/ keySystem, /*Uint8Array*/ key, [/*Uint8Array*/ initData, /*DOMString*/ sessionId]) {
+  void webkitAddKey(String keySystem, Uint8Array key, [Uint8Array initData, String sessionId]) {
     if (?initData) {
       _webkitAddKey_1(keySystem, key, initData, sessionId);
       return;
@@ -16294,19 +16052,19 @@
     _webkitAddKey_2(keySystem, key);
   }
 
-
-  /** @domName HTMLMediaElement.webkitAddKey_1 */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitAddKey_1')
   void _webkitAddKey_1(keySystem, key, initData, sessionId) native "HTMLMediaElement_webkitAddKey_1_Callback";
 
-
-  /** @domName HTMLMediaElement.webkitAddKey_2 */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitAddKey_2')
   void _webkitAddKey_2(keySystem, key) native "HTMLMediaElement_webkitAddKey_2_Callback";
 
-
-  /** @domName HTMLMediaElement.webkitCancelKeyRequest */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitCancelKeyRequest')
   void webkitCancelKeyRequest(String keySystem, String sessionId) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
 
-  void webkitGenerateKeyRequest(/*DOMString*/ keySystem, [/*Uint8Array*/ initData]) {
+  void webkitGenerateKeyRequest(String keySystem, [Uint8Array initData]) {
     if (?initData) {
       _webkitGenerateKeyRequest_1(keySystem, initData);
       return;
@@ -16314,12 +16072,12 @@
     _webkitGenerateKeyRequest_2(keySystem);
   }
 
-
-  /** @domName HTMLMediaElement.webkitGenerateKeyRequest_1 */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitGenerateKeyRequest_1')
   void _webkitGenerateKeyRequest_1(keySystem, initData) native "HTMLMediaElement_webkitGenerateKeyRequest_1_Callback";
 
-
-  /** @domName HTMLMediaElement.webkitGenerateKeyRequest_2 */
+  @DocsEditable
+  @DomName('HTMLMediaElement.webkitGenerateKeyRequest_2')
   void _webkitGenerateKeyRequest_2(keySystem) native "HTMLMediaElement_webkitGenerateKeyRequest_2_Callback";
 
   Stream<Event> get onCanPlay => canPlayEvent.forTarget(this);
@@ -16374,84 +16132,84 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class MediaElementEvents extends ElementEvents {
-  /// @docsEditable true
+  @DocsEditable
   MediaElementEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlay => this['canplay'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlayThrough => this['canplaythrough'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get durationChange => this['durationchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get emptied => this['emptied'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get ended => this['ended'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedData => this['loadeddata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedMetadata => this['loadedmetadata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pause => this['pause'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get play => this['play'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get playing => this['playing'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get rateChange => this['ratechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeked => this['seeked'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeking => this['seeking'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get show => this['show'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get stalled => this['stalled'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get suspend => this['suspend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get timeUpdate => this['timeupdate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get volumeChange => this['volumechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get waiting => this['waiting'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyAdded => this['webkitkeyadded'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyError => this['webkitkeyerror'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyMessage => this['webkitkeymessage'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get needKey => this['webkitneedkey'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16461,7 +16219,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaError
+@DocsEditable
+@DomName('MediaError')
 class MediaError extends NativeFieldWrapperClass1 {
   MediaError.internal();
 
@@ -16475,8 +16234,8 @@
 
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
-
-  /** @domName MediaError.code */
+  @DocsEditable
+  @DomName('MediaError.code')
   int get code native "MediaError_code_Getter";
 
 }
@@ -16487,7 +16246,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaKeyError
+@DocsEditable
+@DomName('MediaKeyError')
 class MediaKeyError extends NativeFieldWrapperClass1 {
   MediaKeyError.internal();
 
@@ -16503,8 +16263,8 @@
 
   static const int MEDIA_KEYERR_UNKNOWN = 1;
 
-
-  /** @domName MediaKeyError.code */
+  @DocsEditable
+  @DomName('MediaKeyError.code')
   int get code native "MediaKeyError_code_Getter";
 
 }
@@ -16515,36 +16275,37 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaKeyEvent
+@DocsEditable
+@DomName('MediaKeyEvent')
 class MediaKeyEvent extends Event {
   MediaKeyEvent.internal() : super.internal();
 
-
-  /** @domName MediaKeyEvent.defaultURL */
+  @DocsEditable
+  @DomName('MediaKeyEvent.defaultURL')
   String get defaultUrl native "MediaKeyEvent_defaultURL_Getter";
 
-
-  /** @domName MediaKeyEvent.errorCode */
+  @DocsEditable
+  @DomName('MediaKeyEvent.errorCode')
   MediaKeyError get errorCode native "MediaKeyEvent_errorCode_Getter";
 
-
-  /** @domName MediaKeyEvent.initData */
+  @DocsEditable
+  @DomName('MediaKeyEvent.initData')
   Uint8Array get initData native "MediaKeyEvent_initData_Getter";
 
-
-  /** @domName MediaKeyEvent.keySystem */
+  @DocsEditable
+  @DomName('MediaKeyEvent.keySystem')
   String get keySystem native "MediaKeyEvent_keySystem_Getter";
 
-
-  /** @domName MediaKeyEvent.message */
+  @DocsEditable
+  @DomName('MediaKeyEvent.message')
   Uint8Array get message native "MediaKeyEvent_message_Getter";
 
-
-  /** @domName MediaKeyEvent.sessionId */
+  @DocsEditable
+  @DomName('MediaKeyEvent.sessionId')
   String get sessionId native "MediaKeyEvent_sessionId_Getter";
 
-
-  /** @domName MediaKeyEvent.systemCode */
+  @DocsEditable
+  @DomName('MediaKeyEvent.systemCode')
   int get systemCode native "MediaKeyEvent_systemCode_Getter";
 
 }
@@ -16555,32 +16316,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaList
+@DocsEditable
+@DomName('MediaList')
 class MediaList extends NativeFieldWrapperClass1 {
   MediaList.internal();
 
-
-  /** @domName MediaList.length */
+  @DocsEditable
+  @DomName('MediaList.length')
   int get length native "MediaList_length_Getter";
 
-
-  /** @domName MediaList.mediaText */
+  @DocsEditable
+  @DomName('MediaList.mediaText')
   String get mediaText native "MediaList_mediaText_Getter";
 
-
-  /** @domName MediaList.mediaText */
+  @DocsEditable
+  @DomName('MediaList.mediaText')
   void set mediaText(String value) native "MediaList_mediaText_Setter";
 
-
-  /** @domName MediaList.appendMedium */
+  @DocsEditable
+  @DomName('MediaList.appendMedium')
   void appendMedium(String newMedium) native "MediaList_appendMedium_Callback";
 
-
-  /** @domName MediaList.deleteMedium */
+  @DocsEditable
+  @DomName('MediaList.deleteMedium')
   void deleteMedium(String oldMedium) native "MediaList_deleteMedium_Callback";
 
-
-  /** @domName MediaList.item */
+  @DocsEditable
+  @DomName('MediaList.item')
   String item(int index) native "MediaList_item_Callback";
 
 }
@@ -16591,24 +16353,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaQueryList
+@DocsEditable
+@DomName('MediaQueryList')
 class MediaQueryList extends NativeFieldWrapperClass1 {
   MediaQueryList.internal();
 
-
-  /** @domName MediaQueryList.matches */
+  @DocsEditable
+  @DomName('MediaQueryList.matches')
   bool get matches native "MediaQueryList_matches_Getter";
 
-
-  /** @domName MediaQueryList.media */
+  @DocsEditable
+  @DomName('MediaQueryList.media')
   String get media native "MediaQueryList_media_Getter";
 
-
-  /** @domName MediaQueryList.addListener */
+  @DocsEditable
+  @DomName('MediaQueryList.addListener')
   void addListener(MediaQueryListListener listener) native "MediaQueryList_addListener_Callback";
 
-
-  /** @domName MediaQueryList.removeListener */
+  @DocsEditable
+  @DomName('MediaQueryList.removeListener')
   void removeListener(MediaQueryListListener listener) native "MediaQueryList_removeListener_Callback";
 
 }
@@ -16619,12 +16382,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaQueryListListener
+@DocsEditable
+@DomName('MediaQueryListListener')
 class MediaQueryListListener extends NativeFieldWrapperClass1 {
   MediaQueryListListener.internal();
 
-
-  /** @domName MediaQueryListListener.queryChanged */
+  @DocsEditable
+  @DomName('MediaQueryListListener.queryChanged')
   void queryChanged(MediaQueryList list) native "MediaQueryListListener_queryChanged_Callback";
 
 }
@@ -16635,123 +16399,152 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaSource
+@DocsEditable
+@DomName('MediaSource')
 class MediaSource extends EventTarget {
   MediaSource.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MediaSource() => MediaSource._create();
   static MediaSource _create() native "MediaSource_constructor_Callback";
 
-
-  /** @domName MediaSource.activeSourceBuffers */
+  @DocsEditable
+  @DomName('MediaSource.activeSourceBuffers')
   SourceBufferList get activeSourceBuffers native "MediaSource_activeSourceBuffers_Getter";
 
-
-  /** @domName MediaSource.duration */
+  @DocsEditable
+  @DomName('MediaSource.duration')
   num get duration native "MediaSource_duration_Getter";
 
-
-  /** @domName MediaSource.duration */
+  @DocsEditable
+  @DomName('MediaSource.duration')
   void set duration(num value) native "MediaSource_duration_Setter";
 
-
-  /** @domName MediaSource.readyState */
+  @DocsEditable
+  @DomName('MediaSource.readyState')
   String get readyState native "MediaSource_readyState_Getter";
 
-
-  /** @domName MediaSource.sourceBuffers */
+  @DocsEditable
+  @DomName('MediaSource.sourceBuffers')
   SourceBufferList get sourceBuffers native "MediaSource_sourceBuffers_Getter";
 
-
-  /** @domName MediaSource.addEventListener */
+  @DocsEditable
+  @DomName('MediaSource.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaSource_addEventListener_Callback";
 
-
-  /** @domName MediaSource.addSourceBuffer */
+  @DocsEditable
+  @DomName('MediaSource.addSourceBuffer')
   SourceBuffer addSourceBuffer(String type) native "MediaSource_addSourceBuffer_Callback";
 
-
-  /** @domName MediaSource.dispatchEvent */
+  @DocsEditable
+  @DomName('MediaSource.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "MediaSource_dispatchEvent_Callback";
 
-
-  /** @domName MediaSource.endOfStream */
+  @DocsEditable
+  @DomName('MediaSource.endOfStream')
   void endOfStream(String error) native "MediaSource_endOfStream_Callback";
 
-
-  /** @domName MediaSource.removeEventListener */
+  @DocsEditable
+  @DomName('MediaSource.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaSource_removeEventListener_Callback";
 
-
-  /** @domName MediaSource.removeSourceBuffer */
+  @DocsEditable
+  @DomName('MediaSource.removeSourceBuffer')
   void removeSourceBuffer(SourceBuffer buffer) native "MediaSource_removeSourceBuffer_Callback";
 
 }
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
-// WARNING: Do not edit - generated code.
 
-
-/// @domName MediaStream
+/// @domName MediaStream; @docsEditable true
+@DocsEditable
+@DomName('MediaStream')
 class MediaStream extends EventTarget {
   MediaStream.internal() : super.internal();
 
   static const EventStreamProvider<Event> endedEvent = const EventStreamProvider<Event>('ended');
 
-  ///@docsEditable true
-  factory MediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => MediaStream._create(audioTracks, videoTracks);
-  static MediaStream _create(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) native "MediaStream_constructor_Callback";
+  @DocsEditable
+  factory MediaStream() => MediaStream._create();
+  static MediaStream _create() native "MediaStream_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MediaStreamEvents get on =>
     new MediaStreamEvents(this);
 
-  static const int ENDED = 2;
+  @DocsEditable
+  @DomName('MediaStream.ended')
+  bool get ended native "MediaStream_ended_Getter";
 
-  static const int LIVE = 1;
+  @DocsEditable
+  @DomName('MediaStream.id')
+  String get id native "MediaStream_id_Getter";
 
-
-  /** @domName MediaStream.audioTracks */
-  MediaStreamTrackList get audioTracks native "MediaStream_audioTracks_Getter";
-
-
-  /** @domName MediaStream.label */
+  @DocsEditable
+  @DomName('MediaStream.label')
   String get label native "MediaStream_label_Getter";
 
-
-  /** @domName MediaStream.readyState */
-  int get readyState native "MediaStream_readyState_Getter";
-
-
-  /** @domName MediaStream.videoTracks */
-  MediaStreamTrackList get videoTracks native "MediaStream_videoTracks_Getter";
-
-
-  /** @domName MediaStream.addEventListener */
+  @DocsEditable
+  @DomName('MediaStream.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStream_addEventListener_Callback";
 
+  @DocsEditable
+  @DomName('MediaStream.addTrack')
+  void addTrack(MediaStreamTrack track) native "MediaStream_addTrack_Callback";
 
-  /** @domName MediaStream.dispatchEvent */
+  @DocsEditable
+  @DomName('MediaStream.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "MediaStream_dispatchEvent_Callback";
 
+  @DocsEditable
+  @DomName('MediaStream.getAudioTracks')
+  List<MediaStreamTrack> getAudioTracks() native "MediaStream_getAudioTracks_Callback";
 
-  /** @domName MediaStream.removeEventListener */
+  @DocsEditable
+  @DomName('MediaStream.getTrackById')
+  MediaStreamTrack getTrackById(String trackId) native "MediaStream_getTrackById_Callback";
+
+  @DocsEditable
+  @DomName('MediaStream.getVideoTracks')
+  List<MediaStreamTrack> getVideoTracks() native "MediaStream_getVideoTracks_Callback";
+
+  @DocsEditable
+  @DomName('MediaStream.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStream_removeEventListener_Callback";
 
+  @DocsEditable
+  @DomName('MediaStream.removeTrack')
+  void removeTrack(MediaStreamTrack track) native "MediaStream_removeTrack_Callback";
+
   Stream<Event> get onEnded => endedEvent.forTarget(this);
 
+
+  /**
+   * Checks if the MediaStream APIs are supported on the current platform.
+   *
+   * See also:
+   *
+   * * [Navigator.getUserMedia]
+   */
+  static bool get supported => true;
 }
 
-/// @docsEditable true
+@DocsEditable
 class MediaStreamEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   MediaStreamEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
+  EventListenerList get addTrack => this['addtrack'];
+
+  @DocsEditable
   EventListenerList get ended => this['ended'];
+
+  @DocsEditable
+  EventListenerList get removeTrack => this['removetrack'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -16760,12 +16553,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaStreamEvent
+@DocsEditable
+@DomName('MediaStreamEvent')
 class MediaStreamEvent extends Event {
   MediaStreamEvent.internal() : super.internal();
 
-
-  /** @domName MediaStreamEvent.stream */
+  @DocsEditable
+  @DomName('MediaStreamEvent.stream')
   MediaStream get stream native "MediaStreamEvent_stream_Getter";
 
 }
@@ -16776,7 +16570,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaStreamTrack
+@DocsEditable
+@DomName('MediaStreamTrack')
 class MediaStreamTrack extends EventTarget {
   MediaStreamTrack.internal() : super.internal();
 
@@ -16786,7 +16581,8 @@
 
   static const EventStreamProvider<Event> unmuteEvent = const EventStreamProvider<Event>('unmute');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MediaStreamTrackEvents get on =>
     new MediaStreamTrackEvents(this);
 
@@ -16796,36 +16592,40 @@
 
   static const int MUTED = 1;
 
-
-  /** @domName MediaStreamTrack.enabled */
+  @DocsEditable
+  @DomName('MediaStreamTrack.enabled')
   bool get enabled native "MediaStreamTrack_enabled_Getter";
 
-
-  /** @domName MediaStreamTrack.enabled */
+  @DocsEditable
+  @DomName('MediaStreamTrack.enabled')
   void set enabled(bool value) native "MediaStreamTrack_enabled_Setter";
 
+  @DocsEditable
+  @DomName('MediaStreamTrack.id')
+  String get id native "MediaStreamTrack_id_Getter";
 
-  /** @domName MediaStreamTrack.kind */
+  @DocsEditable
+  @DomName('MediaStreamTrack.kind')
   String get kind native "MediaStreamTrack_kind_Getter";
 
-
-  /** @domName MediaStreamTrack.label */
+  @DocsEditable
+  @DomName('MediaStreamTrack.label')
   String get label native "MediaStreamTrack_label_Getter";
 
-
-  /** @domName MediaStreamTrack.readyState */
+  @DocsEditable
+  @DomName('MediaStreamTrack.readyState')
   int get readyState native "MediaStreamTrack_readyState_Getter";
 
-
-  /** @domName MediaStreamTrack.addEventListener */
+  @DocsEditable
+  @DomName('MediaStreamTrack.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrack_addEventListener_Callback";
 
-
-  /** @domName MediaStreamTrack.dispatchEvent */
+  @DocsEditable
+  @DomName('MediaStreamTrack.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "MediaStreamTrack_dispatchEvent_Callback";
 
-
-  /** @domName MediaStreamTrack.removeEventListener */
+  @DocsEditable
+  @DomName('MediaStreamTrack.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrack_removeEventListener_Callback";
 
   Stream<Event> get onEnded => endedEvent.forTarget(this);
@@ -16836,18 +16636,18 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class MediaStreamTrackEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   MediaStreamTrackEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get ended => this['ended'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mute => this['mute'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unmute => this['unmute'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16857,12 +16657,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaStreamTrackEvent
+@DocsEditable
+@DomName('MediaStreamTrackEvent')
 class MediaStreamTrackEvent extends Event {
   MediaStreamTrackEvent.internal() : super.internal();
 
-
-  /** @domName MediaStreamTrackEvent.track */
+  @DocsEditable
+  @DomName('MediaStreamTrackEvent.track')
   MediaStreamTrack get track native "MediaStreamTrackEvent_track_Getter";
 
 }
@@ -16873,84 +16674,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaStreamTrackList
-class MediaStreamTrackList extends EventTarget {
-  MediaStreamTrackList.internal() : super.internal();
-
-  static const EventStreamProvider<MediaStreamTrackEvent> addTrackEvent = const EventStreamProvider<MediaStreamTrackEvent>('addtrack');
-
-  static const EventStreamProvider<MediaStreamTrackEvent> removeTrackEvent = const EventStreamProvider<MediaStreamTrackEvent>('removetrack');
-
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
-  MediaStreamTrackListEvents get on =>
-    new MediaStreamTrackListEvents(this);
-
-
-  /** @domName MediaStreamTrackList.length */
-  int get length native "MediaStreamTrackList_length_Getter";
-
-
-  /** @domName MediaStreamTrackList.add */
-  void add(MediaStreamTrack track) native "MediaStreamTrackList_add_Callback";
-
-
-  /** @domName MediaStreamTrackList.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrackList_addEventListener_Callback";
-
-
-  /** @domName MediaStreamTrackList.dispatchEvent */
-  bool $dom_dispatchEvent(Event event) native "MediaStreamTrackList_dispatchEvent_Callback";
-
-
-  /** @domName MediaStreamTrackList.item */
-  MediaStreamTrack item(int index) native "MediaStreamTrackList_item_Callback";
-
-
-  /** @domName MediaStreamTrackList.remove */
-  void remove(MediaStreamTrack track) native "MediaStreamTrackList_remove_Callback";
-
-
-  /** @domName MediaStreamTrackList.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrackList_removeEventListener_Callback";
-
-  Stream<MediaStreamTrackEvent> get onAddTrack => addTrackEvent.forTarget(this);
-
-  Stream<MediaStreamTrackEvent> get onRemoveTrack => removeTrackEvent.forTarget(this);
-
-}
-
-/// @docsEditable true
-class MediaStreamTrackListEvents extends Events {
-  /// @docsEditable true
-  MediaStreamTrackListEvents(EventTarget _ptr) : super(_ptr);
-
-  /// @docsEditable true
-  EventListenerList get addTrack => this['addtrack'];
-
-  /// @docsEditable true
-  EventListenerList get removeTrack => this['removetrack'];
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName MemoryInfo
+@DocsEditable
+@DomName('MemoryInfo')
 class MemoryInfo extends NativeFieldWrapperClass1 {
   MemoryInfo.internal();
 
-
-  /** @domName MemoryInfo.jsHeapSizeLimit */
+  @DocsEditable
+  @DomName('MemoryInfo.jsHeapSizeLimit')
   int get jsHeapSizeLimit native "MemoryInfo_jsHeapSizeLimit_Getter";
 
-
-  /** @domName MemoryInfo.totalJSHeapSize */
+  @DocsEditable
+  @DomName('MemoryInfo.totalJSHeapSize')
   int get totalJSHeapSize native "MemoryInfo_totalJSHeapSize_Getter";
 
-
-  /** @domName MemoryInfo.usedJSHeapSize */
+  @DocsEditable
+  @DomName('MemoryInfo.usedJSHeapSize')
   int get usedJSHeapSize native "MemoryInfo_usedJSHeapSize_Getter";
 
 }
@@ -16961,11 +16699,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLMenuElement
+@DocsEditable
+@DomName('HTMLMenuElement')
 class MenuElement extends _Element_Merged {
   MenuElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MenuElement() => document.$dom_createElement("menu");
 
 }
@@ -16976,20 +16715,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MessageChannel
+@DocsEditable
+@DomName('MessageChannel')
 class MessageChannel extends NativeFieldWrapperClass1 {
   MessageChannel.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MessageChannel() => MessageChannel._create();
   static MessageChannel _create() native "MessageChannel_constructor_Callback";
 
-
-  /** @domName MessageChannel.port1 */
+  @DocsEditable
+  @DomName('MessageChannel.port1')
   MessagePort get port1 native "MessageChannel_port1_Getter";
 
-
-  /** @domName MessageChannel.port2 */
+  @DocsEditable
+  @DomName('MessageChannel.port2')
   MessagePort get port2 native "MessageChannel_port2_Getter";
 
 }
@@ -17000,36 +16740,37 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MessageEvent
+@DocsEditable
+@DomName('MessageEvent')
 class MessageEvent extends Event {
   MessageEvent.internal() : super.internal();
 
-
-  /** @domName MessageEvent.data */
+  @DocsEditable
+  @DomName('MessageEvent.data')
   Object get data native "MessageEvent_data_Getter";
 
-
-  /** @domName MessageEvent.lastEventId */
+  @DocsEditable
+  @DomName('MessageEvent.lastEventId')
   String get lastEventId native "MessageEvent_lastEventId_Getter";
 
-
-  /** @domName MessageEvent.origin */
+  @DocsEditable
+  @DomName('MessageEvent.origin')
   String get origin native "MessageEvent_origin_Getter";
 
-
-  /** @domName MessageEvent.ports */
+  @DocsEditable
+  @DomName('MessageEvent.ports')
   List get ports native "MessageEvent_ports_Getter";
 
-
-  /** @domName MessageEvent.source */
+  @DocsEditable
+  @DomName('MessageEvent.source')
   WindowBase get source native "MessageEvent_source_Getter";
 
-
-  /** @domName MessageEvent.initMessageEvent */
+  @DocsEditable
+  @DomName('MessageEvent.initMessageEvent')
   void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List messagePorts) native "MessageEvent_initMessageEvent_Callback";
 
-
-  /** @domName MessageEvent.webkitInitMessageEvent */
+  @DocsEditable
+  @DomName('MessageEvent.webkitInitMessageEvent')
   void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List transferables) native "MessageEvent_webkitInitMessageEvent_Callback";
 
 }
@@ -17040,50 +16781,52 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MessagePort
+@DocsEditable
+@DomName('MessagePort')
 class MessagePort extends EventTarget {
   MessagePort.internal() : super.internal();
 
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   MessagePortEvents get on =>
     new MessagePortEvents(this);
 
-
-  /** @domName MessagePort.addEventListener */
+  @DocsEditable
+  @DomName('MessagePort.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MessagePort_addEventListener_Callback";
 
-
-  /** @domName MessagePort.close */
+  @DocsEditable
+  @DomName('MessagePort.close')
   void close() native "MessagePort_close_Callback";
 
-
-  /** @domName MessagePort.dispatchEvent */
+  @DocsEditable
+  @DomName('MessagePort.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "MessagePort_dispatchEvent_Callback";
 
-
-  /** @domName MessagePort.postMessage */
+  @DocsEditable
+  @DomName('MessagePort.postMessage')
   void postMessage(Object message, [List messagePorts]) native "MessagePort_postMessage_Callback";
 
-
-  /** @domName MessagePort.removeEventListener */
+  @DocsEditable
+  @DomName('MessagePort.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MessagePort_removeEventListener_Callback";
 
-
-  /** @domName MessagePort.start */
+  @DocsEditable
+  @DomName('MessagePort.start')
   void start() native "MessagePort_start_Callback";
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class MessagePortEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   MessagePortEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17093,32 +16836,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLMetaElement
+@DocsEditable
+@DomName('HTMLMetaElement')
 class MetaElement extends _Element_Merged {
   MetaElement.internal() : super.internal();
 
-
-  /** @domName HTMLMetaElement.content */
+  @DocsEditable
+  @DomName('HTMLMetaElement.content')
   String get content native "HTMLMetaElement_content_Getter";
 
-
-  /** @domName HTMLMetaElement.content */
+  @DocsEditable
+  @DomName('HTMLMetaElement.content')
   void set content(String value) native "HTMLMetaElement_content_Setter";
 
-
-  /** @domName HTMLMetaElement.httpEquiv */
+  @DocsEditable
+  @DomName('HTMLMetaElement.httpEquiv')
   String get httpEquiv native "HTMLMetaElement_httpEquiv_Getter";
 
-
-  /** @domName HTMLMetaElement.httpEquiv */
+  @DocsEditable
+  @DomName('HTMLMetaElement.httpEquiv')
   void set httpEquiv(String value) native "HTMLMetaElement_httpEquiv_Setter";
 
-
-  /** @domName HTMLMetaElement.name */
+  @DocsEditable
+  @DomName('HTMLMetaElement.name')
   String get name native "HTMLMetaElement_name_Getter";
 
-
-  /** @domName HTMLMetaElement.name */
+  @DocsEditable
+  @DomName('HTMLMetaElement.name')
   void set name(String value) native "HTMLMetaElement_name_Setter";
 
 }
@@ -17129,16 +16873,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Metadata
+@DocsEditable
+@DomName('Metadata')
 class Metadata extends NativeFieldWrapperClass1 {
   Metadata.internal();
 
-
-  /** @domName Metadata.modificationTime */
+  @DocsEditable
+  @DomName('Metadata.modificationTime')
   Date get modificationTime native "Metadata_modificationTime_Getter";
 
-
-  /** @domName Metadata.size */
+  @DocsEditable
+  @DomName('Metadata.size')
   int get size native "Metadata_size_Getter";
 
 }
@@ -17157,69 +16902,70 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLMeterElement
+@DocsEditable
+@DomName('HTMLMeterElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class MeterElement extends _Element_Merged {
   MeterElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MeterElement() => document.$dom_createElement("meter");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLMeterElement.high */
+  @DocsEditable
+  @DomName('HTMLMeterElement.high')
   num get high native "HTMLMeterElement_high_Getter";
 
-
-  /** @domName HTMLMeterElement.high */
+  @DocsEditable
+  @DomName('HTMLMeterElement.high')
   void set high(num value) native "HTMLMeterElement_high_Setter";
 
-
-  /** @domName HTMLMeterElement.labels */
+  @DocsEditable
+  @DomName('HTMLMeterElement.labels')
   List<Node> get labels native "HTMLMeterElement_labels_Getter";
 
-
-  /** @domName HTMLMeterElement.low */
+  @DocsEditable
+  @DomName('HTMLMeterElement.low')
   num get low native "HTMLMeterElement_low_Getter";
 
-
-  /** @domName HTMLMeterElement.low */
+  @DocsEditable
+  @DomName('HTMLMeterElement.low')
   void set low(num value) native "HTMLMeterElement_low_Setter";
 
-
-  /** @domName HTMLMeterElement.max */
+  @DocsEditable
+  @DomName('HTMLMeterElement.max')
   num get max native "HTMLMeterElement_max_Getter";
 
-
-  /** @domName HTMLMeterElement.max */
+  @DocsEditable
+  @DomName('HTMLMeterElement.max')
   void set max(num value) native "HTMLMeterElement_max_Setter";
 
-
-  /** @domName HTMLMeterElement.min */
+  @DocsEditable
+  @DomName('HTMLMeterElement.min')
   num get min native "HTMLMeterElement_min_Getter";
 
-
-  /** @domName HTMLMeterElement.min */
+  @DocsEditable
+  @DomName('HTMLMeterElement.min')
   void set min(num value) native "HTMLMeterElement_min_Setter";
 
-
-  /** @domName HTMLMeterElement.optimum */
+  @DocsEditable
+  @DomName('HTMLMeterElement.optimum')
   num get optimum native "HTMLMeterElement_optimum_Getter";
 
-
-  /** @domName HTMLMeterElement.optimum */
+  @DocsEditable
+  @DomName('HTMLMeterElement.optimum')
   void set optimum(num value) native "HTMLMeterElement_optimum_Setter";
 
-
-  /** @domName HTMLMeterElement.value */
+  @DocsEditable
+  @DomName('HTMLMeterElement.value')
   num get value native "HTMLMeterElement_value_Getter";
 
-
-  /** @domName HTMLMeterElement.value */
+  @DocsEditable
+  @DomName('HTMLMeterElement.value')
   void set value(num value) native "HTMLMeterElement_value_Setter";
 
 }
@@ -17230,24 +16976,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLModElement
+@DocsEditable
+@DomName('HTMLModElement')
 class ModElement extends _Element_Merged {
   ModElement.internal() : super.internal();
 
-
-  /** @domName HTMLModElement.cite */
+  @DocsEditable
+  @DomName('HTMLModElement.cite')
   String get cite native "HTMLModElement_cite_Getter";
 
-
-  /** @domName HTMLModElement.cite */
+  @DocsEditable
+  @DomName('HTMLModElement.cite')
   void set cite(String value) native "HTMLModElement_cite_Setter";
 
-
-  /** @domName HTMLModElement.dateTime */
+  @DocsEditable
+  @DomName('HTMLModElement.dateTime')
   String get dateTime native "HTMLModElement_dateTime_Getter";
 
-
-  /** @domName HTMLModElement.dateTime */
+  @DocsEditable
+  @DomName('HTMLModElement.dateTime')
   void set dateTime(String value) native "HTMLModElement_dateTime_Setter";
 
 }
@@ -17258,7 +17005,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MouseEvent
+@DocsEditable
+@DomName('MouseEvent')
 class MouseEvent extends UIEvent {
   factory MouseEvent(String type, Window view, int detail, int screenX,
       int screenY, int clientX, int clientY, int button, [bool canBubble = true,
@@ -17272,84 +17020,84 @@
           relatedTarget);
   MouseEvent.internal() : super.internal();
 
-
-  /** @domName MouseEvent.altKey */
+  @DocsEditable
+  @DomName('MouseEvent.altKey')
   bool get altKey native "MouseEvent_altKey_Getter";
 
-
-  /** @domName MouseEvent.button */
+  @DocsEditable
+  @DomName('MouseEvent.button')
   int get button native "MouseEvent_button_Getter";
 
-
-  /** @domName MouseEvent.clientX */
+  @DocsEditable
+  @DomName('MouseEvent.clientX')
   int get clientX native "MouseEvent_clientX_Getter";
 
-
-  /** @domName MouseEvent.clientY */
+  @DocsEditable
+  @DomName('MouseEvent.clientY')
   int get clientY native "MouseEvent_clientY_Getter";
 
-
-  /** @domName MouseEvent.ctrlKey */
+  @DocsEditable
+  @DomName('MouseEvent.ctrlKey')
   bool get ctrlKey native "MouseEvent_ctrlKey_Getter";
 
-
-  /** @domName MouseEvent.dataTransfer */
+  @DocsEditable
+  @DomName('MouseEvent.dataTransfer')
   Clipboard get dataTransfer native "MouseEvent_dataTransfer_Getter";
 
-
-  /** @domName MouseEvent.fromElement */
+  @DocsEditable
+  @DomName('MouseEvent.fromElement')
   Node get fromElement native "MouseEvent_fromElement_Getter";
 
-
-  /** @domName MouseEvent.metaKey */
+  @DocsEditable
+  @DomName('MouseEvent.metaKey')
   bool get metaKey native "MouseEvent_metaKey_Getter";
 
-
-  /** @domName MouseEvent.offsetX */
+  @DocsEditable
+  @DomName('MouseEvent.offsetX')
   int get offsetX native "MouseEvent_offsetX_Getter";
 
-
-  /** @domName MouseEvent.offsetY */
+  @DocsEditable
+  @DomName('MouseEvent.offsetY')
   int get offsetY native "MouseEvent_offsetY_Getter";
 
-
-  /** @domName MouseEvent.relatedTarget */
+  @DocsEditable
+  @DomName('MouseEvent.relatedTarget')
   EventTarget get relatedTarget native "MouseEvent_relatedTarget_Getter";
 
-
-  /** @domName MouseEvent.screenX */
+  @DocsEditable
+  @DomName('MouseEvent.screenX')
   int get screenX native "MouseEvent_screenX_Getter";
 
-
-  /** @domName MouseEvent.screenY */
+  @DocsEditable
+  @DomName('MouseEvent.screenY')
   int get screenY native "MouseEvent_screenY_Getter";
 
-
-  /** @domName MouseEvent.shiftKey */
+  @DocsEditable
+  @DomName('MouseEvent.shiftKey')
   bool get shiftKey native "MouseEvent_shiftKey_Getter";
 
-
-  /** @domName MouseEvent.toElement */
+  @DocsEditable
+  @DomName('MouseEvent.toElement')
   Node get toElement native "MouseEvent_toElement_Getter";
 
-
-  /** @domName MouseEvent.webkitMovementX */
+  @DocsEditable
+  @DomName('MouseEvent.webkitMovementX')
   int get webkitMovementX native "MouseEvent_webkitMovementX_Getter";
 
-
-  /** @domName MouseEvent.webkitMovementY */
+  @DocsEditable
+  @DomName('MouseEvent.webkitMovementY')
   int get webkitMovementY native "MouseEvent_webkitMovementY_Getter";
 
-
-  /** @domName MouseEvent.x */
+  @DocsEditable
+  @DomName('MouseEvent.x')
   int get x native "MouseEvent_x_Getter";
 
-
-  /** @domName MouseEvent.y */
+  @DocsEditable
+  @DomName('MouseEvent.y')
   int get y native "MouseEvent_y_Getter";
 
-
-  /** @domName MouseEvent.initMouseEvent */
+  @DocsEditable
+  @DomName('MouseEvent.initMouseEvent')
   void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) native "MouseEvent_initMouseEvent_Callback";
 
 }
@@ -17368,7 +17116,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MutationEvent
+@DocsEditable
+@DomName('MutationEvent')
 class MutationEvent extends Event {
   MutationEvent.internal() : super.internal();
 
@@ -17378,28 +17127,28 @@
 
   static const int REMOVAL = 3;
 
-
-  /** @domName MutationEvent.attrChange */
+  @DocsEditable
+  @DomName('MutationEvent.attrChange')
   int get attrChange native "MutationEvent_attrChange_Getter";
 
-
-  /** @domName MutationEvent.attrName */
+  @DocsEditable
+  @DomName('MutationEvent.attrName')
   String get attrName native "MutationEvent_attrName_Getter";
 
-
-  /** @domName MutationEvent.newValue */
+  @DocsEditable
+  @DomName('MutationEvent.newValue')
   String get newValue native "MutationEvent_newValue_Getter";
 
-
-  /** @domName MutationEvent.prevValue */
+  @DocsEditable
+  @DomName('MutationEvent.prevValue')
   String get prevValue native "MutationEvent_prevValue_Getter";
 
-
-  /** @domName MutationEvent.relatedNode */
+  @DocsEditable
+  @DomName('MutationEvent.relatedNode')
   Node get relatedNode native "MutationEvent_relatedNode_Getter";
 
-
-  /** @domName MutationEvent.initMutationEvent */
+  @DocsEditable
+  @DomName('MutationEvent.initMutationEvent')
   void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange) native "MutationEvent_initMutationEvent_Callback";
 
 }
@@ -17408,7 +17157,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MutationObserver
+@DocsEditable
+@DomName('MutationObserver')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -17416,20 +17166,20 @@
 class MutationObserver extends NativeFieldWrapperClass1 {
   MutationObserver.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MutationObserver(MutationCallback callback) => MutationObserver._create(callback);
   static MutationObserver _create(MutationCallback callback) native "MutationObserver_constructor_Callback";
 
-
-  /** @domName MutationObserver.disconnect */
+  @DocsEditable
+  @DomName('MutationObserver.disconnect')
   void disconnect() native "MutationObserver_disconnect_Callback";
 
-
-  /** @domName MutationObserver._observe */
+  @DocsEditable
+  @DomName('MutationObserver._observe')
   void _observe(Node target, Map options) native "MutationObserver__observe_Callback";
 
-
-  /** @domName MutationObserver.takeRecords */
+  @DocsEditable
+  @DomName('MutationObserver.takeRecords')
   List<MutationRecord> takeRecords() native "MutationObserver_takeRecords_Callback";
 
   /**
@@ -17509,44 +17259,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MutationRecord
+@DocsEditable
+@DomName('MutationRecord')
 class MutationRecord extends NativeFieldWrapperClass1 {
   MutationRecord.internal();
 
-
-  /** @domName MutationRecord.addedNodes */
+  @DocsEditable
+  @DomName('MutationRecord.addedNodes')
   List<Node> get addedNodes native "MutationRecord_addedNodes_Getter";
 
-
-  /** @domName MutationRecord.attributeName */
+  @DocsEditable
+  @DomName('MutationRecord.attributeName')
   String get attributeName native "MutationRecord_attributeName_Getter";
 
-
-  /** @domName MutationRecord.attributeNamespace */
+  @DocsEditable
+  @DomName('MutationRecord.attributeNamespace')
   String get attributeNamespace native "MutationRecord_attributeNamespace_Getter";
 
-
-  /** @domName MutationRecord.nextSibling */
+  @DocsEditable
+  @DomName('MutationRecord.nextSibling')
   Node get nextSibling native "MutationRecord_nextSibling_Getter";
 
-
-  /** @domName MutationRecord.oldValue */
+  @DocsEditable
+  @DomName('MutationRecord.oldValue')
   String get oldValue native "MutationRecord_oldValue_Getter";
 
-
-  /** @domName MutationRecord.previousSibling */
+  @DocsEditable
+  @DomName('MutationRecord.previousSibling')
   Node get previousSibling native "MutationRecord_previousSibling_Getter";
 
-
-  /** @domName MutationRecord.removedNodes */
+  @DocsEditable
+  @DomName('MutationRecord.removedNodes')
   List<Node> get removedNodes native "MutationRecord_removedNodes_Getter";
 
-
-  /** @domName MutationRecord.target */
+  @DocsEditable
+  @DomName('MutationRecord.target')
   Node get target native "MutationRecord_target_Getter";
 
-
-  /** @domName MutationRecord.type */
+  @DocsEditable
+  @DomName('MutationRecord.type')
   String get type native "MutationRecord_type_Getter";
 
 }
@@ -17557,12 +17308,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName NamedNodeMap
+@DocsEditable
+@DomName('NamedNodeMap')
 class NamedNodeMap extends NativeFieldWrapperClass1 implements List<Node> {
   NamedNodeMap.internal();
 
-
-  /** @domName NamedNodeMap.length */
+  @DocsEditable
+  @DomName('NamedNodeMap.length')
   int get length native "NamedNodeMap_length_Getter";
 
   Node operator[](int index) native "NamedNodeMap_item_Callback";
@@ -17583,50 +17335,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -17684,16 +17436,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -17713,32 +17485,32 @@
 
   // -- end List<Node> mixins.
 
-
-  /** @domName NamedNodeMap.getNamedItem */
+  @DocsEditable
+  @DomName('NamedNodeMap.getNamedItem')
   Node getNamedItem(String name) native "NamedNodeMap_getNamedItem_Callback";
 
-
-  /** @domName NamedNodeMap.getNamedItemNS */
+  @DocsEditable
+  @DomName('NamedNodeMap.getNamedItemNS')
   Node getNamedItemNS(String namespaceURI, String localName) native "NamedNodeMap_getNamedItemNS_Callback";
 
-
-  /** @domName NamedNodeMap.item */
+  @DocsEditable
+  @DomName('NamedNodeMap.item')
   Node item(int index) native "NamedNodeMap_item_Callback";
 
-
-  /** @domName NamedNodeMap.removeNamedItem */
+  @DocsEditable
+  @DomName('NamedNodeMap.removeNamedItem')
   Node removeNamedItem(String name) native "NamedNodeMap_removeNamedItem_Callback";
 
-
-  /** @domName NamedNodeMap.removeNamedItemNS */
+  @DocsEditable
+  @DomName('NamedNodeMap.removeNamedItemNS')
   Node removeNamedItemNS(String namespaceURI, String localName) native "NamedNodeMap_removeNamedItemNS_Callback";
 
-
-  /** @domName NamedNodeMap.setNamedItem */
+  @DocsEditable
+  @DomName('NamedNodeMap.setNamedItem')
   Node setNamedItem(Node node) native "NamedNodeMap_setNamedItem_Callback";
 
-
-  /** @domName NamedNodeMap.setNamedItemNS */
+  @DocsEditable
+  @DomName('NamedNodeMap.setNamedItemNS')
   Node setNamedItemNS(Node node) native "NamedNodeMap_setNamedItemNS_Callback";
 
 }
@@ -17746,92 +17518,132 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// WARNING: Do not edit - generated code.
 
-
-/// @domName Navigator
+@DocsEditable
+@DomName('Navigator')
 class Navigator extends NativeFieldWrapperClass1 {
+
+
+  /**
+   * Gets a stream (video and or audio) from the local computer.
+   *
+   * Use [MediaStream.supported] to check if this is supported by the current
+   * platform.
+   *
+   * Example use:
+   *
+   *     window.navigator.getUserMedia(audio:true, video: true).then((stream) {
+   *       var video = new VideoElement()
+   *         ..autoplay = true
+   *         ..src = Url.createObjectUrl(stream);
+   *       document.body.append(video);
+   *     });
+   *
+   * See also:
+   * * [MediaStream.supported]
+   */
+  @DomName('Navigator.webkitGetUserMedia')
+  @SupportedBrowser(SupportedBrowser.CHROME)
+  @Experimental()
+  Future<LocalMediaStream> getUserMedia({bool audio: false,
+      bool video: false}) {
+    var completer = new Completer<LocalMediaStream>();
+    var options = {
+      'audio': audio,
+      'video': video
+    };
+    this._getUserMedia(options,
+      (stream) {
+        completer.complete(stream);
+      },
+      (error) {
+        completer.completeError(error);
+      });
+    return completer.future;
+  }
+
+
   Navigator.internal();
 
-
-  /** @domName Navigator.appCodeName */
+  @DocsEditable
+  @DomName('Navigator.appCodeName')
   String get appCodeName native "Navigator_appCodeName_Getter";
 
-
-  /** @domName Navigator.appName */
+  @DocsEditable
+  @DomName('Navigator.appName')
   String get appName native "Navigator_appName_Getter";
 
-
-  /** @domName Navigator.appVersion */
+  @DocsEditable
+  @DomName('Navigator.appVersion')
   String get appVersion native "Navigator_appVersion_Getter";
 
-
-  /** @domName Navigator.cookieEnabled */
+  @DocsEditable
+  @DomName('Navigator.cookieEnabled')
   bool get cookieEnabled native "Navigator_cookieEnabled_Getter";
 
-
-  /** @domName Navigator.geolocation */
+  @DocsEditable
+  @DomName('Navigator.geolocation')
   Geolocation get geolocation native "Navigator_geolocation_Getter";
 
-
-  /** @domName Navigator.language */
+  @DocsEditable
+  @DomName('Navigator.language')
   String get language native "Navigator_language_Getter";
 
-
-  /** @domName Navigator.mimeTypes */
+  @DocsEditable
+  @DomName('Navigator.mimeTypes')
   DomMimeTypeArray get mimeTypes native "Navigator_mimeTypes_Getter";
 
-
-  /** @domName Navigator.onLine */
+  @DocsEditable
+  @DomName('Navigator.onLine')
   bool get onLine native "Navigator_onLine_Getter";
 
-
-  /** @domName Navigator.platform */
+  @DocsEditable
+  @DomName('Navigator.platform')
   String get platform native "Navigator_platform_Getter";
 
-
-  /** @domName Navigator.plugins */
+  @DocsEditable
+  @DomName('Navigator.plugins')
   DomPluginArray get plugins native "Navigator_plugins_Getter";
 
-
-  /** @domName Navigator.product */
+  @DocsEditable
+  @DomName('Navigator.product')
   String get product native "Navigator_product_Getter";
 
-
-  /** @domName Navigator.productSub */
+  @DocsEditable
+  @DomName('Navigator.productSub')
   String get productSub native "Navigator_productSub_Getter";
 
-
-  /** @domName Navigator.userAgent */
+  @DocsEditable
+  @DomName('Navigator.userAgent')
   String get userAgent native "Navigator_userAgent_Getter";
 
-
-  /** @domName Navigator.vendor */
+  @DocsEditable
+  @DomName('Navigator.vendor')
   String get vendor native "Navigator_vendor_Getter";
 
-
-  /** @domName Navigator.vendorSub */
+  @DocsEditable
+  @DomName('Navigator.vendorSub')
   String get vendorSub native "Navigator_vendorSub_Getter";
 
-
-  /** @domName Navigator.webkitBattery */
+  @DocsEditable
+  @DomName('Navigator.webkitBattery')
   BatteryManager get webkitBattery native "Navigator_webkitBattery_Getter";
 
-
-  /** @domName Navigator.getStorageUpdates */
+  @DocsEditable
+  @DomName('Navigator.getStorageUpdates')
   void getStorageUpdates() native "Navigator_getStorageUpdates_Callback";
 
-
-  /** @domName Navigator.javaEnabled */
+  @DocsEditable
+  @DomName('Navigator.javaEnabled')
   bool javaEnabled() native "Navigator_javaEnabled_Callback";
 
-
-  /** @domName Navigator.webkitGetGamepads */
+  @DocsEditable
+  @DomName('Navigator.webkitGetGamepads')
   List<Gamepad> webkitGetGamepads() native "Navigator_webkitGetGamepads_Callback";
 
-
-  /** @domName Navigator.webkitGetUserMedia */
-  void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [NavigatorUserMediaErrorCallback errorCallback]) native "Navigator_webkitGetUserMedia_Callback";
+  @DocsEditable
+  @DomName('Navigator.webkitGetUserMedia')
+  void _getUserMedia(Map options, _NavigatorUserMediaSuccessCallback successCallback, [_NavigatorUserMediaErrorCallback errorCallback]) native "Navigator_webkitGetUserMedia_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17841,14 +17653,15 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName NavigatorUserMediaError
+@DocsEditable
+@DomName('NavigatorUserMediaError')
 class NavigatorUserMediaError extends NativeFieldWrapperClass1 {
   NavigatorUserMediaError.internal();
 
   static const int PERMISSION_DENIED = 1;
 
-
-  /** @domName NavigatorUserMediaError.code */
+  @DocsEditable
+  @DomName('NavigatorUserMediaError.code')
   int get code native "NavigatorUserMediaError_code_Getter";
 
 }
@@ -17859,7 +17672,7 @@
 // WARNING: Do not edit - generated code.
 
 
-typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
+typedef void _NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -17867,7 +17680,7 @@
 // WARNING: Do not edit - generated code.
 
 
-typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
+typedef void _NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -17902,11 +17715,11 @@
   }
 
   Node min([int compare(Node a, Node b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Node max([int compare(Node a, Node b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 
   void add(Node value) {
@@ -17940,6 +17753,29 @@
     return result;
   }
 
+  void remove(Object object) {
+    if (object is! Node) return;
+    Node node = object;
+    if (!identical(this, node.parentNode)) return;
+    _this.$dom_removeChild(node);
+  }
+
+  void removeAll(Iterable elements) {
+    IterableMixinWorkaround.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    IterableMixinWorkaround.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(Node node)) {
+    IterableMixinWorkaround.removeMatching(this, test);
+  }
+
+  void retainMatching(bool test(Node node)) {
+    IterableMixinWorkaround.retainMatching(this, test);
+  }
+
   void clear() {
     _this.text = '';
   }
@@ -17952,28 +17788,30 @@
 
   // TODO(jacobr): We can implement these methods much more efficiently by
   // looking up the nodeList only once instead of once per iteration.
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Node element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
-  List mappedBy(f(Node element)) =>
-      new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) {
+    return IterableMixinWorkaround.mappedByList(this, f);
+  }
 
-  Iterable<Node> where(bool f(Node element)) =>
-     new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
@@ -17983,31 +17821,31 @@
   // From List<Node>:
 
   List<Node> take(int n) {
-    return new ListView<Node>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Node> skip(int n) {
-    return new ListView<Node>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -18056,7 +17894,8 @@
   Node operator[](int index) => _this.$dom_childNodes[index];
 }
 
-/// @domName Node
+@DocsEditable
+@DomName('Node')
 class Node extends EventTarget {
   List<Node> get nodes {
     return new _ChildNodeListLazy(this);
@@ -18074,8 +17913,8 @@
 
   /**
    * Removes this node from the DOM.
-   * @domName Node.removeChild
    */
+  @DomName('Node.removeChild')
   void remove() {
     // TODO(jacobr): should we throw an exception if parent is already null?
     // TODO(vsm): Use the native remove when available.
@@ -18087,8 +17926,8 @@
 
   /**
    * Replaces this node with another node.
-   * @domName Node.replaceChild
    */
+  @DomName('Node.replaceChild')
   Node replaceWith(Node otherNode) {
     try {
       final Node parent = this.parentNode;
@@ -18101,136 +17940,104 @@
 
   Node.internal() : super.internal();
 
-  static const int ATTRIBUTE_NODE = 2;
-
-  static const int CDATA_SECTION_NODE = 4;
-
-  static const int COMMENT_NODE = 8;
-
-  static const int DOCUMENT_FRAGMENT_NODE = 11;
-
-  static const int DOCUMENT_NODE = 9;
-
-  static const int DOCUMENT_POSITION_CONTAINED_BY = 0x10;
-
-  static const int DOCUMENT_POSITION_CONTAINS = 0x08;
-
-  static const int DOCUMENT_POSITION_DISCONNECTED = 0x01;
-
-  static const int DOCUMENT_POSITION_FOLLOWING = 0x04;
-
-  static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
-
-  static const int DOCUMENT_POSITION_PRECEDING = 0x02;
-
-  static const int DOCUMENT_TYPE_NODE = 10;
-
-  static const int ELEMENT_NODE = 1;
-
-  static const int ENTITY_NODE = 6;
-
-  static const int ENTITY_REFERENCE_NODE = 5;
-
-  static const int NOTATION_NODE = 12;
-
-  static const int PROCESSING_INSTRUCTION_NODE = 7;
-
-  static const int TEXT_NODE = 3;
-
-
-  /** @domName Node.attributes */
+  @DocsEditable
+  @DomName('Node.attributes')
   NamedNodeMap get $dom_attributes native "Node_attributes_Getter";
 
-
-  /** @domName Node.childNodes */
+  @DocsEditable
+  @DomName('Node.childNodes')
   List<Node> get $dom_childNodes native "Node_childNodes_Getter";
 
-
-  /** @domName Node.firstChild */
+  @DocsEditable
+  @DomName('Node.firstChild')
   Node get $dom_firstChild native "Node_firstChild_Getter";
 
-
-  /** @domName Node.lastChild */
+  @DocsEditable
+  @DomName('Node.lastChild')
   Node get $dom_lastChild native "Node_lastChild_Getter";
 
-
-  /** @domName Node.localName */
+  @DocsEditable
+  @DomName('Node.localName')
   String get $dom_localName native "Node_localName_Getter";
 
-
-  /** @domName Node.namespaceURI */
+  @DocsEditable
+  @DomName('Node.namespaceURI')
   String get $dom_namespaceUri native "Node_namespaceURI_Getter";
 
-
-  /** @domName Node.nextSibling */
+  @DocsEditable
+  @DomName('Node.nextSibling')
   Node get nextNode native "Node_nextSibling_Getter";
 
-
-  /** @domName Node.nodeType */
+  @DocsEditable
+  @DomName('Node.nodeType')
   int get nodeType native "Node_nodeType_Getter";
 
+  @DocsEditable
+  @DomName('Node.nodeValue')
+  String get nodeValue native "Node_nodeValue_Getter";
 
-  /** @domName Node.ownerDocument */
+  @DocsEditable
+  @DomName('Node.ownerDocument')
   Document get document native "Node_ownerDocument_Getter";
 
-
-  /** @domName Node.parentElement */
+  @DocsEditable
+  @DomName('Node.parentElement')
   Element get parent native "Node_parentElement_Getter";
 
-
-  /** @domName Node.parentNode */
+  @DocsEditable
+  @DomName('Node.parentNode')
   Node get parentNode native "Node_parentNode_Getter";
 
-
-  /** @domName Node.previousSibling */
+  @DocsEditable
+  @DomName('Node.previousSibling')
   Node get previousNode native "Node_previousSibling_Getter";
 
-
-  /** @domName Node.textContent */
+  @DocsEditable
+  @DomName('Node.textContent')
   String get text native "Node_textContent_Getter";
 
-
-  /** @domName Node.textContent */
+  @DocsEditable
+  @DomName('Node.textContent')
   void set text(String value) native "Node_textContent_Setter";
 
-
-  /** @domName Node.addEventListener */
+  @DocsEditable
+  @DomName('Node.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "Node_addEventListener_Callback";
 
-
-  /** @domName Node.appendChild */
+  @DocsEditable
+  @DomName('Node.appendChild')
   Node $dom_appendChild(Node newChild) native "Node_appendChild_Callback";
 
-
-  /** @domName Node.cloneNode */
+  @DocsEditable
+  @DomName('Node.cloneNode')
   Node clone(bool deep) native "Node_cloneNode_Callback";
 
-
-  /** @domName Node.contains */
+  @DocsEditable
+  @DomName('Node.contains')
   bool contains(Node other) native "Node_contains_Callback";
 
-
-  /** @domName Node.dispatchEvent */
+  @DocsEditable
+  @DomName('Node.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "Node_dispatchEvent_Callback";
 
-
-  /** @domName Node.hasChildNodes */
+  @DocsEditable
+  @DomName('Node.hasChildNodes')
   bool hasChildNodes() native "Node_hasChildNodes_Callback";
 
-
-  /** @domName Node.insertBefore */
+  @DocsEditable
+  @DomName('Node.insertBefore')
   Node insertBefore(Node newChild, Node refChild) native "Node_insertBefore_Callback";
 
-
-  /** @domName Node.removeChild */
+  @DocsEditable
+  @DomName('Node.removeChild')
   Node $dom_removeChild(Node oldChild) native "Node_removeChild_Callback";
 
-
-  /** @domName Node.removeEventListener */
+  @DocsEditable
+  @DomName('Node.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "Node_removeEventListener_Callback";
 
-
-  /** @domName Node.replaceChild */
+  @DocsEditable
+  @DomName('Node.replaceChild')
   Node $dom_replaceChild(Node newChild, Node oldChild) native "Node_replaceChild_Callback";
 
 }
@@ -18241,7 +18048,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName NodeFilter
+@DocsEditable
+@DomName('NodeFilter')
 class NodeFilter extends NativeFieldWrapperClass1 {
   NodeFilter.internal();
 
@@ -18277,8 +18085,8 @@
 
   static const int SHOW_TEXT = 0x00000004;
 
-
-  /** @domName NodeFilter.acceptNode */
+  @DocsEditable
+  @DomName('NodeFilter.acceptNode')
   int acceptNode(Node n) native "NodeFilter_acceptNode_Callback";
 
 }
@@ -18289,44 +18097,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName NodeIterator
+@DocsEditable
+@DomName('NodeIterator')
 class NodeIterator extends NativeFieldWrapperClass1 {
   NodeIterator.internal();
 
-
-  /** @domName NodeIterator.expandEntityReferences */
+  @DocsEditable
+  @DomName('NodeIterator.expandEntityReferences')
   bool get expandEntityReferences native "NodeIterator_expandEntityReferences_Getter";
 
-
-  /** @domName NodeIterator.filter */
+  @DocsEditable
+  @DomName('NodeIterator.filter')
   NodeFilter get filter native "NodeIterator_filter_Getter";
 
-
-  /** @domName NodeIterator.pointerBeforeReferenceNode */
+  @DocsEditable
+  @DomName('NodeIterator.pointerBeforeReferenceNode')
   bool get pointerBeforeReferenceNode native "NodeIterator_pointerBeforeReferenceNode_Getter";
 
-
-  /** @domName NodeIterator.referenceNode */
+  @DocsEditable
+  @DomName('NodeIterator.referenceNode')
   Node get referenceNode native "NodeIterator_referenceNode_Getter";
 
-
-  /** @domName NodeIterator.root */
+  @DocsEditable
+  @DomName('NodeIterator.root')
   Node get root native "NodeIterator_root_Getter";
 
-
-  /** @domName NodeIterator.whatToShow */
+  @DocsEditable
+  @DomName('NodeIterator.whatToShow')
   int get whatToShow native "NodeIterator_whatToShow_Getter";
 
-
-  /** @domName NodeIterator.detach */
+  @DocsEditable
+  @DomName('NodeIterator.detach')
   void detach() native "NodeIterator_detach_Callback";
 
-
-  /** @domName NodeIterator.nextNode */
+  @DocsEditable
+  @DomName('NodeIterator.nextNode')
   Node nextNode() native "NodeIterator_nextNode_Callback";
 
-
-  /** @domName NodeIterator.previousNode */
+  @DocsEditable
+  @DomName('NodeIterator.previousNode')
   Node previousNode() native "NodeIterator_previousNode_Callback";
 
 }
@@ -18337,12 +18146,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName NodeList
+@DocsEditable
+@DomName('NodeList')
 class NodeList extends NativeFieldWrapperClass1 implements List<Node> {
   NodeList.internal();
 
-
-  /** @domName NodeList.length */
+  @DocsEditable
+  @DomName('NodeList.length')
   int get length native "NodeList_length_Getter";
 
   Node operator[](int index) native "NodeList_item_Callback";
@@ -18363,50 +18173,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Node)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Node element)) => new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Node> where(bool f(Node element)) => new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Node> take(int n) => new ListView<Node>(this, 0, n);
+  List<Node> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Node> skip(int n) => new ListView<Node>(this, n, null);
+  List<Node> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), { Node orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -18464,16 +18274,36 @@
     throw new StateError("More than one element");
   }
 
-  Node min([int compare(Node a, Node b)]) => Collections.min(this, compare);
+  Node min([int compare(Node a, Node b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Node max([int compare(Node a, Node b)]) => Collections.max(this, compare);
+  Node max([int compare(Node a, Node b)]) => IterableMixinWorkaround.max(this, compare);
 
   Node removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Node element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
@@ -18493,8 +18323,8 @@
 
   // -- end List<Node> mixins.
 
-
-  /** @domName NodeList.item */
+  @DocsEditable
+  @DomName('NodeList.item')
   Node _item(int index) native "NodeList_item_Callback";
 
 }
@@ -18505,16 +18335,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Notation
+@DocsEditable
+@DomName('Notation')
 class Notation extends Node {
   Notation.internal() : super.internal();
 
-
-  /** @domName Notation.publicId */
+  @DocsEditable
+  @DomName('Notation.publicId')
   String get publicId native "Notation_publicId_Getter";
 
-
-  /** @domName Notation.systemId */
+  @DocsEditable
+  @DomName('Notation.systemId')
   String get systemId native "Notation_systemId_Getter";
 
 }
@@ -18525,7 +18356,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Notification
+@DocsEditable
+@DomName('Notification')
 class Notification extends EventTarget {
   Notification.internal() : super.internal();
 
@@ -18539,7 +18371,7 @@
 
   static const EventStreamProvider<Event> showEvent = const EventStreamProvider<Event>('show');
 
-  ///@docsEditable true
+  @DocsEditable
   factory Notification(String title, [Map options]) {
     if (!?options) {
       return Notification._create(title);
@@ -18548,64 +18380,65 @@
   }
   static Notification _create(String title, [Map options]) native "Notification_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   NotificationEvents get on =>
     new NotificationEvents(this);
 
-
-  /** @domName Notification.dir */
+  @DocsEditable
+  @DomName('Notification.dir')
   String get dir native "Notification_dir_Getter";
 
-
-  /** @domName Notification.dir */
+  @DocsEditable
+  @DomName('Notification.dir')
   void set dir(String value) native "Notification_dir_Setter";
 
-
-  /** @domName Notification.permission */
+  @DocsEditable
+  @DomName('Notification.permission')
   String get permission native "Notification_permission_Getter";
 
-
-  /** @domName Notification.replaceId */
+  @DocsEditable
+  @DomName('Notification.replaceId')
   String get replaceId native "Notification_replaceId_Getter";
 
-
-  /** @domName Notification.replaceId */
+  @DocsEditable
+  @DomName('Notification.replaceId')
   void set replaceId(String value) native "Notification_replaceId_Setter";
 
-
-  /** @domName Notification.tag */
+  @DocsEditable
+  @DomName('Notification.tag')
   String get tag native "Notification_tag_Getter";
 
-
-  /** @domName Notification.tag */
+  @DocsEditable
+  @DomName('Notification.tag')
   void set tag(String value) native "Notification_tag_Setter";
 
-
-  /** @domName Notification.addEventListener */
+  @DocsEditable
+  @DomName('Notification.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "Notification_addEventListener_Callback";
 
-
-  /** @domName Notification.cancel */
+  @DocsEditable
+  @DomName('Notification.cancel')
   void cancel() native "Notification_cancel_Callback";
 
-
-  /** @domName Notification.close */
+  @DocsEditable
+  @DomName('Notification.close')
   void close() native "Notification_close_Callback";
 
-
-  /** @domName Notification.dispatchEvent */
+  @DocsEditable
+  @DomName('Notification.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "Notification_dispatchEvent_Callback";
 
-
-  /** @domName Notification.removeEventListener */
+  @DocsEditable
+  @DomName('Notification.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "Notification_removeEventListener_Callback";
 
-
-  /** @domName Notification.requestPermission */
+  @DocsEditable
+  @DomName('Notification.requestPermission')
   static void requestPermission(NotificationPermissionCallback callback) native "Notification_requestPermission_Callback";
 
-
-  /** @domName Notification.show */
+  @DocsEditable
+  @DomName('Notification.show')
   void show() native "Notification_show_Callback";
 
   Stream<Event> get onClick => clickEvent.forTarget(this);
@@ -18620,24 +18453,24 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class NotificationEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   NotificationEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get close => this['close'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get display => this['display'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get show => this['show'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18647,24 +18480,31 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName NotificationCenter
+@DocsEditable
+@DomName('NotificationCenter')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.SAFARI)
+@Experimental()
 class NotificationCenter extends NativeFieldWrapperClass1 {
   NotificationCenter.internal();
 
+  /// Checks if this type is supported on the current platform.
+  static bool get supported => true;
 
-  /** @domName NotificationCenter.checkPermission */
+  @DocsEditable
+  @DomName('NotificationCenter.checkPermission')
   int checkPermission() native "NotificationCenter_checkPermission_Callback";
 
-
-  /** @domName NotificationCenter.createHTMLNotification */
+  @DocsEditable
+  @DomName('NotificationCenter.createHTMLNotification')
   Notification createHtmlNotification(String url) native "NotificationCenter_createHTMLNotification_Callback";
 
-
-  /** @domName NotificationCenter.createNotification */
+  @DocsEditable
+  @DomName('NotificationCenter.createNotification')
   Notification createNotification(String iconUrl, String title, String body) native "NotificationCenter_createNotification_Callback";
 
-
-  /** @domName NotificationCenter.requestPermission */
+  @DocsEditable
+  @DomName('NotificationCenter.requestPermission')
   void requestPermission(VoidCallback callback) native "NotificationCenter_requestPermission_Callback";
 
 }
@@ -18683,35 +18523,36 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLOListElement
+@DocsEditable
+@DomName('HTMLOListElement')
 class OListElement extends _Element_Merged {
   OListElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory OListElement() => document.$dom_createElement("ol");
 
-
-  /** @domName HTMLOListElement.reversed */
+  @DocsEditable
+  @DomName('HTMLOListElement.reversed')
   bool get reversed native "HTMLOListElement_reversed_Getter";
 
-
-  /** @domName HTMLOListElement.reversed */
+  @DocsEditable
+  @DomName('HTMLOListElement.reversed')
   void set reversed(bool value) native "HTMLOListElement_reversed_Setter";
 
-
-  /** @domName HTMLOListElement.start */
+  @DocsEditable
+  @DomName('HTMLOListElement.start')
   int get start native "HTMLOListElement_start_Getter";
 
-
-  /** @domName HTMLOListElement.start */
+  @DocsEditable
+  @DomName('HTMLOListElement.start')
   void set start(int value) native "HTMLOListElement_start_Setter";
 
-
-  /** @domName HTMLOListElement.type */
+  @DocsEditable
+  @DomName('HTMLOListElement.type')
   String get type native "HTMLOListElement_type_Getter";
 
-
-  /** @domName HTMLOListElement.type */
+  @DocsEditable
+  @DomName('HTMLOListElement.type')
   void set type(String value) native "HTMLOListElement_type_Setter";
 
 }
@@ -18722,97 +18563,98 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLObjectElement
+@DocsEditable
+@DomName('HTMLObjectElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class ObjectElement extends _Element_Merged {
   ObjectElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ObjectElement() => document.$dom_createElement("object");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLObjectElement.code */
+  @DocsEditable
+  @DomName('HTMLObjectElement.code')
   String get code native "HTMLObjectElement_code_Getter";
 
-
-  /** @domName HTMLObjectElement.code */
+  @DocsEditable
+  @DomName('HTMLObjectElement.code')
   void set code(String value) native "HTMLObjectElement_code_Setter";
 
-
-  /** @domName HTMLObjectElement.data */
+  @DocsEditable
+  @DomName('HTMLObjectElement.data')
   String get data native "HTMLObjectElement_data_Getter";
 
-
-  /** @domName HTMLObjectElement.data */
+  @DocsEditable
+  @DomName('HTMLObjectElement.data')
   void set data(String value) native "HTMLObjectElement_data_Setter";
 
-
-  /** @domName HTMLObjectElement.form */
+  @DocsEditable
+  @DomName('HTMLObjectElement.form')
   FormElement get form native "HTMLObjectElement_form_Getter";
 
-
-  /** @domName HTMLObjectElement.height */
+  @DocsEditable
+  @DomName('HTMLObjectElement.height')
   String get height native "HTMLObjectElement_height_Getter";
 
-
-  /** @domName HTMLObjectElement.height */
+  @DocsEditable
+  @DomName('HTMLObjectElement.height')
   void set height(String value) native "HTMLObjectElement_height_Setter";
 
-
-  /** @domName HTMLObjectElement.name */
+  @DocsEditable
+  @DomName('HTMLObjectElement.name')
   String get name native "HTMLObjectElement_name_Getter";
 
-
-  /** @domName HTMLObjectElement.name */
+  @DocsEditable
+  @DomName('HTMLObjectElement.name')
   void set name(String value) native "HTMLObjectElement_name_Setter";
 
-
-  /** @domName HTMLObjectElement.type */
+  @DocsEditable
+  @DomName('HTMLObjectElement.type')
   String get type native "HTMLObjectElement_type_Getter";
 
-
-  /** @domName HTMLObjectElement.type */
+  @DocsEditable
+  @DomName('HTMLObjectElement.type')
   void set type(String value) native "HTMLObjectElement_type_Setter";
 
-
-  /** @domName HTMLObjectElement.useMap */
+  @DocsEditable
+  @DomName('HTMLObjectElement.useMap')
   String get useMap native "HTMLObjectElement_useMap_Getter";
 
-
-  /** @domName HTMLObjectElement.useMap */
+  @DocsEditable
+  @DomName('HTMLObjectElement.useMap')
   void set useMap(String value) native "HTMLObjectElement_useMap_Setter";
 
-
-  /** @domName HTMLObjectElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLObjectElement.validationMessage')
   String get validationMessage native "HTMLObjectElement_validationMessage_Getter";
 
-
-  /** @domName HTMLObjectElement.validity */
+  @DocsEditable
+  @DomName('HTMLObjectElement.validity')
   ValidityState get validity native "HTMLObjectElement_validity_Getter";
 
-
-  /** @domName HTMLObjectElement.width */
+  @DocsEditable
+  @DomName('HTMLObjectElement.width')
   String get width native "HTMLObjectElement_width_Getter";
 
-
-  /** @domName HTMLObjectElement.width */
+  @DocsEditable
+  @DomName('HTMLObjectElement.width')
   void set width(String value) native "HTMLObjectElement_width_Setter";
 
-
-  /** @domName HTMLObjectElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLObjectElement.willValidate')
   bool get willValidate native "HTMLObjectElement_willValidate_Getter";
 
-
-  /** @domName HTMLObjectElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLObjectElement.checkValidity')
   bool checkValidity() native "HTMLObjectElement_checkValidity_Callback";
 
-
-  /** @domName HTMLObjectElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLObjectElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLObjectElement_setCustomValidity_Callback";
 
 }
@@ -18823,7 +18665,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OESElementIndexUint
+@DocsEditable
+@DomName('OESElementIndexUint')
 class OesElementIndexUint extends NativeFieldWrapperClass1 {
   OesElementIndexUint.internal();
 
@@ -18835,7 +18678,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OESStandardDerivatives
+@DocsEditable
+@DomName('OESStandardDerivatives')
 class OesStandardDerivatives extends NativeFieldWrapperClass1 {
   OesStandardDerivatives.internal();
 
@@ -18849,7 +18693,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OESTextureFloat
+@DocsEditable
+@DomName('OESTextureFloat')
 class OesTextureFloat extends NativeFieldWrapperClass1 {
   OesTextureFloat.internal();
 
@@ -18861,26 +18706,27 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OESVertexArrayObject
+@DocsEditable
+@DomName('OESVertexArrayObject')
 class OesVertexArrayObject extends NativeFieldWrapperClass1 {
   OesVertexArrayObject.internal();
 
   static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
-
-  /** @domName OESVertexArrayObject.bindVertexArrayOES */
+  @DocsEditable
+  @DomName('OESVertexArrayObject.bindVertexArrayOES')
   void bindVertexArray(WebGLVertexArrayObject arrayObject) native "OESVertexArrayObject_bindVertexArrayOES_Callback";
 
-
-  /** @domName OESVertexArrayObject.createVertexArrayOES */
+  @DocsEditable
+  @DomName('OESVertexArrayObject.createVertexArrayOES')
   WebGLVertexArrayObject createVertexArray() native "OESVertexArrayObject_createVertexArrayOES_Callback";
 
-
-  /** @domName OESVertexArrayObject.deleteVertexArrayOES */
+  @DocsEditable
+  @DomName('OESVertexArrayObject.deleteVertexArrayOES')
   void deleteVertexArray(WebGLVertexArrayObject arrayObject) native "OESVertexArrayObject_deleteVertexArrayOES_Callback";
 
-
-  /** @domName OESVertexArrayObject.isVertexArrayOES */
+  @DocsEditable
+  @DomName('OESVertexArrayObject.isVertexArrayOES')
   bool isVertexArray(WebGLVertexArrayObject arrayObject) native "OESVertexArrayObject_isVertexArrayOES_Callback";
 
 }
@@ -18891,27 +18737,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLOptGroupElement
+@DocsEditable
+@DomName('HTMLOptGroupElement')
 class OptGroupElement extends _Element_Merged {
   OptGroupElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory OptGroupElement() => document.$dom_createElement("optgroup");
 
-
-  /** @domName HTMLOptGroupElement.disabled */
+  @DocsEditable
+  @DomName('HTMLOptGroupElement.disabled')
   bool get disabled native "HTMLOptGroupElement_disabled_Getter";
 
-
-  /** @domName HTMLOptGroupElement.disabled */
+  @DocsEditable
+  @DomName('HTMLOptGroupElement.disabled')
   void set disabled(bool value) native "HTMLOptGroupElement_disabled_Setter";
 
-
-  /** @domName HTMLOptGroupElement.label */
+  @DocsEditable
+  @DomName('HTMLOptGroupElement.label')
   String get label native "HTMLOptGroupElement_label_Getter";
 
-
-  /** @domName HTMLOptGroupElement.label */
+  @DocsEditable
+  @DomName('HTMLOptGroupElement.label')
   void set label(String value) native "HTMLOptGroupElement_label_Setter";
 
 }
@@ -18922,11 +18769,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLOptionElement
+@DocsEditable
+@DomName('HTMLOptionElement')
 class OptionElement extends _Element_Merged {
   OptionElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory OptionElement([String data, String value, bool defaultSelected, bool selected]) {
     if (!?data) {
       return OptionElement._create();
@@ -18944,52 +18792,52 @@
   }
   static OptionElement _create([String data, String value, bool defaultSelected, bool selected]) native "HTMLOptionElement_constructor_Callback";
 
-
-  /** @domName HTMLOptionElement.defaultSelected */
+  @DocsEditable
+  @DomName('HTMLOptionElement.defaultSelected')
   bool get defaultSelected native "HTMLOptionElement_defaultSelected_Getter";
 
-
-  /** @domName HTMLOptionElement.defaultSelected */
+  @DocsEditable
+  @DomName('HTMLOptionElement.defaultSelected')
   void set defaultSelected(bool value) native "HTMLOptionElement_defaultSelected_Setter";
 
-
-  /** @domName HTMLOptionElement.disabled */
+  @DocsEditable
+  @DomName('HTMLOptionElement.disabled')
   bool get disabled native "HTMLOptionElement_disabled_Getter";
 
-
-  /** @domName HTMLOptionElement.disabled */
+  @DocsEditable
+  @DomName('HTMLOptionElement.disabled')
   void set disabled(bool value) native "HTMLOptionElement_disabled_Setter";
 
-
-  /** @domName HTMLOptionElement.form */
+  @DocsEditable
+  @DomName('HTMLOptionElement.form')
   FormElement get form native "HTMLOptionElement_form_Getter";
 
-
-  /** @domName HTMLOptionElement.index */
+  @DocsEditable
+  @DomName('HTMLOptionElement.index')
   int get index native "HTMLOptionElement_index_Getter";
 
-
-  /** @domName HTMLOptionElement.label */
+  @DocsEditable
+  @DomName('HTMLOptionElement.label')
   String get label native "HTMLOptionElement_label_Getter";
 
-
-  /** @domName HTMLOptionElement.label */
+  @DocsEditable
+  @DomName('HTMLOptionElement.label')
   void set label(String value) native "HTMLOptionElement_label_Setter";
 
-
-  /** @domName HTMLOptionElement.selected */
+  @DocsEditable
+  @DomName('HTMLOptionElement.selected')
   bool get selected native "HTMLOptionElement_selected_Getter";
 
-
-  /** @domName HTMLOptionElement.selected */
+  @DocsEditable
+  @DomName('HTMLOptionElement.selected')
   void set selected(bool value) native "HTMLOptionElement_selected_Setter";
 
-
-  /** @domName HTMLOptionElement.value */
+  @DocsEditable
+  @DomName('HTMLOptionElement.value')
   String get value native "HTMLOptionElement_value_Getter";
 
-
-  /** @domName HTMLOptionElement.value */
+  @DocsEditable
+  @DomName('HTMLOptionElement.value')
   void set value(String value) native "HTMLOptionElement_value_Setter";
 
 }
@@ -19000,81 +18848,82 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLOutputElement
+@DocsEditable
+@DomName('HTMLOutputElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class OutputElement extends _Element_Merged {
   OutputElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory OutputElement() => document.$dom_createElement("output");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLOutputElement.defaultValue */
+  @DocsEditable
+  @DomName('HTMLOutputElement.defaultValue')
   String get defaultValue native "HTMLOutputElement_defaultValue_Getter";
 
-
-  /** @domName HTMLOutputElement.defaultValue */
+  @DocsEditable
+  @DomName('HTMLOutputElement.defaultValue')
   void set defaultValue(String value) native "HTMLOutputElement_defaultValue_Setter";
 
-
-  /** @domName HTMLOutputElement.form */
+  @DocsEditable
+  @DomName('HTMLOutputElement.form')
   FormElement get form native "HTMLOutputElement_form_Getter";
 
-
-  /** @domName HTMLOutputElement.htmlFor */
+  @DocsEditable
+  @DomName('HTMLOutputElement.htmlFor')
   DomSettableTokenList get htmlFor native "HTMLOutputElement_htmlFor_Getter";
 
-
-  /** @domName HTMLOutputElement.htmlFor */
+  @DocsEditable
+  @DomName('HTMLOutputElement.htmlFor')
   void set htmlFor(DomSettableTokenList value) native "HTMLOutputElement_htmlFor_Setter";
 
-
-  /** @domName HTMLOutputElement.labels */
+  @DocsEditable
+  @DomName('HTMLOutputElement.labels')
   List<Node> get labels native "HTMLOutputElement_labels_Getter";
 
-
-  /** @domName HTMLOutputElement.name */
+  @DocsEditable
+  @DomName('HTMLOutputElement.name')
   String get name native "HTMLOutputElement_name_Getter";
 
-
-  /** @domName HTMLOutputElement.name */
+  @DocsEditable
+  @DomName('HTMLOutputElement.name')
   void set name(String value) native "HTMLOutputElement_name_Setter";
 
-
-  /** @domName HTMLOutputElement.type */
+  @DocsEditable
+  @DomName('HTMLOutputElement.type')
   String get type native "HTMLOutputElement_type_Getter";
 
-
-  /** @domName HTMLOutputElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLOutputElement.validationMessage')
   String get validationMessage native "HTMLOutputElement_validationMessage_Getter";
 
-
-  /** @domName HTMLOutputElement.validity */
+  @DocsEditable
+  @DomName('HTMLOutputElement.validity')
   ValidityState get validity native "HTMLOutputElement_validity_Getter";
 
-
-  /** @domName HTMLOutputElement.value */
+  @DocsEditable
+  @DomName('HTMLOutputElement.value')
   String get value native "HTMLOutputElement_value_Getter";
 
-
-  /** @domName HTMLOutputElement.value */
+  @DocsEditable
+  @DomName('HTMLOutputElement.value')
   void set value(String value) native "HTMLOutputElement_value_Setter";
 
-
-  /** @domName HTMLOutputElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLOutputElement.willValidate')
   bool get willValidate native "HTMLOutputElement_willValidate_Getter";
 
-
-  /** @domName HTMLOutputElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLOutputElement.checkValidity')
   bool checkValidity() native "HTMLOutputElement_checkValidity_Callback";
 
-
-  /** @domName HTMLOutputElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLOutputElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLOutputElement_setCustomValidity_Callback";
 
 }
@@ -19085,7 +18934,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OverflowEvent
+@DocsEditable
+@DomName('OverflowEvent')
 class OverflowEvent extends Event {
   OverflowEvent.internal() : super.internal();
 
@@ -19095,16 +18945,16 @@
 
   static const int VERTICAL = 1;
 
-
-  /** @domName OverflowEvent.horizontalOverflow */
+  @DocsEditable
+  @DomName('OverflowEvent.horizontalOverflow')
   bool get horizontalOverflow native "OverflowEvent_horizontalOverflow_Getter";
 
-
-  /** @domName OverflowEvent.orient */
+  @DocsEditable
+  @DomName('OverflowEvent.orient')
   int get orient native "OverflowEvent_orient_Getter";
 
-
-  /** @domName OverflowEvent.verticalOverflow */
+  @DocsEditable
+  @DomName('OverflowEvent.verticalOverflow')
   bool get verticalOverflow native "OverflowEvent_verticalOverflow_Getter";
 
 }
@@ -19115,24 +18965,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PagePopupController
+@DocsEditable
+@DomName('PagePopupController')
 class PagePopupController extends NativeFieldWrapperClass1 {
   PagePopupController.internal();
 
-
-  /** @domName PagePopupController.formatMonth */
+  @DocsEditable
+  @DomName('PagePopupController.formatMonth')
   String formatMonth(int year, int zeroBaseMonth) native "PagePopupController_formatMonth_Callback";
 
-
-  /** @domName PagePopupController.histogramEnumeration */
+  @DocsEditable
+  @DomName('PagePopupController.histogramEnumeration')
   void histogramEnumeration(String name, int sample, int boundaryValue) native "PagePopupController_histogramEnumeration_Callback";
 
-
-  /** @domName PagePopupController.localizeNumberString */
+  @DocsEditable
+  @DomName('PagePopupController.localizeNumberString')
   String localizeNumberString(String numberString) native "PagePopupController_localizeNumberString_Callback";
 
-
-  /** @domName PagePopupController.setValueAndClosePopup */
+  @DocsEditable
+  @DomName('PagePopupController.setValueAndClosePopup')
   void setValueAndClosePopup(int numberValue, String stringValue) native "PagePopupController_setValueAndClosePopup_Callback";
 
 }
@@ -19143,12 +18994,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PageTransitionEvent
+@DocsEditable
+@DomName('PageTransitionEvent')
 class PageTransitionEvent extends Event {
   PageTransitionEvent.internal() : super.internal();
 
-
-  /** @domName PageTransitionEvent.persisted */
+  @DocsEditable
+  @DomName('PageTransitionEvent.persisted')
   bool get persisted native "PageTransitionEvent_persisted_Getter";
 
 }
@@ -19159,11 +19011,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLParagraphElement
+@DocsEditable
+@DomName('HTMLParagraphElement')
 class ParagraphElement extends _Element_Merged {
   ParagraphElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ParagraphElement() => document.$dom_createElement("p");
 
 }
@@ -19174,27 +19027,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLParamElement
+@DocsEditable
+@DomName('HTMLParamElement')
 class ParamElement extends _Element_Merged {
   ParamElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ParamElement() => document.$dom_createElement("param");
 
-
-  /** @domName HTMLParamElement.name */
+  @DocsEditable
+  @DomName('HTMLParamElement.name')
   String get name native "HTMLParamElement_name_Getter";
 
-
-  /** @domName HTMLParamElement.name */
+  @DocsEditable
+  @DomName('HTMLParamElement.name')
   void set name(String value) native "HTMLParamElement_name_Setter";
 
-
-  /** @domName HTMLParamElement.value */
+  @DocsEditable
+  @DomName('HTMLParamElement.value')
   String get value native "HTMLParamElement_value_Getter";
 
-
-  /** @domName HTMLParamElement.value */
+  @DocsEditable
+  @DomName('HTMLParamElement.value')
   void set value(String value) native "HTMLParamElement_value_Setter";
 
 }
@@ -19205,7 +19059,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Performance
+@DocsEditable
+@DomName('Performance')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE)
@@ -19215,20 +19070,20 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName Performance.memory */
+  @DocsEditable
+  @DomName('Performance.memory')
   MemoryInfo get memory native "Performance_memory_Getter";
 
-
-  /** @domName Performance.navigation */
+  @DocsEditable
+  @DomName('Performance.navigation')
   PerformanceNavigation get navigation native "Performance_navigation_Getter";
 
-
-  /** @domName Performance.timing */
+  @DocsEditable
+  @DomName('Performance.timing')
   PerformanceTiming get timing native "Performance_timing_Getter";
 
-
-  /** @domName Performance.now */
+  @DocsEditable
+  @DomName('Performance.now')
   num now() native "Performance_now_Callback";
 
 }
@@ -19239,7 +19094,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PerformanceNavigation
+@DocsEditable
+@DomName('PerformanceNavigation')
 class PerformanceNavigation extends NativeFieldWrapperClass1 {
   PerformanceNavigation.internal();
 
@@ -19251,12 +19107,12 @@
 
   static const int TYPE_RESERVED = 255;
 
-
-  /** @domName PerformanceNavigation.redirectCount */
+  @DocsEditable
+  @DomName('PerformanceNavigation.redirectCount')
   int get redirectCount native "PerformanceNavigation_redirectCount_Getter";
 
-
-  /** @domName PerformanceNavigation.type */
+  @DocsEditable
+  @DomName('PerformanceNavigation.type')
   int get type native "PerformanceNavigation_type_Getter";
 
 }
@@ -19267,92 +19123,93 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PerformanceTiming
+@DocsEditable
+@DomName('PerformanceTiming')
 class PerformanceTiming extends NativeFieldWrapperClass1 {
   PerformanceTiming.internal();
 
-
-  /** @domName PerformanceTiming.connectEnd */
+  @DocsEditable
+  @DomName('PerformanceTiming.connectEnd')
   int get connectEnd native "PerformanceTiming_connectEnd_Getter";
 
-
-  /** @domName PerformanceTiming.connectStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.connectStart')
   int get connectStart native "PerformanceTiming_connectStart_Getter";
 
-
-  /** @domName PerformanceTiming.domComplete */
+  @DocsEditable
+  @DomName('PerformanceTiming.domComplete')
   int get domComplete native "PerformanceTiming_domComplete_Getter";
 
-
-  /** @domName PerformanceTiming.domContentLoadedEventEnd */
+  @DocsEditable
+  @DomName('PerformanceTiming.domContentLoadedEventEnd')
   int get domContentLoadedEventEnd native "PerformanceTiming_domContentLoadedEventEnd_Getter";
 
-
-  /** @domName PerformanceTiming.domContentLoadedEventStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.domContentLoadedEventStart')
   int get domContentLoadedEventStart native "PerformanceTiming_domContentLoadedEventStart_Getter";
 
-
-  /** @domName PerformanceTiming.domInteractive */
+  @DocsEditable
+  @DomName('PerformanceTiming.domInteractive')
   int get domInteractive native "PerformanceTiming_domInteractive_Getter";
 
-
-  /** @domName PerformanceTiming.domLoading */
+  @DocsEditable
+  @DomName('PerformanceTiming.domLoading')
   int get domLoading native "PerformanceTiming_domLoading_Getter";
 
-
-  /** @domName PerformanceTiming.domainLookupEnd */
+  @DocsEditable
+  @DomName('PerformanceTiming.domainLookupEnd')
   int get domainLookupEnd native "PerformanceTiming_domainLookupEnd_Getter";
 
-
-  /** @domName PerformanceTiming.domainLookupStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.domainLookupStart')
   int get domainLookupStart native "PerformanceTiming_domainLookupStart_Getter";
 
-
-  /** @domName PerformanceTiming.fetchStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.fetchStart')
   int get fetchStart native "PerformanceTiming_fetchStart_Getter";
 
-
-  /** @domName PerformanceTiming.loadEventEnd */
+  @DocsEditable
+  @DomName('PerformanceTiming.loadEventEnd')
   int get loadEventEnd native "PerformanceTiming_loadEventEnd_Getter";
 
-
-  /** @domName PerformanceTiming.loadEventStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.loadEventStart')
   int get loadEventStart native "PerformanceTiming_loadEventStart_Getter";
 
-
-  /** @domName PerformanceTiming.navigationStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.navigationStart')
   int get navigationStart native "PerformanceTiming_navigationStart_Getter";
 
-
-  /** @domName PerformanceTiming.redirectEnd */
+  @DocsEditable
+  @DomName('PerformanceTiming.redirectEnd')
   int get redirectEnd native "PerformanceTiming_redirectEnd_Getter";
 
-
-  /** @domName PerformanceTiming.redirectStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.redirectStart')
   int get redirectStart native "PerformanceTiming_redirectStart_Getter";
 
-
-  /** @domName PerformanceTiming.requestStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.requestStart')
   int get requestStart native "PerformanceTiming_requestStart_Getter";
 
-
-  /** @domName PerformanceTiming.responseEnd */
+  @DocsEditable
+  @DomName('PerformanceTiming.responseEnd')
   int get responseEnd native "PerformanceTiming_responseEnd_Getter";
 
-
-  /** @domName PerformanceTiming.responseStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.responseStart')
   int get responseStart native "PerformanceTiming_responseStart_Getter";
 
-
-  /** @domName PerformanceTiming.secureConnectionStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.secureConnectionStart')
   int get secureConnectionStart native "PerformanceTiming_secureConnectionStart_Getter";
 
-
-  /** @domName PerformanceTiming.unloadEventEnd */
+  @DocsEditable
+  @DomName('PerformanceTiming.unloadEventEnd')
   int get unloadEventEnd native "PerformanceTiming_unloadEventEnd_Getter";
 
-
-  /** @domName PerformanceTiming.unloadEventStart */
+  @DocsEditable
+  @DomName('PerformanceTiming.unloadEventStart')
   int get unloadEventStart native "PerformanceTiming_unloadEventStart_Getter";
 
 }
@@ -19363,28 +19220,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitPoint
+@DocsEditable
+@DomName('WebKitPoint')
 class Point extends NativeFieldWrapperClass1 {
   Point.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory Point(num x, num y) => Point._create(x, y);
   static Point _create(num x, num y) native "WebKitPoint_constructor_Callback";
 
-
-  /** @domName WebKitPoint.x */
+  @DocsEditable
+  @DomName('WebKitPoint.x')
   num get x native "WebKitPoint_x_Getter";
 
-
-  /** @domName WebKitPoint.x */
+  @DocsEditable
+  @DomName('WebKitPoint.x')
   void set x(num value) native "WebKitPoint_x_Setter";
 
-
-  /** @domName WebKitPoint.y */
+  @DocsEditable
+  @DomName('WebKitPoint.y')
   num get y native "WebKitPoint_y_Getter";
 
-
-  /** @domName WebKitPoint.y */
+  @DocsEditable
+  @DomName('WebKitPoint.y')
   void set y(num value) native "WebKitPoint_y_Setter";
 
 }
@@ -19395,12 +19253,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PopStateEvent
+@DocsEditable
+@DomName('PopStateEvent')
 class PopStateEvent extends Event {
   PopStateEvent.internal() : super.internal();
 
-
-  /** @domName PopStateEvent.state */
+  @DocsEditable
+  @DomName('PopStateEvent.state')
   Object get state native "PopStateEvent_state_Getter";
 
 }
@@ -19419,7 +19278,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PositionError
+@DocsEditable
+@DomName('PositionError')
 class PositionError extends NativeFieldWrapperClass1 {
   PositionError.internal();
 
@@ -19429,12 +19289,12 @@
 
   static const int TIMEOUT = 3;
 
-
-  /** @domName PositionError.code */
+  @DocsEditable
+  @DomName('PositionError.code')
   int get code native "PositionError_code_Getter";
 
-
-  /** @domName PositionError.message */
+  @DocsEditable
+  @DomName('PositionError.message')
   String get message native "PositionError_message_Getter";
 
 }
@@ -19453,19 +19313,20 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLPreElement
+@DocsEditable
+@DomName('HTMLPreElement')
 class PreElement extends _Element_Merged {
   PreElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory PreElement() => document.$dom_createElement("pre");
 
-
-  /** @domName HTMLPreElement.wrap */
+  @DocsEditable
+  @DomName('HTMLPreElement.wrap')
   bool get wrap native "HTMLPreElement_wrap_Getter";
 
-
-  /** @domName HTMLPreElement.wrap */
+  @DocsEditable
+  @DomName('HTMLPreElement.wrap')
   void set wrap(bool value) native "HTMLPreElement_wrap_Setter";
 
 }
@@ -19476,24 +19337,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ProcessingInstruction
+@DocsEditable
+@DomName('ProcessingInstruction')
 class ProcessingInstruction extends Node {
   ProcessingInstruction.internal() : super.internal();
 
-
-  /** @domName ProcessingInstruction.data */
+  @DocsEditable
+  @DomName('ProcessingInstruction.data')
   String get data native "ProcessingInstruction_data_Getter";
 
-
-  /** @domName ProcessingInstruction.data */
+  @DocsEditable
+  @DomName('ProcessingInstruction.data')
   void set data(String value) native "ProcessingInstruction_data_Setter";
 
-
-  /** @domName ProcessingInstruction.sheet */
+  @DocsEditable
+  @DomName('ProcessingInstruction.sheet')
   StyleSheet get sheet native "ProcessingInstruction_sheet_Getter";
 
-
-  /** @domName ProcessingInstruction.target */
+  @DocsEditable
+  @DomName('ProcessingInstruction.target')
   String get target native "ProcessingInstruction_target_Getter";
 
 }
@@ -19504,7 +19366,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLProgressElement
+@DocsEditable
+@DomName('HTMLProgressElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -19512,34 +19375,34 @@
 class ProgressElement extends _Element_Merged {
   ProgressElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ProgressElement() => document.$dom_createElement("progress");
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLProgressElement.labels */
+  @DocsEditable
+  @DomName('HTMLProgressElement.labels')
   List<Node> get labels native "HTMLProgressElement_labels_Getter";
 
-
-  /** @domName HTMLProgressElement.max */
+  @DocsEditable
+  @DomName('HTMLProgressElement.max')
   num get max native "HTMLProgressElement_max_Getter";
 
-
-  /** @domName HTMLProgressElement.max */
+  @DocsEditable
+  @DomName('HTMLProgressElement.max')
   void set max(num value) native "HTMLProgressElement_max_Setter";
 
-
-  /** @domName HTMLProgressElement.position */
+  @DocsEditable
+  @DomName('HTMLProgressElement.position')
   num get position native "HTMLProgressElement_position_Getter";
 
-
-  /** @domName HTMLProgressElement.value */
+  @DocsEditable
+  @DomName('HTMLProgressElement.value')
   num get value native "HTMLProgressElement_value_Getter";
 
-
-  /** @domName HTMLProgressElement.value */
+  @DocsEditable
+  @DomName('HTMLProgressElement.value')
   void set value(num value) native "HTMLProgressElement_value_Setter";
 
 }
@@ -19550,20 +19413,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ProgressEvent
+@DocsEditable
+@DomName('ProgressEvent')
 class ProgressEvent extends Event {
   ProgressEvent.internal() : super.internal();
 
-
-  /** @domName ProgressEvent.lengthComputable */
+  @DocsEditable
+  @DomName('ProgressEvent.lengthComputable')
   bool get lengthComputable native "ProgressEvent_lengthComputable_Getter";
 
-
-  /** @domName ProgressEvent.loaded */
+  @DocsEditable
+  @DomName('ProgressEvent.loaded')
   int get loaded native "ProgressEvent_loaded_Getter";
 
-
-  /** @domName ProgressEvent.total */
+  @DocsEditable
+  @DomName('ProgressEvent.total')
   int get total native "ProgressEvent_total_Getter";
 
 }
@@ -19574,16 +19438,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLQuoteElement
+@DocsEditable
+@DomName('HTMLQuoteElement')
 class QuoteElement extends _Element_Merged {
   QuoteElement.internal() : super.internal();
 
-
-  /** @domName HTMLQuoteElement.cite */
+  @DocsEditable
+  @DomName('HTMLQuoteElement.cite')
   String get cite native "HTMLQuoteElement_cite_Getter";
 
-
-  /** @domName HTMLQuoteElement.cite */
+  @DocsEditable
+  @DomName('HTMLQuoteElement.cite')
   void set cite(String value) native "HTMLQuoteElement_cite_Setter";
 
 }
@@ -19618,16 +19483,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RadioNodeList
+@DocsEditable
+@DomName('RadioNodeList')
 class RadioNodeList extends NodeList {
   RadioNodeList.internal() : super.internal();
 
-
-  /** @domName RadioNodeList.value */
+  @DocsEditable
+  @DomName('RadioNodeList.value')
   String get value native "RadioNodeList_value_Getter";
 
-
-  /** @domName RadioNodeList.value */
+  @DocsEditable
+  @DomName('RadioNodeList.value')
   void set value(String value) native "RadioNodeList_value_Setter";
 
 }
@@ -19638,7 +19504,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Range
+@DocsEditable
+@DomName('Range')
 class Range extends NativeFieldWrapperClass1 {
   factory Range() => document.$dom_createRange();
 
@@ -19660,128 +19527,128 @@
 
   static const int START_TO_START = 0;
 
-
-  /** @domName Range.collapsed */
+  @DocsEditable
+  @DomName('Range.collapsed')
   bool get collapsed native "Range_collapsed_Getter";
 
-
-  /** @domName Range.commonAncestorContainer */
+  @DocsEditable
+  @DomName('Range.commonAncestorContainer')
   Node get commonAncestorContainer native "Range_commonAncestorContainer_Getter";
 
-
-  /** @domName Range.endContainer */
+  @DocsEditable
+  @DomName('Range.endContainer')
   Node get endContainer native "Range_endContainer_Getter";
 
-
-  /** @domName Range.endOffset */
+  @DocsEditable
+  @DomName('Range.endOffset')
   int get endOffset native "Range_endOffset_Getter";
 
-
-  /** @domName Range.startContainer */
+  @DocsEditable
+  @DomName('Range.startContainer')
   Node get startContainer native "Range_startContainer_Getter";
 
-
-  /** @domName Range.startOffset */
+  @DocsEditable
+  @DomName('Range.startOffset')
   int get startOffset native "Range_startOffset_Getter";
 
-
-  /** @domName Range.cloneContents */
+  @DocsEditable
+  @DomName('Range.cloneContents')
   DocumentFragment cloneContents() native "Range_cloneContents_Callback";
 
-
-  /** @domName Range.cloneRange */
+  @DocsEditable
+  @DomName('Range.cloneRange')
   Range cloneRange() native "Range_cloneRange_Callback";
 
-
-  /** @domName Range.collapse */
+  @DocsEditable
+  @DomName('Range.collapse')
   void collapse(bool toStart) native "Range_collapse_Callback";
 
-
-  /** @domName Range.compareNode */
+  @DocsEditable
+  @DomName('Range.compareNode')
   int compareNode(Node refNode) native "Range_compareNode_Callback";
 
-
-  /** @domName Range.comparePoint */
+  @DocsEditable
+  @DomName('Range.comparePoint')
   int comparePoint(Node refNode, int offset) native "Range_comparePoint_Callback";
 
-
-  /** @domName Range.createContextualFragment */
+  @DocsEditable
+  @DomName('Range.createContextualFragment')
   DocumentFragment createContextualFragment(String html) native "Range_createContextualFragment_Callback";
 
-
-  /** @domName Range.deleteContents */
+  @DocsEditable
+  @DomName('Range.deleteContents')
   void deleteContents() native "Range_deleteContents_Callback";
 
-
-  /** @domName Range.detach */
+  @DocsEditable
+  @DomName('Range.detach')
   void detach() native "Range_detach_Callback";
 
-
-  /** @domName Range.expand */
+  @DocsEditable
+  @DomName('Range.expand')
   void expand(String unit) native "Range_expand_Callback";
 
-
-  /** @domName Range.extractContents */
+  @DocsEditable
+  @DomName('Range.extractContents')
   DocumentFragment extractContents() native "Range_extractContents_Callback";
 
-
-  /** @domName Range.getBoundingClientRect */
+  @DocsEditable
+  @DomName('Range.getBoundingClientRect')
   ClientRect getBoundingClientRect() native "Range_getBoundingClientRect_Callback";
 
-
-  /** @domName Range.getClientRects */
+  @DocsEditable
+  @DomName('Range.getClientRects')
   List<ClientRect> getClientRects() native "Range_getClientRects_Callback";
 
-
-  /** @domName Range.insertNode */
+  @DocsEditable
+  @DomName('Range.insertNode')
   void insertNode(Node newNode) native "Range_insertNode_Callback";
 
-
-  /** @domName Range.intersectsNode */
+  @DocsEditable
+  @DomName('Range.intersectsNode')
   bool intersectsNode(Node refNode) native "Range_intersectsNode_Callback";
 
-
-  /** @domName Range.isPointInRange */
+  @DocsEditable
+  @DomName('Range.isPointInRange')
   bool isPointInRange(Node refNode, int offset) native "Range_isPointInRange_Callback";
 
-
-  /** @domName Range.selectNode */
+  @DocsEditable
+  @DomName('Range.selectNode')
   void selectNode(Node refNode) native "Range_selectNode_Callback";
 
-
-  /** @domName Range.selectNodeContents */
+  @DocsEditable
+  @DomName('Range.selectNodeContents')
   void selectNodeContents(Node refNode) native "Range_selectNodeContents_Callback";
 
-
-  /** @domName Range.setEnd */
+  @DocsEditable
+  @DomName('Range.setEnd')
   void setEnd(Node refNode, int offset) native "Range_setEnd_Callback";
 
-
-  /** @domName Range.setEndAfter */
+  @DocsEditable
+  @DomName('Range.setEndAfter')
   void setEndAfter(Node refNode) native "Range_setEndAfter_Callback";
 
-
-  /** @domName Range.setEndBefore */
+  @DocsEditable
+  @DomName('Range.setEndBefore')
   void setEndBefore(Node refNode) native "Range_setEndBefore_Callback";
 
-
-  /** @domName Range.setStart */
+  @DocsEditable
+  @DomName('Range.setStart')
   void setStart(Node refNode, int offset) native "Range_setStart_Callback";
 
-
-  /** @domName Range.setStartAfter */
+  @DocsEditable
+  @DomName('Range.setStartAfter')
   void setStartAfter(Node refNode) native "Range_setStartAfter_Callback";
 
-
-  /** @domName Range.setStartBefore */
+  @DocsEditable
+  @DomName('Range.setStartBefore')
   void setStartBefore(Node refNode) native "Range_setStartBefore_Callback";
 
-
-  /** @domName Range.surroundContents */
+  @DocsEditable
+  @DomName('Range.surroundContents')
   void surroundContents(Node newParent) native "Range_surroundContents_Callback";
 
-
-  /** @domName Range.toString */
+  @DocsEditable
+  @DomName('Range.toString')
   String toString() native "Range_toString_Callback";
 
 }
@@ -19792,7 +19659,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RangeException
+@DocsEditable
+@DomName('RangeException')
 class RangeException extends NativeFieldWrapperClass1 {
   RangeException.internal();
 
@@ -19800,20 +19668,20 @@
 
   static const int INVALID_NODE_TYPE_ERR = 2;
 
-
-  /** @domName RangeException.code */
+  @DocsEditable
+  @DomName('RangeException.code')
   int get code native "RangeException_code_Getter";
 
-
-  /** @domName RangeException.message */
+  @DocsEditable
+  @DomName('RangeException.message')
   String get message native "RangeException_message_Getter";
 
-
-  /** @domName RangeException.name */
+  @DocsEditable
+  @DomName('RangeException.name')
   String get name native "RangeException_name_Getter";
 
-
-  /** @domName RangeException.toString */
+  @DocsEditable
+  @DomName('RangeException.toString')
   String toString() native "RangeException_toString_Callback";
 
 }
@@ -19824,24 +19692,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Rect
+@DocsEditable
+@DomName('Rect')
 class Rect extends NativeFieldWrapperClass1 {
   Rect.internal();
 
-
-  /** @domName Rect.bottom */
+  @DocsEditable
+  @DomName('Rect.bottom')
   CssPrimitiveValue get bottom native "Rect_bottom_Getter";
 
-
-  /** @domName Rect.left */
+  @DocsEditable
+  @DomName('Rect.left')
   CssPrimitiveValue get left native "Rect_left_Getter";
 
-
-  /** @domName Rect.right */
+  @DocsEditable
+  @DomName('Rect.right')
   CssPrimitiveValue get right native "Rect_right_Getter";
 
-
-  /** @domName Rect.top */
+  @DocsEditable
+  @DomName('Rect.top')
   CssPrimitiveValue get top native "Rect_top_Getter";
 
 }
@@ -19860,20 +19729,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RGBColor
+@DocsEditable
+@DomName('RGBColor')
 class RgbColor extends NativeFieldWrapperClass1 {
   RgbColor.internal();
 
-
-  /** @domName RGBColor.blue */
+  @DocsEditable
+  @DomName('RGBColor.blue')
   CssPrimitiveValue get blue native "RGBColor_blue_Getter";
 
-
-  /** @domName RGBColor.green */
+  @DocsEditable
+  @DomName('RGBColor.green')
   CssPrimitiveValue get green native "RGBColor_green_Getter";
 
-
-  /** @domName RGBColor.red */
+  @DocsEditable
+  @DomName('RGBColor.red')
   CssPrimitiveValue get red native "RGBColor_red_Getter";
 
 }
@@ -19884,7 +19754,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCDataChannel
+@DocsEditable
+@DomName('RTCDataChannel')
 class RtcDataChannel extends EventTarget {
   RtcDataChannel.internal() : super.internal();
 
@@ -19896,48 +19767,49 @@
 
   static const EventStreamProvider<Event> openEvent = const EventStreamProvider<Event>('open');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   RtcDataChannelEvents get on =>
     new RtcDataChannelEvents(this);
 
-
-  /** @domName RTCDataChannel.binaryType */
+  @DocsEditable
+  @DomName('RTCDataChannel.binaryType')
   String get binaryType native "RTCDataChannel_binaryType_Getter";
 
-
-  /** @domName RTCDataChannel.binaryType */
+  @DocsEditable
+  @DomName('RTCDataChannel.binaryType')
   void set binaryType(String value) native "RTCDataChannel_binaryType_Setter";
 
-
-  /** @domName RTCDataChannel.bufferedAmount */
+  @DocsEditable
+  @DomName('RTCDataChannel.bufferedAmount')
   int get bufferedAmount native "RTCDataChannel_bufferedAmount_Getter";
 
-
-  /** @domName RTCDataChannel.label */
+  @DocsEditable
+  @DomName('RTCDataChannel.label')
   String get label native "RTCDataChannel_label_Getter";
 
-
-  /** @domName RTCDataChannel.readyState */
+  @DocsEditable
+  @DomName('RTCDataChannel.readyState')
   String get readyState native "RTCDataChannel_readyState_Getter";
 
-
-  /** @domName RTCDataChannel.reliable */
+  @DocsEditable
+  @DomName('RTCDataChannel.reliable')
   bool get reliable native "RTCDataChannel_reliable_Getter";
 
-
-  /** @domName RTCDataChannel.addEventListener */
+  @DocsEditable
+  @DomName('RTCDataChannel.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_addEventListener_Callback";
 
-
-  /** @domName RTCDataChannel.close */
+  @DocsEditable
+  @DomName('RTCDataChannel.close')
   void close() native "RTCDataChannel_close_Callback";
 
-
-  /** @domName RTCDataChannel.dispatchEvent */
+  @DocsEditable
+  @DomName('RTCDataChannel.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "RTCDataChannel_dispatchEvent_Callback";
 
-
-  /** @domName RTCDataChannel.removeEventListener */
+  @DocsEditable
+  @DomName('RTCDataChannel.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_removeEventListener_Callback";
 
   void send(data) {
@@ -19960,20 +19832,20 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName RTCDataChannel.send_1 */
+  @DocsEditable
+  @DomName('RTCDataChannel.send_1')
   void _send_1(data) native "RTCDataChannel_send_1_Callback";
 
-
-  /** @domName RTCDataChannel.send_2 */
+  @DocsEditable
+  @DomName('RTCDataChannel.send_2')
   void _send_2(data) native "RTCDataChannel_send_2_Callback";
 
-
-  /** @domName RTCDataChannel.send_3 */
+  @DocsEditable
+  @DomName('RTCDataChannel.send_3')
   void _send_3(data) native "RTCDataChannel_send_3_Callback";
 
-
-  /** @domName RTCDataChannel.send_4 */
+  @DocsEditable
+  @DomName('RTCDataChannel.send_4')
   void _send_4(data) native "RTCDataChannel_send_4_Callback";
 
   Stream<Event> get onClose => closeEvent.forTarget(this);
@@ -19986,21 +19858,21 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class RtcDataChannelEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   RtcDataChannelEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get close => this['close'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20010,12 +19882,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCDataChannelEvent
+@DocsEditable
+@DomName('RTCDataChannelEvent')
 class RtcDataChannelEvent extends Event {
   RtcDataChannelEvent.internal() : super.internal();
 
-
-  /** @domName RTCDataChannelEvent.channel */
+  @DocsEditable
+  @DomName('RTCDataChannelEvent.channel')
   RtcDataChannel get channel native "RTCDataChannelEvent_channel_Getter";
 
 }
@@ -20026,24 +19899,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCIceCandidate
+@DocsEditable
+@DomName('RTCIceCandidate')
 class RtcIceCandidate extends NativeFieldWrapperClass1 {
   RtcIceCandidate.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory RtcIceCandidate(Map dictionary) => RtcIceCandidate._create(dictionary);
   static RtcIceCandidate _create(Map dictionary) native "RTCIceCandidate_constructor_Callback";
 
-
-  /** @domName RTCIceCandidate.candidate */
+  @DocsEditable
+  @DomName('RTCIceCandidate.candidate')
   String get candidate native "RTCIceCandidate_candidate_Getter";
 
-
-  /** @domName RTCIceCandidate.sdpMLineIndex */
+  @DocsEditable
+  @DomName('RTCIceCandidate.sdpMLineIndex')
   int get sdpMLineIndex native "RTCIceCandidate_sdpMLineIndex_Getter";
 
-
-  /** @domName RTCIceCandidate.sdpMid */
+  @DocsEditable
+  @DomName('RTCIceCandidate.sdpMid')
   String get sdpMid native "RTCIceCandidate_sdpMid_Getter";
 
 }
@@ -20054,12 +19928,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCIceCandidateEvent
+@DocsEditable
+@DomName('RTCIceCandidateEvent')
 class RtcIceCandidateEvent extends Event {
   RtcIceCandidateEvent.internal() : super.internal();
 
-
-  /** @domName RTCIceCandidateEvent.candidate */
+  @DocsEditable
+  @DomName('RTCIceCandidateEvent.candidate')
   RtcIceCandidate get candidate native "RTCIceCandidateEvent_candidate_Getter";
 
 }
@@ -20070,7 +19945,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCPeerConnection
+@DocsEditable
+@DomName('RTCPeerConnection')
 class RtcPeerConnection extends EventTarget {
   RtcPeerConnection.internal() : super.internal();
 
@@ -20090,7 +19966,7 @@
 
   static const EventStreamProvider<Event> stateChangeEvent = const EventStreamProvider<Event>('statechange');
 
-  ///@docsEditable true
+  @DocsEditable
   factory RtcPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
     if (!?mediaConstraints) {
       return RtcPeerConnection._create(rtcIceServers);
@@ -20099,92 +19975,93 @@
   }
   static RtcPeerConnection _create(Map rtcIceServers, [Map mediaConstraints]) native "RTCPeerConnection_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   RtcPeerConnectionEvents get on =>
     new RtcPeerConnectionEvents(this);
 
-
-  /** @domName RTCPeerConnection.iceGatheringState */
+  @DocsEditable
+  @DomName('RTCPeerConnection.iceGatheringState')
   String get iceGatheringState native "RTCPeerConnection_iceGatheringState_Getter";
 
-
-  /** @domName RTCPeerConnection.iceState */
+  @DocsEditable
+  @DomName('RTCPeerConnection.iceState')
   String get iceState native "RTCPeerConnection_iceState_Getter";
 
-
-  /** @domName RTCPeerConnection.localDescription */
+  @DocsEditable
+  @DomName('RTCPeerConnection.localDescription')
   RtcSessionDescription get localDescription native "RTCPeerConnection_localDescription_Getter";
 
-
-  /** @domName RTCPeerConnection.localStreams */
+  @DocsEditable
+  @DomName('RTCPeerConnection.localStreams')
   List<MediaStream> get localStreams native "RTCPeerConnection_localStreams_Getter";
 
-
-  /** @domName RTCPeerConnection.readyState */
+  @DocsEditable
+  @DomName('RTCPeerConnection.readyState')
   String get readyState native "RTCPeerConnection_readyState_Getter";
 
-
-  /** @domName RTCPeerConnection.remoteDescription */
+  @DocsEditable
+  @DomName('RTCPeerConnection.remoteDescription')
   RtcSessionDescription get remoteDescription native "RTCPeerConnection_remoteDescription_Getter";
 
-
-  /** @domName RTCPeerConnection.remoteStreams */
+  @DocsEditable
+  @DomName('RTCPeerConnection.remoteStreams')
   List<MediaStream> get remoteStreams native "RTCPeerConnection_remoteStreams_Getter";
 
-
-  /** @domName RTCPeerConnection.addEventListener */
+  @DocsEditable
+  @DomName('RTCPeerConnection.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "RTCPeerConnection_addEventListener_Callback";
 
-
-  /** @domName RTCPeerConnection.addIceCandidate */
+  @DocsEditable
+  @DomName('RTCPeerConnection.addIceCandidate')
   void addIceCandidate(RtcIceCandidate candidate) native "RTCPeerConnection_addIceCandidate_Callback";
 
-
-  /** @domName RTCPeerConnection.addStream */
+  @DocsEditable
+  @DomName('RTCPeerConnection.addStream')
   void addStream(MediaStream stream, [Map mediaConstraints]) native "RTCPeerConnection_addStream_Callback";
 
-
-  /** @domName RTCPeerConnection.close */
+  @DocsEditable
+  @DomName('RTCPeerConnection.close')
   void close() native "RTCPeerConnection_close_Callback";
 
-
-  /** @domName RTCPeerConnection.createAnswer */
+  @DocsEditable
+  @DomName('RTCPeerConnection.createAnswer')
   void createAnswer(RtcSessionDescriptionCallback successCallback, [RtcErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createAnswer_Callback";
 
-
-  /** @domName RTCPeerConnection.createDataChannel */
+  @DocsEditable
+  @DomName('RTCPeerConnection.createDataChannel')
   RtcDataChannel createDataChannel(String label, [Map options]) native "RTCPeerConnection_createDataChannel_Callback";
 
-
-  /** @domName RTCPeerConnection.createOffer */
+  @DocsEditable
+  @DomName('RTCPeerConnection.createOffer')
   void createOffer(RtcSessionDescriptionCallback successCallback, [RtcErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createOffer_Callback";
 
-
-  /** @domName RTCPeerConnection.dispatchEvent */
+  @DocsEditable
+  @DomName('RTCPeerConnection.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "RTCPeerConnection_dispatchEvent_Callback";
 
-
-  /** @domName RTCPeerConnection.getStats */
+  @DocsEditable
+  @DomName('RTCPeerConnection.getStats')
   void getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) native "RTCPeerConnection_getStats_Callback";
 
-
-  /** @domName RTCPeerConnection.removeEventListener */
+  @DocsEditable
+  @DomName('RTCPeerConnection.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "RTCPeerConnection_removeEventListener_Callback";
 
-
-  /** @domName RTCPeerConnection.removeStream */
+  @DocsEditable
+  @DomName('RTCPeerConnection.removeStream')
   void removeStream(MediaStream stream) native "RTCPeerConnection_removeStream_Callback";
 
-
-  /** @domName RTCPeerConnection.setLocalDescription */
+  @DocsEditable
+  @DomName('RTCPeerConnection.setLocalDescription')
   void setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, RtcErrorCallback failureCallback]) native "RTCPeerConnection_setLocalDescription_Callback";
 
-
-  /** @domName RTCPeerConnection.setRemoteDescription */
+  @DocsEditable
+  @DomName('RTCPeerConnection.setRemoteDescription')
   void setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, RtcErrorCallback failureCallback]) native "RTCPeerConnection_setRemoteDescription_Callback";
 
-
-  /** @domName RTCPeerConnection.updateIce */
+  @DocsEditable
+  @DomName('RTCPeerConnection.updateIce')
   void updateIce([Map configuration, Map mediaConstraints]) native "RTCPeerConnection_updateIce_Callback";
 
   Stream<MediaStreamEvent> get onAddStream => addStreamEvent.forTarget(this);
@@ -20205,30 +20082,30 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class RtcPeerConnectionEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   RtcPeerConnectionEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get addStream => this['addstream'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get iceCandidate => this['icecandidate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get iceChange => this['icechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get negotiationNeeded => this['negotiationneeded'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get removeStream => this['removestream'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get stateChange => this['statechange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20238,28 +20115,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCSessionDescription
+@DocsEditable
+@DomName('RTCSessionDescription')
 class RtcSessionDescription extends NativeFieldWrapperClass1 {
   RtcSessionDescription.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory RtcSessionDescription(Map dictionary) => RtcSessionDescription._create(dictionary);
   static RtcSessionDescription _create(Map dictionary) native "RTCSessionDescription_constructor_Callback";
 
-
-  /** @domName RTCSessionDescription.sdp */
+  @DocsEditable
+  @DomName('RTCSessionDescription.sdp')
   String get sdp native "RTCSessionDescription_sdp_Getter";
 
-
-  /** @domName RTCSessionDescription.sdp */
+  @DocsEditable
+  @DomName('RTCSessionDescription.sdp')
   void set sdp(String value) native "RTCSessionDescription_sdp_Setter";
 
-
-  /** @domName RTCSessionDescription.type */
+  @DocsEditable
+  @DomName('RTCSessionDescription.type')
   String get type native "RTCSessionDescription_type_Getter";
 
-
-  /** @domName RTCSessionDescription.type */
+  @DocsEditable
+  @DomName('RTCSessionDescription.type')
   void set type(String value) native "RTCSessionDescription_type_Setter";
 
 }
@@ -20270,20 +20148,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCStatsElement
+@DocsEditable
+@DomName('RTCStatsElement')
 class RtcStatsElement extends NativeFieldWrapperClass1 {
   RtcStatsElement.internal();
 
-
-  /** @domName RTCStatsElement.timestamp */
+  @DocsEditable
+  @DomName('RTCStatsElement.timestamp')
   Date get timestamp native "RTCStatsElement_timestamp_Getter";
 
-
-  /** @domName RTCStatsElement.names */
+  @DocsEditable
+  @DomName('RTCStatsElement.names')
   List<String> names() native "RTCStatsElement_names_Callback";
 
-
-  /** @domName RTCStatsElement.stat */
+  @DocsEditable
+  @DomName('RTCStatsElement.stat')
   String stat(String name) native "RTCStatsElement_stat_Callback";
 
 }
@@ -20294,16 +20173,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCStatsReport
+@DocsEditable
+@DomName('RTCStatsReport')
 class RtcStatsReport extends NativeFieldWrapperClass1 {
   RtcStatsReport.internal();
 
-
-  /** @domName RTCStatsReport.local */
+  @DocsEditable
+  @DomName('RTCStatsReport.local')
   RtcStatsElement get local native "RTCStatsReport_local_Getter";
 
-
-  /** @domName RTCStatsReport.remote */
+  @DocsEditable
+  @DomName('RTCStatsReport.remote')
   RtcStatsElement get remote native "RTCStatsReport_remote_Getter";
 
 }
@@ -20314,12 +20194,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName RTCStatsResponse
+@DocsEditable
+@DomName('RTCStatsResponse')
 class RtcStatsResponse extends NativeFieldWrapperClass1 {
   RtcStatsResponse.internal();
 
-
-  /** @domName RTCStatsResponse.result */
+  @DocsEditable
+  @DomName('RTCStatsResponse.result')
   List<RtcStatsReport> result() native "RTCStatsResponse_result_Callback";
 
 }
@@ -20370,40 +20251,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Screen
+@DocsEditable
+@DomName('Screen')
 class Screen extends NativeFieldWrapperClass1 {
   Screen.internal();
 
-
-  /** @domName Screen.availHeight */
+  @DocsEditable
+  @DomName('Screen.availHeight')
   int get availHeight native "Screen_availHeight_Getter";
 
-
-  /** @domName Screen.availLeft */
+  @DocsEditable
+  @DomName('Screen.availLeft')
   int get availLeft native "Screen_availLeft_Getter";
 
-
-  /** @domName Screen.availTop */
+  @DocsEditable
+  @DomName('Screen.availTop')
   int get availTop native "Screen_availTop_Getter";
 
-
-  /** @domName Screen.availWidth */
+  @DocsEditable
+  @DomName('Screen.availWidth')
   int get availWidth native "Screen_availWidth_Getter";
 
-
-  /** @domName Screen.colorDepth */
+  @DocsEditable
+  @DomName('Screen.colorDepth')
   int get colorDepth native "Screen_colorDepth_Getter";
 
-
-  /** @domName Screen.height */
+  @DocsEditable
+  @DomName('Screen.height')
   int get height native "Screen_height_Getter";
 
-
-  /** @domName Screen.pixelDepth */
+  @DocsEditable
+  @DomName('Screen.pixelDepth')
   int get pixelDepth native "Screen_pixelDepth_Getter";
 
-
-  /** @domName Screen.width */
+  @DocsEditable
+  @DomName('Screen.width')
   int get width native "Screen_width_Getter";
 
 }
@@ -20414,75 +20296,76 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLScriptElement
+@DocsEditable
+@DomName('HTMLScriptElement')
 class ScriptElement extends _Element_Merged {
   ScriptElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ScriptElement() => document.$dom_createElement("script");
 
-
-  /** @domName HTMLScriptElement.async */
+  @DocsEditable
+  @DomName('HTMLScriptElement.async')
   bool get async native "HTMLScriptElement_async_Getter";
 
-
-  /** @domName HTMLScriptElement.async */
+  @DocsEditable
+  @DomName('HTMLScriptElement.async')
   void set async(bool value) native "HTMLScriptElement_async_Setter";
 
-
-  /** @domName HTMLScriptElement.charset */
+  @DocsEditable
+  @DomName('HTMLScriptElement.charset')
   String get charset native "HTMLScriptElement_charset_Getter";
 
-
-  /** @domName HTMLScriptElement.charset */
+  @DocsEditable
+  @DomName('HTMLScriptElement.charset')
   void set charset(String value) native "HTMLScriptElement_charset_Setter";
 
-
-  /** @domName HTMLScriptElement.crossOrigin */
+  @DocsEditable
+  @DomName('HTMLScriptElement.crossOrigin')
   String get crossOrigin native "HTMLScriptElement_crossOrigin_Getter";
 
-
-  /** @domName HTMLScriptElement.crossOrigin */
+  @DocsEditable
+  @DomName('HTMLScriptElement.crossOrigin')
   void set crossOrigin(String value) native "HTMLScriptElement_crossOrigin_Setter";
 
-
-  /** @domName HTMLScriptElement.defer */
+  @DocsEditable
+  @DomName('HTMLScriptElement.defer')
   bool get defer native "HTMLScriptElement_defer_Getter";
 
-
-  /** @domName HTMLScriptElement.defer */
+  @DocsEditable
+  @DomName('HTMLScriptElement.defer')
   void set defer(bool value) native "HTMLScriptElement_defer_Setter";
 
-
-  /** @domName HTMLScriptElement.event */
+  @DocsEditable
+  @DomName('HTMLScriptElement.event')
   String get event native "HTMLScriptElement_event_Getter";
 
-
-  /** @domName HTMLScriptElement.event */
+  @DocsEditable
+  @DomName('HTMLScriptElement.event')
   void set event(String value) native "HTMLScriptElement_event_Setter";
 
-
-  /** @domName HTMLScriptElement.htmlFor */
+  @DocsEditable
+  @DomName('HTMLScriptElement.htmlFor')
   String get htmlFor native "HTMLScriptElement_htmlFor_Getter";
 
-
-  /** @domName HTMLScriptElement.htmlFor */
+  @DocsEditable
+  @DomName('HTMLScriptElement.htmlFor')
   void set htmlFor(String value) native "HTMLScriptElement_htmlFor_Setter";
 
-
-  /** @domName HTMLScriptElement.src */
+  @DocsEditable
+  @DomName('HTMLScriptElement.src')
   String get src native "HTMLScriptElement_src_Getter";
 
-
-  /** @domName HTMLScriptElement.src */
+  @DocsEditable
+  @DomName('HTMLScriptElement.src')
   void set src(String value) native "HTMLScriptElement_src_Setter";
 
-
-  /** @domName HTMLScriptElement.type */
+  @DocsEditable
+  @DomName('HTMLScriptElement.type')
   String get type native "HTMLScriptElement_type_Getter";
 
-
-  /** @domName HTMLScriptElement.type */
+  @DocsEditable
+  @DomName('HTMLScriptElement.type')
   void set type(String value) native "HTMLScriptElement_type_Setter";
 
 }
@@ -20493,20 +20376,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ScriptProfile
+@DocsEditable
+@DomName('ScriptProfile')
 class ScriptProfile extends NativeFieldWrapperClass1 {
   ScriptProfile.internal();
 
-
-  /** @domName ScriptProfile.head */
+  @DocsEditable
+  @DomName('ScriptProfile.head')
   ScriptProfileNode get head native "ScriptProfile_head_Getter";
 
+  @DocsEditable
+  @DomName('ScriptProfile.idleTime')
+  num get idleTime native "ScriptProfile_idleTime_Getter";
 
-  /** @domName ScriptProfile.title */
+  @DocsEditable
+  @DomName('ScriptProfile.title')
   String get title native "ScriptProfile_title_Getter";
 
-
-  /** @domName ScriptProfile.uid */
+  @DocsEditable
+  @DomName('ScriptProfile.uid')
   int get uid native "ScriptProfile_uid_Getter";
 
 }
@@ -20517,44 +20405,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ScriptProfileNode
+@DocsEditable
+@DomName('ScriptProfileNode')
 class ScriptProfileNode extends NativeFieldWrapperClass1 {
   ScriptProfileNode.internal();
 
-
-  /** @domName ScriptProfileNode.callUID */
+  @DocsEditable
+  @DomName('ScriptProfileNode.callUID')
   int get callUid native "ScriptProfileNode_callUID_Getter";
 
-
-  /** @domName ScriptProfileNode.functionName */
+  @DocsEditable
+  @DomName('ScriptProfileNode.functionName')
   String get functionName native "ScriptProfileNode_functionName_Getter";
 
-
-  /** @domName ScriptProfileNode.lineNumber */
+  @DocsEditable
+  @DomName('ScriptProfileNode.lineNumber')
   int get lineNumber native "ScriptProfileNode_lineNumber_Getter";
 
-
-  /** @domName ScriptProfileNode.numberOfCalls */
+  @DocsEditable
+  @DomName('ScriptProfileNode.numberOfCalls')
   int get numberOfCalls native "ScriptProfileNode_numberOfCalls_Getter";
 
-
-  /** @domName ScriptProfileNode.selfTime */
+  @DocsEditable
+  @DomName('ScriptProfileNode.selfTime')
   num get selfTime native "ScriptProfileNode_selfTime_Getter";
 
-
-  /** @domName ScriptProfileNode.totalTime */
+  @DocsEditable
+  @DomName('ScriptProfileNode.totalTime')
   num get totalTime native "ScriptProfileNode_totalTime_Getter";
 
-
-  /** @domName ScriptProfileNode.url */
+  @DocsEditable
+  @DomName('ScriptProfileNode.url')
   String get url native "ScriptProfileNode_url_Getter";
 
-
-  /** @domName ScriptProfileNode.visible */
+  @DocsEditable
+  @DomName('ScriptProfileNode.visible')
   bool get visible native "ScriptProfileNode_visible_Getter";
 
-
-  /** @domName ScriptProfileNode.children */
+  @DocsEditable
+  @DomName('ScriptProfileNode.children')
   List<ScriptProfileNode> children() native "ScriptProfileNode_children_Callback";
 
 }
@@ -20563,123 +20452,124 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLSelectElement
+@DocsEditable
+@DomName('HTMLSelectElement')
 class SelectElement extends _Element_Merged {
   SelectElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SelectElement() => document.$dom_createElement("select");
 
-
-  /** @domName HTMLSelectElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLSelectElement.autofocus')
   bool get autofocus native "HTMLSelectElement_autofocus_Getter";
 
-
-  /** @domName HTMLSelectElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLSelectElement.autofocus')
   void set autofocus(bool value) native "HTMLSelectElement_autofocus_Setter";
 
-
-  /** @domName HTMLSelectElement.disabled */
+  @DocsEditable
+  @DomName('HTMLSelectElement.disabled')
   bool get disabled native "HTMLSelectElement_disabled_Getter";
 
-
-  /** @domName HTMLSelectElement.disabled */
+  @DocsEditable
+  @DomName('HTMLSelectElement.disabled')
   void set disabled(bool value) native "HTMLSelectElement_disabled_Setter";
 
-
-  /** @domName HTMLSelectElement.form */
+  @DocsEditable
+  @DomName('HTMLSelectElement.form')
   FormElement get form native "HTMLSelectElement_form_Getter";
 
-
-  /** @domName HTMLSelectElement.labels */
+  @DocsEditable
+  @DomName('HTMLSelectElement.labels')
   List<Node> get labels native "HTMLSelectElement_labels_Getter";
 
-
-  /** @domName HTMLSelectElement.length */
+  @DocsEditable
+  @DomName('HTMLSelectElement.length')
   int get length native "HTMLSelectElement_length_Getter";
 
-
-  /** @domName HTMLSelectElement.length */
+  @DocsEditable
+  @DomName('HTMLSelectElement.length')
   void set length(int value) native "HTMLSelectElement_length_Setter";
 
-
-  /** @domName HTMLSelectElement.multiple */
+  @DocsEditable
+  @DomName('HTMLSelectElement.multiple')
   bool get multiple native "HTMLSelectElement_multiple_Getter";
 
-
-  /** @domName HTMLSelectElement.multiple */
+  @DocsEditable
+  @DomName('HTMLSelectElement.multiple')
   void set multiple(bool value) native "HTMLSelectElement_multiple_Setter";
 
-
-  /** @domName HTMLSelectElement.name */
+  @DocsEditable
+  @DomName('HTMLSelectElement.name')
   String get name native "HTMLSelectElement_name_Getter";
 
-
-  /** @domName HTMLSelectElement.name */
+  @DocsEditable
+  @DomName('HTMLSelectElement.name')
   void set name(String value) native "HTMLSelectElement_name_Setter";
 
-
-  /** @domName HTMLSelectElement.required */
+  @DocsEditable
+  @DomName('HTMLSelectElement.required')
   bool get required native "HTMLSelectElement_required_Getter";
 
-
-  /** @domName HTMLSelectElement.required */
+  @DocsEditable
+  @DomName('HTMLSelectElement.required')
   void set required(bool value) native "HTMLSelectElement_required_Setter";
 
-
-  /** @domName HTMLSelectElement.selectedIndex */
+  @DocsEditable
+  @DomName('HTMLSelectElement.selectedIndex')
   int get selectedIndex native "HTMLSelectElement_selectedIndex_Getter";
 
-
-  /** @domName HTMLSelectElement.selectedIndex */
+  @DocsEditable
+  @DomName('HTMLSelectElement.selectedIndex')
   void set selectedIndex(int value) native "HTMLSelectElement_selectedIndex_Setter";
 
-
-  /** @domName HTMLSelectElement.size */
+  @DocsEditable
+  @DomName('HTMLSelectElement.size')
   int get size native "HTMLSelectElement_size_Getter";
 
-
-  /** @domName HTMLSelectElement.size */
+  @DocsEditable
+  @DomName('HTMLSelectElement.size')
   void set size(int value) native "HTMLSelectElement_size_Setter";
 
-
-  /** @domName HTMLSelectElement.type */
+  @DocsEditable
+  @DomName('HTMLSelectElement.type')
   String get type native "HTMLSelectElement_type_Getter";
 
-
-  /** @domName HTMLSelectElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLSelectElement.validationMessage')
   String get validationMessage native "HTMLSelectElement_validationMessage_Getter";
 
-
-  /** @domName HTMLSelectElement.validity */
+  @DocsEditable
+  @DomName('HTMLSelectElement.validity')
   ValidityState get validity native "HTMLSelectElement_validity_Getter";
 
-
-  /** @domName HTMLSelectElement.value */
+  @DocsEditable
+  @DomName('HTMLSelectElement.value')
   String get value native "HTMLSelectElement_value_Getter";
 
-
-  /** @domName HTMLSelectElement.value */
+  @DocsEditable
+  @DomName('HTMLSelectElement.value')
   void set value(String value) native "HTMLSelectElement_value_Setter";
 
-
-  /** @domName HTMLSelectElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLSelectElement.willValidate')
   bool get willValidate native "HTMLSelectElement_willValidate_Getter";
 
-
-  /** @domName HTMLSelectElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLSelectElement.checkValidity')
   bool checkValidity() native "HTMLSelectElement_checkValidity_Callback";
 
-
-  /** @domName HTMLSelectElement.item */
+  @DocsEditable
+  @DomName('HTMLSelectElement.item')
   Node item(int index) native "HTMLSelectElement_item_Callback";
 
-
-  /** @domName HTMLSelectElement.namedItem */
+  @DocsEditable
+  @DomName('HTMLSelectElement.namedItem')
   Node namedItem(String name) native "HTMLSelectElement_namedItem_Callback";
 
-
-  /** @domName HTMLSelectElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLSelectElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLSelectElement_setCustomValidity_Callback";
 
 
@@ -20707,7 +20597,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLShadowElement
+@DocsEditable
+@DomName('HTMLShadowElement')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 class ShadowElement extends _Element_Merged {
@@ -20716,16 +20607,16 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-
-  /** @domName HTMLShadowElement.olderShadowRoot */
+  @DocsEditable
+  @DomName('HTMLShadowElement.olderShadowRoot')
   ShadowRoot get olderShadowRoot native "HTMLShadowElement_olderShadowRoot_Getter";
 
-
-  /** @domName HTMLShadowElement.resetStyleInheritance */
+  @DocsEditable
+  @DomName('HTMLShadowElement.resetStyleInheritance')
   bool get resetStyleInheritance native "HTMLShadowElement_resetStyleInheritance_Getter";
 
-
-  /** @domName HTMLShadowElement.resetStyleInheritance */
+  @DocsEditable
+  @DomName('HTMLShadowElement.resetStyleInheritance')
   void set resetStyleInheritance(bool value) native "HTMLShadowElement_resetStyleInheritance_Setter";
 
 }
@@ -20736,58 +20627,63 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ShadowRoot
+@DocsEditable
+@DomName('ShadowRoot')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 class ShadowRoot extends DocumentFragment {
   ShadowRoot.internal() : super.internal();
 
-
-  /** @domName ShadowRoot.activeElement */
+  @DocsEditable
+  @DomName('ShadowRoot.activeElement')
   Element get activeElement native "ShadowRoot_activeElement_Getter";
 
-
-  /** @domName ShadowRoot.applyAuthorStyles */
+  @DocsEditable
+  @DomName('ShadowRoot.applyAuthorStyles')
   bool get applyAuthorStyles native "ShadowRoot_applyAuthorStyles_Getter";
 
-
-  /** @domName ShadowRoot.applyAuthorStyles */
+  @DocsEditable
+  @DomName('ShadowRoot.applyAuthorStyles')
   void set applyAuthorStyles(bool value) native "ShadowRoot_applyAuthorStyles_Setter";
 
-
-  /** @domName ShadowRoot.innerHTML */
+  @DocsEditable
+  @DomName('ShadowRoot.innerHTML')
   String get innerHtml native "ShadowRoot_innerHTML_Getter";
 
-
-  /** @domName ShadowRoot.innerHTML */
+  @DocsEditable
+  @DomName('ShadowRoot.innerHTML')
   void set innerHtml(String value) native "ShadowRoot_innerHTML_Setter";
 
-
-  /** @domName ShadowRoot.resetStyleInheritance */
+  @DocsEditable
+  @DomName('ShadowRoot.resetStyleInheritance')
   bool get resetStyleInheritance native "ShadowRoot_resetStyleInheritance_Getter";
 
-
-  /** @domName ShadowRoot.resetStyleInheritance */
+  @DocsEditable
+  @DomName('ShadowRoot.resetStyleInheritance')
   void set resetStyleInheritance(bool value) native "ShadowRoot_resetStyleInheritance_Setter";
 
-
-  /** @domName ShadowRoot.cloneNode */
+  @DocsEditable
+  @DomName('ShadowRoot.cloneNode')
   Node clone(bool deep) native "ShadowRoot_cloneNode_Callback";
 
+  @DocsEditable
+  @DomName('ShadowRoot.elementFromPoint')
+  Element elementFromPoint(int x, int y) native "ShadowRoot_elementFromPoint_Callback";
 
-  /** @domName ShadowRoot.getElementById */
+  @DocsEditable
+  @DomName('ShadowRoot.getElementById')
   Element $dom_getElementById(String elementId) native "ShadowRoot_getElementById_Callback";
 
-
-  /** @domName ShadowRoot.getElementsByClassName */
+  @DocsEditable
+  @DomName('ShadowRoot.getElementsByClassName')
   List<Node> $dom_getElementsByClassName(String className) native "ShadowRoot_getElementsByClassName_Callback";
 
-
-  /** @domName ShadowRoot.getElementsByTagName */
+  @DocsEditable
+  @DomName('ShadowRoot.getElementsByTagName')
   List<Node> $dom_getElementsByTagName(String tagName) native "ShadowRoot_getElementsByTagName_Callback";
 
-
-  /** @domName ShadowRoot.getSelection */
+  @DocsEditable
+  @DomName('ShadowRoot.getSelection')
   DomSelection getSelection() native "ShadowRoot_getSelection_Callback";
 
   static bool get supported => _Utils.shadowRootSupported(window.document);
@@ -20799,11 +20695,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SharedWorker
+@DocsEditable
+@DomName('SharedWorker')
 class SharedWorker extends AbstractWorker {
   SharedWorker.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SharedWorker(String scriptURL, [String name]) {
     if (!?name) {
       return SharedWorker._create(scriptURL);
@@ -20812,8 +20709,8 @@
   }
   static SharedWorker _create(String scriptURL, [String name]) native "SharedWorker_constructor_Callback";
 
-
-  /** @domName SharedWorker.port */
+  @DocsEditable
+  @DomName('SharedWorker.port')
   MessagePort get port native "SharedWorker_port_Getter";
 
 }
@@ -20824,30 +20721,32 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SharedWorkerContext
+@DocsEditable
+@DomName('SharedWorkerContext')
 class SharedWorkerContext extends WorkerContext {
   SharedWorkerContext.internal() : super.internal();
 
   static const EventStreamProvider<Event> connectEvent = const EventStreamProvider<Event>('connect');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   SharedWorkerContextEvents get on =>
     new SharedWorkerContextEvents(this);
 
-
-  /** @domName SharedWorkerContext.name */
+  @DocsEditable
+  @DomName('SharedWorkerContext.name')
   String get name native "SharedWorkerContext_name_Getter";
 
   Stream<Event> get onConnect => connectEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class SharedWorkerContextEvents extends WorkerContextEvents {
-  /// @docsEditable true
+  @DocsEditable
   SharedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get connect => this['connect'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20857,28 +20756,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SourceBuffer
+@DocsEditable
+@DomName('SourceBuffer')
 class SourceBuffer extends NativeFieldWrapperClass1 {
   SourceBuffer.internal();
 
-
-  /** @domName SourceBuffer.buffered */
+  @DocsEditable
+  @DomName('SourceBuffer.buffered')
   TimeRanges get buffered native "SourceBuffer_buffered_Getter";
 
-
-  /** @domName SourceBuffer.timestampOffset */
+  @DocsEditable
+  @DomName('SourceBuffer.timestampOffset')
   num get timestampOffset native "SourceBuffer_timestampOffset_Getter";
 
-
-  /** @domName SourceBuffer.timestampOffset */
+  @DocsEditable
+  @DomName('SourceBuffer.timestampOffset')
   void set timestampOffset(num value) native "SourceBuffer_timestampOffset_Setter";
 
-
-  /** @domName SourceBuffer.abort */
+  @DocsEditable
+  @DomName('SourceBuffer.abort')
   void abort() native "SourceBuffer_abort_Callback";
 
-
-  /** @domName SourceBuffer.append */
+  @DocsEditable
+  @DomName('SourceBuffer.append')
   void append(Uint8Array data) native "SourceBuffer_append_Callback";
 
 }
@@ -20889,12 +20789,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SourceBufferList
+@DocsEditable
+@DomName('SourceBufferList')
 class SourceBufferList extends EventTarget implements List<SourceBuffer> {
   SourceBufferList.internal() : super.internal();
 
-
-  /** @domName SourceBufferList.length */
+  @DocsEditable
+  @DomName('SourceBufferList.length')
   int get length native "SourceBufferList_length_Getter";
 
   SourceBuffer operator[](int index) native "SourceBufferList_item_Callback";
@@ -20915,50 +20816,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SourceBuffer)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SourceBuffer element) => Collections.contains(this, element);
+  bool contains(SourceBuffer element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SourceBuffer element)) => Collections.forEach(this, f);
+  void forEach(void f(SourceBuffer element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SourceBuffer element)) => new MappedList<SourceBuffer, dynamic>(this, f);
+  List mappedBy(f(SourceBuffer element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SourceBuffer> where(bool f(SourceBuffer element)) => new WhereIterable<SourceBuffer>(this, f);
+  Iterable<SourceBuffer> where(bool f(SourceBuffer element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SourceBuffer element)) => Collections.every(this, f);
+  bool every(bool f(SourceBuffer element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SourceBuffer element)) => Collections.any(this, f);
+  bool any(bool f(SourceBuffer element)) => IterableMixinWorkaround.any(this, f);
 
   List<SourceBuffer> toList() => new List<SourceBuffer>.from(this);
   Set<SourceBuffer> toSet() => new Set<SourceBuffer>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SourceBuffer> take(int n) => new ListView<SourceBuffer>(this, 0, n);
+  List<SourceBuffer> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SourceBuffer> takeWhile(bool test(SourceBuffer value)) {
-    return new TakeWhileIterable<SourceBuffer>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SourceBuffer> skip(int n) => new ListView<SourceBuffer>(this, n, null);
+  List<SourceBuffer> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SourceBuffer> skipWhile(bool test(SourceBuffer value)) {
-    return new SkipWhileIterable<SourceBuffer>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SourceBuffer firstMatching(bool test(SourceBuffer value), { SourceBuffer orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SourceBuffer lastMatching(bool test(SourceBuffer value), {SourceBuffer orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SourceBuffer singleMatching(bool test(SourceBuffer value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SourceBuffer elementAt(int index) {
@@ -21016,16 +20917,36 @@
     throw new StateError("More than one element");
   }
 
-  SourceBuffer min([int compare(SourceBuffer a, SourceBuffer b)]) => Collections.min(this, compare);
+  SourceBuffer min([int compare(SourceBuffer a, SourceBuffer b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SourceBuffer max([int compare(SourceBuffer a, SourceBuffer b)]) => Collections.max(this, compare);
+  SourceBuffer max([int compare(SourceBuffer a, SourceBuffer b)]) => IterableMixinWorkaround.max(this, compare);
 
   SourceBuffer removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SourceBuffer removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SourceBuffer element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SourceBuffer element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
@@ -21045,20 +20966,20 @@
 
   // -- end List<SourceBuffer> mixins.
 
-
-  /** @domName SourceBufferList.addEventListener */
+  @DocsEditable
+  @DomName('SourceBufferList.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBufferList_addEventListener_Callback";
 
-
-  /** @domName SourceBufferList.dispatchEvent */
+  @DocsEditable
+  @DomName('SourceBufferList.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "SourceBufferList_dispatchEvent_Callback";
 
-
-  /** @domName SourceBufferList.item */
+  @DocsEditable
+  @DomName('SourceBufferList.item')
   SourceBuffer item(int index) native "SourceBufferList_item_Callback";
 
-
-  /** @domName SourceBufferList.removeEventListener */
+  @DocsEditable
+  @DomName('SourceBufferList.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBufferList_removeEventListener_Callback";
 
 }
@@ -21069,35 +20990,36 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLSourceElement
+@DocsEditable
+@DomName('HTMLSourceElement')
 class SourceElement extends _Element_Merged {
   SourceElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SourceElement() => document.$dom_createElement("source");
 
-
-  /** @domName HTMLSourceElement.media */
+  @DocsEditable
+  @DomName('HTMLSourceElement.media')
   String get media native "HTMLSourceElement_media_Getter";
 
-
-  /** @domName HTMLSourceElement.media */
+  @DocsEditable
+  @DomName('HTMLSourceElement.media')
   void set media(String value) native "HTMLSourceElement_media_Setter";
 
-
-  /** @domName HTMLSourceElement.src */
+  @DocsEditable
+  @DomName('HTMLSourceElement.src')
   String get src native "HTMLSourceElement_src_Getter";
 
-
-  /** @domName HTMLSourceElement.src */
+  @DocsEditable
+  @DomName('HTMLSourceElement.src')
   void set src(String value) native "HTMLSourceElement_src_Setter";
 
-
-  /** @domName HTMLSourceElement.type */
+  @DocsEditable
+  @DomName('HTMLSourceElement.type')
   String get type native "HTMLSourceElement_type_Getter";
 
-
-  /** @domName HTMLSourceElement.type */
+  @DocsEditable
+  @DomName('HTMLSourceElement.type')
   void set type(String value) native "HTMLSourceElement_type_Setter";
 
 }
@@ -21108,11 +21030,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLSpanElement
+@DocsEditable
+@DomName('HTMLSpanElement')
 class SpanElement extends _Element_Merged {
   SpanElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpanElement() => document.$dom_createElement("span");
 
 }
@@ -21123,28 +21046,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechGrammar
+@DocsEditable
+@DomName('SpeechGrammar')
 class SpeechGrammar extends NativeFieldWrapperClass1 {
   SpeechGrammar.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpeechGrammar() => SpeechGrammar._create();
   static SpeechGrammar _create() native "SpeechGrammar_constructor_Callback";
 
-
-  /** @domName SpeechGrammar.src */
+  @DocsEditable
+  @DomName('SpeechGrammar.src')
   String get src native "SpeechGrammar_src_Getter";
 
-
-  /** @domName SpeechGrammar.src */
+  @DocsEditable
+  @DomName('SpeechGrammar.src')
   void set src(String value) native "SpeechGrammar_src_Setter";
 
-
-  /** @domName SpeechGrammar.weight */
+  @DocsEditable
+  @DomName('SpeechGrammar.weight')
   num get weight native "SpeechGrammar_weight_Getter";
 
-
-  /** @domName SpeechGrammar.weight */
+  @DocsEditable
+  @DomName('SpeechGrammar.weight')
   void set weight(num value) native "SpeechGrammar_weight_Setter";
 
 }
@@ -21155,16 +21079,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechGrammarList
+@DocsEditable
+@DomName('SpeechGrammarList')
 class SpeechGrammarList extends NativeFieldWrapperClass1 implements List<SpeechGrammar> {
   SpeechGrammarList.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpeechGrammarList() => SpeechGrammarList._create();
   static SpeechGrammarList _create() native "SpeechGrammarList_constructor_Callback";
 
-
-  /** @domName SpeechGrammarList.length */
+  @DocsEditable
+  @DomName('SpeechGrammarList.length')
   int get length native "SpeechGrammarList_length_Getter";
 
   SpeechGrammar operator[](int index) native "SpeechGrammarList_item_Callback";
@@ -21185,50 +21110,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SpeechGrammar)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SpeechGrammar element) => Collections.contains(this, element);
+  bool contains(SpeechGrammar element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SpeechGrammar element)) => Collections.forEach(this, f);
+  void forEach(void f(SpeechGrammar element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SpeechGrammar element)) => new MappedList<SpeechGrammar, dynamic>(this, f);
+  List mappedBy(f(SpeechGrammar element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SpeechGrammar> where(bool f(SpeechGrammar element)) => new WhereIterable<SpeechGrammar>(this, f);
+  Iterable<SpeechGrammar> where(bool f(SpeechGrammar element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SpeechGrammar element)) => Collections.every(this, f);
+  bool every(bool f(SpeechGrammar element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SpeechGrammar element)) => Collections.any(this, f);
+  bool any(bool f(SpeechGrammar element)) => IterableMixinWorkaround.any(this, f);
 
   List<SpeechGrammar> toList() => new List<SpeechGrammar>.from(this);
   Set<SpeechGrammar> toSet() => new Set<SpeechGrammar>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SpeechGrammar> take(int n) => new ListView<SpeechGrammar>(this, 0, n);
+  List<SpeechGrammar> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SpeechGrammar> takeWhile(bool test(SpeechGrammar value)) {
-    return new TakeWhileIterable<SpeechGrammar>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SpeechGrammar> skip(int n) => new ListView<SpeechGrammar>(this, n, null);
+  List<SpeechGrammar> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SpeechGrammar> skipWhile(bool test(SpeechGrammar value)) {
-    return new SkipWhileIterable<SpeechGrammar>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SpeechGrammar firstMatching(bool test(SpeechGrammar value), { SpeechGrammar orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SpeechGrammar lastMatching(bool test(SpeechGrammar value), {SpeechGrammar orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SpeechGrammar singleMatching(bool test(SpeechGrammar value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SpeechGrammar elementAt(int index) {
@@ -21286,16 +21211,36 @@
     throw new StateError("More than one element");
   }
 
-  SpeechGrammar min([int compare(SpeechGrammar a, SpeechGrammar b)]) => Collections.min(this, compare);
+  SpeechGrammar min([int compare(SpeechGrammar a, SpeechGrammar b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SpeechGrammar max([int compare(SpeechGrammar a, SpeechGrammar b)]) => Collections.max(this, compare);
+  SpeechGrammar max([int compare(SpeechGrammar a, SpeechGrammar b)]) => IterableMixinWorkaround.max(this, compare);
 
   SpeechGrammar removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SpeechGrammar removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SpeechGrammar element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SpeechGrammar element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
@@ -21315,7 +21260,7 @@
 
   // -- end List<SpeechGrammar> mixins.
 
-  void addFromString(/*DOMString*/ string, [/*float*/ weight]) {
+  void addFromString(String string, [num weight]) {
     if (?weight) {
       _addFromString_1(string, weight);
       return;
@@ -21323,15 +21268,15 @@
     _addFromString_2(string);
   }
 
-
-  /** @domName SpeechGrammarList.addFromString_1 */
+  @DocsEditable
+  @DomName('SpeechGrammarList.addFromString_1')
   void _addFromString_1(string, weight) native "SpeechGrammarList_addFromString_1_Callback";
 
-
-  /** @domName SpeechGrammarList.addFromString_2 */
+  @DocsEditable
+  @DomName('SpeechGrammarList.addFromString_2')
   void _addFromString_2(string) native "SpeechGrammarList_addFromString_2_Callback";
 
-  void addFromUri(/*DOMString*/ src, [/*float*/ weight]) {
+  void addFromUri(String src, [num weight]) {
     if (?weight) {
       _addFromUri_1(src, weight);
       return;
@@ -21339,16 +21284,16 @@
     _addFromUri_2(src);
   }
 
-
-  /** @domName SpeechGrammarList.addFromUri_1 */
+  @DocsEditable
+  @DomName('SpeechGrammarList.addFromUri_1')
   void _addFromUri_1(src, weight) native "SpeechGrammarList_addFromUri_1_Callback";
 
-
-  /** @domName SpeechGrammarList.addFromUri_2 */
+  @DocsEditable
+  @DomName('SpeechGrammarList.addFromUri_2')
   void _addFromUri_2(src) native "SpeechGrammarList_addFromUri_2_Callback";
 
-
-  /** @domName SpeechGrammarList.item */
+  @DocsEditable
+  @DomName('SpeechGrammarList.item')
   SpeechGrammar item(int index) native "SpeechGrammarList_item_Callback";
 
 }
@@ -21359,12 +21304,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechInputEvent
+@DocsEditable
+@DomName('SpeechInputEvent')
 class SpeechInputEvent extends Event {
   SpeechInputEvent.internal() : super.internal();
 
-
-  /** @domName SpeechInputEvent.results */
+  @DocsEditable
+  @DomName('SpeechInputEvent.results')
   List<SpeechInputResult> get results native "SpeechInputEvent_results_Getter";
 
 }
@@ -21375,16 +21321,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechInputResult
+@DocsEditable
+@DomName('SpeechInputResult')
 class SpeechInputResult extends NativeFieldWrapperClass1 {
   SpeechInputResult.internal();
 
-
-  /** @domName SpeechInputResult.confidence */
+  @DocsEditable
+  @DomName('SpeechInputResult.confidence')
   num get confidence native "SpeechInputResult_confidence_Getter";
 
-
-  /** @domName SpeechInputResult.utterance */
+  @DocsEditable
+  @DomName('SpeechInputResult.utterance')
   String get utterance native "SpeechInputResult_utterance_Getter";
 
 }
@@ -21395,7 +21342,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechRecognition
+@DocsEditable
+@DomName('SpeechRecognition')
 class SpeechRecognition extends EventTarget {
   SpeechRecognition.internal() : super.internal();
 
@@ -21421,76 +21369,77 @@
 
   static const EventStreamProvider<Event> startEvent = const EventStreamProvider<Event>('start');
 
-  ///@docsEditable true
+  @DocsEditable
   factory SpeechRecognition() => SpeechRecognition._create();
   static SpeechRecognition _create() native "SpeechRecognition_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   SpeechRecognitionEvents get on =>
     new SpeechRecognitionEvents(this);
 
-
-  /** @domName SpeechRecognition.continuous */
+  @DocsEditable
+  @DomName('SpeechRecognition.continuous')
   bool get continuous native "SpeechRecognition_continuous_Getter";
 
-
-  /** @domName SpeechRecognition.continuous */
+  @DocsEditable
+  @DomName('SpeechRecognition.continuous')
   void set continuous(bool value) native "SpeechRecognition_continuous_Setter";
 
-
-  /** @domName SpeechRecognition.grammars */
+  @DocsEditable
+  @DomName('SpeechRecognition.grammars')
   SpeechGrammarList get grammars native "SpeechRecognition_grammars_Getter";
 
-
-  /** @domName SpeechRecognition.grammars */
+  @DocsEditable
+  @DomName('SpeechRecognition.grammars')
   void set grammars(SpeechGrammarList value) native "SpeechRecognition_grammars_Setter";
 
-
-  /** @domName SpeechRecognition.interimResults */
+  @DocsEditable
+  @DomName('SpeechRecognition.interimResults')
   bool get interimResults native "SpeechRecognition_interimResults_Getter";
 
-
-  /** @domName SpeechRecognition.interimResults */
+  @DocsEditable
+  @DomName('SpeechRecognition.interimResults')
   void set interimResults(bool value) native "SpeechRecognition_interimResults_Setter";
 
-
-  /** @domName SpeechRecognition.lang */
+  @DocsEditable
+  @DomName('SpeechRecognition.lang')
   String get lang native "SpeechRecognition_lang_Getter";
 
-
-  /** @domName SpeechRecognition.lang */
+  @DocsEditable
+  @DomName('SpeechRecognition.lang')
   void set lang(String value) native "SpeechRecognition_lang_Setter";
 
-
-  /** @domName SpeechRecognition.maxAlternatives */
+  @DocsEditable
+  @DomName('SpeechRecognition.maxAlternatives')
   int get maxAlternatives native "SpeechRecognition_maxAlternatives_Getter";
 
-
-  /** @domName SpeechRecognition.maxAlternatives */
+  @DocsEditable
+  @DomName('SpeechRecognition.maxAlternatives')
   void set maxAlternatives(int value) native "SpeechRecognition_maxAlternatives_Setter";
 
-
-  /** @domName SpeechRecognition.abort */
+  @DocsEditable
+  @DomName('SpeechRecognition.abort')
   void abort() native "SpeechRecognition_abort_Callback";
 
-
-  /** @domName SpeechRecognition.addEventListener */
+  @DocsEditable
+  @DomName('SpeechRecognition.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "SpeechRecognition_addEventListener_Callback";
 
-
-  /** @domName SpeechRecognition.dispatchEvent */
+  @DocsEditable
+  @DomName('SpeechRecognition.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "SpeechRecognition_dispatchEvent_Callback";
 
-
-  /** @domName SpeechRecognition.removeEventListener */
+  @DocsEditable
+  @DomName('SpeechRecognition.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "SpeechRecognition_removeEventListener_Callback";
 
-
-  /** @domName SpeechRecognition.start */
+  @DocsEditable
+  @DomName('SpeechRecognition.start')
   void start() native "SpeechRecognition_start_Callback";
 
-
-  /** @domName SpeechRecognition.stop */
+  @DocsEditable
+  @DomName('SpeechRecognition.stop')
   void stop() native "SpeechRecognition_stop_Callback";
 
   Stream<Event> get onAudioEnd => audioEndEvent.forTarget(this);
@@ -21517,42 +21466,42 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class SpeechRecognitionEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   SpeechRecognitionEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get audioEnd => this['audioend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get audioStart => this['audiostart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get end => this['end'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get noMatch => this['nomatch'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get result => this['result'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get soundEnd => this['soundend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get soundStart => this['soundstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get speechEnd => this['speechend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get speechStart => this['speechstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get start => this['start'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21562,16 +21511,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechRecognitionAlternative
+@DocsEditable
+@DomName('SpeechRecognitionAlternative')
 class SpeechRecognitionAlternative extends NativeFieldWrapperClass1 {
   SpeechRecognitionAlternative.internal();
 
-
-  /** @domName SpeechRecognitionAlternative.confidence */
+  @DocsEditable
+  @DomName('SpeechRecognitionAlternative.confidence')
   num get confidence native "SpeechRecognitionAlternative_confidence_Getter";
 
-
-  /** @domName SpeechRecognitionAlternative.transcript */
+  @DocsEditable
+  @DomName('SpeechRecognitionAlternative.transcript')
   String get transcript native "SpeechRecognitionAlternative_transcript_Getter";
 
 }
@@ -21582,16 +21532,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechRecognitionError
+@DocsEditable
+@DomName('SpeechRecognitionError')
 class SpeechRecognitionError extends Event {
   SpeechRecognitionError.internal() : super.internal();
 
-
-  /** @domName SpeechRecognitionError.error */
+  @DocsEditable
+  @DomName('SpeechRecognitionError.error')
   String get error native "SpeechRecognitionError_error_Getter";
 
-
-  /** @domName SpeechRecognitionError.message */
+  @DocsEditable
+  @DomName('SpeechRecognitionError.message')
   String get message native "SpeechRecognitionError_message_Getter";
 
 }
@@ -21602,24 +21553,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechRecognitionEvent
+@DocsEditable
+@DomName('SpeechRecognitionEvent')
 class SpeechRecognitionEvent extends Event {
   SpeechRecognitionEvent.internal() : super.internal();
 
-
-  /** @domName SpeechRecognitionEvent.result */
+  @DocsEditable
+  @DomName('SpeechRecognitionEvent.result')
   SpeechRecognitionResult get result native "SpeechRecognitionEvent_result_Getter";
 
-
-  /** @domName SpeechRecognitionEvent.resultHistory */
+  @DocsEditable
+  @DomName('SpeechRecognitionEvent.resultHistory')
   List<SpeechRecognitionResult> get resultHistory native "SpeechRecognitionEvent_resultHistory_Getter";
 
-
-  /** @domName SpeechRecognitionEvent.resultIndex */
+  @DocsEditable
+  @DomName('SpeechRecognitionEvent.resultIndex')
   int get resultIndex native "SpeechRecognitionEvent_resultIndex_Getter";
 
-
-  /** @domName SpeechRecognitionEvent.results */
+  @DocsEditable
+  @DomName('SpeechRecognitionEvent.results')
   List<SpeechRecognitionResult> get results native "SpeechRecognitionEvent_results_Getter";
 
 }
@@ -21630,20 +21582,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechRecognitionResult
+@DocsEditable
+@DomName('SpeechRecognitionResult')
 class SpeechRecognitionResult extends NativeFieldWrapperClass1 {
   SpeechRecognitionResult.internal();
 
-
-  /** @domName SpeechRecognitionResult.isFinal */
+  @DocsEditable
+  @DomName('SpeechRecognitionResult.isFinal')
   bool get isFinal native "SpeechRecognitionResult_isFinal_Getter";
 
-
-  /** @domName SpeechRecognitionResult.length */
+  @DocsEditable
+  @DomName('SpeechRecognitionResult.length')
   int get length native "SpeechRecognitionResult_length_Getter";
 
-
-  /** @domName SpeechRecognitionResult.item */
+  @DocsEditable
+  @DomName('SpeechRecognitionResult.item')
   SpeechRecognitionAlternative item(int index) native "SpeechRecognitionResult_item_Callback";
 
 }
@@ -21654,7 +21607,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SQLError
+@DocsEditable
+@DomName('SQLError')
 class SqlError extends NativeFieldWrapperClass1 {
   SqlError.internal();
 
@@ -21674,12 +21628,12 @@
 
   static const int VERSION_ERR = 2;
 
-
-  /** @domName SQLError.code */
+  @DocsEditable
+  @DomName('SQLError.code')
   int get code native "SQLError_code_Getter";
 
-
-  /** @domName SQLError.message */
+  @DocsEditable
+  @DomName('SQLError.message')
   String get message native "SQLError_message_Getter";
 
 }
@@ -21690,7 +21644,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SQLException
+@DocsEditable
+@DomName('SQLException')
 class SqlException extends NativeFieldWrapperClass1 {
   SqlException.internal();
 
@@ -21710,12 +21665,12 @@
 
   static const int VERSION_ERR = 2;
 
-
-  /** @domName SQLException.code */
+  @DocsEditable
+  @DomName('SQLException.code')
   int get code native "SQLException_code_Getter";
 
-
-  /** @domName SQLException.message */
+  @DocsEditable
+  @DomName('SQLException.message')
   String get message native "SQLException_message_Getter";
 
 }
@@ -21726,20 +21681,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SQLResultSet
+@DocsEditable
+@DomName('SQLResultSet')
 class SqlResultSet extends NativeFieldWrapperClass1 {
   SqlResultSet.internal();
 
-
-  /** @domName SQLResultSet.insertId */
+  @DocsEditable
+  @DomName('SQLResultSet.insertId')
   int get insertId native "SQLResultSet_insertId_Getter";
 
-
-  /** @domName SQLResultSet.rows */
+  @DocsEditable
+  @DomName('SQLResultSet.rows')
   SqlResultSetRowList get rows native "SQLResultSet_rows_Getter";
 
-
-  /** @domName SQLResultSet.rowsAffected */
+  @DocsEditable
+  @DomName('SQLResultSet.rowsAffected')
   int get rowsAffected native "SQLResultSet_rowsAffected_Getter";
 
 }
@@ -21750,12 +21706,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SQLResultSetRowList
+@DocsEditable
+@DomName('SQLResultSetRowList')
 class SqlResultSetRowList extends NativeFieldWrapperClass1 implements List<Map> {
   SqlResultSetRowList.internal();
 
-
-  /** @domName SQLResultSetRowList.length */
+  @DocsEditable
+  @DomName('SQLResultSetRowList.length')
   int get length native "SQLResultSetRowList_length_Getter";
 
   Map operator[](int index) native "SQLResultSetRowList_item_Callback";
@@ -21776,50 +21733,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Map)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Map element) => Collections.contains(this, element);
+  bool contains(Map element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Map element)) => Collections.forEach(this, f);
+  void forEach(void f(Map element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Map element)) => new MappedList<Map, dynamic>(this, f);
+  List mappedBy(f(Map element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Map> where(bool f(Map element)) => new WhereIterable<Map>(this, f);
+  Iterable<Map> where(bool f(Map element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Map element)) => Collections.every(this, f);
+  bool every(bool f(Map element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Map element)) => Collections.any(this, f);
+  bool any(bool f(Map element)) => IterableMixinWorkaround.any(this, f);
 
   List<Map> toList() => new List<Map>.from(this);
   Set<Map> toSet() => new Set<Map>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Map> take(int n) => new ListView<Map>(this, 0, n);
+  List<Map> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Map> takeWhile(bool test(Map value)) {
-    return new TakeWhileIterable<Map>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Map> skip(int n) => new ListView<Map>(this, n, null);
+  List<Map> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Map> skipWhile(bool test(Map value)) {
-    return new SkipWhileIterable<Map>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Map firstMatching(bool test(Map value), { Map orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Map lastMatching(bool test(Map value), {Map orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Map singleMatching(bool test(Map value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Map elementAt(int index) {
@@ -21877,16 +21834,36 @@
     throw new StateError("More than one element");
   }
 
-  Map min([int compare(Map a, Map b)]) => Collections.min(this, compare);
+  Map min([int compare(Map a, Map b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Map max([int compare(Map a, Map b)]) => Collections.max(this, compare);
+  Map max([int compare(Map a, Map b)]) => IterableMixinWorkaround.max(this, compare);
 
   Map removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Map removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Map element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Map element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
@@ -21906,8 +21883,8 @@
 
   // -- end List<Map> mixins.
 
-
-  /** @domName SQLResultSetRowList.item */
+  @DocsEditable
+  @DomName('SQLResultSetRowList.item')
   Map item(int index) native "SQLResultSetRowList_item_Callback";
 
 }
@@ -21918,12 +21895,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SQLTransaction
+@DocsEditable
+@DomName('SQLTransaction')
 class SqlTransaction extends NativeFieldWrapperClass1 {
   SqlTransaction.internal();
 
-
-  /** @domName SQLTransaction.executeSql */
+  @DocsEditable
+  @DomName('SQLTransaction.executeSql')
   void executeSql(String sqlStatement, List arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) native "SQLTransaction_executeSql_Callback";
 
 }
@@ -21934,12 +21912,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SQLTransactionSync
+@DocsEditable
+@DomName('SQLTransactionSync')
 class SqlTransactionSync extends NativeFieldWrapperClass1 {
   SqlTransactionSync.internal();
 
-
-  /** @domName SQLTransactionSync.executeSql */
+  @DocsEditable
+  @DomName('SQLTransactionSync.executeSql')
   SqlResultSet executeSql(String sqlStatement, List arguments) native "SQLTransactionSync_executeSql_Callback";
 
 }
@@ -21948,7 +21927,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Storage
+@DocsEditable
+@DomName('Storage')
 class Storage extends NativeFieldWrapperClass1 implements Map<String, String>  {
 
   // TODO(nweiz): update this when maps support lazy iteration
@@ -21999,28 +21979,28 @@
   bool get isEmpty => $dom_key(0) == null;
   Storage.internal();
 
-
-  /** @domName Storage.length */
+  @DocsEditable
+  @DomName('Storage.length')
   int get $dom_length native "Storage_length_Getter";
 
-
-  /** @domName Storage.clear */
+  @DocsEditable
+  @DomName('Storage.clear')
   void $dom_clear() native "Storage_clear_Callback";
 
-
-  /** @domName Storage.getItem */
+  @DocsEditable
+  @DomName('Storage.getItem')
   String $dom_getItem(String key) native "Storage_getItem_Callback";
 
-
-  /** @domName Storage.key */
+  @DocsEditable
+  @DomName('Storage.key')
   String $dom_key(int index) native "Storage_key_Callback";
 
-
-  /** @domName Storage.removeItem */
+  @DocsEditable
+  @DomName('Storage.removeItem')
   void $dom_removeItem(String key) native "Storage_removeItem_Callback";
 
-
-  /** @domName Storage.setItem */
+  @DocsEditable
+  @DomName('Storage.setItem')
   void $dom_setItem(String key, String data) native "Storage_setItem_Callback";
 
 }
@@ -22031,32 +22011,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName StorageEvent
+@DocsEditable
+@DomName('StorageEvent')
 class StorageEvent extends Event {
   StorageEvent.internal() : super.internal();
 
-
-  /** @domName StorageEvent.key */
+  @DocsEditable
+  @DomName('StorageEvent.key')
   String get key native "StorageEvent_key_Getter";
 
-
-  /** @domName StorageEvent.newValue */
+  @DocsEditable
+  @DomName('StorageEvent.newValue')
   String get newValue native "StorageEvent_newValue_Getter";
 
-
-  /** @domName StorageEvent.oldValue */
+  @DocsEditable
+  @DomName('StorageEvent.oldValue')
   String get oldValue native "StorageEvent_oldValue_Getter";
 
-
-  /** @domName StorageEvent.storageArea */
+  @DocsEditable
+  @DomName('StorageEvent.storageArea')
   Storage get storageArea native "StorageEvent_storageArea_Getter";
 
-
-  /** @domName StorageEvent.url */
+  @DocsEditable
+  @DomName('StorageEvent.url')
   String get url native "StorageEvent_url_Getter";
 
-
-  /** @domName StorageEvent.initStorageEvent */
+  @DocsEditable
+  @DomName('StorageEvent.initStorageEvent')
   void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) native "StorageEvent_initStorageEvent_Callback";
 
 }
@@ -22067,7 +22048,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName StorageInfo
+@DocsEditable
+@DomName('StorageInfo')
 class StorageInfo extends NativeFieldWrapperClass1 {
   StorageInfo.internal();
 
@@ -22075,12 +22057,12 @@
 
   static const int TEMPORARY = 0;
 
-
-  /** @domName StorageInfo.queryUsageAndQuota */
+  @DocsEditable
+  @DomName('StorageInfo.queryUsageAndQuota')
   void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]) native "StorageInfo_queryUsageAndQuota_Callback";
 
-
-  /** @domName StorageInfo.requestQuota */
+  @DocsEditable
+  @DomName('StorageInfo.requestQuota')
   void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]) native "StorageInfo_requestQuota_Callback";
 
 }
@@ -22123,47 +22105,48 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLStyleElement
+@DocsEditable
+@DomName('HTMLStyleElement')
 class StyleElement extends _Element_Merged {
   StyleElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory StyleElement() => document.$dom_createElement("style");
 
-
-  /** @domName HTMLStyleElement.disabled */
+  @DocsEditable
+  @DomName('HTMLStyleElement.disabled')
   bool get disabled native "HTMLStyleElement_disabled_Getter";
 
-
-  /** @domName HTMLStyleElement.disabled */
+  @DocsEditable
+  @DomName('HTMLStyleElement.disabled')
   void set disabled(bool value) native "HTMLStyleElement_disabled_Setter";
 
-
-  /** @domName HTMLStyleElement.media */
+  @DocsEditable
+  @DomName('HTMLStyleElement.media')
   String get media native "HTMLStyleElement_media_Getter";
 
-
-  /** @domName HTMLStyleElement.media */
+  @DocsEditable
+  @DomName('HTMLStyleElement.media')
   void set media(String value) native "HTMLStyleElement_media_Setter";
 
-
-  /** @domName HTMLStyleElement.scoped */
+  @DocsEditable
+  @DomName('HTMLStyleElement.scoped')
   bool get scoped native "HTMLStyleElement_scoped_Getter";
 
-
-  /** @domName HTMLStyleElement.scoped */
+  @DocsEditable
+  @DomName('HTMLStyleElement.scoped')
   void set scoped(bool value) native "HTMLStyleElement_scoped_Setter";
 
-
-  /** @domName HTMLStyleElement.sheet */
+  @DocsEditable
+  @DomName('HTMLStyleElement.sheet')
   StyleSheet get sheet native "HTMLStyleElement_sheet_Getter";
 
-
-  /** @domName HTMLStyleElement.type */
+  @DocsEditable
+  @DomName('HTMLStyleElement.type')
   String get type native "HTMLStyleElement_type_Getter";
 
-
-  /** @domName HTMLStyleElement.type */
+  @DocsEditable
+  @DomName('HTMLStyleElement.type')
   void set type(String value) native "HTMLStyleElement_type_Setter";
 
 }
@@ -22174,16 +22157,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName StyleMedia
+@DocsEditable
+@DomName('StyleMedia')
 class StyleMedia extends NativeFieldWrapperClass1 {
   StyleMedia.internal();
 
-
-  /** @domName StyleMedia.type */
+  @DocsEditable
+  @DomName('StyleMedia.type')
   String get type native "StyleMedia_type_Getter";
 
-
-  /** @domName StyleMedia.matchMedium */
+  @DocsEditable
+  @DomName('StyleMedia.matchMedium')
   bool matchMedium(String mediaquery) native "StyleMedia_matchMedium_Callback";
 
 }
@@ -22194,40 +22178,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName StyleSheet
+@DocsEditable
+@DomName('StyleSheet')
 class StyleSheet extends NativeFieldWrapperClass1 {
   StyleSheet.internal();
 
-
-  /** @domName StyleSheet.disabled */
+  @DocsEditable
+  @DomName('StyleSheet.disabled')
   bool get disabled native "StyleSheet_disabled_Getter";
 
-
-  /** @domName StyleSheet.disabled */
+  @DocsEditable
+  @DomName('StyleSheet.disabled')
   void set disabled(bool value) native "StyleSheet_disabled_Setter";
 
-
-  /** @domName StyleSheet.href */
+  @DocsEditable
+  @DomName('StyleSheet.href')
   String get href native "StyleSheet_href_Getter";
 
-
-  /** @domName StyleSheet.media */
+  @DocsEditable
+  @DomName('StyleSheet.media')
   MediaList get media native "StyleSheet_media_Getter";
 
-
-  /** @domName StyleSheet.ownerNode */
+  @DocsEditable
+  @DomName('StyleSheet.ownerNode')
   Node get ownerNode native "StyleSheet_ownerNode_Getter";
 
-
-  /** @domName StyleSheet.parentStyleSheet */
+  @DocsEditable
+  @DomName('StyleSheet.parentStyleSheet')
   StyleSheet get parentStyleSheet native "StyleSheet_parentStyleSheet_Getter";
 
-
-  /** @domName StyleSheet.title */
+  @DocsEditable
+  @DomName('StyleSheet.title')
   String get title native "StyleSheet_title_Getter";
 
-
-  /** @domName StyleSheet.type */
+  @DocsEditable
+  @DomName('StyleSheet.type')
   String get type native "StyleSheet_type_Getter";
 
 }
@@ -22238,11 +22223,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTableCaptionElement
+@DocsEditable
+@DomName('HTMLTableCaptionElement')
 class TableCaptionElement extends _Element_Merged {
   TableCaptionElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableCaptionElement() => document.$dom_createElement("caption");
 
 }
@@ -22253,39 +22239,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTableCellElement
+@DocsEditable
+@DomName('HTMLTableCellElement')
 class TableCellElement extends _Element_Merged {
   TableCellElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableCellElement() => document.$dom_createElement("td");
 
-
-  /** @domName HTMLTableCellElement.cellIndex */
+  @DocsEditable
+  @DomName('HTMLTableCellElement.cellIndex')
   int get cellIndex native "HTMLTableCellElement_cellIndex_Getter";
 
-
-  /** @domName HTMLTableCellElement.colSpan */
+  @DocsEditable
+  @DomName('HTMLTableCellElement.colSpan')
   int get colSpan native "HTMLTableCellElement_colSpan_Getter";
 
-
-  /** @domName HTMLTableCellElement.colSpan */
+  @DocsEditable
+  @DomName('HTMLTableCellElement.colSpan')
   void set colSpan(int value) native "HTMLTableCellElement_colSpan_Setter";
 
-
-  /** @domName HTMLTableCellElement.headers */
+  @DocsEditable
+  @DomName('HTMLTableCellElement.headers')
   String get headers native "HTMLTableCellElement_headers_Getter";
 
-
-  /** @domName HTMLTableCellElement.headers */
+  @DocsEditable
+  @DomName('HTMLTableCellElement.headers')
   void set headers(String value) native "HTMLTableCellElement_headers_Setter";
 
-
-  /** @domName HTMLTableCellElement.rowSpan */
+  @DocsEditable
+  @DomName('HTMLTableCellElement.rowSpan')
   int get rowSpan native "HTMLTableCellElement_rowSpan_Getter";
 
-
-  /** @domName HTMLTableCellElement.rowSpan */
+  @DocsEditable
+  @DomName('HTMLTableCellElement.rowSpan')
   void set rowSpan(int value) native "HTMLTableCellElement_rowSpan_Setter";
 
 }
@@ -22296,19 +22283,20 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTableColElement
+@DocsEditable
+@DomName('HTMLTableColElement')
 class TableColElement extends _Element_Merged {
   TableColElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableColElement() => document.$dom_createElement("col");
 
-
-  /** @domName HTMLTableColElement.span */
+  @DocsEditable
+  @DomName('HTMLTableColElement.span')
   int get span native "HTMLTableColElement_span_Getter";
 
-
-  /** @domName HTMLTableColElement.span */
+  @DocsEditable
+  @DomName('HTMLTableColElement.span')
   void set span(int value) native "HTMLTableColElement_span_Setter";
 
 }
@@ -22319,87 +22307,88 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTableElement
+@DocsEditable
+@DomName('HTMLTableElement')
 class TableElement extends _Element_Merged {
   TableElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableElement() => document.$dom_createElement("table");
 
-
-  /** @domName HTMLTableElement.border */
+  @DocsEditable
+  @DomName('HTMLTableElement.border')
   String get border native "HTMLTableElement_border_Getter";
 
-
-  /** @domName HTMLTableElement.border */
+  @DocsEditable
+  @DomName('HTMLTableElement.border')
   void set border(String value) native "HTMLTableElement_border_Setter";
 
-
-  /** @domName HTMLTableElement.caption */
+  @DocsEditable
+  @DomName('HTMLTableElement.caption')
   TableCaptionElement get caption native "HTMLTableElement_caption_Getter";
 
-
-  /** @domName HTMLTableElement.caption */
+  @DocsEditable
+  @DomName('HTMLTableElement.caption')
   void set caption(TableCaptionElement value) native "HTMLTableElement_caption_Setter";
 
-
-  /** @domName HTMLTableElement.rows */
+  @DocsEditable
+  @DomName('HTMLTableElement.rows')
   HtmlCollection get rows native "HTMLTableElement_rows_Getter";
 
-
-  /** @domName HTMLTableElement.tBodies */
+  @DocsEditable
+  @DomName('HTMLTableElement.tBodies')
   HtmlCollection get tBodies native "HTMLTableElement_tBodies_Getter";
 
-
-  /** @domName HTMLTableElement.tFoot */
+  @DocsEditable
+  @DomName('HTMLTableElement.tFoot')
   TableSectionElement get tFoot native "HTMLTableElement_tFoot_Getter";
 
-
-  /** @domName HTMLTableElement.tFoot */
+  @DocsEditable
+  @DomName('HTMLTableElement.tFoot')
   void set tFoot(TableSectionElement value) native "HTMLTableElement_tFoot_Setter";
 
-
-  /** @domName HTMLTableElement.tHead */
+  @DocsEditable
+  @DomName('HTMLTableElement.tHead')
   TableSectionElement get tHead native "HTMLTableElement_tHead_Getter";
 
-
-  /** @domName HTMLTableElement.tHead */
+  @DocsEditable
+  @DomName('HTMLTableElement.tHead')
   void set tHead(TableSectionElement value) native "HTMLTableElement_tHead_Setter";
 
-
-  /** @domName HTMLTableElement.createCaption */
+  @DocsEditable
+  @DomName('HTMLTableElement.createCaption')
   Element createCaption() native "HTMLTableElement_createCaption_Callback";
 
-
-  /** @domName HTMLTableElement.createTBody */
+  @DocsEditable
+  @DomName('HTMLTableElement.createTBody')
   Element createTBody() native "HTMLTableElement_createTBody_Callback";
 
-
-  /** @domName HTMLTableElement.createTFoot */
+  @DocsEditable
+  @DomName('HTMLTableElement.createTFoot')
   Element createTFoot() native "HTMLTableElement_createTFoot_Callback";
 
-
-  /** @domName HTMLTableElement.createTHead */
+  @DocsEditable
+  @DomName('HTMLTableElement.createTHead')
   Element createTHead() native "HTMLTableElement_createTHead_Callback";
 
-
-  /** @domName HTMLTableElement.deleteCaption */
+  @DocsEditable
+  @DomName('HTMLTableElement.deleteCaption')
   void deleteCaption() native "HTMLTableElement_deleteCaption_Callback";
 
-
-  /** @domName HTMLTableElement.deleteRow */
+  @DocsEditable
+  @DomName('HTMLTableElement.deleteRow')
   void deleteRow(int index) native "HTMLTableElement_deleteRow_Callback";
 
-
-  /** @domName HTMLTableElement.deleteTFoot */
+  @DocsEditable
+  @DomName('HTMLTableElement.deleteTFoot')
   void deleteTFoot() native "HTMLTableElement_deleteTFoot_Callback";
 
-
-  /** @domName HTMLTableElement.deleteTHead */
+  @DocsEditable
+  @DomName('HTMLTableElement.deleteTHead')
   void deleteTHead() native "HTMLTableElement_deleteTHead_Callback";
 
-
-  /** @domName HTMLTableElement.insertRow */
+  @DocsEditable
+  @DomName('HTMLTableElement.insertRow')
   Element insertRow(int index) native "HTMLTableElement_insertRow_Callback";
 
 }
@@ -22410,31 +22399,32 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTableRowElement
+@DocsEditable
+@DomName('HTMLTableRowElement')
 class TableRowElement extends _Element_Merged {
   TableRowElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TableRowElement() => document.$dom_createElement("tr");
 
-
-  /** @domName HTMLTableRowElement.cells */
+  @DocsEditable
+  @DomName('HTMLTableRowElement.cells')
   HtmlCollection get cells native "HTMLTableRowElement_cells_Getter";
 
-
-  /** @domName HTMLTableRowElement.rowIndex */
+  @DocsEditable
+  @DomName('HTMLTableRowElement.rowIndex')
   int get rowIndex native "HTMLTableRowElement_rowIndex_Getter";
 
-
-  /** @domName HTMLTableRowElement.sectionRowIndex */
+  @DocsEditable
+  @DomName('HTMLTableRowElement.sectionRowIndex')
   int get sectionRowIndex native "HTMLTableRowElement_sectionRowIndex_Getter";
 
-
-  /** @domName HTMLTableRowElement.deleteCell */
+  @DocsEditable
+  @DomName('HTMLTableRowElement.deleteCell')
   void deleteCell(int index) native "HTMLTableRowElement_deleteCell_Callback";
 
-
-  /** @domName HTMLTableRowElement.insertCell */
+  @DocsEditable
+  @DomName('HTMLTableRowElement.insertCell')
   Element insertCell(int index) native "HTMLTableRowElement_insertCell_Callback";
 
 }
@@ -22445,28 +22435,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTableSectionElement
+@DocsEditable
+@DomName('HTMLTableSectionElement')
 class TableSectionElement extends _Element_Merged {
   TableSectionElement.internal() : super.internal();
 
-
-  /** @domName HTMLTableSectionElement.chOff */
-  String get chOff native "HTMLTableSectionElement_chOff_Getter";
-
-
-  /** @domName HTMLTableSectionElement.chOff */
-  void set chOff(String value) native "HTMLTableSectionElement_chOff_Setter";
-
-
-  /** @domName HTMLTableSectionElement.rows */
+  @DocsEditable
+  @DomName('HTMLTableSectionElement.rows')
   HtmlCollection get rows native "HTMLTableSectionElement_rows_Getter";
 
-
-  /** @domName HTMLTableSectionElement.deleteRow */
+  @DocsEditable
+  @DomName('HTMLTableSectionElement.deleteRow')
   void deleteRow(int index) native "HTMLTableSectionElement_deleteRow_Callback";
 
-
-  /** @domName HTMLTableSectionElement.insertRow */
+  @DocsEditable
+  @DomName('HTMLTableSectionElement.insertRow')
   Element insertRow(int index) native "HTMLTableSectionElement_insertRow_Callback";
 
 }
@@ -22477,21 +22460,22 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Text
+@DocsEditable
+@DomName('Text')
 class Text extends CharacterData {
   factory Text(String data) => _TextFactoryProvider.createText(data);
   Text.internal() : super.internal();
 
-
-  /** @domName Text.wholeText */
+  @DocsEditable
+  @DomName('Text.wholeText')
   String get wholeText native "Text_wholeText_Getter";
 
-
-  /** @domName Text.replaceWholeText */
+  @DocsEditable
+  @DomName('Text.replaceWholeText')
   Text replaceWholeText(String content) native "Text_replaceWholeText_Callback";
 
-
-  /** @domName Text.splitText */
+  @DocsEditable
+  @DomName('Text.splitText')
   Text splitText(int offset) native "Text_splitText_Callback";
 
 }
@@ -22502,182 +22486,183 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTextAreaElement
+@DocsEditable
+@DomName('HTMLTextAreaElement')
 class TextAreaElement extends _Element_Merged {
   TextAreaElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TextAreaElement() => document.$dom_createElement("textarea");
 
-
-  /** @domName HTMLTextAreaElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.autofocus')
   bool get autofocus native "HTMLTextAreaElement_autofocus_Getter";
 
-
-  /** @domName HTMLTextAreaElement.autofocus */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.autofocus')
   void set autofocus(bool value) native "HTMLTextAreaElement_autofocus_Setter";
 
-
-  /** @domName HTMLTextAreaElement.cols */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.cols')
   int get cols native "HTMLTextAreaElement_cols_Getter";
 
-
-  /** @domName HTMLTextAreaElement.cols */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.cols')
   void set cols(int value) native "HTMLTextAreaElement_cols_Setter";
 
-
-  /** @domName HTMLTextAreaElement.defaultValue */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.defaultValue')
   String get defaultValue native "HTMLTextAreaElement_defaultValue_Getter";
 
-
-  /** @domName HTMLTextAreaElement.defaultValue */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.defaultValue')
   void set defaultValue(String value) native "HTMLTextAreaElement_defaultValue_Setter";
 
-
-  /** @domName HTMLTextAreaElement.dirName */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.dirName')
   String get dirName native "HTMLTextAreaElement_dirName_Getter";
 
-
-  /** @domName HTMLTextAreaElement.dirName */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.dirName')
   void set dirName(String value) native "HTMLTextAreaElement_dirName_Setter";
 
-
-  /** @domName HTMLTextAreaElement.disabled */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.disabled')
   bool get disabled native "HTMLTextAreaElement_disabled_Getter";
 
-
-  /** @domName HTMLTextAreaElement.disabled */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.disabled')
   void set disabled(bool value) native "HTMLTextAreaElement_disabled_Setter";
 
-
-  /** @domName HTMLTextAreaElement.form */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.form')
   FormElement get form native "HTMLTextAreaElement_form_Getter";
 
-
-  /** @domName HTMLTextAreaElement.labels */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.labels')
   List<Node> get labels native "HTMLTextAreaElement_labels_Getter";
 
-
-  /** @domName HTMLTextAreaElement.maxLength */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.maxLength')
   int get maxLength native "HTMLTextAreaElement_maxLength_Getter";
 
-
-  /** @domName HTMLTextAreaElement.maxLength */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.maxLength')
   void set maxLength(int value) native "HTMLTextAreaElement_maxLength_Setter";
 
-
-  /** @domName HTMLTextAreaElement.name */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.name')
   String get name native "HTMLTextAreaElement_name_Getter";
 
-
-  /** @domName HTMLTextAreaElement.name */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.name')
   void set name(String value) native "HTMLTextAreaElement_name_Setter";
 
-
-  /** @domName HTMLTextAreaElement.placeholder */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.placeholder')
   String get placeholder native "HTMLTextAreaElement_placeholder_Getter";
 
-
-  /** @domName HTMLTextAreaElement.placeholder */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.placeholder')
   void set placeholder(String value) native "HTMLTextAreaElement_placeholder_Setter";
 
-
-  /** @domName HTMLTextAreaElement.readOnly */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.readOnly')
   bool get readOnly native "HTMLTextAreaElement_readOnly_Getter";
 
-
-  /** @domName HTMLTextAreaElement.readOnly */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.readOnly')
   void set readOnly(bool value) native "HTMLTextAreaElement_readOnly_Setter";
 
-
-  /** @domName HTMLTextAreaElement.required */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.required')
   bool get required native "HTMLTextAreaElement_required_Getter";
 
-
-  /** @domName HTMLTextAreaElement.required */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.required')
   void set required(bool value) native "HTMLTextAreaElement_required_Setter";
 
-
-  /** @domName HTMLTextAreaElement.rows */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.rows')
   int get rows native "HTMLTextAreaElement_rows_Getter";
 
-
-  /** @domName HTMLTextAreaElement.rows */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.rows')
   void set rows(int value) native "HTMLTextAreaElement_rows_Setter";
 
-
-  /** @domName HTMLTextAreaElement.selectionDirection */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.selectionDirection')
   String get selectionDirection native "HTMLTextAreaElement_selectionDirection_Getter";
 
-
-  /** @domName HTMLTextAreaElement.selectionDirection */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.selectionDirection')
   void set selectionDirection(String value) native "HTMLTextAreaElement_selectionDirection_Setter";
 
-
-  /** @domName HTMLTextAreaElement.selectionEnd */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.selectionEnd')
   int get selectionEnd native "HTMLTextAreaElement_selectionEnd_Getter";
 
-
-  /** @domName HTMLTextAreaElement.selectionEnd */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.selectionEnd')
   void set selectionEnd(int value) native "HTMLTextAreaElement_selectionEnd_Setter";
 
-
-  /** @domName HTMLTextAreaElement.selectionStart */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.selectionStart')
   int get selectionStart native "HTMLTextAreaElement_selectionStart_Getter";
 
-
-  /** @domName HTMLTextAreaElement.selectionStart */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.selectionStart')
   void set selectionStart(int value) native "HTMLTextAreaElement_selectionStart_Setter";
 
-
-  /** @domName HTMLTextAreaElement.textLength */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.textLength')
   int get textLength native "HTMLTextAreaElement_textLength_Getter";
 
-
-  /** @domName HTMLTextAreaElement.type */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.type')
   String get type native "HTMLTextAreaElement_type_Getter";
 
-
-  /** @domName HTMLTextAreaElement.validationMessage */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.validationMessage')
   String get validationMessage native "HTMLTextAreaElement_validationMessage_Getter";
 
-
-  /** @domName HTMLTextAreaElement.validity */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.validity')
   ValidityState get validity native "HTMLTextAreaElement_validity_Getter";
 
-
-  /** @domName HTMLTextAreaElement.value */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.value')
   String get value native "HTMLTextAreaElement_value_Getter";
 
-
-  /** @domName HTMLTextAreaElement.value */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.value')
   void set value(String value) native "HTMLTextAreaElement_value_Setter";
 
-
-  /** @domName HTMLTextAreaElement.willValidate */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.willValidate')
   bool get willValidate native "HTMLTextAreaElement_willValidate_Getter";
 
-
-  /** @domName HTMLTextAreaElement.wrap */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.wrap')
   String get wrap native "HTMLTextAreaElement_wrap_Getter";
 
-
-  /** @domName HTMLTextAreaElement.wrap */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.wrap')
   void set wrap(String value) native "HTMLTextAreaElement_wrap_Setter";
 
-
-  /** @domName HTMLTextAreaElement.checkValidity */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.checkValidity')
   bool checkValidity() native "HTMLTextAreaElement_checkValidity_Callback";
 
-
-  /** @domName HTMLTextAreaElement.select */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.select')
   void select() native "HTMLTextAreaElement_select_Callback";
 
-
-  /** @domName HTMLTextAreaElement.setCustomValidity */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.setCustomValidity')
   void setCustomValidity(String error) native "HTMLTextAreaElement_setCustomValidity_Callback";
 
-  void setRangeText(/*DOMString*/ replacement, [/*unsigned long*/ start, /*unsigned long*/ end, /*DOMString*/ selectionMode]) {
+  void setRangeText(String replacement, [int start, int end, String selectionMode]) {
     if ((replacement is String || replacement == null) && !?start && !?end && !?selectionMode) {
       _setRangeText_1(replacement);
       return;
@@ -22689,15 +22674,15 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName HTMLTextAreaElement.setRangeText_1 */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.setRangeText_1')
   void _setRangeText_1(replacement) native "HTMLTextAreaElement_setRangeText_1_Callback";
 
-
-  /** @domName HTMLTextAreaElement.setRangeText_2 */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.setRangeText_2')
   void _setRangeText_2(replacement, start, end, selectionMode) native "HTMLTextAreaElement_setRangeText_2_Callback";
 
-  void setSelectionRange(/*long*/ start, /*long*/ end, [/*DOMString*/ direction]) {
+  void setSelectionRange(int start, int end, [String direction]) {
     if (?direction) {
       _setSelectionRange_1(start, end, direction);
       return;
@@ -22705,12 +22690,12 @@
     _setSelectionRange_2(start, end);
   }
 
-
-  /** @domName HTMLTextAreaElement.setSelectionRange_1 */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.setSelectionRange_1')
   void _setSelectionRange_1(start, end, direction) native "HTMLTextAreaElement_setSelectionRange_1_Callback";
 
-
-  /** @domName HTMLTextAreaElement.setSelectionRange_2 */
+  @DocsEditable
+  @DomName('HTMLTextAreaElement.setSelectionRange_2')
   void _setSelectionRange_2(start, end) native "HTMLTextAreaElement_setSelectionRange_2_Callback";
 
 }
@@ -22721,16 +22706,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TextEvent
+@DocsEditable
+@DomName('TextEvent')
 class TextEvent extends UIEvent {
   TextEvent.internal() : super.internal();
 
-
-  /** @domName TextEvent.data */
+  @DocsEditable
+  @DomName('TextEvent.data')
   String get data native "TextEvent_data_Getter";
 
-
-  /** @domName TextEvent.initTextEvent */
+  @DocsEditable
+  @DomName('TextEvent.initTextEvent')
   void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) native "TextEvent_initTextEvent_Callback";
 
 }
@@ -22741,12 +22727,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TextMetrics
+@DocsEditable
+@DomName('TextMetrics')
 class TextMetrics extends NativeFieldWrapperClass1 {
   TextMetrics.internal();
 
-
-  /** @domName TextMetrics.width */
+  @DocsEditable
+  @DomName('TextMetrics.width')
   num get width native "TextMetrics_width_Getter";
 
 }
@@ -22757,74 +22744,76 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TextTrack
+@DocsEditable
+@DomName('TextTrack')
 class TextTrack extends EventTarget {
   TextTrack.internal() : super.internal();
 
   static const EventStreamProvider<Event> cueChangeEvent = const EventStreamProvider<Event>('cuechange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TextTrackEvents get on =>
     new TextTrackEvents(this);
 
-
-  /** @domName TextTrack.activeCues */
+  @DocsEditable
+  @DomName('TextTrack.activeCues')
   TextTrackCueList get activeCues native "TextTrack_activeCues_Getter";
 
-
-  /** @domName TextTrack.cues */
+  @DocsEditable
+  @DomName('TextTrack.cues')
   TextTrackCueList get cues native "TextTrack_cues_Getter";
 
-
-  /** @domName TextTrack.kind */
+  @DocsEditable
+  @DomName('TextTrack.kind')
   String get kind native "TextTrack_kind_Getter";
 
-
-  /** @domName TextTrack.label */
+  @DocsEditable
+  @DomName('TextTrack.label')
   String get label native "TextTrack_label_Getter";
 
-
-  /** @domName TextTrack.language */
+  @DocsEditable
+  @DomName('TextTrack.language')
   String get language native "TextTrack_language_Getter";
 
-
-  /** @domName TextTrack.mode */
+  @DocsEditable
+  @DomName('TextTrack.mode')
   String get mode native "TextTrack_mode_Getter";
 
-
-  /** @domName TextTrack.mode */
+  @DocsEditable
+  @DomName('TextTrack.mode')
   void set mode(String value) native "TextTrack_mode_Setter";
 
-
-  /** @domName TextTrack.addCue */
+  @DocsEditable
+  @DomName('TextTrack.addCue')
   void addCue(TextTrackCue cue) native "TextTrack_addCue_Callback";
 
-
-  /** @domName TextTrack.addEventListener */
+  @DocsEditable
+  @DomName('TextTrack.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrack_addEventListener_Callback";
 
-
-  /** @domName TextTrack.dispatchEvent */
+  @DocsEditable
+  @DomName('TextTrack.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "TextTrack_dispatchEvent_Callback";
 
-
-  /** @domName TextTrack.removeCue */
+  @DocsEditable
+  @DomName('TextTrack.removeCue')
   void removeCue(TextTrackCue cue) native "TextTrack_removeCue_Callback";
 
-
-  /** @domName TextTrack.removeEventListener */
+  @DocsEditable
+  @DomName('TextTrack.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrack_removeEventListener_Callback";
 
   Stream<Event> get onCueChange => cueChangeEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class TextTrackEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TextTrackEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cueChange => this['cuechange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22834,7 +22823,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TextTrackCue
+@DocsEditable
+@DomName('TextTrackCue')
 class TextTrackCue extends EventTarget {
   TextTrackCue.internal() : super.internal();
 
@@ -22842,120 +22832,121 @@
 
   static const EventStreamProvider<Event> exitEvent = const EventStreamProvider<Event>('exit');
 
-  ///@docsEditable true
+  @DocsEditable
   factory TextTrackCue(num startTime, num endTime, String text) => TextTrackCue._create(startTime, endTime, text);
   static TextTrackCue _create(num startTime, num endTime, String text) native "TextTrackCue_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TextTrackCueEvents get on =>
     new TextTrackCueEvents(this);
 
-
-  /** @domName TextTrackCue.align */
+  @DocsEditable
+  @DomName('TextTrackCue.align')
   String get align native "TextTrackCue_align_Getter";
 
-
-  /** @domName TextTrackCue.align */
+  @DocsEditable
+  @DomName('TextTrackCue.align')
   void set align(String value) native "TextTrackCue_align_Setter";
 
-
-  /** @domName TextTrackCue.endTime */
+  @DocsEditable
+  @DomName('TextTrackCue.endTime')
   num get endTime native "TextTrackCue_endTime_Getter";
 
-
-  /** @domName TextTrackCue.endTime */
+  @DocsEditable
+  @DomName('TextTrackCue.endTime')
   void set endTime(num value) native "TextTrackCue_endTime_Setter";
 
-
-  /** @domName TextTrackCue.id */
+  @DocsEditable
+  @DomName('TextTrackCue.id')
   String get id native "TextTrackCue_id_Getter";
 
-
-  /** @domName TextTrackCue.id */
+  @DocsEditable
+  @DomName('TextTrackCue.id')
   void set id(String value) native "TextTrackCue_id_Setter";
 
-
-  /** @domName TextTrackCue.line */
+  @DocsEditable
+  @DomName('TextTrackCue.line')
   int get line native "TextTrackCue_line_Getter";
 
-
-  /** @domName TextTrackCue.line */
+  @DocsEditable
+  @DomName('TextTrackCue.line')
   void set line(int value) native "TextTrackCue_line_Setter";
 
-
-  /** @domName TextTrackCue.pauseOnExit */
+  @DocsEditable
+  @DomName('TextTrackCue.pauseOnExit')
   bool get pauseOnExit native "TextTrackCue_pauseOnExit_Getter";
 
-
-  /** @domName TextTrackCue.pauseOnExit */
+  @DocsEditable
+  @DomName('TextTrackCue.pauseOnExit')
   void set pauseOnExit(bool value) native "TextTrackCue_pauseOnExit_Setter";
 
-
-  /** @domName TextTrackCue.position */
+  @DocsEditable
+  @DomName('TextTrackCue.position')
   int get position native "TextTrackCue_position_Getter";
 
-
-  /** @domName TextTrackCue.position */
+  @DocsEditable
+  @DomName('TextTrackCue.position')
   void set position(int value) native "TextTrackCue_position_Setter";
 
-
-  /** @domName TextTrackCue.size */
+  @DocsEditable
+  @DomName('TextTrackCue.size')
   int get size native "TextTrackCue_size_Getter";
 
-
-  /** @domName TextTrackCue.size */
+  @DocsEditable
+  @DomName('TextTrackCue.size')
   void set size(int value) native "TextTrackCue_size_Setter";
 
-
-  /** @domName TextTrackCue.snapToLines */
+  @DocsEditable
+  @DomName('TextTrackCue.snapToLines')
   bool get snapToLines native "TextTrackCue_snapToLines_Getter";
 
-
-  /** @domName TextTrackCue.snapToLines */
+  @DocsEditable
+  @DomName('TextTrackCue.snapToLines')
   void set snapToLines(bool value) native "TextTrackCue_snapToLines_Setter";
 
-
-  /** @domName TextTrackCue.startTime */
+  @DocsEditable
+  @DomName('TextTrackCue.startTime')
   num get startTime native "TextTrackCue_startTime_Getter";
 
-
-  /** @domName TextTrackCue.startTime */
+  @DocsEditable
+  @DomName('TextTrackCue.startTime')
   void set startTime(num value) native "TextTrackCue_startTime_Setter";
 
-
-  /** @domName TextTrackCue.text */
+  @DocsEditable
+  @DomName('TextTrackCue.text')
   String get text native "TextTrackCue_text_Getter";
 
-
-  /** @domName TextTrackCue.text */
+  @DocsEditable
+  @DomName('TextTrackCue.text')
   void set text(String value) native "TextTrackCue_text_Setter";
 
-
-  /** @domName TextTrackCue.track */
+  @DocsEditable
+  @DomName('TextTrackCue.track')
   TextTrack get track native "TextTrackCue_track_Getter";
 
-
-  /** @domName TextTrackCue.vertical */
+  @DocsEditable
+  @DomName('TextTrackCue.vertical')
   String get vertical native "TextTrackCue_vertical_Getter";
 
-
-  /** @domName TextTrackCue.vertical */
+  @DocsEditable
+  @DomName('TextTrackCue.vertical')
   void set vertical(String value) native "TextTrackCue_vertical_Setter";
 
-
-  /** @domName TextTrackCue.addEventListener */
+  @DocsEditable
+  @DomName('TextTrackCue.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackCue_addEventListener_Callback";
 
-
-  /** @domName TextTrackCue.dispatchEvent */
+  @DocsEditable
+  @DomName('TextTrackCue.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "TextTrackCue_dispatchEvent_Callback";
 
-
-  /** @domName TextTrackCue.getCueAsHTML */
+  @DocsEditable
+  @DomName('TextTrackCue.getCueAsHTML')
   DocumentFragment getCueAsHtml() native "TextTrackCue_getCueAsHTML_Callback";
 
-
-  /** @domName TextTrackCue.removeEventListener */
+  @DocsEditable
+  @DomName('TextTrackCue.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackCue_removeEventListener_Callback";
 
   Stream<Event> get onEnter => enterEvent.forTarget(this);
@@ -22964,15 +22955,15 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class TextTrackCueEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TextTrackCueEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get enter => this['enter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get exit => this['exit'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22982,12 +22973,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TextTrackCueList
+@DocsEditable
+@DomName('TextTrackCueList')
 class TextTrackCueList extends NativeFieldWrapperClass1 implements List<TextTrackCue> {
   TextTrackCueList.internal();
 
-
-  /** @domName TextTrackCueList.length */
+  @DocsEditable
+  @DomName('TextTrackCueList.length')
   int get length native "TextTrackCueList_length_Getter";
 
   TextTrackCue operator[](int index) native "TextTrackCueList_item_Callback";
@@ -23008,50 +23000,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, TextTrackCue)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(TextTrackCue element) => Collections.contains(this, element);
+  bool contains(TextTrackCue element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(TextTrackCue element)) => Collections.forEach(this, f);
+  void forEach(void f(TextTrackCue element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(TextTrackCue element)) => new MappedList<TextTrackCue, dynamic>(this, f);
+  List mappedBy(f(TextTrackCue element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<TextTrackCue> where(bool f(TextTrackCue element)) => new WhereIterable<TextTrackCue>(this, f);
+  Iterable<TextTrackCue> where(bool f(TextTrackCue element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(TextTrackCue element)) => Collections.every(this, f);
+  bool every(bool f(TextTrackCue element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(TextTrackCue element)) => Collections.any(this, f);
+  bool any(bool f(TextTrackCue element)) => IterableMixinWorkaround.any(this, f);
 
   List<TextTrackCue> toList() => new List<TextTrackCue>.from(this);
   Set<TextTrackCue> toSet() => new Set<TextTrackCue>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<TextTrackCue> take(int n) => new ListView<TextTrackCue>(this, 0, n);
+  List<TextTrackCue> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<TextTrackCue> takeWhile(bool test(TextTrackCue value)) {
-    return new TakeWhileIterable<TextTrackCue>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<TextTrackCue> skip(int n) => new ListView<TextTrackCue>(this, n, null);
+  List<TextTrackCue> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<TextTrackCue> skipWhile(bool test(TextTrackCue value)) {
-    return new SkipWhileIterable<TextTrackCue>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   TextTrackCue firstMatching(bool test(TextTrackCue value), { TextTrackCue orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   TextTrackCue lastMatching(bool test(TextTrackCue value), {TextTrackCue orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   TextTrackCue singleMatching(bool test(TextTrackCue value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   TextTrackCue elementAt(int index) {
@@ -23109,16 +23101,36 @@
     throw new StateError("More than one element");
   }
 
-  TextTrackCue min([int compare(TextTrackCue a, TextTrackCue b)]) => Collections.min(this, compare);
+  TextTrackCue min([int compare(TextTrackCue a, TextTrackCue b)]) => IterableMixinWorkaround.min(this, compare);
 
-  TextTrackCue max([int compare(TextTrackCue a, TextTrackCue b)]) => Collections.max(this, compare);
+  TextTrackCue max([int compare(TextTrackCue a, TextTrackCue b)]) => IterableMixinWorkaround.max(this, compare);
 
   TextTrackCue removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   TextTrackCue removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(TextTrackCue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(TextTrackCue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
@@ -23138,12 +23150,12 @@
 
   // -- end List<TextTrackCue> mixins.
 
-
-  /** @domName TextTrackCueList.getCueById */
+  @DocsEditable
+  @DomName('TextTrackCueList.getCueById')
   TextTrackCue getCueById(String id) native "TextTrackCueList_getCueById_Callback";
 
-
-  /** @domName TextTrackCueList.item */
+  @DocsEditable
+  @DomName('TextTrackCueList.item')
   TextTrackCue item(int index) native "TextTrackCueList_item_Callback";
 
 }
@@ -23154,18 +23166,20 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TextTrackList
+@DocsEditable
+@DomName('TextTrackList')
 class TextTrackList extends EventTarget implements List<TextTrack> {
   TextTrackList.internal() : super.internal();
 
   static const EventStreamProvider<TrackEvent> addTrackEvent = const EventStreamProvider<TrackEvent>('addtrack');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TextTrackListEvents get on =>
     new TextTrackListEvents(this);
 
-
-  /** @domName TextTrackList.length */
+  @DocsEditable
+  @DomName('TextTrackList.length')
   int get length native "TextTrackList_length_Getter";
 
   TextTrack operator[](int index) native "TextTrackList_item_Callback";
@@ -23186,50 +23200,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, TextTrack)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(TextTrack element) => Collections.contains(this, element);
+  bool contains(TextTrack element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(TextTrack element)) => Collections.forEach(this, f);
+  void forEach(void f(TextTrack element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(TextTrack element)) => new MappedList<TextTrack, dynamic>(this, f);
+  List mappedBy(f(TextTrack element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<TextTrack> where(bool f(TextTrack element)) => new WhereIterable<TextTrack>(this, f);
+  Iterable<TextTrack> where(bool f(TextTrack element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(TextTrack element)) => Collections.every(this, f);
+  bool every(bool f(TextTrack element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(TextTrack element)) => Collections.any(this, f);
+  bool any(bool f(TextTrack element)) => IterableMixinWorkaround.any(this, f);
 
   List<TextTrack> toList() => new List<TextTrack>.from(this);
   Set<TextTrack> toSet() => new Set<TextTrack>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<TextTrack> take(int n) => new ListView<TextTrack>(this, 0, n);
+  List<TextTrack> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<TextTrack> takeWhile(bool test(TextTrack value)) {
-    return new TakeWhileIterable<TextTrack>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<TextTrack> skip(int n) => new ListView<TextTrack>(this, n, null);
+  List<TextTrack> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<TextTrack> skipWhile(bool test(TextTrack value)) {
-    return new SkipWhileIterable<TextTrack>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   TextTrack firstMatching(bool test(TextTrack value), { TextTrack orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   TextTrack lastMatching(bool test(TextTrack value), {TextTrack orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   TextTrack singleMatching(bool test(TextTrack value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   TextTrack elementAt(int index) {
@@ -23287,16 +23301,36 @@
     throw new StateError("More than one element");
   }
 
-  TextTrack min([int compare(TextTrack a, TextTrack b)]) => Collections.min(this, compare);
+  TextTrack min([int compare(TextTrack a, TextTrack b)]) => IterableMixinWorkaround.min(this, compare);
 
-  TextTrack max([int compare(TextTrack a, TextTrack b)]) => Collections.max(this, compare);
+  TextTrack max([int compare(TextTrack a, TextTrack b)]) => IterableMixinWorkaround.max(this, compare);
 
   TextTrack removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   TextTrack removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(TextTrack element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(TextTrack element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
@@ -23316,32 +23350,32 @@
 
   // -- end List<TextTrack> mixins.
 
-
-  /** @domName TextTrackList.addEventListener */
+  @DocsEditable
+  @DomName('TextTrackList.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackList_addEventListener_Callback";
 
-
-  /** @domName TextTrackList.dispatchEvent */
+  @DocsEditable
+  @DomName('TextTrackList.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "TextTrackList_dispatchEvent_Callback";
 
-
-  /** @domName TextTrackList.item */
+  @DocsEditable
+  @DomName('TextTrackList.item')
   TextTrack item(int index) native "TextTrackList_item_Callback";
 
-
-  /** @domName TextTrackList.removeEventListener */
+  @DocsEditable
+  @DomName('TextTrackList.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackList_removeEventListener_Callback";
 
   Stream<TrackEvent> get onAddTrack => addTrackEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class TextTrackListEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TextTrackListEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get addTrack => this['addtrack'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23351,20 +23385,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TimeRanges
+@DocsEditable
+@DomName('TimeRanges')
 class TimeRanges extends NativeFieldWrapperClass1 {
   TimeRanges.internal();
 
-
-  /** @domName TimeRanges.length */
+  @DocsEditable
+  @DomName('TimeRanges.length')
   int get length native "TimeRanges_length_Getter";
 
-
-  /** @domName TimeRanges.end */
+  @DocsEditable
+  @DomName('TimeRanges.end')
   num end(int index) native "TimeRanges_end_Callback";
 
-
-  /** @domName TimeRanges.start */
+  @DocsEditable
+  @DomName('TimeRanges.start')
   num start(int index) native "TimeRanges_start_Callback";
 
 }
@@ -23383,11 +23418,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTitleElement
+@DocsEditable
+@DomName('HTMLTitleElement')
 class TitleElement extends _Element_Merged {
   TitleElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TitleElement() => document.$dom_createElement("title");
 
 }
@@ -23398,56 +23434,57 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Touch
+@DocsEditable
+@DomName('Touch')
 class Touch extends NativeFieldWrapperClass1 {
   Touch.internal();
 
-
-  /** @domName Touch.clientX */
+  @DocsEditable
+  @DomName('Touch.clientX')
   int get clientX native "Touch_clientX_Getter";
 
-
-  /** @domName Touch.clientY */
+  @DocsEditable
+  @DomName('Touch.clientY')
   int get clientY native "Touch_clientY_Getter";
 
-
-  /** @domName Touch.identifier */
+  @DocsEditable
+  @DomName('Touch.identifier')
   int get identifier native "Touch_identifier_Getter";
 
-
-  /** @domName Touch.pageX */
+  @DocsEditable
+  @DomName('Touch.pageX')
   int get pageX native "Touch_pageX_Getter";
 
-
-  /** @domName Touch.pageY */
+  @DocsEditable
+  @DomName('Touch.pageY')
   int get pageY native "Touch_pageY_Getter";
 
-
-  /** @domName Touch.screenX */
+  @DocsEditable
+  @DomName('Touch.screenX')
   int get screenX native "Touch_screenX_Getter";
 
-
-  /** @domName Touch.screenY */
+  @DocsEditable
+  @DomName('Touch.screenY')
   int get screenY native "Touch_screenY_Getter";
 
-
-  /** @domName Touch.target */
+  @DocsEditable
+  @DomName('Touch.target')
   EventTarget get target native "Touch_target_Getter";
 
-
-  /** @domName Touch.webkitForce */
+  @DocsEditable
+  @DomName('Touch.webkitForce')
   num get webkitForce native "Touch_webkitForce_Getter";
 
-
-  /** @domName Touch.webkitRadiusX */
+  @DocsEditable
+  @DomName('Touch.webkitRadiusX')
   int get webkitRadiusX native "Touch_webkitRadiusX_Getter";
 
-
-  /** @domName Touch.webkitRadiusY */
+  @DocsEditable
+  @DomName('Touch.webkitRadiusY')
   int get webkitRadiusY native "Touch_webkitRadiusY_Getter";
 
-
-  /** @domName Touch.webkitRotationAngle */
+  @DocsEditable
+  @DomName('Touch.webkitRotationAngle')
   num get webkitRotationAngle native "Touch_webkitRotationAngle_Getter";
 
 }
@@ -23458,40 +23495,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TouchEvent
+@DocsEditable
+@DomName('TouchEvent')
 class TouchEvent extends UIEvent {
   TouchEvent.internal() : super.internal();
 
-
-  /** @domName TouchEvent.altKey */
+  @DocsEditable
+  @DomName('TouchEvent.altKey')
   bool get altKey native "TouchEvent_altKey_Getter";
 
-
-  /** @domName TouchEvent.changedTouches */
+  @DocsEditable
+  @DomName('TouchEvent.changedTouches')
   TouchList get changedTouches native "TouchEvent_changedTouches_Getter";
 
-
-  /** @domName TouchEvent.ctrlKey */
+  @DocsEditable
+  @DomName('TouchEvent.ctrlKey')
   bool get ctrlKey native "TouchEvent_ctrlKey_Getter";
 
-
-  /** @domName TouchEvent.metaKey */
+  @DocsEditable
+  @DomName('TouchEvent.metaKey')
   bool get metaKey native "TouchEvent_metaKey_Getter";
 
-
-  /** @domName TouchEvent.shiftKey */
+  @DocsEditable
+  @DomName('TouchEvent.shiftKey')
   bool get shiftKey native "TouchEvent_shiftKey_Getter";
 
-
-  /** @domName TouchEvent.targetTouches */
+  @DocsEditable
+  @DomName('TouchEvent.targetTouches')
   TouchList get targetTouches native "TouchEvent_targetTouches_Getter";
 
-
-  /** @domName TouchEvent.touches */
+  @DocsEditable
+  @DomName('TouchEvent.touches')
   TouchList get touches native "TouchEvent_touches_Getter";
 
-
-  /** @domName TouchEvent.initTouchEvent */
+  @DocsEditable
+  @DomName('TouchEvent.initTouchEvent')
   void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native "TouchEvent_initTouchEvent_Callback";
 
 }
@@ -23502,12 +23540,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TouchList
+@DocsEditable
+@DomName('TouchList')
 class TouchList extends NativeFieldWrapperClass1 implements List<Touch> {
   TouchList.internal();
 
-
-  /** @domName TouchList.length */
+  @DocsEditable
+  @DomName('TouchList.length')
   int get length native "TouchList_length_Getter";
 
   Touch operator[](int index) native "TouchList_item_Callback";
@@ -23528,50 +23567,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Touch)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Touch element) => Collections.contains(this, element);
+  bool contains(Touch element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Touch element)) => Collections.forEach(this, f);
+  void forEach(void f(Touch element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Touch element)) => new MappedList<Touch, dynamic>(this, f);
+  List mappedBy(f(Touch element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Touch> where(bool f(Touch element)) => new WhereIterable<Touch>(this, f);
+  Iterable<Touch> where(bool f(Touch element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Touch element)) => Collections.every(this, f);
+  bool every(bool f(Touch element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Touch element)) => Collections.any(this, f);
+  bool any(bool f(Touch element)) => IterableMixinWorkaround.any(this, f);
 
   List<Touch> toList() => new List<Touch>.from(this);
   Set<Touch> toSet() => new Set<Touch>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Touch> take(int n) => new ListView<Touch>(this, 0, n);
+  List<Touch> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Touch> takeWhile(bool test(Touch value)) {
-    return new TakeWhileIterable<Touch>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Touch> skip(int n) => new ListView<Touch>(this, n, null);
+  List<Touch> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Touch> skipWhile(bool test(Touch value)) {
-    return new SkipWhileIterable<Touch>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Touch firstMatching(bool test(Touch value), { Touch orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Touch lastMatching(bool test(Touch value), {Touch orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Touch singleMatching(bool test(Touch value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Touch elementAt(int index) {
@@ -23629,16 +23668,36 @@
     throw new StateError("More than one element");
   }
 
-  Touch min([int compare(Touch a, Touch b)]) => Collections.min(this, compare);
+  Touch min([int compare(Touch a, Touch b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Touch max([int compare(Touch a, Touch b)]) => Collections.max(this, compare);
+  Touch max([int compare(Touch a, Touch b)]) => IterableMixinWorkaround.max(this, compare);
 
   Touch removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Touch removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Touch element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Touch element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
@@ -23658,8 +23717,8 @@
 
   // -- end List<Touch> mixins.
 
-
-  /** @domName TouchList.item */
+  @DocsEditable
+  @DomName('TouchList.item')
   Touch item(int index) native "TouchList_item_Callback";
 
 }
@@ -23670,14 +23729,15 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLTrackElement
+@DocsEditable
+@DomName('HTMLTrackElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 class TrackElement extends _Element_Merged {
   TrackElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TrackElement() => document.$dom_createElement("track");
 
   /// Checks if this type is supported on the current platform.
@@ -23691,52 +23751,52 @@
 
   static const int NONE = 0;
 
-
-  /** @domName HTMLTrackElement.default */
+  @DocsEditable
+  @DomName('HTMLTrackElement.default')
   bool get defaultValue native "HTMLTrackElement_default_Getter";
 
-
-  /** @domName HTMLTrackElement.default */
+  @DocsEditable
+  @DomName('HTMLTrackElement.default')
   void set defaultValue(bool value) native "HTMLTrackElement_default_Setter";
 
-
-  /** @domName HTMLTrackElement.kind */
+  @DocsEditable
+  @DomName('HTMLTrackElement.kind')
   String get kind native "HTMLTrackElement_kind_Getter";
 
-
-  /** @domName HTMLTrackElement.kind */
+  @DocsEditable
+  @DomName('HTMLTrackElement.kind')
   void set kind(String value) native "HTMLTrackElement_kind_Setter";
 
-
-  /** @domName HTMLTrackElement.label */
+  @DocsEditable
+  @DomName('HTMLTrackElement.label')
   String get label native "HTMLTrackElement_label_Getter";
 
-
-  /** @domName HTMLTrackElement.label */
+  @DocsEditable
+  @DomName('HTMLTrackElement.label')
   void set label(String value) native "HTMLTrackElement_label_Setter";
 
-
-  /** @domName HTMLTrackElement.readyState */
+  @DocsEditable
+  @DomName('HTMLTrackElement.readyState')
   int get readyState native "HTMLTrackElement_readyState_Getter";
 
-
-  /** @domName HTMLTrackElement.src */
+  @DocsEditable
+  @DomName('HTMLTrackElement.src')
   String get src native "HTMLTrackElement_src_Getter";
 
-
-  /** @domName HTMLTrackElement.src */
+  @DocsEditable
+  @DomName('HTMLTrackElement.src')
   void set src(String value) native "HTMLTrackElement_src_Setter";
 
-
-  /** @domName HTMLTrackElement.srclang */
+  @DocsEditable
+  @DomName('HTMLTrackElement.srclang')
   String get srclang native "HTMLTrackElement_srclang_Getter";
 
-
-  /** @domName HTMLTrackElement.srclang */
+  @DocsEditable
+  @DomName('HTMLTrackElement.srclang')
   void set srclang(String value) native "HTMLTrackElement_srclang_Setter";
 
-
-  /** @domName HTMLTrackElement.track */
+  @DocsEditable
+  @DomName('HTMLTrackElement.track')
   TextTrack get track native "HTMLTrackElement_track_Getter";
 
 }
@@ -23747,12 +23807,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TrackEvent
+@DocsEditable
+@DomName('TrackEvent')
 class TrackEvent extends Event {
   TrackEvent.internal() : super.internal();
 
-
-  /** @domName TrackEvent.track */
+  @DocsEditable
+  @DomName('TrackEvent.track')
   Object get track native "TrackEvent_track_Getter";
 
 }
@@ -23763,16 +23824,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitTransitionEvent
+@DocsEditable
+@DomName('WebKitTransitionEvent')
 class TransitionEvent extends Event {
   TransitionEvent.internal() : super.internal();
 
-
-  /** @domName WebKitTransitionEvent.elapsedTime */
+  @DocsEditable
+  @DomName('WebKitTransitionEvent.elapsedTime')
   num get elapsedTime native "WebKitTransitionEvent_elapsedTime_Getter";
 
-
-  /** @domName WebKitTransitionEvent.propertyName */
+  @DocsEditable
+  @DomName('WebKitTransitionEvent.propertyName')
   String get propertyName native "WebKitTransitionEvent_propertyName_Getter";
 
 }
@@ -23783,60 +23845,61 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName TreeWalker
+@DocsEditable
+@DomName('TreeWalker')
 class TreeWalker extends NativeFieldWrapperClass1 {
   TreeWalker.internal();
 
-
-  /** @domName TreeWalker.currentNode */
+  @DocsEditable
+  @DomName('TreeWalker.currentNode')
   Node get currentNode native "TreeWalker_currentNode_Getter";
 
-
-  /** @domName TreeWalker.currentNode */
+  @DocsEditable
+  @DomName('TreeWalker.currentNode')
   void set currentNode(Node value) native "TreeWalker_currentNode_Setter";
 
-
-  /** @domName TreeWalker.expandEntityReferences */
+  @DocsEditable
+  @DomName('TreeWalker.expandEntityReferences')
   bool get expandEntityReferences native "TreeWalker_expandEntityReferences_Getter";
 
-
-  /** @domName TreeWalker.filter */
+  @DocsEditable
+  @DomName('TreeWalker.filter')
   NodeFilter get filter native "TreeWalker_filter_Getter";
 
-
-  /** @domName TreeWalker.root */
+  @DocsEditable
+  @DomName('TreeWalker.root')
   Node get root native "TreeWalker_root_Getter";
 
-
-  /** @domName TreeWalker.whatToShow */
+  @DocsEditable
+  @DomName('TreeWalker.whatToShow')
   int get whatToShow native "TreeWalker_whatToShow_Getter";
 
-
-  /** @domName TreeWalker.firstChild */
+  @DocsEditable
+  @DomName('TreeWalker.firstChild')
   Node firstChild() native "TreeWalker_firstChild_Callback";
 
-
-  /** @domName TreeWalker.lastChild */
+  @DocsEditable
+  @DomName('TreeWalker.lastChild')
   Node lastChild() native "TreeWalker_lastChild_Callback";
 
-
-  /** @domName TreeWalker.nextNode */
+  @DocsEditable
+  @DomName('TreeWalker.nextNode')
   Node nextNode() native "TreeWalker_nextNode_Callback";
 
-
-  /** @domName TreeWalker.nextSibling */
+  @DocsEditable
+  @DomName('TreeWalker.nextSibling')
   Node nextSibling() native "TreeWalker_nextSibling_Callback";
 
-
-  /** @domName TreeWalker.parentNode */
+  @DocsEditable
+  @DomName('TreeWalker.parentNode')
   Node parentNode() native "TreeWalker_parentNode_Callback";
 
-
-  /** @domName TreeWalker.previousNode */
+  @DocsEditable
+  @DomName('TreeWalker.previousNode')
   Node previousNode() native "TreeWalker_previousNode_Callback";
 
-
-  /** @domName TreeWalker.previousSibling */
+  @DocsEditable
+  @DomName('TreeWalker.previousSibling')
   Node previousSibling() native "TreeWalker_previousSibling_Callback";
 
 }
@@ -23847,7 +23910,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName UIEvent; @docsEditable true
+@DocsEditable
+@DomName('UIEvent')
 class UIEvent extends Event {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
@@ -23863,44 +23927,44 @@
   }
   UIEvent.internal() : super.internal();
 
-
-  /** @domName UIEvent.charCode */
+  @DocsEditable
+  @DomName('UIEvent.charCode')
   int get $dom_charCode native "UIEvent_charCode_Getter";
 
-
-  /** @domName UIEvent.detail */
+  @DocsEditable
+  @DomName('UIEvent.detail')
   int get detail native "UIEvent_detail_Getter";
 
-
-  /** @domName UIEvent.keyCode */
+  @DocsEditable
+  @DomName('UIEvent.keyCode')
   int get $dom_keyCode native "UIEvent_keyCode_Getter";
 
-
-  /** @domName UIEvent.layerX */
+  @DocsEditable
+  @DomName('UIEvent.layerX')
   int get layerX native "UIEvent_layerX_Getter";
 
-
-  /** @domName UIEvent.layerY */
+  @DocsEditable
+  @DomName('UIEvent.layerY')
   int get layerY native "UIEvent_layerY_Getter";
 
-
-  /** @domName UIEvent.pageX */
+  @DocsEditable
+  @DomName('UIEvent.pageX')
   int get pageX native "UIEvent_pageX_Getter";
 
-
-  /** @domName UIEvent.pageY */
+  @DocsEditable
+  @DomName('UIEvent.pageY')
   int get pageY native "UIEvent_pageY_Getter";
 
-
-  /** @domName UIEvent.view */
+  @DocsEditable
+  @DomName('UIEvent.view')
   WindowBase get view native "UIEvent_view_Getter";
 
-
-  /** @domName UIEvent.which */
+  @DocsEditable
+  @DomName('UIEvent.which')
   int get which native "UIEvent_which_Getter";
 
-
-  /** @domName UIEvent.initUIEvent */
+  @DocsEditable
+  @DomName('UIEvent.initUIEvent')
   void $dom_initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) native "UIEvent_initUIEvent_Callback";
 
 }
@@ -23911,11 +23975,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLUListElement
+@DocsEditable
+@DomName('HTMLUListElement')
 class UListElement extends _Element_Merged {
   UListElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory UListElement() => document.$dom_createElement("ul");
 
 }
@@ -23926,7 +23991,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Uint16Array
+@DocsEditable
+@DomName('Uint16Array')
 class Uint16Array extends ArrayBufferView implements List<int> {
   Uint16Array.internal() : super.internal();
 
@@ -23941,16 +24007,16 @@
 
   static const int BYTES_PER_ELEMENT = 2;
 
-
-  /** @domName Uint16Array.length */
+  @DocsEditable
+  @DomName('Uint16Array.length')
   int get length native "Uint16Array_length_Getter";
 
-
-  /** @domName Uint16Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Uint16Array.numericIndexGetter')
   int operator[](int index) native "Uint16Array_numericIndexGetter_Callback";
 
-
-  /** @domName Uint16Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Uint16Array.numericIndexSetter')
   void operator[]=(int index, int value) native "Uint16Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -23965,50 +24031,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -24066,16 +24132,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -24095,23 +24181,23 @@
 
   // -- end List<int> mixins.
 
-
-  /** @domName Uint16Array.setElements */
+  @DocsEditable
+  @DomName('Uint16Array.setElements')
   void setElements(Object array, [int offset]) native "Uint16Array_setElements_Callback";
 
-  Uint16Array subarray(/*long*/ start, [/*long*/ end]) {
+  Uint16Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Uint16Array.subarray_1 */
+  @DocsEditable
+  @DomName('Uint16Array.subarray_1')
   Uint16Array _subarray_1(start, end) native "Uint16Array_subarray_1_Callback";
 
-
-  /** @domName Uint16Array.subarray_2 */
+  @DocsEditable
+  @DomName('Uint16Array.subarray_2')
   Uint16Array _subarray_2(start) native "Uint16Array_subarray_2_Callback";
 
 }
@@ -24122,7 +24208,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Uint32Array
+@DocsEditable
+@DomName('Uint32Array')
 class Uint32Array extends ArrayBufferView implements List<int> {
   Uint32Array.internal() : super.internal();
 
@@ -24137,16 +24224,16 @@
 
   static const int BYTES_PER_ELEMENT = 4;
 
-
-  /** @domName Uint32Array.length */
+  @DocsEditable
+  @DomName('Uint32Array.length')
   int get length native "Uint32Array_length_Getter";
 
-
-  /** @domName Uint32Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Uint32Array.numericIndexGetter')
   int operator[](int index) native "Uint32Array_numericIndexGetter_Callback";
 
-
-  /** @domName Uint32Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Uint32Array.numericIndexSetter')
   void operator[]=(int index, int value) native "Uint32Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -24161,50 +24248,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -24262,16 +24349,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -24291,23 +24398,23 @@
 
   // -- end List<int> mixins.
 
-
-  /** @domName Uint32Array.setElements */
+  @DocsEditable
+  @DomName('Uint32Array.setElements')
   void setElements(Object array, [int offset]) native "Uint32Array_setElements_Callback";
 
-  Uint32Array subarray(/*long*/ start, [/*long*/ end]) {
+  Uint32Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Uint32Array.subarray_1 */
+  @DocsEditable
+  @DomName('Uint32Array.subarray_1')
   Uint32Array _subarray_1(start, end) native "Uint32Array_subarray_1_Callback";
 
-
-  /** @domName Uint32Array.subarray_2 */
+  @DocsEditable
+  @DomName('Uint32Array.subarray_2')
   Uint32Array _subarray_2(start) native "Uint32Array_subarray_2_Callback";
 
 }
@@ -24318,7 +24425,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Uint8Array
+@DocsEditable
+@DomName('Uint8Array')
 class Uint8Array extends ArrayBufferView implements List<int> {
   Uint8Array.internal() : super.internal();
 
@@ -24333,16 +24441,16 @@
 
   static const int BYTES_PER_ELEMENT = 1;
 
-
-  /** @domName Uint8Array.length */
+  @DocsEditable
+  @DomName('Uint8Array.length')
   int get length native "Uint8Array_length_Getter";
 
-
-  /** @domName Uint8Array.numericIndexGetter */
+  @DocsEditable
+  @DomName('Uint8Array.numericIndexGetter')
   int operator[](int index) native "Uint8Array_numericIndexGetter_Callback";
 
-
-  /** @domName Uint8Array.numericIndexSetter */
+  @DocsEditable
+  @DomName('Uint8Array.numericIndexSetter')
   void operator[]=(int index, int value) native "Uint8Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -24357,50 +24465,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(int element) => Collections.contains(this, element);
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(int element)) => Collections.forEach(this, f);
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(int element)) => new MappedList<int, dynamic>(this, f);
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<int> where(bool f(int element)) => new WhereIterable<int>(this, f);
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(int element)) => Collections.every(this, f);
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(int element)) => Collections.any(this, f);
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
 
   List<int> toList() => new List<int>.from(this);
   Set<int> toSet() => new Set<int>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<int> take(int n) => new ListView<int>(this, 0, n);
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<int> takeWhile(bool test(int value)) {
-    return new TakeWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<int> skip(int n) => new ListView<int>(this, n, null);
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<int> skipWhile(bool test(int value)) {
-    return new SkipWhileIterable<int>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   int firstMatching(bool test(int value), { int orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   int lastMatching(bool test(int value), {int orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   int singleMatching(bool test(int value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   int elementAt(int index) {
@@ -24458,16 +24566,36 @@
     throw new StateError("More than one element");
   }
 
-  int min([int compare(int a, int b)]) => Collections.min(this, compare);
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
 
-  int max([int compare(int a, int b)]) => Collections.max(this, compare);
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
 
   int removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
@@ -24487,23 +24615,23 @@
 
   // -- end List<int> mixins.
 
-
-  /** @domName Uint8Array.setElements */
+  @DocsEditable
+  @DomName('Uint8Array.setElements')
   void setElements(Object array, [int offset]) native "Uint8Array_setElements_Callback";
 
-  Uint8Array subarray(/*long*/ start, [/*long*/ end]) {
+  Uint8Array subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Uint8Array.subarray_1 */
+  @DocsEditable
+  @DomName('Uint8Array.subarray_1')
   Uint8Array _subarray_1(start, end) native "Uint8Array_subarray_1_Callback";
 
-
-  /** @domName Uint8Array.subarray_2 */
+  @DocsEditable
+  @DomName('Uint8Array.subarray_2')
   Uint8Array _subarray_2(start) native "Uint8Array_subarray_2_Callback";
 
 }
@@ -24514,8 +24642,9 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Uint8ClampedArray
-class Uint8ClampedArray extends Uint8Array {
+@DocsEditable
+@DomName('Uint8ClampedArray')
+class Uint8ClampedArray extends Uint8Array implements List<int> {
   Uint8ClampedArray.internal() : super.internal();
 
   factory Uint8ClampedArray(int length) =>
@@ -24527,35 +24656,197 @@
   factory Uint8ClampedArray.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
 
-
-  /** @domName Uint8ClampedArray.length */
+  @DocsEditable
+  @DomName('Uint8ClampedArray.length')
   int get length native "Uint8ClampedArray_length_Getter";
 
-
-  /** @domName Uint8ClampedArray.numericIndexGetter */
+  @DocsEditable
+  @DomName('Uint8ClampedArray.numericIndexGetter')
   int operator[](int index) native "Uint8ClampedArray_numericIndexGetter_Callback";
 
-
-  /** @domName Uint8ClampedArray.numericIndexSetter */
+  @DocsEditable
+  @DomName('Uint8ClampedArray.numericIndexSetter')
   void operator[]=(int index, int value) native "Uint8ClampedArray_numericIndexSetter_Callback";
+  // -- start List<int> mixins.
+  // int is the element type.
 
+  // From Iterable<int>:
 
-  /** @domName Uint8ClampedArray.setElements */
+  Iterator<int> get iterator {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new FixedSizeListIterator<int>(this);
+  }
+
+  dynamic reduce(dynamic initialValue, dynamic combine(dynamic, int)) {
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
+  }
+
+  bool contains(int element) => IterableMixinWorkaround.contains(this, element);
+
+  void forEach(void f(int element)) => IterableMixinWorkaround.forEach(this, f);
+
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
+
+  List mappedBy(f(int element)) => IterableMixinWorkaround.mappedByList(this, f);
+
+  Iterable<int> where(bool f(int element)) => IterableMixinWorkaround.where(this, f);
+
+  bool every(bool f(int element)) => IterableMixinWorkaround.every(this, f);
+
+  bool any(bool f(int element)) => IterableMixinWorkaround.any(this, f);
+
+  List<int> toList() => new List<int>.from(this);
+  Set<int> toSet() => new Set<int>.from(this);
+
+  bool get isEmpty => this.length == 0;
+
+  List<int> take(int n) => IterableMixinWorkaround.takeList(this, n);
+
+  Iterable<int> takeWhile(bool test(int value)) {
+    return IterableMixinWorkaround.takeWhile(this, test);
+  }
+
+  List<int> skip(int n) => IterableMixinWorkaround.skipList(this, n);
+
+  Iterable<int> skipWhile(bool test(int value)) {
+    return IterableMixinWorkaround.skipWhile(this, test);
+  }
+
+  int firstMatching(bool test(int value), { int orElse() }) {
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
+  }
+
+  int lastMatching(bool test(int value), {int orElse()}) {
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
+  }
+
+  int singleMatching(bool test(int value)) {
+    return IterableMixinWorkaround.singleMatching(this, test);
+  }
+
+  int elementAt(int index) {
+    return this[index];
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Iterable<int> iterable) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  // From List<int>:
+  void set length(int value) {
+    throw new UnsupportedError("Cannot resize immutable List.");
+  }
+
+  void clear() {
+    throw new UnsupportedError("Cannot clear immutable List.");
+  }
+
+  void sort([int compare(int a, int b)]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return Lists.lastIndexOf(this, element, start);
+  }
+
+  int get first {
+    if (this.length > 0) return this[0];
+    throw new StateError("No elements");
+  }
+
+  int get last {
+    if (this.length > 0) return this[this.length - 1];
+    throw new StateError("No elements");
+  }
+
+  int get single {
+    if (length == 1) return this[0];
+    if (length == 0) throw new StateError("No elements");
+    throw new StateError("More than one element");
+  }
+
+  int min([int compare(int a, int b)]) => IterableMixinWorkaround.min(this, compare);
+
+  int max([int compare(int a, int b)]) => IterableMixinWorkaround.max(this, compare);
+
+  int removeAt(int pos) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(int element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
+  @DocsEditable
+  @DomName('Uint8ClampedArray.setElements')
   void setElements(Object array, [int offset]) native "Uint8ClampedArray_setElements_Callback";
 
-  Uint8ClampedArray subarray(/*long*/ start, [/*long*/ end]) {
+  Uint8ClampedArray subarray(int start, [int end]) {
     if (?end) {
       return _subarray_1(start, end);
     }
     return _subarray_2(start);
   }
 
-
-  /** @domName Uint8ClampedArray.subarray_1 */
+  @DocsEditable
+  @DomName('Uint8ClampedArray.subarray_1')
   Uint8ClampedArray _subarray_1(start, end) native "Uint8ClampedArray_subarray_1_Callback";
 
-
-  /** @domName Uint8ClampedArray.subarray_2 */
+  @DocsEditable
+  @DomName('Uint8ClampedArray.subarray_2')
   Uint8ClampedArray _subarray_2(start) native "Uint8ClampedArray_subarray_2_Callback";
 
 }
@@ -24566,7 +24857,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLUnknownElement
+@DocsEditable
+@DomName('HTMLUnknownElement')
 class UnknownElement extends _Element_Merged {
   UnknownElement.internal() : super.internal();
 
@@ -24578,7 +24870,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName URL
+@DocsEditable
+@DomName('URL')
 class Url extends NativeFieldWrapperClass1 {
   Url.internal();
 
@@ -24595,20 +24888,20 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName DOMURL.createObjectURL_1 */
+  @DocsEditable
+  @DomName('DOMURL.createObjectURL_1')
   static String _createObjectURL_1(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_1_Callback";
 
-
-  /** @domName DOMURL.createObjectURL_2 */
+  @DocsEditable
+  @DomName('DOMURL.createObjectURL_2')
   static String _createObjectURL_2(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_2_Callback";
 
-
-  /** @domName DOMURL.createObjectURL_3 */
+  @DocsEditable
+  @DomName('DOMURL.createObjectURL_3')
   static String _createObjectURL_3(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_3_Callback";
 
-
-  /** @domName DOMURL.revokeObjectURL */
+  @DocsEditable
+  @DomName('DOMURL.revokeObjectURL')
   static void revokeObjectUrl(String url) native "DOMURL_revokeObjectURL_Callback";
 
 }
@@ -24619,48 +24912,49 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ValidityState
+@DocsEditable
+@DomName('ValidityState')
 class ValidityState extends NativeFieldWrapperClass1 {
   ValidityState.internal();
 
-
-  /** @domName ValidityState.badInput */
+  @DocsEditable
+  @DomName('ValidityState.badInput')
   bool get badInput native "ValidityState_badInput_Getter";
 
-
-  /** @domName ValidityState.customError */
+  @DocsEditable
+  @DomName('ValidityState.customError')
   bool get customError native "ValidityState_customError_Getter";
 
-
-  /** @domName ValidityState.patternMismatch */
+  @DocsEditable
+  @DomName('ValidityState.patternMismatch')
   bool get patternMismatch native "ValidityState_patternMismatch_Getter";
 
-
-  /** @domName ValidityState.rangeOverflow */
+  @DocsEditable
+  @DomName('ValidityState.rangeOverflow')
   bool get rangeOverflow native "ValidityState_rangeOverflow_Getter";
 
-
-  /** @domName ValidityState.rangeUnderflow */
+  @DocsEditable
+  @DomName('ValidityState.rangeUnderflow')
   bool get rangeUnderflow native "ValidityState_rangeUnderflow_Getter";
 
-
-  /** @domName ValidityState.stepMismatch */
+  @DocsEditable
+  @DomName('ValidityState.stepMismatch')
   bool get stepMismatch native "ValidityState_stepMismatch_Getter";
 
-
-  /** @domName ValidityState.tooLong */
+  @DocsEditable
+  @DomName('ValidityState.tooLong')
   bool get tooLong native "ValidityState_tooLong_Getter";
 
-
-  /** @domName ValidityState.typeMismatch */
+  @DocsEditable
+  @DomName('ValidityState.typeMismatch')
   bool get typeMismatch native "ValidityState_typeMismatch_Getter";
 
-
-  /** @domName ValidityState.valid */
+  @DocsEditable
+  @DomName('ValidityState.valid')
   bool get valid native "ValidityState_valid_Getter";
 
-
-  /** @domName ValidityState.valueMissing */
+  @DocsEditable
+  @DomName('ValidityState.valueMissing')
   bool get valueMissing native "ValidityState_valueMissing_Getter";
 
 }
@@ -24671,75 +24965,76 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLVideoElement
+@DocsEditable
+@DomName('HTMLVideoElement')
 class VideoElement extends MediaElement {
   VideoElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory VideoElement() => document.$dom_createElement("video");
 
-
-  /** @domName HTMLVideoElement.height */
+  @DocsEditable
+  @DomName('HTMLVideoElement.height')
   int get height native "HTMLVideoElement_height_Getter";
 
-
-  /** @domName HTMLVideoElement.height */
+  @DocsEditable
+  @DomName('HTMLVideoElement.height')
   void set height(int value) native "HTMLVideoElement_height_Setter";
 
-
-  /** @domName HTMLVideoElement.poster */
+  @DocsEditable
+  @DomName('HTMLVideoElement.poster')
   String get poster native "HTMLVideoElement_poster_Getter";
 
-
-  /** @domName HTMLVideoElement.poster */
+  @DocsEditable
+  @DomName('HTMLVideoElement.poster')
   void set poster(String value) native "HTMLVideoElement_poster_Setter";
 
-
-  /** @domName HTMLVideoElement.videoHeight */
+  @DocsEditable
+  @DomName('HTMLVideoElement.videoHeight')
   int get videoHeight native "HTMLVideoElement_videoHeight_Getter";
 
-
-  /** @domName HTMLVideoElement.videoWidth */
+  @DocsEditable
+  @DomName('HTMLVideoElement.videoWidth')
   int get videoWidth native "HTMLVideoElement_videoWidth_Getter";
 
-
-  /** @domName HTMLVideoElement.webkitDecodedFrameCount */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitDecodedFrameCount')
   int get webkitDecodedFrameCount native "HTMLVideoElement_webkitDecodedFrameCount_Getter";
 
-
-  /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitDisplayingFullscreen')
   bool get webkitDisplayingFullscreen native "HTMLVideoElement_webkitDisplayingFullscreen_Getter";
 
-
-  /** @domName HTMLVideoElement.webkitDroppedFrameCount */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitDroppedFrameCount')
   int get webkitDroppedFrameCount native "HTMLVideoElement_webkitDroppedFrameCount_Getter";
 
-
-  /** @domName HTMLVideoElement.webkitSupportsFullscreen */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitSupportsFullscreen')
   bool get webkitSupportsFullscreen native "HTMLVideoElement_webkitSupportsFullscreen_Getter";
 
-
-  /** @domName HTMLVideoElement.width */
+  @DocsEditable
+  @DomName('HTMLVideoElement.width')
   int get width native "HTMLVideoElement_width_Getter";
 
-
-  /** @domName HTMLVideoElement.width */
+  @DocsEditable
+  @DomName('HTMLVideoElement.width')
   void set width(int value) native "HTMLVideoElement_width_Setter";
 
-
-  /** @domName HTMLVideoElement.webkitEnterFullScreen */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitEnterFullScreen')
   void webkitEnterFullScreen() native "HTMLVideoElement_webkitEnterFullScreen_Callback";
 
-
-  /** @domName HTMLVideoElement.webkitEnterFullscreen */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitEnterFullscreen')
   void webkitEnterFullscreen() native "HTMLVideoElement_webkitEnterFullscreen_Callback";
 
-
-  /** @domName HTMLVideoElement.webkitExitFullScreen */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitExitFullScreen')
   void webkitExitFullScreen() native "HTMLVideoElement_webkitExitFullScreen_Callback";
 
-
-  /** @domName HTMLVideoElement.webkitExitFullscreen */
+  @DocsEditable
+  @DomName('HTMLVideoElement.webkitExitFullscreen')
   void webkitExitFullscreen() native "HTMLVideoElement_webkitExitFullscreen_Callback";
 
 }
@@ -24758,20 +25053,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLActiveInfo
+@DocsEditable
+@DomName('WebGLActiveInfo')
 class WebGLActiveInfo extends NativeFieldWrapperClass1 {
   WebGLActiveInfo.internal();
 
-
-  /** @domName WebGLActiveInfo.name */
+  @DocsEditable
+  @DomName('WebGLActiveInfo.name')
   String get name native "WebGLActiveInfo_name_Getter";
 
-
-  /** @domName WebGLActiveInfo.size */
+  @DocsEditable
+  @DomName('WebGLActiveInfo.size')
   int get size native "WebGLActiveInfo_size_Getter";
 
-
-  /** @domName WebGLActiveInfo.type */
+  @DocsEditable
+  @DomName('WebGLActiveInfo.type')
   int get type native "WebGLActiveInfo_type_Getter";
 
 }
@@ -24782,7 +25078,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLBuffer
+@DocsEditable
+@DomName('WebGLBuffer')
 class WebGLBuffer extends NativeFieldWrapperClass1 {
   WebGLBuffer.internal();
 
@@ -24794,7 +25091,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLCompressedTextureS3TC
+@DocsEditable
+@DomName('WebGLCompressedTextureS3TC')
 class WebGLCompressedTextureS3TC extends NativeFieldWrapperClass1 {
   WebGLCompressedTextureS3TC.internal();
 
@@ -24814,56 +25112,57 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLContextAttributes
+@DocsEditable
+@DomName('WebGLContextAttributes')
 class WebGLContextAttributes extends NativeFieldWrapperClass1 {
   WebGLContextAttributes.internal();
 
-
-  /** @domName WebGLContextAttributes.alpha */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.alpha')
   bool get alpha native "WebGLContextAttributes_alpha_Getter";
 
-
-  /** @domName WebGLContextAttributes.alpha */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.alpha')
   void set alpha(bool value) native "WebGLContextAttributes_alpha_Setter";
 
-
-  /** @domName WebGLContextAttributes.antialias */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.antialias')
   bool get antialias native "WebGLContextAttributes_antialias_Getter";
 
-
-  /** @domName WebGLContextAttributes.antialias */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.antialias')
   void set antialias(bool value) native "WebGLContextAttributes_antialias_Setter";
 
-
-  /** @domName WebGLContextAttributes.depth */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.depth')
   bool get depth native "WebGLContextAttributes_depth_Getter";
 
-
-  /** @domName WebGLContextAttributes.depth */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.depth')
   void set depth(bool value) native "WebGLContextAttributes_depth_Setter";
 
-
-  /** @domName WebGLContextAttributes.premultipliedAlpha */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.premultipliedAlpha')
   bool get premultipliedAlpha native "WebGLContextAttributes_premultipliedAlpha_Getter";
 
-
-  /** @domName WebGLContextAttributes.premultipliedAlpha */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.premultipliedAlpha')
   void set premultipliedAlpha(bool value) native "WebGLContextAttributes_premultipliedAlpha_Setter";
 
-
-  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   bool get preserveDrawingBuffer native "WebGLContextAttributes_preserveDrawingBuffer_Getter";
 
-
-  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   void set preserveDrawingBuffer(bool value) native "WebGLContextAttributes_preserveDrawingBuffer_Setter";
 
-
-  /** @domName WebGLContextAttributes.stencil */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.stencil')
   bool get stencil native "WebGLContextAttributes_stencil_Getter";
 
-
-  /** @domName WebGLContextAttributes.stencil */
+  @DocsEditable
+  @DomName('WebGLContextAttributes.stencil')
   void set stencil(bool value) native "WebGLContextAttributes_stencil_Setter";
 
 }
@@ -24874,12 +25173,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLContextEvent
+@DocsEditable
+@DomName('WebGLContextEvent')
 class WebGLContextEvent extends Event {
   WebGLContextEvent.internal() : super.internal();
 
-
-  /** @domName WebGLContextEvent.statusMessage */
+  @DocsEditable
+  @DomName('WebGLContextEvent.statusMessage')
   String get statusMessage native "WebGLContextEvent_statusMessage_Getter";
 
 }
@@ -24890,7 +25190,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLDebugRendererInfo
+@DocsEditable
+@DomName('WebGLDebugRendererInfo')
 class WebGLDebugRendererInfo extends NativeFieldWrapperClass1 {
   WebGLDebugRendererInfo.internal();
 
@@ -24906,12 +25207,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLDebugShaders
+@DocsEditable
+@DomName('WebGLDebugShaders')
 class WebGLDebugShaders extends NativeFieldWrapperClass1 {
   WebGLDebugShaders.internal();
 
-
-  /** @domName WebGLDebugShaders.getTranslatedShaderSource */
+  @DocsEditable
+  @DomName('WebGLDebugShaders.getTranslatedShaderSource')
   String getTranslatedShaderSource(WebGLShader shader) native "WebGLDebugShaders_getTranslatedShaderSource_Callback";
 
 }
@@ -24922,7 +25224,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLDepthTexture
+@DocsEditable
+@DomName('WebGLDepthTexture')
 class WebGLDepthTexture extends NativeFieldWrapperClass1 {
   WebGLDepthTexture.internal();
 
@@ -24936,7 +25239,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLFramebuffer
+@DocsEditable
+@DomName('WebGLFramebuffer')
 class WebGLFramebuffer extends NativeFieldWrapperClass1 {
   WebGLFramebuffer.internal();
 
@@ -24948,16 +25252,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLLoseContext
+@DocsEditable
+@DomName('WebGLLoseContext')
 class WebGLLoseContext extends NativeFieldWrapperClass1 {
   WebGLLoseContext.internal();
 
-
-  /** @domName WebGLLoseContext.loseContext */
+  @DocsEditable
+  @DomName('WebGLLoseContext.loseContext')
   void loseContext() native "WebGLLoseContext_loseContext_Callback";
 
-
-  /** @domName WebGLLoseContext.restoreContext */
+  @DocsEditable
+  @DomName('WebGLLoseContext.restoreContext')
   void restoreContext() native "WebGLLoseContext_restoreContext_Callback";
 
 }
@@ -24968,7 +25273,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLProgram
+@DocsEditable
+@DomName('WebGLProgram')
 class WebGLProgram extends NativeFieldWrapperClass1 {
   WebGLProgram.internal();
 
@@ -24980,7 +25286,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLRenderbuffer
+@DocsEditable
+@DomName('WebGLRenderbuffer')
 class WebGLRenderbuffer extends NativeFieldWrapperClass1 {
   WebGLRenderbuffer.internal();
 
@@ -24992,7 +25299,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLRenderingContext
+@DocsEditable
+@DomName('WebGLRenderingContext')
 class WebGLRenderingContext extends CanvasRenderingContext {
   WebGLRenderingContext.internal() : super.internal();
 
@@ -25586,63 +25894,63 @@
 
   static const int ZERO = 0;
 
-
-  /** @domName WebGLRenderingContext.drawingBufferHeight */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.drawingBufferHeight')
   int get drawingBufferHeight native "WebGLRenderingContext_drawingBufferHeight_Getter";
 
-
-  /** @domName WebGLRenderingContext.drawingBufferWidth */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.drawingBufferWidth')
   int get drawingBufferWidth native "WebGLRenderingContext_drawingBufferWidth_Getter";
 
-
-  /** @domName WebGLRenderingContext.activeTexture */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.activeTexture')
   void activeTexture(int texture) native "WebGLRenderingContext_activeTexture_Callback";
 
-
-  /** @domName WebGLRenderingContext.attachShader */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.attachShader')
   void attachShader(WebGLProgram program, WebGLShader shader) native "WebGLRenderingContext_attachShader_Callback";
 
-
-  /** @domName WebGLRenderingContext.bindAttribLocation */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bindAttribLocation')
   void bindAttribLocation(WebGLProgram program, int index, String name) native "WebGLRenderingContext_bindAttribLocation_Callback";
 
-
-  /** @domName WebGLRenderingContext.bindBuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bindBuffer')
   void bindBuffer(int target, WebGLBuffer buffer) native "WebGLRenderingContext_bindBuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.bindFramebuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bindFramebuffer')
   void bindFramebuffer(int target, WebGLFramebuffer framebuffer) native "WebGLRenderingContext_bindFramebuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.bindRenderbuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bindRenderbuffer')
   void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_bindRenderbuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.bindTexture */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bindTexture')
   void bindTexture(int target, WebGLTexture texture) native "WebGLRenderingContext_bindTexture_Callback";
 
-
-  /** @domName WebGLRenderingContext.blendColor */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.blendColor')
   void blendColor(num red, num green, num blue, num alpha) native "WebGLRenderingContext_blendColor_Callback";
 
-
-  /** @domName WebGLRenderingContext.blendEquation */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.blendEquation')
   void blendEquation(int mode) native "WebGLRenderingContext_blendEquation_Callback";
 
-
-  /** @domName WebGLRenderingContext.blendEquationSeparate */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.blendEquationSeparate')
   void blendEquationSeparate(int modeRGB, int modeAlpha) native "WebGLRenderingContext_blendEquationSeparate_Callback";
 
-
-  /** @domName WebGLRenderingContext.blendFunc */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.blendFunc')
   void blendFunc(int sfactor, int dfactor) native "WebGLRenderingContext_blendFunc_Callback";
 
-
-  /** @domName WebGLRenderingContext.blendFuncSeparate */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.blendFuncSeparate')
   void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback";
 
-  void bufferData(/*unsigned long*/ target, data_OR_size, /*unsigned long*/ usage) {
+  void bufferData(int target, data_OR_size, int usage) {
     if ((target is int || target == null) && (data_OR_size is ArrayBuffer || data_OR_size == null) && (usage is int || usage == null)) {
       _bufferData_1(target, data_OR_size, usage);
       return;
@@ -25658,19 +25966,19 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName WebGLRenderingContext.bufferData_1 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bufferData_1')
   void _bufferData_1(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_1_Callback";
 
-
-  /** @domName WebGLRenderingContext.bufferData_2 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bufferData_2')
   void _bufferData_2(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_2_Callback";
 
-
-  /** @domName WebGLRenderingContext.bufferData_3 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bufferData_3')
   void _bufferData_3(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_3_Callback";
 
-  void bufferSubData(/*unsigned long*/ target, /*long long*/ offset, data) {
+  void bufferSubData(int target, int offset, data) {
     if ((target is int || target == null) && (offset is int || offset == null) && (data is ArrayBuffer || data == null)) {
       _bufferSubData_1(target, offset, data);
       return;
@@ -25682,367 +25990,367 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName WebGLRenderingContext.bufferSubData_1 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bufferSubData_1')
   void _bufferSubData_1(target, offset, data) native "WebGLRenderingContext_bufferSubData_1_Callback";
 
-
-  /** @domName WebGLRenderingContext.bufferSubData_2 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.bufferSubData_2')
   void _bufferSubData_2(target, offset, data) native "WebGLRenderingContext_bufferSubData_2_Callback";
 
-
-  /** @domName WebGLRenderingContext.checkFramebufferStatus */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.checkFramebufferStatus')
   int checkFramebufferStatus(int target) native "WebGLRenderingContext_checkFramebufferStatus_Callback";
 
-
-  /** @domName WebGLRenderingContext.clear */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.clear')
   void clear(int mask) native "WebGLRenderingContext_clear_Callback";
 
-
-  /** @domName WebGLRenderingContext.clearColor */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.clearColor')
   void clearColor(num red, num green, num blue, num alpha) native "WebGLRenderingContext_clearColor_Callback";
 
-
-  /** @domName WebGLRenderingContext.clearDepth */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.clearDepth')
   void clearDepth(num depth) native "WebGLRenderingContext_clearDepth_Callback";
 
-
-  /** @domName WebGLRenderingContext.clearStencil */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.clearStencil')
   void clearStencil(int s) native "WebGLRenderingContext_clearStencil_Callback";
 
-
-  /** @domName WebGLRenderingContext.colorMask */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.colorMask')
   void colorMask(bool red, bool green, bool blue, bool alpha) native "WebGLRenderingContext_colorMask_Callback";
 
-
-  /** @domName WebGLRenderingContext.compileShader */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.compileShader')
   void compileShader(WebGLShader shader) native "WebGLRenderingContext_compileShader_Callback";
 
-
-  /** @domName WebGLRenderingContext.compressedTexImage2D */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.compressedTexImage2D')
   void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ArrayBufferView data) native "WebGLRenderingContext_compressedTexImage2D_Callback";
 
-
-  /** @domName WebGLRenderingContext.compressedTexSubImage2D */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.compressedTexSubImage2D')
   void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ArrayBufferView data) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
 
-
-  /** @domName WebGLRenderingContext.copyTexImage2D */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.copyTexImage2D')
   void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) native "WebGLRenderingContext_copyTexImage2D_Callback";
 
-
-  /** @domName WebGLRenderingContext.copyTexSubImage2D */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.copyTexSubImage2D')
   void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
 
-
-  /** @domName WebGLRenderingContext.createBuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.createBuffer')
   WebGLBuffer createBuffer() native "WebGLRenderingContext_createBuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.createFramebuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.createFramebuffer')
   WebGLFramebuffer createFramebuffer() native "WebGLRenderingContext_createFramebuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.createProgram */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.createProgram')
   WebGLProgram createProgram() native "WebGLRenderingContext_createProgram_Callback";
 
-
-  /** @domName WebGLRenderingContext.createRenderbuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.createRenderbuffer')
   WebGLRenderbuffer createRenderbuffer() native "WebGLRenderingContext_createRenderbuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.createShader */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.createShader')
   WebGLShader createShader(int type) native "WebGLRenderingContext_createShader_Callback";
 
-
-  /** @domName WebGLRenderingContext.createTexture */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.createTexture')
   WebGLTexture createTexture() native "WebGLRenderingContext_createTexture_Callback";
 
-
-  /** @domName WebGLRenderingContext.cullFace */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.cullFace')
   void cullFace(int mode) native "WebGLRenderingContext_cullFace_Callback";
 
-
-  /** @domName WebGLRenderingContext.deleteBuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.deleteBuffer')
   void deleteBuffer(WebGLBuffer buffer) native "WebGLRenderingContext_deleteBuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.deleteFramebuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.deleteFramebuffer')
   void deleteFramebuffer(WebGLFramebuffer framebuffer) native "WebGLRenderingContext_deleteFramebuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.deleteProgram */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.deleteProgram')
   void deleteProgram(WebGLProgram program) native "WebGLRenderingContext_deleteProgram_Callback";
 
-
-  /** @domName WebGLRenderingContext.deleteRenderbuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.deleteRenderbuffer')
   void deleteRenderbuffer(WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_deleteRenderbuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.deleteShader */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.deleteShader')
   void deleteShader(WebGLShader shader) native "WebGLRenderingContext_deleteShader_Callback";
 
-
-  /** @domName WebGLRenderingContext.deleteTexture */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.deleteTexture')
   void deleteTexture(WebGLTexture texture) native "WebGLRenderingContext_deleteTexture_Callback";
 
-
-  /** @domName WebGLRenderingContext.depthFunc */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.depthFunc')
   void depthFunc(int func) native "WebGLRenderingContext_depthFunc_Callback";
 
-
-  /** @domName WebGLRenderingContext.depthMask */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.depthMask')
   void depthMask(bool flag) native "WebGLRenderingContext_depthMask_Callback";
 
-
-  /** @domName WebGLRenderingContext.depthRange */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.depthRange')
   void depthRange(num zNear, num zFar) native "WebGLRenderingContext_depthRange_Callback";
 
-
-  /** @domName WebGLRenderingContext.detachShader */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.detachShader')
   void detachShader(WebGLProgram program, WebGLShader shader) native "WebGLRenderingContext_detachShader_Callback";
 
-
-  /** @domName WebGLRenderingContext.disable */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.disable')
   void disable(int cap) native "WebGLRenderingContext_disable_Callback";
 
-
-  /** @domName WebGLRenderingContext.disableVertexAttribArray */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.disableVertexAttribArray')
   void disableVertexAttribArray(int index) native "WebGLRenderingContext_disableVertexAttribArray_Callback";
 
-
-  /** @domName WebGLRenderingContext.drawArrays */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.drawArrays')
   void drawArrays(int mode, int first, int count) native "WebGLRenderingContext_drawArrays_Callback";
 
-
-  /** @domName WebGLRenderingContext.drawElements */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.drawElements')
   void drawElements(int mode, int count, int type, int offset) native "WebGLRenderingContext_drawElements_Callback";
 
-
-  /** @domName WebGLRenderingContext.enable */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.enable')
   void enable(int cap) native "WebGLRenderingContext_enable_Callback";
 
-
-  /** @domName WebGLRenderingContext.enableVertexAttribArray */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.enableVertexAttribArray')
   void enableVertexAttribArray(int index) native "WebGLRenderingContext_enableVertexAttribArray_Callback";
 
-
-  /** @domName WebGLRenderingContext.finish */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.finish')
   void finish() native "WebGLRenderingContext_finish_Callback";
 
-
-  /** @domName WebGLRenderingContext.flush */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.flush')
   void flush() native "WebGLRenderingContext_flush_Callback";
 
-
-  /** @domName WebGLRenderingContext.framebufferRenderbuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.framebufferRenderbuffer')
   void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.framebufferTexture2D */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.framebufferTexture2D')
   void framebufferTexture2D(int target, int attachment, int textarget, WebGLTexture texture, int level) native "WebGLRenderingContext_framebufferTexture2D_Callback";
 
-
-  /** @domName WebGLRenderingContext.frontFace */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.frontFace')
   void frontFace(int mode) native "WebGLRenderingContext_frontFace_Callback";
 
-
-  /** @domName WebGLRenderingContext.generateMipmap */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.generateMipmap')
   void generateMipmap(int target) native "WebGLRenderingContext_generateMipmap_Callback";
 
-
-  /** @domName WebGLRenderingContext.getActiveAttrib */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getActiveAttrib')
   WebGLActiveInfo getActiveAttrib(WebGLProgram program, int index) native "WebGLRenderingContext_getActiveAttrib_Callback";
 
-
-  /** @domName WebGLRenderingContext.getActiveUniform */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getActiveUniform')
   WebGLActiveInfo getActiveUniform(WebGLProgram program, int index) native "WebGLRenderingContext_getActiveUniform_Callback";
 
-
-  /** @domName WebGLRenderingContext.getAttachedShaders */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getAttachedShaders')
   void getAttachedShaders(WebGLProgram program) native "WebGLRenderingContext_getAttachedShaders_Callback";
 
-
-  /** @domName WebGLRenderingContext.getAttribLocation */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getAttribLocation')
   int getAttribLocation(WebGLProgram program, String name) native "WebGLRenderingContext_getAttribLocation_Callback";
 
-
-  /** @domName WebGLRenderingContext.getBufferParameter */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getBufferParameter')
   Object getBufferParameter(int target, int pname) native "WebGLRenderingContext_getBufferParameter_Callback";
 
-
-  /** @domName WebGLRenderingContext.getContextAttributes */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getContextAttributes')
   WebGLContextAttributes getContextAttributes() native "WebGLRenderingContext_getContextAttributes_Callback";
 
-
-  /** @domName WebGLRenderingContext.getError */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getError')
   int getError() native "WebGLRenderingContext_getError_Callback";
 
-
-  /** @domName WebGLRenderingContext.getExtension */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getExtension')
   Object getExtension(String name) native "WebGLRenderingContext_getExtension_Callback";
 
-
-  /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getFramebufferAttachmentParameter')
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
 
-
-  /** @domName WebGLRenderingContext.getParameter */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getParameter')
   Object getParameter(int pname) native "WebGLRenderingContext_getParameter_Callback";
 
-
-  /** @domName WebGLRenderingContext.getProgramInfoLog */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getProgramInfoLog')
   String getProgramInfoLog(WebGLProgram program) native "WebGLRenderingContext_getProgramInfoLog_Callback";
 
-
-  /** @domName WebGLRenderingContext.getProgramParameter */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getProgramParameter')
   Object getProgramParameter(WebGLProgram program, int pname) native "WebGLRenderingContext_getProgramParameter_Callback";
 
-
-  /** @domName WebGLRenderingContext.getRenderbufferParameter */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getRenderbufferParameter')
   Object getRenderbufferParameter(int target, int pname) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
 
-
-  /** @domName WebGLRenderingContext.getShaderInfoLog */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getShaderInfoLog')
   String getShaderInfoLog(WebGLShader shader) native "WebGLRenderingContext_getShaderInfoLog_Callback";
 
-
-  /** @domName WebGLRenderingContext.getShaderParameter */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getShaderParameter')
   Object getShaderParameter(WebGLShader shader, int pname) native "WebGLRenderingContext_getShaderParameter_Callback";
 
-
-  /** @domName WebGLRenderingContext.getShaderPrecisionFormat */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getShaderPrecisionFormat')
   WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
 
-
-  /** @domName WebGLRenderingContext.getShaderSource */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getShaderSource')
   String getShaderSource(WebGLShader shader) native "WebGLRenderingContext_getShaderSource_Callback";
 
-
-  /** @domName WebGLRenderingContext.getSupportedExtensions */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getSupportedExtensions')
   List<String> getSupportedExtensions() native "WebGLRenderingContext_getSupportedExtensions_Callback";
 
-
-  /** @domName WebGLRenderingContext.getTexParameter */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getTexParameter')
   Object getTexParameter(int target, int pname) native "WebGLRenderingContext_getTexParameter_Callback";
 
-
-  /** @domName WebGLRenderingContext.getUniform */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getUniform')
   Object getUniform(WebGLProgram program, WebGLUniformLocation location) native "WebGLRenderingContext_getUniform_Callback";
 
-
-  /** @domName WebGLRenderingContext.getUniformLocation */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getUniformLocation')
   WebGLUniformLocation getUniformLocation(WebGLProgram program, String name) native "WebGLRenderingContext_getUniformLocation_Callback";
 
-
-  /** @domName WebGLRenderingContext.getVertexAttrib */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getVertexAttrib')
   Object getVertexAttrib(int index, int pname) native "WebGLRenderingContext_getVertexAttrib_Callback";
 
-
-  /** @domName WebGLRenderingContext.getVertexAttribOffset */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.getVertexAttribOffset')
   int getVertexAttribOffset(int index, int pname) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
 
-
-  /** @domName WebGLRenderingContext.hint */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.hint')
   void hint(int target, int mode) native "WebGLRenderingContext_hint_Callback";
 
-
-  /** @domName WebGLRenderingContext.isBuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isBuffer')
   bool isBuffer(WebGLBuffer buffer) native "WebGLRenderingContext_isBuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.isContextLost */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isContextLost')
   bool isContextLost() native "WebGLRenderingContext_isContextLost_Callback";
 
-
-  /** @domName WebGLRenderingContext.isEnabled */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isEnabled')
   bool isEnabled(int cap) native "WebGLRenderingContext_isEnabled_Callback";
 
-
-  /** @domName WebGLRenderingContext.isFramebuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isFramebuffer')
   bool isFramebuffer(WebGLFramebuffer framebuffer) native "WebGLRenderingContext_isFramebuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.isProgram */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isProgram')
   bool isProgram(WebGLProgram program) native "WebGLRenderingContext_isProgram_Callback";
 
-
-  /** @domName WebGLRenderingContext.isRenderbuffer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isRenderbuffer')
   bool isRenderbuffer(WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_isRenderbuffer_Callback";
 
-
-  /** @domName WebGLRenderingContext.isShader */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isShader')
   bool isShader(WebGLShader shader) native "WebGLRenderingContext_isShader_Callback";
 
-
-  /** @domName WebGLRenderingContext.isTexture */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.isTexture')
   bool isTexture(WebGLTexture texture) native "WebGLRenderingContext_isTexture_Callback";
 
-
-  /** @domName WebGLRenderingContext.lineWidth */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.lineWidth')
   void lineWidth(num width) native "WebGLRenderingContext_lineWidth_Callback";
 
-
-  /** @domName WebGLRenderingContext.linkProgram */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.linkProgram')
   void linkProgram(WebGLProgram program) native "WebGLRenderingContext_linkProgram_Callback";
 
-
-  /** @domName WebGLRenderingContext.pixelStorei */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.pixelStorei')
   void pixelStorei(int pname, int param) native "WebGLRenderingContext_pixelStorei_Callback";
 
-
-  /** @domName WebGLRenderingContext.polygonOffset */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.polygonOffset')
   void polygonOffset(num factor, num units) native "WebGLRenderingContext_polygonOffset_Callback";
 
-
-  /** @domName WebGLRenderingContext.readPixels */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.readPixels')
   void readPixels(int x, int y, int width, int height, int format, int type, ArrayBufferView pixels) native "WebGLRenderingContext_readPixels_Callback";
 
-
-  /** @domName WebGLRenderingContext.releaseShaderCompiler */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.releaseShaderCompiler')
   void releaseShaderCompiler() native "WebGLRenderingContext_releaseShaderCompiler_Callback";
 
-
-  /** @domName WebGLRenderingContext.renderbufferStorage */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.renderbufferStorage')
   void renderbufferStorage(int target, int internalformat, int width, int height) native "WebGLRenderingContext_renderbufferStorage_Callback";
 
-
-  /** @domName WebGLRenderingContext.sampleCoverage */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.sampleCoverage')
   void sampleCoverage(num value, bool invert) native "WebGLRenderingContext_sampleCoverage_Callback";
 
-
-  /** @domName WebGLRenderingContext.scissor */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.scissor')
   void scissor(int x, int y, int width, int height) native "WebGLRenderingContext_scissor_Callback";
 
-
-  /** @domName WebGLRenderingContext.shaderSource */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.shaderSource')
   void shaderSource(WebGLShader shader, String string) native "WebGLRenderingContext_shaderSource_Callback";
 
-
-  /** @domName WebGLRenderingContext.stencilFunc */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.stencilFunc')
   void stencilFunc(int func, int ref, int mask) native "WebGLRenderingContext_stencilFunc_Callback";
 
-
-  /** @domName WebGLRenderingContext.stencilFuncSeparate */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.stencilFuncSeparate')
   void stencilFuncSeparate(int face, int func, int ref, int mask) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
 
-
-  /** @domName WebGLRenderingContext.stencilMask */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.stencilMask')
   void stencilMask(int mask) native "WebGLRenderingContext_stencilMask_Callback";
 
-
-  /** @domName WebGLRenderingContext.stencilMaskSeparate */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.stencilMaskSeparate')
   void stencilMaskSeparate(int face, int mask) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
 
-
-  /** @domName WebGLRenderingContext.stencilOp */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.stencilOp')
   void stencilOp(int fail, int zfail, int zpass) native "WebGLRenderingContext_stencilOp_Callback";
 
-
-  /** @domName WebGLRenderingContext.stencilOpSeparate */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.stencilOpSeparate')
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback";
 
-  void texImage2D(/*unsigned long*/ target, /*long*/ level, /*unsigned long*/ internalformat, /*long*/ format_OR_width, /*long*/ height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [/*unsigned long*/ format, /*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
+  void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [int format, int type, ArrayBufferView pixels]) {
     if ((target is int || target == null) && (level is int || level == null) && (internalformat is int || internalformat == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (format is int || format == null) && (type is int || type == null) && (pixels is ArrayBufferView || pixels == null)) {
       _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
       return;
@@ -26066,35 +26374,35 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName WebGLRenderingContext.texImage2D_1 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texImage2D_1')
   void _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) native "WebGLRenderingContext_texImage2D_1_Callback";
 
-
-  /** @domName WebGLRenderingContext.texImage2D_2 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texImage2D_2')
   void _texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_2_Callback";
 
-
-  /** @domName WebGLRenderingContext.texImage2D_3 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texImage2D_3')
   void _texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_3_Callback";
 
-
-  /** @domName WebGLRenderingContext.texImage2D_4 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texImage2D_4')
   void _texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_4_Callback";
 
-
-  /** @domName WebGLRenderingContext.texImage2D_5 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texImage2D_5')
   void _texImage2D_5(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_5_Callback";
 
-
-  /** @domName WebGLRenderingContext.texParameterf */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texParameterf')
   void texParameterf(int target, int pname, num param) native "WebGLRenderingContext_texParameterf_Callback";
 
-
-  /** @domName WebGLRenderingContext.texParameteri */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texParameteri')
   void texParameteri(int target, int pname, int param) native "WebGLRenderingContext_texParameteri_Callback";
 
-  void texSubImage2D(/*unsigned long*/ target, /*long*/ level, /*long*/ xoffset, /*long*/ yoffset, /*long*/ format_OR_width, /*long*/ height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [/*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
+  void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [int type, ArrayBufferView pixels]) {
     if ((target is int || target == null) && (level is int || level == null) && (xoffset is int || xoffset == null) && (yoffset is int || yoffset == null) && (format_OR_width is int || format_OR_width == null) && (height_OR_type is int || height_OR_type == null) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (type is int || type == null) && (pixels is ArrayBufferView || pixels == null)) {
       _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
       return;
@@ -26118,148 +26426,148 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName WebGLRenderingContext.texSubImage2D_1 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texSubImage2D_1')
   void _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) native "WebGLRenderingContext_texSubImage2D_1_Callback";
 
-
-  /** @domName WebGLRenderingContext.texSubImage2D_2 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texSubImage2D_2')
   void _texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_2_Callback";
 
-
-  /** @domName WebGLRenderingContext.texSubImage2D_3 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texSubImage2D_3')
   void _texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_3_Callback";
 
-
-  /** @domName WebGLRenderingContext.texSubImage2D_4 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texSubImage2D_4')
   void _texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_4_Callback";
 
-
-  /** @domName WebGLRenderingContext.texSubImage2D_5 */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.texSubImage2D_5')
   void _texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_5_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform1f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform1f')
   void uniform1f(WebGLUniformLocation location, num x) native "WebGLRenderingContext_uniform1f_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform1fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform1fv')
   void uniform1fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform1fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform1i */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform1i')
   void uniform1i(WebGLUniformLocation location, int x) native "WebGLRenderingContext_uniform1i_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform1iv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform1iv')
   void uniform1iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform1iv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform2f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform2f')
   void uniform2f(WebGLUniformLocation location, num x, num y) native "WebGLRenderingContext_uniform2f_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform2fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform2fv')
   void uniform2fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform2fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform2i */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform2i')
   void uniform2i(WebGLUniformLocation location, int x, int y) native "WebGLRenderingContext_uniform2i_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform2iv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform2iv')
   void uniform2iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform2iv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform3f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform3f')
   void uniform3f(WebGLUniformLocation location, num x, num y, num z) native "WebGLRenderingContext_uniform3f_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform3fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform3fv')
   void uniform3fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform3fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform3i */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform3i')
   void uniform3i(WebGLUniformLocation location, int x, int y, int z) native "WebGLRenderingContext_uniform3i_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform3iv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform3iv')
   void uniform3iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform3iv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform4f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform4f')
   void uniform4f(WebGLUniformLocation location, num x, num y, num z, num w) native "WebGLRenderingContext_uniform4f_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform4fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform4fv')
   void uniform4fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform4fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform4i */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform4i')
   void uniform4i(WebGLUniformLocation location, int x, int y, int z, int w) native "WebGLRenderingContext_uniform4i_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniform4iv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniform4iv')
   void uniform4iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform4iv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniformMatrix2fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniformMatrix2fv')
   void uniformMatrix2fv(WebGLUniformLocation location, bool transpose, Float32Array array) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniformMatrix3fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniformMatrix3fv')
   void uniformMatrix3fv(WebGLUniformLocation location, bool transpose, Float32Array array) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.uniformMatrix4fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.uniformMatrix4fv')
   void uniformMatrix4fv(WebGLUniformLocation location, bool transpose, Float32Array array) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.useProgram */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.useProgram')
   void useProgram(WebGLProgram program) native "WebGLRenderingContext_useProgram_Callback";
 
-
-  /** @domName WebGLRenderingContext.validateProgram */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.validateProgram')
   void validateProgram(WebGLProgram program) native "WebGLRenderingContext_validateProgram_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib1f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib1f')
   void vertexAttrib1f(int indx, num x) native "WebGLRenderingContext_vertexAttrib1f_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib1fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib1fv')
   void vertexAttrib1fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib2f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib2f')
   void vertexAttrib2f(int indx, num x, num y) native "WebGLRenderingContext_vertexAttrib2f_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib2fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib2fv')
   void vertexAttrib2fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib3f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib3f')
   void vertexAttrib3f(int indx, num x, num y, num z) native "WebGLRenderingContext_vertexAttrib3f_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib3fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib3fv')
   void vertexAttrib3fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib4f */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib4f')
   void vertexAttrib4f(int indx, num x, num y, num z, num w) native "WebGLRenderingContext_vertexAttrib4f_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttrib4fv */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttrib4fv')
   void vertexAttrib4fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
 
-
-  /** @domName WebGLRenderingContext.vertexAttribPointer */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.vertexAttribPointer')
   void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) native "WebGLRenderingContext_vertexAttribPointer_Callback";
 
-
-  /** @domName WebGLRenderingContext.viewport */
+  @DocsEditable
+  @DomName('WebGLRenderingContext.viewport')
   void viewport(int x, int y, int width, int height) native "WebGLRenderingContext_viewport_Callback";
 
 }
@@ -26270,7 +26578,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLShader
+@DocsEditable
+@DomName('WebGLShader')
 class WebGLShader extends NativeFieldWrapperClass1 {
   WebGLShader.internal();
 
@@ -26282,20 +26591,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLShaderPrecisionFormat
+@DocsEditable
+@DomName('WebGLShaderPrecisionFormat')
 class WebGLShaderPrecisionFormat extends NativeFieldWrapperClass1 {
   WebGLShaderPrecisionFormat.internal();
 
-
-  /** @domName WebGLShaderPrecisionFormat.precision */
+  @DocsEditable
+  @DomName('WebGLShaderPrecisionFormat.precision')
   int get precision native "WebGLShaderPrecisionFormat_precision_Getter";
 
-
-  /** @domName WebGLShaderPrecisionFormat.rangeMax */
+  @DocsEditable
+  @DomName('WebGLShaderPrecisionFormat.rangeMax')
   int get rangeMax native "WebGLShaderPrecisionFormat_rangeMax_Getter";
 
-
-  /** @domName WebGLShaderPrecisionFormat.rangeMin */
+  @DocsEditable
+  @DomName('WebGLShaderPrecisionFormat.rangeMin')
   int get rangeMin native "WebGLShaderPrecisionFormat_rangeMin_Getter";
 
 }
@@ -26306,7 +26616,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLTexture
+@DocsEditable
+@DomName('WebGLTexture')
 class WebGLTexture extends NativeFieldWrapperClass1 {
   WebGLTexture.internal();
 
@@ -26318,7 +26629,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLUniformLocation
+@DocsEditable
+@DomName('WebGLUniformLocation')
 class WebGLUniformLocation extends NativeFieldWrapperClass1 {
   WebGLUniformLocation.internal();
 
@@ -26330,7 +26642,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebGLVertexArrayObjectOES
+@DocsEditable
+@DomName('WebGLVertexArrayObjectOES')
 class WebGLVertexArrayObject extends NativeFieldWrapperClass1 {
   WebGLVertexArrayObject.internal();
 
@@ -26342,7 +26655,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitCSSFilterValue
+@DocsEditable
+@DomName('WebKitCSSFilterValue')
 class WebKitCssFilterValue extends _CssValueList {
   WebKitCssFilterValue.internal() : super.internal();
 
@@ -26370,8 +26684,8 @@
 
   static const int CSS_FILTER_SEPIA = 3;
 
-
-  /** @domName WebKitCSSFilterValue.operationType */
+  @DocsEditable
+  @DomName('WebKitCSSFilterValue.operationType')
   int get operationType native "WebKitCSSFilterValue_operationType_Getter";
 
 }
@@ -26382,7 +26696,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitCSSMixFunctionValue
+@DocsEditable
+@DomName('WebKitCSSMixFunctionValue')
 class WebKitCssMixFunctionValue extends _CssValueList {
   WebKitCssMixFunctionValue.internal() : super.internal();
 
@@ -26394,44 +26709,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebKitNamedFlow
+@DocsEditable
+@DomName('WebKitNamedFlow')
 class WebKitNamedFlow extends EventTarget {
   WebKitNamedFlow.internal() : super.internal();
 
-
-  /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.firstEmptyRegionIndex')
   int get firstEmptyRegionIndex native "WebKitNamedFlow_firstEmptyRegionIndex_Getter";
 
-
-  /** @domName WebKitNamedFlow.name */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.name')
   String get name native "WebKitNamedFlow_name_Getter";
 
-
-  /** @domName WebKitNamedFlow.overset */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.overset')
   bool get overset native "WebKitNamedFlow_overset_Getter";
 
-
-  /** @domName WebKitNamedFlow.addEventListener */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_addEventListener_Callback";
 
-
-  /** @domName WebKitNamedFlow.dispatchEvent */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.dispatchEvent')
   bool $dom_dispatchEvent(Event event) native "WebKitNamedFlow_dispatchEvent_Callback";
 
-
-  /** @domName WebKitNamedFlow.getContent */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.getContent')
   List<Node> getContent() native "WebKitNamedFlow_getContent_Callback";
 
-
-  /** @domName WebKitNamedFlow.getRegions */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.getRegions')
   List<Node> getRegions() native "WebKitNamedFlow_getRegions_Callback";
 
-
-  /** @domName WebKitNamedFlow.getRegionsByContent */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.getRegionsByContent')
   List<Node> getRegionsByContent(Node contentNode) native "WebKitNamedFlow_getRegionsByContent_Callback";
 
-
-  /** @domName WebKitNamedFlow.removeEventListener */
+  @DocsEditable
+  @DomName('WebKitNamedFlow.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_removeEventListener_Callback";
 
 }
@@ -26442,7 +26758,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WebSocket
+@DocsEditable
+@DomName('WebSocket')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -26458,14 +26775,15 @@
 
   static const EventStreamProvider<Event> openEvent = const EventStreamProvider<Event>('open');
 
-  ///@docsEditable true
+  @DocsEditable
   factory WebSocket(String url) => WebSocket._create(url);
   static WebSocket _create(String url) native "WebSocket_constructor_Callback";
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WebSocketEvents get on =>
     new WebSocketEvents(this);
 
@@ -26477,43 +26795,43 @@
 
   static const int OPEN = 1;
 
-
-  /** @domName WebSocket.URL */
+  @DocsEditable
+  @DomName('WebSocket.URL')
   String get Url native "WebSocket_URL_Getter";
 
-
-  /** @domName WebSocket.binaryType */
+  @DocsEditable
+  @DomName('WebSocket.binaryType')
   String get binaryType native "WebSocket_binaryType_Getter";
 
-
-  /** @domName WebSocket.binaryType */
+  @DocsEditable
+  @DomName('WebSocket.binaryType')
   void set binaryType(String value) native "WebSocket_binaryType_Setter";
 
-
-  /** @domName WebSocket.bufferedAmount */
+  @DocsEditable
+  @DomName('WebSocket.bufferedAmount')
   int get bufferedAmount native "WebSocket_bufferedAmount_Getter";
 
-
-  /** @domName WebSocket.extensions */
+  @DocsEditable
+  @DomName('WebSocket.extensions')
   String get extensions native "WebSocket_extensions_Getter";
 
-
-  /** @domName WebSocket.protocol */
+  @DocsEditable
+  @DomName('WebSocket.protocol')
   String get protocol native "WebSocket_protocol_Getter";
 
-
-  /** @domName WebSocket.readyState */
+  @DocsEditable
+  @DomName('WebSocket.readyState')
   int get readyState native "WebSocket_readyState_Getter";
 
-
-  /** @domName WebSocket.url */
+  @DocsEditable
+  @DomName('WebSocket.url')
   String get url native "WebSocket_url_Getter";
 
-
-  /** @domName WebSocket.addEventListener */
+  @DocsEditable
+  @DomName('WebSocket.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebSocket_addEventListener_Callback";
 
-  void close([/*unsigned short*/ code, /*DOMString*/ reason]) {
+  void close([int code, String reason]) {
     if (?reason) {
       _close_1(code, reason);
       return;
@@ -26525,28 +26843,28 @@
     _close_3();
   }
 
-
-  /** @domName WebSocket.close_1 */
+  @DocsEditable
+  @DomName('WebSocket.close_1')
   void _close_1(code, reason) native "WebSocket_close_1_Callback";
 
-
-  /** @domName WebSocket.close_2 */
+  @DocsEditable
+  @DomName('WebSocket.close_2')
   void _close_2(code) native "WebSocket_close_2_Callback";
 
-
-  /** @domName WebSocket.close_3 */
+  @DocsEditable
+  @DomName('WebSocket.close_3')
   void _close_3() native "WebSocket_close_3_Callback";
 
-
-  /** @domName WebSocket.dispatchEvent */
+  @DocsEditable
+  @DomName('WebSocket.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "WebSocket_dispatchEvent_Callback";
 
-
-  /** @domName WebSocket.removeEventListener */
+  @DocsEditable
+  @DomName('WebSocket.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebSocket_removeEventListener_Callback";
 
-
-  /** @domName WebSocket.send */
+  @DocsEditable
+  @DomName('WebSocket.send')
   void send(data) native "WebSocket_send_Callback";
 
   Stream<CloseEvent> get onClose => closeEvent.forTarget(this);
@@ -26559,21 +26877,21 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class WebSocketEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   WebSocketEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get close => this['close'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get open => this['open'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26581,32 +26899,58 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WheelEvent
+@DocsEditable
+@DomName('WheelEvent')
 class WheelEvent extends MouseEvent {
+
+  factory WheelEvent(String type, Window view, int wheelDeltaX, int wheelDeltaY,
+      int detail, int screenX, int screenY, int clientX, int clientY,
+      int button,
+      [bool canBubble = true, bool cancelable = true, bool ctrlKey = false,
+      bool altKey = false, bool shiftKey = false, bool metaKey = false,
+      EventTarget relatedTarget = null]) {
+
+    var eventType = 'WheelEvent';
+    if (_Device.isFirefox) {
+      eventType = 'MouseScrollEvents';
+    }
+    final event = document.$dom_createEvent(eventType);
+      // Fallthrough for Dartium.
+      event.$dom_initMouseEvent(type, canBubble, cancelable, view, detail,
+          screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey, button, relatedTarget);
+      event.$dom_initWebKitWheelEvent(wheelDeltaX,
+          wheelDeltaY ~/ 120, // Chrome does an auto-convert to pixels.
+          view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey);
+
+    return event;
+  }
+
   WheelEvent.internal() : super.internal();
 
-
-  /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
+  @DocsEditable
+  @DomName('WheelEvent.webkitDirectionInvertedFromDevice')
   bool get webkitDirectionInvertedFromDevice native "WheelEvent_webkitDirectionInvertedFromDevice_Getter";
 
-
-  /** @domName WheelEvent.wheelDeltaX */
+  @DocsEditable
+  @DomName('WheelEvent.wheelDeltaX')
   int get $dom_wheelDeltaX native "WheelEvent_wheelDeltaX_Getter";
 
-
-  /** @domName WheelEvent.wheelDeltaY */
+  @DocsEditable
+  @DomName('WheelEvent.wheelDeltaY')
   int get $dom_wheelDeltaY native "WheelEvent_wheelDeltaY_Getter";
 
-
-  /** @domName WheelEvent.initWebKitWheelEvent */
-  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native "WheelEvent_initWebKitWheelEvent_Callback";
+  @DocsEditable
+  @DomName('WheelEvent.initWebKitWheelEvent')
+  void $dom_initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native "WheelEvent_initWebKitWheelEvent_Callback";
 
 
-  /** @domName WheelEvent.deltaX */
+  @DomName('WheelEvent.deltaX')
   num get deltaX => $dom_wheelDeltaX;
-  /** @domName WheelEvent.deltaY */
+  @DomName('WheelEvent.deltaY')
   num get deltaY => $dom_wheelDeltaY;
-  /** @domName WheelEvent.deltaMode */
+  @DomName('WheelEvent.deltaMode')
   int get deltaMode => 0;
 
 }
@@ -26615,7 +26959,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Window
+@DocsEditable
+@DomName('Window')
 class Window extends EventTarget implements WindowBase {
 
   /**
@@ -26650,86 +26995,16 @@
 
   static const EventStreamProvider<Event> contentLoadedEvent = const EventStreamProvider<Event>('DOMContentLoaded');
 
-  static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
-
   static const EventStreamProvider<Event> beforeUnloadEvent = const EventStreamProvider<Event>('beforeunload');
 
-  static const EventStreamProvider<Event> blurEvent = const EventStreamProvider<Event>('blur');
-
-  static const EventStreamProvider<Event> canPlayEvent = const EventStreamProvider<Event>('canplay');
-
-  static const EventStreamProvider<Event> canPlayThroughEvent = const EventStreamProvider<Event>('canplaythrough');
-
-  static const EventStreamProvider<Event> changeEvent = const EventStreamProvider<Event>('change');
-
-  static const EventStreamProvider<MouseEvent> clickEvent = const EventStreamProvider<MouseEvent>('click');
-
-  static const EventStreamProvider<MouseEvent> contextMenuEvent = const EventStreamProvider<MouseEvent>('contextmenu');
-
-  static const EventStreamProvider<Event> doubleClickEvent = const EventStreamProvider<Event>('dblclick');
-
   static const EventStreamProvider<DeviceMotionEvent> deviceMotionEvent = const EventStreamProvider<DeviceMotionEvent>('devicemotion');
 
   static const EventStreamProvider<DeviceOrientationEvent> deviceOrientationEvent = const EventStreamProvider<DeviceOrientationEvent>('deviceorientation');
 
-  static const EventStreamProvider<MouseEvent> dragEvent = const EventStreamProvider<MouseEvent>('drag');
-
-  static const EventStreamProvider<MouseEvent> dragEndEvent = const EventStreamProvider<MouseEvent>('dragend');
-
-  static const EventStreamProvider<MouseEvent> dragEnterEvent = const EventStreamProvider<MouseEvent>('dragenter');
-
-  static const EventStreamProvider<MouseEvent> dragLeaveEvent = const EventStreamProvider<MouseEvent>('dragleave');
-
-  static const EventStreamProvider<MouseEvent> dragOverEvent = const EventStreamProvider<MouseEvent>('dragover');
-
-  static const EventStreamProvider<MouseEvent> dragStartEvent = const EventStreamProvider<MouseEvent>('dragstart');
-
-  static const EventStreamProvider<MouseEvent> dropEvent = const EventStreamProvider<MouseEvent>('drop');
-
-  static const EventStreamProvider<Event> durationChangeEvent = const EventStreamProvider<Event>('durationchange');
-
-  static const EventStreamProvider<Event> emptiedEvent = const EventStreamProvider<Event>('emptied');
-
-  static const EventStreamProvider<Event> endedEvent = const EventStreamProvider<Event>('ended');
-
-  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
-
-  static const EventStreamProvider<Event> focusEvent = const EventStreamProvider<Event>('focus');
-
   static const EventStreamProvider<HashChangeEvent> hashChangeEvent = const EventStreamProvider<HashChangeEvent>('hashchange');
 
-  static const EventStreamProvider<Event> inputEvent = const EventStreamProvider<Event>('input');
-
-  static const EventStreamProvider<Event> invalidEvent = const EventStreamProvider<Event>('invalid');
-
-  static const EventStreamProvider<KeyboardEvent> keyDownEvent = const EventStreamProvider<KeyboardEvent>('keydown');
-
-  static const EventStreamProvider<KeyboardEvent> keyPressEvent = const EventStreamProvider<KeyboardEvent>('keypress');
-
-  static const EventStreamProvider<KeyboardEvent> keyUpEvent = const EventStreamProvider<KeyboardEvent>('keyup');
-
-  static const EventStreamProvider<Event> loadEvent = const EventStreamProvider<Event>('load');
-
-  static const EventStreamProvider<Event> loadedDataEvent = const EventStreamProvider<Event>('loadeddata');
-
-  static const EventStreamProvider<Event> loadedMetadataEvent = const EventStreamProvider<Event>('loadedmetadata');
-
-  static const EventStreamProvider<Event> loadStartEvent = const EventStreamProvider<Event>('loadstart');
-
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  static const EventStreamProvider<MouseEvent> mouseDownEvent = const EventStreamProvider<MouseEvent>('mousedown');
-
-  static const EventStreamProvider<MouseEvent> mouseMoveEvent = const EventStreamProvider<MouseEvent>('mousemove');
-
-  static const EventStreamProvider<MouseEvent> mouseOutEvent = const EventStreamProvider<MouseEvent>('mouseout');
-
-  static const EventStreamProvider<MouseEvent> mouseOverEvent = const EventStreamProvider<MouseEvent>('mouseover');
-
-  static const EventStreamProvider<MouseEvent> mouseUpEvent = const EventStreamProvider<MouseEvent>('mouseup');
-
-  static const EventStreamProvider<WheelEvent> mouseWheelEvent = const EventStreamProvider<WheelEvent>('mousewheel');
-
   static const EventStreamProvider<Event> offlineEvent = const EventStreamProvider<Event>('offline');
 
   static const EventStreamProvider<Event> onlineEvent = const EventStreamProvider<Event>('online');
@@ -26738,65 +27013,22 @@
 
   static const EventStreamProvider<Event> pageShowEvent = const EventStreamProvider<Event>('pageshow');
 
-  static const EventStreamProvider<Event> pauseEvent = const EventStreamProvider<Event>('pause');
-
-  static const EventStreamProvider<Event> playEvent = const EventStreamProvider<Event>('play');
-
-  static const EventStreamProvider<Event> playingEvent = const EventStreamProvider<Event>('playing');
-
   static const EventStreamProvider<PopStateEvent> popStateEvent = const EventStreamProvider<PopStateEvent>('popstate');
 
-  static const EventStreamProvider<Event> progressEvent = const EventStreamProvider<Event>('progress');
-
-  static const EventStreamProvider<Event> rateChangeEvent = const EventStreamProvider<Event>('ratechange');
-
-  static const EventStreamProvider<Event> resetEvent = const EventStreamProvider<Event>('reset');
-
   static const EventStreamProvider<Event> resizeEvent = const EventStreamProvider<Event>('resize');
 
-  static const EventStreamProvider<Event> scrollEvent = const EventStreamProvider<Event>('scroll');
-
-  static const EventStreamProvider<Event> searchEvent = const EventStreamProvider<Event>('search');
-
-  static const EventStreamProvider<Event> seekedEvent = const EventStreamProvider<Event>('seeked');
-
-  static const EventStreamProvider<Event> seekingEvent = const EventStreamProvider<Event>('seeking');
-
-  static const EventStreamProvider<Event> selectEvent = const EventStreamProvider<Event>('select');
-
-  static const EventStreamProvider<Event> stalledEvent = const EventStreamProvider<Event>('stalled');
-
   static const EventStreamProvider<StorageEvent> storageEvent = const EventStreamProvider<StorageEvent>('storage');
 
-  static const EventStreamProvider<Event> submitEvent = const EventStreamProvider<Event>('submit');
-
-  static const EventStreamProvider<Event> suspendEvent = const EventStreamProvider<Event>('suspend');
-
-  static const EventStreamProvider<Event> timeUpdateEvent = const EventStreamProvider<Event>('timeupdate');
-
-  static const EventStreamProvider<TouchEvent> touchCancelEvent = const EventStreamProvider<TouchEvent>('touchcancel');
-
-  static const EventStreamProvider<TouchEvent> touchEndEvent = const EventStreamProvider<TouchEvent>('touchend');
-
-  static const EventStreamProvider<TouchEvent> touchMoveEvent = const EventStreamProvider<TouchEvent>('touchmove');
-
-  static const EventStreamProvider<TouchEvent> touchStartEvent = const EventStreamProvider<TouchEvent>('touchstart');
-
   static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
 
-  static const EventStreamProvider<Event> volumeChangeEvent = const EventStreamProvider<Event>('volumechange');
-
-  static const EventStreamProvider<Event> waitingEvent = const EventStreamProvider<Event>('waiting');
-
   static const EventStreamProvider<AnimationEvent> animationEndEvent = const EventStreamProvider<AnimationEvent>('webkitAnimationEnd');
 
   static const EventStreamProvider<AnimationEvent> animationIterationEvent = const EventStreamProvider<AnimationEvent>('webkitAnimationIteration');
 
   static const EventStreamProvider<AnimationEvent> animationStartEvent = const EventStreamProvider<AnimationEvent>('webkitAnimationStart');
 
-  static const EventStreamProvider<TransitionEvent> transitionEndEvent = const EventStreamProvider<TransitionEvent>('webkitTransitionEnd');
-
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WindowEvents get on =>
     new WindowEvents(this);
 
@@ -26804,466 +27036,453 @@
 
   static const int TEMPORARY = 0;
 
-
-  /** @domName DOMWindow.applicationCache */
+  @DocsEditable
+  @DomName('DOMWindow.applicationCache')
   ApplicationCache get applicationCache native "DOMWindow_applicationCache_Getter";
 
-
-  /** @domName DOMWindow.closed */
+  @DocsEditable
+  @DomName('DOMWindow.closed')
   bool get closed native "DOMWindow_closed_Getter";
 
-
-  /** @domName DOMWindow.console */
+  @DocsEditable
+  @DomName('DOMWindow.console')
   Console get console native "DOMWindow_console_Getter";
 
-
-  /** @domName DOMWindow.crypto */
+  @DocsEditable
+  @DomName('DOMWindow.crypto')
   Crypto get crypto native "DOMWindow_crypto_Getter";
 
-
-  /** @domName DOMWindow.defaultStatus */
+  @DocsEditable
+  @DomName('DOMWindow.defaultStatus')
   String get defaultStatus native "DOMWindow_defaultStatus_Getter";
 
-
-  /** @domName DOMWindow.defaultStatus */
+  @DocsEditable
+  @DomName('DOMWindow.defaultStatus')
   void set defaultStatus(String value) native "DOMWindow_defaultStatus_Setter";
 
-
-  /** @domName DOMWindow.defaultstatus */
+  @DocsEditable
+  @DomName('DOMWindow.defaultstatus')
   String get defaultstatus native "DOMWindow_defaultstatus_Getter";
 
-
-  /** @domName DOMWindow.defaultstatus */
+  @DocsEditable
+  @DomName('DOMWindow.defaultstatus')
   void set defaultstatus(String value) native "DOMWindow_defaultstatus_Setter";
 
-
-  /** @domName DOMWindow.devicePixelRatio */
+  @DocsEditable
+  @DomName('DOMWindow.devicePixelRatio')
   num get devicePixelRatio native "DOMWindow_devicePixelRatio_Getter";
 
-
-  /** @domName DOMWindow.document */
+  @DocsEditable
+  @DomName('DOMWindow.document')
   Document get document native "DOMWindow_document_Getter";
 
-
-  /** @domName DOMWindow.event */
+  @DocsEditable
+  @DomName('DOMWindow.event')
   Event get event native "DOMWindow_event_Getter";
 
-
-  /** @domName DOMWindow.history */
+  @DocsEditable
+  @DomName('DOMWindow.history')
   History get history native "DOMWindow_history_Getter";
 
-
-  /** @domName DOMWindow.indexedDB */
+  @DocsEditable
+  @DomName('DOMWindow.indexedDB')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @Experimental()
   IdbFactory get indexedDB native "DOMWindow_indexedDB_Getter";
 
-
-  /** @domName DOMWindow.innerHeight */
+  @DocsEditable
+  @DomName('DOMWindow.innerHeight')
   int get innerHeight native "DOMWindow_innerHeight_Getter";
 
-
-  /** @domName DOMWindow.innerWidth */
+  @DocsEditable
+  @DomName('DOMWindow.innerWidth')
   int get innerWidth native "DOMWindow_innerWidth_Getter";
 
-
-  /** @domName DOMWindow.localStorage */
+  @DocsEditable
+  @DomName('DOMWindow.localStorage')
   Storage get localStorage native "DOMWindow_localStorage_Getter";
 
-
-  /** @domName DOMWindow.location */
+  @DocsEditable
+  @DomName('DOMWindow.location')
   Location get location native "DOMWindow_location_Getter";
 
-
-  /** @domName DOMWindow.location */
+  @DocsEditable
+  @DomName('DOMWindow.location')
   void set location(Location value) native "DOMWindow_location_Setter";
 
-
-  /** @domName DOMWindow.locationbar */
+  @DocsEditable
+  @DomName('DOMWindow.locationbar')
   BarInfo get locationbar native "DOMWindow_locationbar_Getter";
 
-
-  /** @domName DOMWindow.menubar */
+  @DocsEditable
+  @DomName('DOMWindow.menubar')
   BarInfo get menubar native "DOMWindow_menubar_Getter";
 
-
-  /** @domName DOMWindow.name */
+  @DocsEditable
+  @DomName('DOMWindow.name')
   String get name native "DOMWindow_name_Getter";
 
-
-  /** @domName DOMWindow.name */
+  @DocsEditable
+  @DomName('DOMWindow.name')
   void set name(String value) native "DOMWindow_name_Setter";
 
-
-  /** @domName DOMWindow.navigator */
+  @DocsEditable
+  @DomName('DOMWindow.navigator')
   Navigator get navigator native "DOMWindow_navigator_Getter";
 
-
-  /** @domName DOMWindow.offscreenBuffering */
+  @DocsEditable
+  @DomName('DOMWindow.offscreenBuffering')
   bool get offscreenBuffering native "DOMWindow_offscreenBuffering_Getter";
 
-
-  /** @domName DOMWindow.opener */
+  @DocsEditable
+  @DomName('DOMWindow.opener')
   WindowBase get opener native "DOMWindow_opener_Getter";
 
-
-  /** @domName DOMWindow.outerHeight */
+  @DocsEditable
+  @DomName('DOMWindow.outerHeight')
   int get outerHeight native "DOMWindow_outerHeight_Getter";
 
-
-  /** @domName DOMWindow.outerWidth */
+  @DocsEditable
+  @DomName('DOMWindow.outerWidth')
   int get outerWidth native "DOMWindow_outerWidth_Getter";
 
-
-  /** @domName DOMWindow.pagePopupController */
+  @DocsEditable
+  @DomName('DOMWindow.pagePopupController')
   PagePopupController get pagePopupController native "DOMWindow_pagePopupController_Getter";
 
-
-  /** @domName DOMWindow.pageXOffset */
+  @DocsEditable
+  @DomName('DOMWindow.pageXOffset')
   int get pageXOffset native "DOMWindow_pageXOffset_Getter";
 
-
-  /** @domName DOMWindow.pageYOffset */
+  @DocsEditable
+  @DomName('DOMWindow.pageYOffset')
   int get pageYOffset native "DOMWindow_pageYOffset_Getter";
 
-
-  /** @domName DOMWindow.parent */
+  @DocsEditable
+  @DomName('DOMWindow.parent')
   WindowBase get parent native "DOMWindow_parent_Getter";
 
-
-  /** @domName DOMWindow.performance */
+  @DocsEditable
+  @DomName('DOMWindow.performance')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE)
   Performance get performance native "DOMWindow_performance_Getter";
 
-
-  /** @domName DOMWindow.personalbar */
+  @DocsEditable
+  @DomName('DOMWindow.personalbar')
   BarInfo get personalbar native "DOMWindow_personalbar_Getter";
 
-
-  /** @domName DOMWindow.screen */
+  @DocsEditable
+  @DomName('DOMWindow.screen')
   Screen get screen native "DOMWindow_screen_Getter";
 
-
-  /** @domName DOMWindow.screenLeft */
+  @DocsEditable
+  @DomName('DOMWindow.screenLeft')
   int get screenLeft native "DOMWindow_screenLeft_Getter";
 
-
-  /** @domName DOMWindow.screenTop */
+  @DocsEditable
+  @DomName('DOMWindow.screenTop')
   int get screenTop native "DOMWindow_screenTop_Getter";
 
-
-  /** @domName DOMWindow.screenX */
+  @DocsEditable
+  @DomName('DOMWindow.screenX')
   int get screenX native "DOMWindow_screenX_Getter";
 
-
-  /** @domName DOMWindow.screenY */
+  @DocsEditable
+  @DomName('DOMWindow.screenY')
   int get screenY native "DOMWindow_screenY_Getter";
 
-
-  /** @domName DOMWindow.scrollX */
+  @DocsEditable
+  @DomName('DOMWindow.scrollX')
   int get scrollX native "DOMWindow_scrollX_Getter";
 
-
-  /** @domName DOMWindow.scrollY */
+  @DocsEditable
+  @DomName('DOMWindow.scrollY')
   int get scrollY native "DOMWindow_scrollY_Getter";
 
-
-  /** @domName DOMWindow.scrollbars */
+  @DocsEditable
+  @DomName('DOMWindow.scrollbars')
   BarInfo get scrollbars native "DOMWindow_scrollbars_Getter";
 
-
-  /** @domName DOMWindow.self */
+  @DocsEditable
+  @DomName('DOMWindow.self')
   WindowBase get self native "DOMWindow_self_Getter";
 
-
-  /** @domName DOMWindow.sessionStorage */
+  @DocsEditable
+  @DomName('DOMWindow.sessionStorage')
   Storage get sessionStorage native "DOMWindow_sessionStorage_Getter";
 
-
-  /** @domName DOMWindow.status */
+  @DocsEditable
+  @DomName('DOMWindow.status')
   String get status native "DOMWindow_status_Getter";
 
-
-  /** @domName DOMWindow.status */
+  @DocsEditable
+  @DomName('DOMWindow.status')
   void set status(String value) native "DOMWindow_status_Setter";
 
-
-  /** @domName DOMWindow.statusbar */
+  @DocsEditable
+  @DomName('DOMWindow.statusbar')
   BarInfo get statusbar native "DOMWindow_statusbar_Getter";
 
-
-  /** @domName DOMWindow.styleMedia */
+  @DocsEditable
+  @DomName('DOMWindow.styleMedia')
   StyleMedia get styleMedia native "DOMWindow_styleMedia_Getter";
 
-
-  /** @domName DOMWindow.toolbar */
+  @DocsEditable
+  @DomName('DOMWindow.toolbar')
   BarInfo get toolbar native "DOMWindow_toolbar_Getter";
 
-
-  /** @domName DOMWindow.top */
+  @DocsEditable
+  @DomName('DOMWindow.top')
   WindowBase get top native "DOMWindow_top_Getter";
 
+  @DocsEditable
+  @DomName('DOMWindow.webkitNotifications')
+  @SupportedBrowser(SupportedBrowser.CHROME)
+  @SupportedBrowser(SupportedBrowser.SAFARI)
+  @Experimental()
+  NotificationCenter get notifications native "DOMWindow_webkitNotifications_Getter";
 
-  /** @domName DOMWindow.webkitNotifications */
-  NotificationCenter get webkitNotifications native "DOMWindow_webkitNotifications_Getter";
-
-
-  /** @domName DOMWindow.webkitStorageInfo */
+  @DocsEditable
+  @DomName('DOMWindow.webkitStorageInfo')
   StorageInfo get webkitStorageInfo native "DOMWindow_webkitStorageInfo_Getter";
 
-
-  /** @domName DOMWindow.window */
+  @DocsEditable
+  @DomName('DOMWindow.window')
   WindowBase get window native "DOMWindow_window_Getter";
 
-
-  /** @domName DOMWindow.addEventListener */
+  @DocsEditable
+  @DomName('DOMWindow.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_addEventListener_Callback";
 
-
-  /** @domName DOMWindow.alert */
+  @DocsEditable
+  @DomName('DOMWindow.alert')
   void alert(String message) native "DOMWindow_alert_Callback";
 
-
-  /** @domName DOMWindow.atob */
+  @DocsEditable
+  @DomName('DOMWindow.atob')
   String atob(String string) native "DOMWindow_atob_Callback";
 
-
-  /** @domName DOMWindow.btoa */
+  @DocsEditable
+  @DomName('DOMWindow.btoa')
   String btoa(String string) native "DOMWindow_btoa_Callback";
 
-
-  /** @domName DOMWindow.cancelAnimationFrame */
+  @DocsEditable
+  @DomName('DOMWindow.cancelAnimationFrame')
   void cancelAnimationFrame(int id) native "DOMWindow_cancelAnimationFrame_Callback";
 
-
-  /** @domName DOMWindow.captureEvents */
+  @DocsEditable
+  @DomName('DOMWindow.captureEvents')
   void captureEvents() native "DOMWindow_captureEvents_Callback";
 
-
-  /** @domName DOMWindow.clearInterval */
+  @DocsEditable
+  @DomName('DOMWindow.clearInterval')
   void clearInterval(int handle) native "DOMWindow_clearInterval_Callback";
 
-
-  /** @domName DOMWindow.clearTimeout */
+  @DocsEditable
+  @DomName('DOMWindow.clearTimeout')
   void clearTimeout(int handle) native "DOMWindow_clearTimeout_Callback";
 
-
-  /** @domName DOMWindow.close */
+  @DocsEditable
+  @DomName('DOMWindow.close')
   void close() native "DOMWindow_close_Callback";
 
-
-  /** @domName DOMWindow.confirm */
+  @DocsEditable
+  @DomName('DOMWindow.confirm')
   bool confirm(String message) native "DOMWindow_confirm_Callback";
 
-
-  /** @domName DOMWindow.dispatchEvent */
+  @DocsEditable
+  @DomName('DOMWindow.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "DOMWindow_dispatchEvent_Callback";
 
-
-  /** @domName DOMWindow.find */
+  @DocsEditable
+  @DomName('DOMWindow.find')
   bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native "DOMWindow_find_Callback";
 
-
-  /** @domName DOMWindow.getComputedStyle */
+  @DocsEditable
+  @DomName('DOMWindow.getComputedStyle')
   CssStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native "DOMWindow_getComputedStyle_Callback";
 
-
-  /** @domName DOMWindow.getMatchedCSSRules */
+  @DocsEditable
+  @DomName('DOMWindow.getMatchedCSSRules')
   List<CssRule> getMatchedCssRules(Element element, String pseudoElement) native "DOMWindow_getMatchedCSSRules_Callback";
 
-
-  /** @domName DOMWindow.getSelection */
+  @DocsEditable
+  @DomName('DOMWindow.getSelection')
   DomSelection getSelection() native "DOMWindow_getSelection_Callback";
 
-
-  /** @domName DOMWindow.matchMedia */
+  @DocsEditable
+  @DomName('DOMWindow.matchMedia')
   MediaQueryList matchMedia(String query) native "DOMWindow_matchMedia_Callback";
 
-
-  /** @domName DOMWindow.moveBy */
+  @DocsEditable
+  @DomName('DOMWindow.moveBy')
   void moveBy(num x, num y) native "DOMWindow_moveBy_Callback";
 
-
-  /** @domName DOMWindow.moveTo */
+  @DocsEditable
+  @DomName('DOMWindow.moveTo')
   void moveTo(num x, num y) native "DOMWindow_moveTo_Callback";
 
-
-  /** @domName DOMWindow.open */
+  @DocsEditable
+  @DomName('DOMWindow.open')
   WindowBase open(String url, String name, [String options]) native "DOMWindow_open_Callback";
 
-
-  /** @domName DOMWindow.openDatabase */
+  @DocsEditable
+  @DomName('DOMWindow.openDatabase')
   Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "DOMWindow_openDatabase_Callback";
 
-
-  /** @domName DOMWindow.postMessage */
+  @DocsEditable
+  @DomName('DOMWindow.postMessage')
   void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "DOMWindow_postMessage_Callback";
 
-
-  /** @domName DOMWindow.print */
+  @DocsEditable
+  @DomName('DOMWindow.print')
   void print() native "DOMWindow_print_Callback";
 
-
-  /** @domName DOMWindow.releaseEvents */
+  @DocsEditable
+  @DomName('DOMWindow.releaseEvents')
   void releaseEvents() native "DOMWindow_releaseEvents_Callback";
 
-
-  /** @domName DOMWindow.removeEventListener */
+  @DocsEditable
+  @DomName('DOMWindow.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_removeEventListener_Callback";
 
-
-  /** @domName DOMWindow.requestAnimationFrame */
+  @DocsEditable
+  @DomName('DOMWindow.requestAnimationFrame')
   int requestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_requestAnimationFrame_Callback";
 
-
-  /** @domName DOMWindow.resizeBy */
+  @DocsEditable
+  @DomName('DOMWindow.resizeBy')
   void resizeBy(num x, num y) native "DOMWindow_resizeBy_Callback";
 
-
-  /** @domName DOMWindow.resizeTo */
+  @DocsEditable
+  @DomName('DOMWindow.resizeTo')
   void resizeTo(num width, num height) native "DOMWindow_resizeTo_Callback";
 
-
-  /** @domName DOMWindow.scroll */
+  @DocsEditable
+  @DomName('DOMWindow.scroll')
   void scroll(int x, int y) native "DOMWindow_scroll_Callback";
 
-
-  /** @domName DOMWindow.scrollBy */
+  @DocsEditable
+  @DomName('DOMWindow.scrollBy')
   void scrollBy(int x, int y) native "DOMWindow_scrollBy_Callback";
 
-
-  /** @domName DOMWindow.scrollTo */
+  @DocsEditable
+  @DomName('DOMWindow.scrollTo')
   void scrollTo(int x, int y) native "DOMWindow_scrollTo_Callback";
 
-
-  /** @domName DOMWindow.setInterval */
+  @DocsEditable
+  @DomName('DOMWindow.setInterval')
   int setInterval(TimeoutHandler handler, int timeout) native "DOMWindow_setInterval_Callback";
 
-
-  /** @domName DOMWindow.setTimeout */
+  @DocsEditable
+  @DomName('DOMWindow.setTimeout')
   int setTimeout(TimeoutHandler handler, int timeout) native "DOMWindow_setTimeout_Callback";
 
-
-  /** @domName DOMWindow.showModalDialog */
+  @DocsEditable
+  @DomName('DOMWindow.showModalDialog')
   Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native "DOMWindow_showModalDialog_Callback";
 
-
-  /** @domName DOMWindow.stop */
+  @DocsEditable
+  @DomName('DOMWindow.stop')
   void stop() native "DOMWindow_stop_Callback";
 
-
-  /** @domName DOMWindow.webkitCancelAnimationFrame */
+  @DocsEditable
+  @DomName('DOMWindow.webkitCancelAnimationFrame')
   void webkitCancelAnimationFrame(int id) native "DOMWindow_webkitCancelAnimationFrame_Callback";
 
-
-  /** @domName DOMWindow.webkitConvertPointFromNodeToPage */
+  @DocsEditable
+  @DomName('DOMWindow.webkitConvertPointFromNodeToPage')
   Point webkitConvertPointFromNodeToPage(Node node, Point p) native "DOMWindow_webkitConvertPointFromNodeToPage_Callback";
 
-
-  /** @domName DOMWindow.webkitConvertPointFromPageToNode */
+  @DocsEditable
+  @DomName('DOMWindow.webkitConvertPointFromPageToNode')
   Point webkitConvertPointFromPageToNode(Node node, Point p) native "DOMWindow_webkitConvertPointFromPageToNode_Callback";
 
-
-  /** @domName DOMWindow.webkitRequestAnimationFrame */
+  @DocsEditable
+  @DomName('DOMWindow.webkitRequestAnimationFrame')
   int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_webkitRequestAnimationFrame_Callback";
 
-
-  /** @domName DOMWindow.webkitRequestFileSystem */
+  @DocsEditable
+  @DomName('DOMWindow.webkitRequestFileSystem')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   void requestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native "DOMWindow_webkitRequestFileSystem_Callback";
 
-
-  /** @domName DOMWindow.webkitResolveLocalFileSystemURL */
+  @DocsEditable
+  @DomName('DOMWindow.webkitResolveLocalFileSystemURL')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   void resolveLocalFileSystemUrl(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native "DOMWindow_webkitResolveLocalFileSystemURL_Callback";
 
   Stream<Event> get onContentLoaded => contentLoadedEvent.forTarget(this);
 
-  Stream<Event> get onAbort => abortEvent.forTarget(this);
+  Stream<Event> get onAbort => Element.abortEvent.forTarget(this);
 
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
-  Stream<Event> get onBlur => blurEvent.forTarget(this);
+  Stream<Event> get onBlur => Element.blurEvent.forTarget(this);
 
-  Stream<Event> get onCanPlay => canPlayEvent.forTarget(this);
+  Stream<Event> get onChange => Element.changeEvent.forTarget(this);
 
-  Stream<Event> get onCanPlayThrough => canPlayThroughEvent.forTarget(this);
+  Stream<MouseEvent> get onClick => Element.clickEvent.forTarget(this);
 
-  Stream<Event> get onChange => changeEvent.forTarget(this);
+  Stream<MouseEvent> get onContextMenu => Element.contextMenuEvent.forTarget(this);
 
-  Stream<MouseEvent> get onClick => clickEvent.forTarget(this);
-
-  Stream<MouseEvent> get onContextMenu => contextMenuEvent.forTarget(this);
-
-  Stream<Event> get onDoubleClick => doubleClickEvent.forTarget(this);
+  Stream<Event> get onDoubleClick => Element.doubleClickEvent.forTarget(this);
 
   Stream<DeviceMotionEvent> get onDeviceMotion => deviceMotionEvent.forTarget(this);
 
   Stream<DeviceOrientationEvent> get onDeviceOrientation => deviceOrientationEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrag => dragEvent.forTarget(this);
+  Stream<MouseEvent> get onDrag => Element.dragEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnd => dragEndEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnd => Element.dragEndEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragEnter => dragEnterEvent.forTarget(this);
+  Stream<MouseEvent> get onDragEnter => Element.dragEnterEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragLeave => dragLeaveEvent.forTarget(this);
+  Stream<MouseEvent> get onDragLeave => Element.dragLeaveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragOver => dragOverEvent.forTarget(this);
+  Stream<MouseEvent> get onDragOver => Element.dragOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDragStart => dragStartEvent.forTarget(this);
+  Stream<MouseEvent> get onDragStart => Element.dragStartEvent.forTarget(this);
 
-  Stream<MouseEvent> get onDrop => dropEvent.forTarget(this);
+  Stream<MouseEvent> get onDrop => Element.dropEvent.forTarget(this);
 
-  Stream<Event> get onDurationChange => durationChangeEvent.forTarget(this);
+  Stream<Event> get onError => Element.errorEvent.forTarget(this);
 
-  Stream<Event> get onEmptied => emptiedEvent.forTarget(this);
-
-  Stream<Event> get onEnded => endedEvent.forTarget(this);
-
-  Stream<Event> get onError => errorEvent.forTarget(this);
-
-  Stream<Event> get onFocus => focusEvent.forTarget(this);
+  Stream<Event> get onFocus => Element.focusEvent.forTarget(this);
 
   Stream<HashChangeEvent> get onHashChange => hashChangeEvent.forTarget(this);
 
-  Stream<Event> get onInput => inputEvent.forTarget(this);
+  Stream<Event> get onInput => Element.inputEvent.forTarget(this);
 
-  Stream<Event> get onInvalid => invalidEvent.forTarget(this);
+  Stream<Event> get onInvalid => Element.invalidEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyDown => keyDownEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyDown => Element.keyDownEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyPress => keyPressEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyPress => Element.keyPressEvent.forTarget(this);
 
-  Stream<KeyboardEvent> get onKeyUp => keyUpEvent.forTarget(this);
+  Stream<KeyboardEvent> get onKeyUp => Element.keyUpEvent.forTarget(this);
 
-  Stream<Event> get onLoad => loadEvent.forTarget(this);
-
-  Stream<Event> get onLoadedData => loadedDataEvent.forTarget(this);
-
-  Stream<Event> get onLoadedMetadata => loadedMetadataEvent.forTarget(this);
-
-  Stream<Event> get onLoadStart => loadStartEvent.forTarget(this);
+  Stream<Event> get onLoad => Element.loadEvent.forTarget(this);
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseDown => mouseDownEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseDown => Element.mouseDownEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseMove => mouseMoveEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseMove => Element.mouseMoveEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOut => mouseOutEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOut => Element.mouseOutEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseOver => mouseOverEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseOver => Element.mouseOverEvent.forTarget(this);
 
-  Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this);
+  Stream<MouseEvent> get onMouseUp => Element.mouseUpEvent.forTarget(this);
 
-  Stream<WheelEvent> get onMouseWheel => mouseWheelEvent.forTarget(this);
+  Stream<WheelEvent> get onMouseWheel => Element.mouseWheelEvent.forTarget(this);
 
   Stream<Event> get onOffline => offlineEvent.forTarget(this);
 
@@ -27273,291 +27492,267 @@
 
   Stream<Event> get onPageShow => pageShowEvent.forTarget(this);
 
-  Stream<Event> get onPause => pauseEvent.forTarget(this);
-
-  Stream<Event> get onPlay => playEvent.forTarget(this);
-
-  Stream<Event> get onPlaying => playingEvent.forTarget(this);
-
   Stream<PopStateEvent> get onPopState => popStateEvent.forTarget(this);
 
-  Stream<Event> get onProgress => progressEvent.forTarget(this);
-
-  Stream<Event> get onRateChange => rateChangeEvent.forTarget(this);
-
-  Stream<Event> get onReset => resetEvent.forTarget(this);
+  Stream<Event> get onReset => Element.resetEvent.forTarget(this);
 
   Stream<Event> get onResize => resizeEvent.forTarget(this);
 
-  Stream<Event> get onScroll => scrollEvent.forTarget(this);
+  Stream<Event> get onScroll => Element.scrollEvent.forTarget(this);
 
-  Stream<Event> get onSearch => searchEvent.forTarget(this);
+  Stream<Event> get onSearch => Element.searchEvent.forTarget(this);
 
-  Stream<Event> get onSeeked => seekedEvent.forTarget(this);
-
-  Stream<Event> get onSeeking => seekingEvent.forTarget(this);
-
-  Stream<Event> get onSelect => selectEvent.forTarget(this);
-
-  Stream<Event> get onStalled => stalledEvent.forTarget(this);
+  Stream<Event> get onSelect => Element.selectEvent.forTarget(this);
 
   Stream<StorageEvent> get onStorage => storageEvent.forTarget(this);
 
-  Stream<Event> get onSubmit => submitEvent.forTarget(this);
+  Stream<Event> get onSubmit => Element.submitEvent.forTarget(this);
 
-  Stream<Event> get onSuspend => suspendEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchCancel => Element.touchCancelEvent.forTarget(this);
 
-  Stream<Event> get onTimeUpdate => timeUpdateEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchEnd => Element.touchEndEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchCancel => touchCancelEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this);
 
-  Stream<TouchEvent> get onTouchEnd => touchEndEvent.forTarget(this);
-
-  Stream<TouchEvent> get onTouchMove => touchMoveEvent.forTarget(this);
-
-  Stream<TouchEvent> get onTouchStart => touchStartEvent.forTarget(this);
+  Stream<TouchEvent> get onTouchStart => Element.touchStartEvent.forTarget(this);
 
   Stream<Event> get onUnload => unloadEvent.forTarget(this);
 
-  Stream<Event> get onVolumeChange => volumeChangeEvent.forTarget(this);
-
-  Stream<Event> get onWaiting => waitingEvent.forTarget(this);
-
   Stream<AnimationEvent> get onAnimationEnd => animationEndEvent.forTarget(this);
 
   Stream<AnimationEvent> get onAnimationIteration => animationIterationEvent.forTarget(this);
 
   Stream<AnimationEvent> get onAnimationStart => animationStartEvent.forTarget(this);
 
-  Stream<TransitionEvent> get onTransitionEnd => transitionEndEvent.forTarget(this);
+  Stream<TransitionEvent> get onTransitionEnd => Element.transitionEndEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class WindowEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   WindowEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contentLoaded => this['DOMContentLoaded'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeUnload => this['beforeunload'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlay => this['canplay'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get canPlayThrough => this['canplaythrough'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get change => this['change'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contextMenu => this['contextmenu'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get doubleClick => this['dblclick'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get deviceMotion => this['devicemotion'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get deviceOrientation => this['deviceorientation'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drag => this['drag'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnd => this['dragend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnter => this['dragenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragLeave => this['dragleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragOver => this['dragover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragStart => this['dragstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drop => this['drop'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get durationChange => this['durationchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get emptied => this['emptied'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get ended => this['ended'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get hashChange => this['hashchange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get input => this['input'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get invalid => this['invalid'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyDown => this['keydown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyPress => this['keypress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyUp => this['keyup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedData => this['loadeddata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadedMetadata => this['loadedmetadata'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get loadStart => this['loadstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseDown => this['mousedown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseMove => this['mousemove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOut => this['mouseout'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOver => this['mouseover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseUp => this['mouseup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseWheel => this['mousewheel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get offline => this['offline'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get online => this['online'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pageHide => this['pagehide'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pageShow => this['pageshow'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get pause => this['pause'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get play => this['play'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get playing => this['playing'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get popState => this['popstate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get progress => this['progress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get rateChange => this['ratechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get reset => this['reset'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get resize => this['resize'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get scroll => this['scroll'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get search => this['search'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeked => this['seeked'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get seeking => this['seeking'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get select => this['select'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get stalled => this['stalled'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get storage => this['storage'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get submit => this['submit'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get suspend => this['suspend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get timeUpdate => this['timeupdate'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchCancel => this['touchcancel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchEnd => this['touchend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchMove => this['touchmove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get touchStart => this['touchstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unload => this['unload'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get volumeChange => this['volumechange'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get waiting => this['waiting'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get animationEnd => this['webkitAnimationEnd'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get animationIteration => this['webkitAnimationIteration'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get animationStart => this['webkitAnimationStart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get transitionEnd => this['webkitTransitionEnd'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27567,38 +27762,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName Worker
+@DocsEditable
+@DomName('Worker')
 class Worker extends AbstractWorker {
   Worker.internal() : super.internal();
 
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
 
-  ///@docsEditable true
+  @DocsEditable
   factory Worker(String scriptUrl) => Worker._create(scriptUrl);
   static Worker _create(String scriptUrl) native "Worker_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WorkerEvents get on =>
     new WorkerEvents(this);
 
-
-  /** @domName Worker.postMessage */
+  @DocsEditable
+  @DomName('Worker.postMessage')
   void postMessage(/*SerializedScriptValue*/ message, [List messagePorts]) native "Worker_postMessage_Callback";
 
-
-  /** @domName Worker.terminate */
+  @DocsEditable
+  @DomName('Worker.terminate')
   void terminate() native "Worker_terminate_Callback";
 
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class WorkerEvents extends AbstractWorkerEvents {
-  /// @docsEditable true
+  @DocsEditable
   WorkerEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get message => this['message'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27608,13 +27805,15 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WorkerContext
+@DocsEditable
+@DomName('WorkerContext')
 class WorkerContext extends EventTarget {
   WorkerContext.internal() : super.internal();
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   WorkerContextEvents get on =>
     new WorkerContextEvents(this);
 
@@ -27622,94 +27821,94 @@
 
   static const int TEMPORARY = 0;
 
-
-  /** @domName WorkerContext.indexedDB */
+  @DocsEditable
+  @DomName('WorkerContext.indexedDB')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @Experimental()
   IdbFactory get indexedDB native "WorkerContext_indexedDB_Getter";
 
-
-  /** @domName WorkerContext.location */
+  @DocsEditable
+  @DomName('WorkerContext.location')
   WorkerLocation get location native "WorkerContext_location_Getter";
 
-
-  /** @domName WorkerContext.navigator */
+  @DocsEditable
+  @DomName('WorkerContext.navigator')
   WorkerNavigator get navigator native "WorkerContext_navigator_Getter";
 
-
-  /** @domName WorkerContext.self */
+  @DocsEditable
+  @DomName('WorkerContext.self')
   WorkerContext get self native "WorkerContext_self_Getter";
 
-
-  /** @domName WorkerContext.webkitNotifications */
+  @DocsEditable
+  @DomName('WorkerContext.webkitNotifications')
   NotificationCenter get webkitNotifications native "WorkerContext_webkitNotifications_Getter";
 
-
-  /** @domName WorkerContext.addEventListener */
+  @DocsEditable
+  @DomName('WorkerContext.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WorkerContext_addEventListener_Callback";
 
-
-  /** @domName WorkerContext.clearInterval */
+  @DocsEditable
+  @DomName('WorkerContext.clearInterval')
   void clearInterval(int handle) native "WorkerContext_clearInterval_Callback";
 
-
-  /** @domName WorkerContext.clearTimeout */
+  @DocsEditable
+  @DomName('WorkerContext.clearTimeout')
   void clearTimeout(int handle) native "WorkerContext_clearTimeout_Callback";
 
-
-  /** @domName WorkerContext.close */
+  @DocsEditable
+  @DomName('WorkerContext.close')
   void close() native "WorkerContext_close_Callback";
 
-
-  /** @domName WorkerContext.dispatchEvent */
+  @DocsEditable
+  @DomName('WorkerContext.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "WorkerContext_dispatchEvent_Callback";
 
-
-  /** @domName WorkerContext.importScripts */
+  @DocsEditable
+  @DomName('WorkerContext.importScripts')
   void importScripts() native "WorkerContext_importScripts_Callback";
 
-
-  /** @domName WorkerContext.openDatabase */
+  @DocsEditable
+  @DomName('WorkerContext.openDatabase')
   Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "WorkerContext_openDatabase_Callback";
 
-
-  /** @domName WorkerContext.openDatabaseSync */
+  @DocsEditable
+  @DomName('WorkerContext.openDatabaseSync')
   DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "WorkerContext_openDatabaseSync_Callback";
 
-
-  /** @domName WorkerContext.removeEventListener */
+  @DocsEditable
+  @DomName('WorkerContext.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WorkerContext_removeEventListener_Callback";
 
-
-  /** @domName WorkerContext.setInterval */
+  @DocsEditable
+  @DomName('WorkerContext.setInterval')
   int setInterval(TimeoutHandler handler, int timeout) native "WorkerContext_setInterval_Callback";
 
-
-  /** @domName WorkerContext.setTimeout */
+  @DocsEditable
+  @DomName('WorkerContext.setTimeout')
   int setTimeout(TimeoutHandler handler, int timeout) native "WorkerContext_setTimeout_Callback";
 
-
-  /** @domName WorkerContext.webkitRequestFileSystem */
+  @DocsEditable
+  @DomName('WorkerContext.webkitRequestFileSystem')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   void requestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]) native "WorkerContext_webkitRequestFileSystem_Callback";
 
-
-  /** @domName WorkerContext.webkitRequestFileSystemSync */
+  @DocsEditable
+  @DomName('WorkerContext.webkitRequestFileSystemSync')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   FileSystemSync requestFileSystemSync(int type, int size) native "WorkerContext_webkitRequestFileSystemSync_Callback";
 
-
-  /** @domName WorkerContext.webkitResolveLocalFileSystemSyncURL */
+  @DocsEditable
+  @DomName('WorkerContext.webkitResolveLocalFileSystemSyncURL')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   EntrySync resolveLocalFileSystemSyncUrl(String url) native "WorkerContext_webkitResolveLocalFileSystemSyncURL_Callback";
 
-
-  /** @domName WorkerContext.webkitResolveLocalFileSystemURL */
+  @DocsEditable
+  @DomName('WorkerContext.webkitResolveLocalFileSystemURL')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   void resolveLocalFileSystemUrl(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native "WorkerContext_webkitResolveLocalFileSystemURL_Callback";
@@ -27718,12 +27917,12 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class WorkerContextEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   WorkerContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27733,44 +27932,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WorkerLocation
+@DocsEditable
+@DomName('WorkerLocation')
 class WorkerLocation extends NativeFieldWrapperClass1 {
   WorkerLocation.internal();
 
-
-  /** @domName WorkerLocation.hash */
+  @DocsEditable
+  @DomName('WorkerLocation.hash')
   String get hash native "WorkerLocation_hash_Getter";
 
-
-  /** @domName WorkerLocation.host */
+  @DocsEditable
+  @DomName('WorkerLocation.host')
   String get host native "WorkerLocation_host_Getter";
 
-
-  /** @domName WorkerLocation.hostname */
+  @DocsEditable
+  @DomName('WorkerLocation.hostname')
   String get hostname native "WorkerLocation_hostname_Getter";
 
-
-  /** @domName WorkerLocation.href */
+  @DocsEditable
+  @DomName('WorkerLocation.href')
   String get href native "WorkerLocation_href_Getter";
 
-
-  /** @domName WorkerLocation.pathname */
+  @DocsEditable
+  @DomName('WorkerLocation.pathname')
   String get pathname native "WorkerLocation_pathname_Getter";
 
-
-  /** @domName WorkerLocation.port */
+  @DocsEditable
+  @DomName('WorkerLocation.port')
   String get port native "WorkerLocation_port_Getter";
 
-
-  /** @domName WorkerLocation.protocol */
+  @DocsEditable
+  @DomName('WorkerLocation.protocol')
   String get protocol native "WorkerLocation_protocol_Getter";
 
-
-  /** @domName WorkerLocation.search */
+  @DocsEditable
+  @DomName('WorkerLocation.search')
   String get search native "WorkerLocation_search_Getter";
 
-
-  /** @domName WorkerLocation.toString */
+  @DocsEditable
+  @DomName('WorkerLocation.toString')
   String toString() native "WorkerLocation_toString_Callback";
 
 }
@@ -27781,28 +27981,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WorkerNavigator
+@DocsEditable
+@DomName('WorkerNavigator')
 class WorkerNavigator extends NativeFieldWrapperClass1 {
   WorkerNavigator.internal();
 
-
-  /** @domName WorkerNavigator.appName */
+  @DocsEditable
+  @DomName('WorkerNavigator.appName')
   String get appName native "WorkerNavigator_appName_Getter";
 
-
-  /** @domName WorkerNavigator.appVersion */
+  @DocsEditable
+  @DomName('WorkerNavigator.appVersion')
   String get appVersion native "WorkerNavigator_appVersion_Getter";
 
-
-  /** @domName WorkerNavigator.onLine */
+  @DocsEditable
+  @DomName('WorkerNavigator.onLine')
   bool get onLine native "WorkerNavigator_onLine_Getter";
 
-
-  /** @domName WorkerNavigator.platform */
+  @DocsEditable
+  @DomName('WorkerNavigator.platform')
   String get platform native "WorkerNavigator_platform_Getter";
 
-
-  /** @domName WorkerNavigator.userAgent */
+  @DocsEditable
+  @DomName('WorkerNavigator.userAgent')
   String get userAgent native "WorkerNavigator_userAgent_Getter";
 
 }
@@ -27813,24 +28014,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XPathEvaluator
+@DocsEditable
+@DomName('XPathEvaluator')
 class XPathEvaluator extends NativeFieldWrapperClass1 {
   XPathEvaluator.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory XPathEvaluator() => XPathEvaluator._create();
   static XPathEvaluator _create() native "XPathEvaluator_constructor_Callback";
 
-
-  /** @domName XPathEvaluator.createExpression */
+  @DocsEditable
+  @DomName('XPathEvaluator.createExpression')
   XPathExpression createExpression(String expression, XPathNSResolver resolver) native "XPathEvaluator_createExpression_Callback";
 
-
-  /** @domName XPathEvaluator.createNSResolver */
+  @DocsEditable
+  @DomName('XPathEvaluator.createNSResolver')
   XPathNSResolver createNSResolver(Node nodeResolver) native "XPathEvaluator_createNSResolver_Callback";
 
-
-  /** @domName XPathEvaluator.evaluate */
+  @DocsEditable
+  @DomName('XPathEvaluator.evaluate')
   XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) native "XPathEvaluator_evaluate_Callback";
 
 }
@@ -27841,7 +28043,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XPathException
+@DocsEditable
+@DomName('XPathException')
 class XPathException extends NativeFieldWrapperClass1 {
   XPathException.internal();
 
@@ -27849,20 +28052,20 @@
 
   static const int TYPE_ERR = 52;
 
-
-  /** @domName XPathException.code */
+  @DocsEditable
+  @DomName('XPathException.code')
   int get code native "XPathException_code_Getter";
 
-
-  /** @domName XPathException.message */
+  @DocsEditable
+  @DomName('XPathException.message')
   String get message native "XPathException_message_Getter";
 
-
-  /** @domName XPathException.name */
+  @DocsEditable
+  @DomName('XPathException.name')
   String get name native "XPathException_name_Getter";
 
-
-  /** @domName XPathException.toString */
+  @DocsEditable
+  @DomName('XPathException.toString')
   String toString() native "XPathException_toString_Callback";
 
 }
@@ -27873,12 +28076,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XPathExpression
+@DocsEditable
+@DomName('XPathExpression')
 class XPathExpression extends NativeFieldWrapperClass1 {
   XPathExpression.internal();
 
-
-  /** @domName XPathExpression.evaluate */
+  @DocsEditable
+  @DomName('XPathExpression.evaluate')
   XPathResult evaluate(Node contextNode, int type, XPathResult inResult) native "XPathExpression_evaluate_Callback";
 
 }
@@ -27889,12 +28093,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XPathNSResolver
+@DocsEditable
+@DomName('XPathNSResolver')
 class XPathNSResolver extends NativeFieldWrapperClass1 {
   XPathNSResolver.internal();
 
-
-  /** @domName XPathNSResolver.lookupNamespaceURI */
+  @DocsEditable
+  @DomName('XPathNSResolver.lookupNamespaceURI')
   String lookupNamespaceUri(String prefix) native "XPathNSResolver_lookupNamespaceURI_Callback";
 
 }
@@ -27905,7 +28110,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XPathResult
+@DocsEditable
+@DomName('XPathResult')
 class XPathResult extends NativeFieldWrapperClass1 {
   XPathResult.internal();
 
@@ -27929,40 +28135,40 @@
 
   static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
 
-
-  /** @domName XPathResult.booleanValue */
+  @DocsEditable
+  @DomName('XPathResult.booleanValue')
   bool get booleanValue native "XPathResult_booleanValue_Getter";
 
-
-  /** @domName XPathResult.invalidIteratorState */
+  @DocsEditable
+  @DomName('XPathResult.invalidIteratorState')
   bool get invalidIteratorState native "XPathResult_invalidIteratorState_Getter";
 
-
-  /** @domName XPathResult.numberValue */
+  @DocsEditable
+  @DomName('XPathResult.numberValue')
   num get numberValue native "XPathResult_numberValue_Getter";
 
-
-  /** @domName XPathResult.resultType */
+  @DocsEditable
+  @DomName('XPathResult.resultType')
   int get resultType native "XPathResult_resultType_Getter";
 
-
-  /** @domName XPathResult.singleNodeValue */
+  @DocsEditable
+  @DomName('XPathResult.singleNodeValue')
   Node get singleNodeValue native "XPathResult_singleNodeValue_Getter";
 
-
-  /** @domName XPathResult.snapshotLength */
+  @DocsEditable
+  @DomName('XPathResult.snapshotLength')
   int get snapshotLength native "XPathResult_snapshotLength_Getter";
 
-
-  /** @domName XPathResult.stringValue */
+  @DocsEditable
+  @DomName('XPathResult.stringValue')
   String get stringValue native "XPathResult_stringValue_Getter";
 
-
-  /** @domName XPathResult.iterateNext */
+  @DocsEditable
+  @DomName('XPathResult.iterateNext')
   Node iterateNext() native "XPathResult_iterateNext_Callback";
 
-
-  /** @domName XPathResult.snapshotItem */
+  @DocsEditable
+  @DomName('XPathResult.snapshotItem')
   Node snapshotItem(int index) native "XPathResult_snapshotItem_Callback";
 
 }
@@ -27973,16 +28179,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XMLSerializer
+@DocsEditable
+@DomName('XMLSerializer')
 class XmlSerializer extends NativeFieldWrapperClass1 {
   XmlSerializer.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory XmlSerializer() => XmlSerializer._create();
   static XmlSerializer _create() native "XMLSerializer_constructor_Callback";
 
-
-  /** @domName XMLSerializer.serializeToString */
+  @DocsEditable
+  @DomName('XMLSerializer.serializeToString')
   String serializeToString(Node node) native "XMLSerializer_serializeToString_Callback";
 
 }
@@ -27993,44 +28200,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName XSLTProcessor
+@DocsEditable
+@DomName('XSLTProcessor')
 class XsltProcessor extends NativeFieldWrapperClass1 {
   XsltProcessor.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory XsltProcessor() => XsltProcessor._create();
   static XsltProcessor _create() native "XSLTProcessor_constructor_Callback";
 
-
-  /** @domName XSLTProcessor.clearParameters */
+  @DocsEditable
+  @DomName('XSLTProcessor.clearParameters')
   void clearParameters() native "XSLTProcessor_clearParameters_Callback";
 
-
-  /** @domName XSLTProcessor.getParameter */
+  @DocsEditable
+  @DomName('XSLTProcessor.getParameter')
   String getParameter(String namespaceURI, String localName) native "XSLTProcessor_getParameter_Callback";
 
-
-  /** @domName XSLTProcessor.importStylesheet */
+  @DocsEditable
+  @DomName('XSLTProcessor.importStylesheet')
   void importStylesheet(Node stylesheet) native "XSLTProcessor_importStylesheet_Callback";
 
-
-  /** @domName XSLTProcessor.removeParameter */
+  @DocsEditable
+  @DomName('XSLTProcessor.removeParameter')
   void removeParameter(String namespaceURI, String localName) native "XSLTProcessor_removeParameter_Callback";
 
-
-  /** @domName XSLTProcessor.reset */
+  @DocsEditable
+  @DomName('XSLTProcessor.reset')
   void reset() native "XSLTProcessor_reset_Callback";
 
-
-  /** @domName XSLTProcessor.setParameter */
+  @DocsEditable
+  @DomName('XSLTProcessor.setParameter')
   void setParameter(String namespaceURI, String localName, String value) native "XSLTProcessor_setParameter_Callback";
 
-
-  /** @domName XSLTProcessor.transformToDocument */
+  @DocsEditable
+  @DomName('XSLTProcessor.transformToDocument')
   Document transformToDocument(Node source) native "XSLTProcessor_transformToDocument_Callback";
 
-
-  /** @domName XSLTProcessor.transformToFragment */
+  @DocsEditable
+  @DomName('XSLTProcessor.transformToFragment')
   DocumentFragment transformToFragment(Node source, Document docVal) native "XSLTProcessor_transformToFragment_Callback";
 
 }
@@ -28041,12 +28249,39 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ClientRectList
+@DocsEditable
+@DomName('HTMLAppletElement')
+class _AppletElement extends _Element_Merged {
+  _AppletElement.internal() : super.internal();
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable
+@DomName('HTMLBaseFontElement')
+class _BaseFontElement extends _Element_Merged {
+  _BaseFontElement.internal() : super.internal();
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable
+@DomName('ClientRectList')
 class _ClientRectList extends NativeFieldWrapperClass1 implements List<ClientRect> {
   _ClientRectList.internal();
 
-
-  /** @domName ClientRectList.length */
+  @DocsEditable
+  @DomName('ClientRectList.length')
   int get length native "ClientRectList_length_Getter";
 
   ClientRect operator[](int index) native "ClientRectList_item_Callback";
@@ -28067,50 +28302,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, ClientRect)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(ClientRect element) => Collections.contains(this, element);
+  bool contains(ClientRect element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(ClientRect element)) => Collections.forEach(this, f);
+  void forEach(void f(ClientRect element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(ClientRect element)) => new MappedList<ClientRect, dynamic>(this, f);
+  List mappedBy(f(ClientRect element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<ClientRect> where(bool f(ClientRect element)) => new WhereIterable<ClientRect>(this, f);
+  Iterable<ClientRect> where(bool f(ClientRect element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(ClientRect element)) => Collections.every(this, f);
+  bool every(bool f(ClientRect element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(ClientRect element)) => Collections.any(this, f);
+  bool any(bool f(ClientRect element)) => IterableMixinWorkaround.any(this, f);
 
   List<ClientRect> toList() => new List<ClientRect>.from(this);
   Set<ClientRect> toSet() => new Set<ClientRect>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<ClientRect> take(int n) => new ListView<ClientRect>(this, 0, n);
+  List<ClientRect> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<ClientRect> takeWhile(bool test(ClientRect value)) {
-    return new TakeWhileIterable<ClientRect>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<ClientRect> skip(int n) => new ListView<ClientRect>(this, n, null);
+  List<ClientRect> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<ClientRect> skipWhile(bool test(ClientRect value)) {
-    return new SkipWhileIterable<ClientRect>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   ClientRect firstMatching(bool test(ClientRect value), { ClientRect orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   ClientRect lastMatching(bool test(ClientRect value), {ClientRect orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   ClientRect singleMatching(bool test(ClientRect value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   ClientRect elementAt(int index) {
@@ -28168,16 +28403,36 @@
     throw new StateError("More than one element");
   }
 
-  ClientRect min([int compare(ClientRect a, ClientRect b)]) => Collections.min(this, compare);
+  ClientRect min([int compare(ClientRect a, ClientRect b)]) => IterableMixinWorkaround.min(this, compare);
 
-  ClientRect max([int compare(ClientRect a, ClientRect b)]) => Collections.max(this, compare);
+  ClientRect max([int compare(ClientRect a, ClientRect b)]) => IterableMixinWorkaround.max(this, compare);
 
   ClientRect removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   ClientRect removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(ClientRect element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(ClientRect element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
@@ -28197,8 +28452,8 @@
 
   // -- end List<ClientRect> mixins.
 
-
-  /** @domName ClientRectList.item */
+  @DocsEditable
+  @DomName('ClientRectList.item')
   ClientRect item(int index) native "ClientRectList_item_Callback";
 
 }
@@ -28209,12 +28464,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSRuleList
+@DocsEditable
+@DomName('CSSRuleList')
 class _CssRuleList extends NativeFieldWrapperClass1 implements List<CssRule> {
   _CssRuleList.internal();
 
-
-  /** @domName CSSRuleList.length */
+  @DocsEditable
+  @DomName('CSSRuleList.length')
   int get length native "CSSRuleList_length_Getter";
 
   CssRule operator[](int index) native "CSSRuleList_item_Callback";
@@ -28235,50 +28491,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, CssRule)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(CssRule element) => Collections.contains(this, element);
+  bool contains(CssRule element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(CssRule element)) => Collections.forEach(this, f);
+  void forEach(void f(CssRule element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(CssRule element)) => new MappedList<CssRule, dynamic>(this, f);
+  List mappedBy(f(CssRule element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<CssRule> where(bool f(CssRule element)) => new WhereIterable<CssRule>(this, f);
+  Iterable<CssRule> where(bool f(CssRule element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(CssRule element)) => Collections.every(this, f);
+  bool every(bool f(CssRule element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(CssRule element)) => Collections.any(this, f);
+  bool any(bool f(CssRule element)) => IterableMixinWorkaround.any(this, f);
 
   List<CssRule> toList() => new List<CssRule>.from(this);
   Set<CssRule> toSet() => new Set<CssRule>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<CssRule> take(int n) => new ListView<CssRule>(this, 0, n);
+  List<CssRule> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<CssRule> takeWhile(bool test(CssRule value)) {
-    return new TakeWhileIterable<CssRule>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<CssRule> skip(int n) => new ListView<CssRule>(this, n, null);
+  List<CssRule> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<CssRule> skipWhile(bool test(CssRule value)) {
-    return new SkipWhileIterable<CssRule>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   CssRule firstMatching(bool test(CssRule value), { CssRule orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   CssRule lastMatching(bool test(CssRule value), {CssRule orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   CssRule singleMatching(bool test(CssRule value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   CssRule elementAt(int index) {
@@ -28336,16 +28592,36 @@
     throw new StateError("More than one element");
   }
 
-  CssRule min([int compare(CssRule a, CssRule b)]) => Collections.min(this, compare);
+  CssRule min([int compare(CssRule a, CssRule b)]) => IterableMixinWorkaround.min(this, compare);
 
-  CssRule max([int compare(CssRule a, CssRule b)]) => Collections.max(this, compare);
+  CssRule max([int compare(CssRule a, CssRule b)]) => IterableMixinWorkaround.max(this, compare);
 
   CssRule removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   CssRule removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(CssRule element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(CssRule element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CssRule> from, [int startFrom]) {
@@ -28365,8 +28641,8 @@
 
   // -- end List<CssRule> mixins.
 
-
-  /** @domName CSSRuleList.item */
+  @DocsEditable
+  @DomName('CSSRuleList.item')
   CssRule item(int index) native "CSSRuleList_item_Callback";
 
 }
@@ -28377,12 +28653,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName CSSValueList
+@DocsEditable
+@DomName('CSSValueList')
 class _CssValueList extends CssValue implements List<CssValue> {
   _CssValueList.internal() : super.internal();
 
-
-  /** @domName CSSValueList.length */
+  @DocsEditable
+  @DomName('CSSValueList.length')
   int get length native "CSSValueList_length_Getter";
 
   CssValue operator[](int index) native "CSSValueList_item_Callback";
@@ -28403,50 +28680,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, CssValue)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(CssValue element) => Collections.contains(this, element);
+  bool contains(CssValue element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(CssValue element)) => Collections.forEach(this, f);
+  void forEach(void f(CssValue element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(CssValue element)) => new MappedList<CssValue, dynamic>(this, f);
+  List mappedBy(f(CssValue element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<CssValue> where(bool f(CssValue element)) => new WhereIterable<CssValue>(this, f);
+  Iterable<CssValue> where(bool f(CssValue element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(CssValue element)) => Collections.every(this, f);
+  bool every(bool f(CssValue element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(CssValue element)) => Collections.any(this, f);
+  bool any(bool f(CssValue element)) => IterableMixinWorkaround.any(this, f);
 
   List<CssValue> toList() => new List<CssValue>.from(this);
   Set<CssValue> toSet() => new Set<CssValue>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<CssValue> take(int n) => new ListView<CssValue>(this, 0, n);
+  List<CssValue> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<CssValue> takeWhile(bool test(CssValue value)) {
-    return new TakeWhileIterable<CssValue>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<CssValue> skip(int n) => new ListView<CssValue>(this, n, null);
+  List<CssValue> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<CssValue> skipWhile(bool test(CssValue value)) {
-    return new SkipWhileIterable<CssValue>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   CssValue firstMatching(bool test(CssValue value), { CssValue orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   CssValue lastMatching(bool test(CssValue value), {CssValue orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   CssValue singleMatching(bool test(CssValue value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   CssValue elementAt(int index) {
@@ -28504,16 +28781,36 @@
     throw new StateError("More than one element");
   }
 
-  CssValue min([int compare(CssValue a, CssValue b)]) => Collections.min(this, compare);
+  CssValue min([int compare(CssValue a, CssValue b)]) => IterableMixinWorkaround.min(this, compare);
 
-  CssValue max([int compare(CssValue a, CssValue b)]) => Collections.max(this, compare);
+  CssValue max([int compare(CssValue a, CssValue b)]) => IterableMixinWorkaround.max(this, compare);
 
   CssValue removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   CssValue removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(CssValue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(CssValue element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<CssValue> from, [int startFrom]) {
@@ -28533,8 +28830,8 @@
 
   // -- end List<CssValue> mixins.
 
-
-  /** @domName CSSValueList.item */
+  @DocsEditable
+  @DomName('CSSValueList.item')
   CssValue item(int index) native "CSSValueList_item_Callback";
 
 }
@@ -28545,132 +28842,146 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName HTMLElement
+@DocsEditable
+@DomName('HTMLDirectoryElement')
+class _DirectoryElement extends _Element_Merged {
+  _DirectoryElement.internal() : super.internal();
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable
+@DomName('HTMLElement')
 class _Element_Merged extends Element {
   _Element_Merged.internal() : super.internal();
 
-
-  /** @domName HTMLElement.children */
+  @DocsEditable
+  @DomName('HTMLElement.children')
   HtmlCollection get $dom_children native "HTMLElement_children_Getter";
 
-
-  /** @domName HTMLElement.contentEditable */
+  @DocsEditable
+  @DomName('HTMLElement.contentEditable')
   String get contentEditable native "HTMLElement_contentEditable_Getter";
 
-
-  /** @domName HTMLElement.contentEditable */
+  @DocsEditable
+  @DomName('HTMLElement.contentEditable')
   void set contentEditable(String value) native "HTMLElement_contentEditable_Setter";
 
-
-  /** @domName HTMLElement.dir */
+  @DocsEditable
+  @DomName('HTMLElement.dir')
   String get dir native "HTMLElement_dir_Getter";
 
-
-  /** @domName HTMLElement.dir */
+  @DocsEditable
+  @DomName('HTMLElement.dir')
   void set dir(String value) native "HTMLElement_dir_Setter";
 
-
-  /** @domName HTMLElement.draggable */
+  @DocsEditable
+  @DomName('HTMLElement.draggable')
   bool get draggable native "HTMLElement_draggable_Getter";
 
-
-  /** @domName HTMLElement.draggable */
+  @DocsEditable
+  @DomName('HTMLElement.draggable')
   void set draggable(bool value) native "HTMLElement_draggable_Setter";
 
-
-  /** @domName HTMLElement.hidden */
+  @DocsEditable
+  @DomName('HTMLElement.hidden')
   bool get hidden native "HTMLElement_hidden_Getter";
 
-
-  /** @domName HTMLElement.hidden */
+  @DocsEditable
+  @DomName('HTMLElement.hidden')
   void set hidden(bool value) native "HTMLElement_hidden_Setter";
 
-
-  /** @domName HTMLElement.id */
+  @DocsEditable
+  @DomName('HTMLElement.id')
   String get id native "HTMLElement_id_Getter";
 
-
-  /** @domName HTMLElement.id */
+  @DocsEditable
+  @DomName('HTMLElement.id')
   void set id(String value) native "HTMLElement_id_Setter";
 
-
-  /** @domName HTMLElement.innerHTML */
+  @DocsEditable
+  @DomName('HTMLElement.innerHTML')
   String get innerHtml native "HTMLElement_innerHTML_Getter";
 
-
-  /** @domName HTMLElement.innerHTML */
+  @DocsEditable
+  @DomName('HTMLElement.innerHTML')
   void set innerHtml(String value) native "HTMLElement_innerHTML_Setter";
 
-
-  /** @domName HTMLElement.isContentEditable */
+  @DocsEditable
+  @DomName('HTMLElement.isContentEditable')
   bool get isContentEditable native "HTMLElement_isContentEditable_Getter";
 
-
-  /** @domName HTMLElement.lang */
+  @DocsEditable
+  @DomName('HTMLElement.lang')
   String get lang native "HTMLElement_lang_Getter";
 
-
-  /** @domName HTMLElement.lang */
+  @DocsEditable
+  @DomName('HTMLElement.lang')
   void set lang(String value) native "HTMLElement_lang_Setter";
 
-
-  /** @domName HTMLElement.outerHTML */
+  @DocsEditable
+  @DomName('HTMLElement.outerHTML')
   String get outerHtml native "HTMLElement_outerHTML_Getter";
 
-
-  /** @domName HTMLElement.spellcheck */
+  @DocsEditable
+  @DomName('HTMLElement.spellcheck')
   bool get spellcheck native "HTMLElement_spellcheck_Getter";
 
-
-  /** @domName HTMLElement.spellcheck */
+  @DocsEditable
+  @DomName('HTMLElement.spellcheck')
   void set spellcheck(bool value) native "HTMLElement_spellcheck_Setter";
 
-
-  /** @domName HTMLElement.tabIndex */
+  @DocsEditable
+  @DomName('HTMLElement.tabIndex')
   int get tabIndex native "HTMLElement_tabIndex_Getter";
 
-
-  /** @domName HTMLElement.tabIndex */
+  @DocsEditable
+  @DomName('HTMLElement.tabIndex')
   void set tabIndex(int value) native "HTMLElement_tabIndex_Setter";
 
-
-  /** @domName HTMLElement.title */
+  @DocsEditable
+  @DomName('HTMLElement.title')
   String get title native "HTMLElement_title_Getter";
 
-
-  /** @domName HTMLElement.title */
+  @DocsEditable
+  @DomName('HTMLElement.title')
   void set title(String value) native "HTMLElement_title_Setter";
 
-
-  /** @domName HTMLElement.translate */
+  @DocsEditable
+  @DomName('HTMLElement.translate')
   bool get translate native "HTMLElement_translate_Getter";
 
-
-  /** @domName HTMLElement.translate */
+  @DocsEditable
+  @DomName('HTMLElement.translate')
   void set translate(bool value) native "HTMLElement_translate_Setter";
 
-
-  /** @domName HTMLElement.webkitdropzone */
+  @DocsEditable
+  @DomName('HTMLElement.webkitdropzone')
   String get webkitdropzone native "HTMLElement_webkitdropzone_Getter";
 
-
-  /** @domName HTMLElement.webkitdropzone */
+  @DocsEditable
+  @DomName('HTMLElement.webkitdropzone')
   void set webkitdropzone(String value) native "HTMLElement_webkitdropzone_Setter";
 
-
-  /** @domName HTMLElement.click */
+  @DocsEditable
+  @DomName('HTMLElement.click')
   void click() native "HTMLElement_click_Callback";
 
-
-  /** @domName HTMLElement.insertAdjacentElement */
+  @DocsEditable
+  @DomName('HTMLElement.insertAdjacentElement')
   Element insertAdjacentElement(String where, Element element) native "HTMLElement_insertAdjacentElement_Callback";
 
-
-  /** @domName HTMLElement.insertAdjacentHTML */
+  @DocsEditable
+  @DomName('HTMLElement.insertAdjacentHTML')
   void insertAdjacentHtml(String where, String html) native "HTMLElement_insertAdjacentHTML_Callback";
 
-
-  /** @domName HTMLElement.insertAdjacentText */
+  @DocsEditable
+  @DomName('HTMLElement.insertAdjacentText')
   void insertAdjacentText(String where, String text) native "HTMLElement_insertAdjacentText_Callback";
 
 }
@@ -28681,12 +28992,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName EntryArray
+@DocsEditable
+@DomName('EntryArray')
 class _EntryArray extends NativeFieldWrapperClass1 implements List<Entry> {
   _EntryArray.internal();
 
-
-  /** @domName EntryArray.length */
+  @DocsEditable
+  @DomName('EntryArray.length')
   int get length native "EntryArray_length_Getter";
 
   Entry operator[](int index) native "EntryArray_item_Callback";
@@ -28707,50 +29019,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Entry)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Entry element) => Collections.contains(this, element);
+  bool contains(Entry element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Entry element)) => Collections.forEach(this, f);
+  void forEach(void f(Entry element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Entry element)) => new MappedList<Entry, dynamic>(this, f);
+  List mappedBy(f(Entry element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Entry> where(bool f(Entry element)) => new WhereIterable<Entry>(this, f);
+  Iterable<Entry> where(bool f(Entry element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Entry element)) => Collections.every(this, f);
+  bool every(bool f(Entry element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Entry element)) => Collections.any(this, f);
+  bool any(bool f(Entry element)) => IterableMixinWorkaround.any(this, f);
 
   List<Entry> toList() => new List<Entry>.from(this);
   Set<Entry> toSet() => new Set<Entry>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Entry> take(int n) => new ListView<Entry>(this, 0, n);
+  List<Entry> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Entry> takeWhile(bool test(Entry value)) {
-    return new TakeWhileIterable<Entry>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Entry> skip(int n) => new ListView<Entry>(this, n, null);
+  List<Entry> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Entry> skipWhile(bool test(Entry value)) {
-    return new SkipWhileIterable<Entry>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Entry firstMatching(bool test(Entry value), { Entry orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Entry lastMatching(bool test(Entry value), {Entry orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Entry singleMatching(bool test(Entry value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Entry elementAt(int index) {
@@ -28808,16 +29120,36 @@
     throw new StateError("More than one element");
   }
 
-  Entry min([int compare(Entry a, Entry b)]) => Collections.min(this, compare);
+  Entry min([int compare(Entry a, Entry b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Entry max([int compare(Entry a, Entry b)]) => Collections.max(this, compare);
+  Entry max([int compare(Entry a, Entry b)]) => IterableMixinWorkaround.max(this, compare);
 
   Entry removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Entry removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Entry element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Entry element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
@@ -28837,8 +29169,8 @@
 
   // -- end List<Entry> mixins.
 
-
-  /** @domName EntryArray.item */
+  @DocsEditable
+  @DomName('EntryArray.item')
   Entry item(int index) native "EntryArray_item_Callback";
 
 }
@@ -28849,12 +29181,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName EntryArraySync
+@DocsEditable
+@DomName('EntryArraySync')
 class _EntryArraySync extends NativeFieldWrapperClass1 implements List<EntrySync> {
   _EntryArraySync.internal();
 
-
-  /** @domName EntryArraySync.length */
+  @DocsEditable
+  @DomName('EntryArraySync.length')
   int get length native "EntryArraySync_length_Getter";
 
   EntrySync operator[](int index) native "EntryArraySync_item_Callback";
@@ -28875,50 +29208,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, EntrySync)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(EntrySync element) => Collections.contains(this, element);
+  bool contains(EntrySync element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(EntrySync element)) => Collections.forEach(this, f);
+  void forEach(void f(EntrySync element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(EntrySync element)) => new MappedList<EntrySync, dynamic>(this, f);
+  List mappedBy(f(EntrySync element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<EntrySync> where(bool f(EntrySync element)) => new WhereIterable<EntrySync>(this, f);
+  Iterable<EntrySync> where(bool f(EntrySync element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(EntrySync element)) => Collections.every(this, f);
+  bool every(bool f(EntrySync element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(EntrySync element)) => Collections.any(this, f);
+  bool any(bool f(EntrySync element)) => IterableMixinWorkaround.any(this, f);
 
   List<EntrySync> toList() => new List<EntrySync>.from(this);
   Set<EntrySync> toSet() => new Set<EntrySync>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<EntrySync> take(int n) => new ListView<EntrySync>(this, 0, n);
+  List<EntrySync> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<EntrySync> takeWhile(bool test(EntrySync value)) {
-    return new TakeWhileIterable<EntrySync>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<EntrySync> skip(int n) => new ListView<EntrySync>(this, n, null);
+  List<EntrySync> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<EntrySync> skipWhile(bool test(EntrySync value)) {
-    return new SkipWhileIterable<EntrySync>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   EntrySync firstMatching(bool test(EntrySync value), { EntrySync orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   EntrySync lastMatching(bool test(EntrySync value), {EntrySync orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   EntrySync singleMatching(bool test(EntrySync value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   EntrySync elementAt(int index) {
@@ -28976,16 +29309,36 @@
     throw new StateError("More than one element");
   }
 
-  EntrySync min([int compare(EntrySync a, EntrySync b)]) => Collections.min(this, compare);
+  EntrySync min([int compare(EntrySync a, EntrySync b)]) => IterableMixinWorkaround.min(this, compare);
 
-  EntrySync max([int compare(EntrySync a, EntrySync b)]) => Collections.max(this, compare);
+  EntrySync max([int compare(EntrySync a, EntrySync b)]) => IterableMixinWorkaround.max(this, compare);
 
   EntrySync removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   EntrySync removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(EntrySync element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(EntrySync element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
@@ -29005,8 +29358,8 @@
 
   // -- end List<EntrySync> mixins.
 
-
-  /** @domName EntryArraySync.item */
+  @DocsEditable
+  @DomName('EntryArraySync.item')
   EntrySync item(int index) native "EntryArraySync_item_Callback";
 
 }
@@ -29017,12 +29370,102 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName GamepadList
+@DocsEditable
+@DomName('HTMLFontElement')
+class _FontElement extends _Element_Merged {
+  _FontElement.internal() : super.internal();
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable
+@DomName('HTMLFrameElement')
+class _FrameElement extends _Element_Merged {
+  _FrameElement.internal() : super.internal();
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable
+@DomName('HTMLFrameSetElement')
+class _FrameSetElement extends _Element_Merged {
+  _FrameSetElement.internal() : super.internal();
+
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
+  _FrameSetElementEvents get on =>
+    new _FrameSetElementEvents(this);
+
+}
+
+@DocsEditable
+class _FrameSetElementEvents extends ElementEvents {
+  @DocsEditable
+  _FrameSetElementEvents(EventTarget _ptr) : super(_ptr);
+
+  @DocsEditable
+  EventListenerList get beforeUnload => this['beforeunload'];
+
+  @DocsEditable
+  EventListenerList get blur => this['blur'];
+
+  @DocsEditable
+  EventListenerList get error => this['error'];
+
+  @DocsEditable
+  EventListenerList get focus => this['focus'];
+
+  @DocsEditable
+  EventListenerList get hashChange => this['hashchange'];
+
+  @DocsEditable
+  EventListenerList get load => this['load'];
+
+  @DocsEditable
+  EventListenerList get message => this['message'];
+
+  @DocsEditable
+  EventListenerList get offline => this['offline'];
+
+  @DocsEditable
+  EventListenerList get online => this['online'];
+
+  @DocsEditable
+  EventListenerList get popState => this['popstate'];
+
+  @DocsEditable
+  EventListenerList get resize => this['resize'];
+
+  @DocsEditable
+  EventListenerList get storage => this['storage'];
+
+  @DocsEditable
+  EventListenerList get unload => this['unload'];
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable
+@DomName('GamepadList')
 class _GamepadList extends NativeFieldWrapperClass1 implements List<Gamepad> {
   _GamepadList.internal();
 
-
-  /** @domName GamepadList.length */
+  @DocsEditable
+  @DomName('GamepadList.length')
   int get length native "GamepadList_length_Getter";
 
   Gamepad operator[](int index) native "GamepadList_item_Callback";
@@ -29043,50 +29486,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Gamepad)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Gamepad element) => Collections.contains(this, element);
+  bool contains(Gamepad element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Gamepad element)) => Collections.forEach(this, f);
+  void forEach(void f(Gamepad element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Gamepad element)) => new MappedList<Gamepad, dynamic>(this, f);
+  List mappedBy(f(Gamepad element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Gamepad> where(bool f(Gamepad element)) => new WhereIterable<Gamepad>(this, f);
+  Iterable<Gamepad> where(bool f(Gamepad element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Gamepad element)) => Collections.every(this, f);
+  bool every(bool f(Gamepad element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Gamepad element)) => Collections.any(this, f);
+  bool any(bool f(Gamepad element)) => IterableMixinWorkaround.any(this, f);
 
   List<Gamepad> toList() => new List<Gamepad>.from(this);
   Set<Gamepad> toSet() => new Set<Gamepad>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Gamepad> take(int n) => new ListView<Gamepad>(this, 0, n);
+  List<Gamepad> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Gamepad> takeWhile(bool test(Gamepad value)) {
-    return new TakeWhileIterable<Gamepad>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Gamepad> skip(int n) => new ListView<Gamepad>(this, n, null);
+  List<Gamepad> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Gamepad> skipWhile(bool test(Gamepad value)) {
-    return new SkipWhileIterable<Gamepad>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Gamepad firstMatching(bool test(Gamepad value), { Gamepad orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Gamepad lastMatching(bool test(Gamepad value), {Gamepad orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Gamepad singleMatching(bool test(Gamepad value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Gamepad elementAt(int index) {
@@ -29144,16 +29587,36 @@
     throw new StateError("More than one element");
   }
 
-  Gamepad min([int compare(Gamepad a, Gamepad b)]) => Collections.min(this, compare);
+  Gamepad min([int compare(Gamepad a, Gamepad b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Gamepad max([int compare(Gamepad a, Gamepad b)]) => Collections.max(this, compare);
+  Gamepad max([int compare(Gamepad a, Gamepad b)]) => IterableMixinWorkaround.max(this, compare);
 
   Gamepad removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Gamepad removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Gamepad element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Gamepad element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
@@ -29173,8 +29636,8 @@
 
   // -- end List<Gamepad> mixins.
 
-
-  /** @domName GamepadList.item */
+  @DocsEditable
+  @DomName('GamepadList.item')
   Gamepad item(int index) native "GamepadList_item_Callback";
 
 }
@@ -29185,12 +29648,26 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaStreamList
+@DocsEditable
+@DomName('HTMLMarqueeElement')
+class _MarqueeElement extends _Element_Merged {
+  _MarqueeElement.internal() : super.internal();
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable
+@DomName('MediaStreamList')
 class _MediaStreamList extends NativeFieldWrapperClass1 implements List<MediaStream> {
   _MediaStreamList.internal();
 
-
-  /** @domName MediaStreamList.length */
+  @DocsEditable
+  @DomName('MediaStreamList.length')
   int get length native "MediaStreamList_length_Getter";
 
   MediaStream operator[](int index) native "MediaStreamList_item_Callback";
@@ -29211,50 +29688,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, MediaStream)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(MediaStream element) => Collections.contains(this, element);
+  bool contains(MediaStream element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(MediaStream element)) => Collections.forEach(this, f);
+  void forEach(void f(MediaStream element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(MediaStream element)) => new MappedList<MediaStream, dynamic>(this, f);
+  List mappedBy(f(MediaStream element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<MediaStream> where(bool f(MediaStream element)) => new WhereIterable<MediaStream>(this, f);
+  Iterable<MediaStream> where(bool f(MediaStream element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(MediaStream element)) => Collections.every(this, f);
+  bool every(bool f(MediaStream element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(MediaStream element)) => Collections.any(this, f);
+  bool any(bool f(MediaStream element)) => IterableMixinWorkaround.any(this, f);
 
   List<MediaStream> toList() => new List<MediaStream>.from(this);
   Set<MediaStream> toSet() => new Set<MediaStream>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<MediaStream> take(int n) => new ListView<MediaStream>(this, 0, n);
+  List<MediaStream> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<MediaStream> takeWhile(bool test(MediaStream value)) {
-    return new TakeWhileIterable<MediaStream>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<MediaStream> skip(int n) => new ListView<MediaStream>(this, n, null);
+  List<MediaStream> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<MediaStream> skipWhile(bool test(MediaStream value)) {
-    return new SkipWhileIterable<MediaStream>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   MediaStream firstMatching(bool test(MediaStream value), { MediaStream orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   MediaStream lastMatching(bool test(MediaStream value), {MediaStream orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   MediaStream singleMatching(bool test(MediaStream value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   MediaStream elementAt(int index) {
@@ -29312,16 +29789,36 @@
     throw new StateError("More than one element");
   }
 
-  MediaStream min([int compare(MediaStream a, MediaStream b)]) => Collections.min(this, compare);
+  MediaStream min([int compare(MediaStream a, MediaStream b)]) => IterableMixinWorkaround.min(this, compare);
 
-  MediaStream max([int compare(MediaStream a, MediaStream b)]) => Collections.max(this, compare);
+  MediaStream max([int compare(MediaStream a, MediaStream b)]) => IterableMixinWorkaround.max(this, compare);
 
   MediaStream removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   MediaStream removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(MediaStream element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(MediaStream element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
@@ -29341,8 +29838,8 @@
 
   // -- end List<MediaStream> mixins.
 
-
-  /** @domName MediaStreamList.item */
+  @DocsEditable
+  @DomName('MediaStreamList.item')
   MediaStream item(int index) native "MediaStreamList_item_Callback";
 
 }
@@ -29353,12 +29850,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechInputResultList
+@DocsEditable
+@DomName('SpeechInputResultList')
 class _SpeechInputResultList extends NativeFieldWrapperClass1 implements List<SpeechInputResult> {
   _SpeechInputResultList.internal();
 
-
-  /** @domName SpeechInputResultList.length */
+  @DocsEditable
+  @DomName('SpeechInputResultList.length')
   int get length native "SpeechInputResultList_length_Getter";
 
   SpeechInputResult operator[](int index) native "SpeechInputResultList_item_Callback";
@@ -29379,50 +29877,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SpeechInputResult)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SpeechInputResult element) => Collections.contains(this, element);
+  bool contains(SpeechInputResult element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SpeechInputResult element)) => Collections.forEach(this, f);
+  void forEach(void f(SpeechInputResult element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SpeechInputResult element)) => new MappedList<SpeechInputResult, dynamic>(this, f);
+  List mappedBy(f(SpeechInputResult element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SpeechInputResult> where(bool f(SpeechInputResult element)) => new WhereIterable<SpeechInputResult>(this, f);
+  Iterable<SpeechInputResult> where(bool f(SpeechInputResult element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SpeechInputResult element)) => Collections.every(this, f);
+  bool every(bool f(SpeechInputResult element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SpeechInputResult element)) => Collections.any(this, f);
+  bool any(bool f(SpeechInputResult element)) => IterableMixinWorkaround.any(this, f);
 
   List<SpeechInputResult> toList() => new List<SpeechInputResult>.from(this);
   Set<SpeechInputResult> toSet() => new Set<SpeechInputResult>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SpeechInputResult> take(int n) => new ListView<SpeechInputResult>(this, 0, n);
+  List<SpeechInputResult> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SpeechInputResult> takeWhile(bool test(SpeechInputResult value)) {
-    return new TakeWhileIterable<SpeechInputResult>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SpeechInputResult> skip(int n) => new ListView<SpeechInputResult>(this, n, null);
+  List<SpeechInputResult> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SpeechInputResult> skipWhile(bool test(SpeechInputResult value)) {
-    return new SkipWhileIterable<SpeechInputResult>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SpeechInputResult firstMatching(bool test(SpeechInputResult value), { SpeechInputResult orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SpeechInputResult lastMatching(bool test(SpeechInputResult value), {SpeechInputResult orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SpeechInputResult singleMatching(bool test(SpeechInputResult value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SpeechInputResult elementAt(int index) {
@@ -29480,16 +29978,36 @@
     throw new StateError("More than one element");
   }
 
-  SpeechInputResult min([int compare(SpeechInputResult a, SpeechInputResult b)]) => Collections.min(this, compare);
+  SpeechInputResult min([int compare(SpeechInputResult a, SpeechInputResult b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SpeechInputResult max([int compare(SpeechInputResult a, SpeechInputResult b)]) => Collections.max(this, compare);
+  SpeechInputResult max([int compare(SpeechInputResult a, SpeechInputResult b)]) => IterableMixinWorkaround.max(this, compare);
 
   SpeechInputResult removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SpeechInputResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SpeechInputResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SpeechInputResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
@@ -29509,8 +30027,8 @@
 
   // -- end List<SpeechInputResult> mixins.
 
-
-  /** @domName SpeechInputResultList.item */
+  @DocsEditable
+  @DomName('SpeechInputResultList.item')
   SpeechInputResult item(int index) native "SpeechInputResultList_item_Callback";
 
 }
@@ -29521,12 +30039,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SpeechRecognitionResultList
+@DocsEditable
+@DomName('SpeechRecognitionResultList')
 class _SpeechRecognitionResultList extends NativeFieldWrapperClass1 implements List<SpeechRecognitionResult> {
   _SpeechRecognitionResultList.internal();
 
-
-  /** @domName SpeechRecognitionResultList.length */
+  @DocsEditable
+  @DomName('SpeechRecognitionResultList.length')
   int get length native "SpeechRecognitionResultList_length_Getter";
 
   SpeechRecognitionResult operator[](int index) native "SpeechRecognitionResultList_item_Callback";
@@ -29547,50 +30066,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, SpeechRecognitionResult)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(SpeechRecognitionResult element) => Collections.contains(this, element);
+  bool contains(SpeechRecognitionResult element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(SpeechRecognitionResult element)) => Collections.forEach(this, f);
+  void forEach(void f(SpeechRecognitionResult element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(SpeechRecognitionResult element)) => new MappedList<SpeechRecognitionResult, dynamic>(this, f);
+  List mappedBy(f(SpeechRecognitionResult element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<SpeechRecognitionResult> where(bool f(SpeechRecognitionResult element)) => new WhereIterable<SpeechRecognitionResult>(this, f);
+  Iterable<SpeechRecognitionResult> where(bool f(SpeechRecognitionResult element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(SpeechRecognitionResult element)) => Collections.every(this, f);
+  bool every(bool f(SpeechRecognitionResult element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(SpeechRecognitionResult element)) => Collections.any(this, f);
+  bool any(bool f(SpeechRecognitionResult element)) => IterableMixinWorkaround.any(this, f);
 
   List<SpeechRecognitionResult> toList() => new List<SpeechRecognitionResult>.from(this);
   Set<SpeechRecognitionResult> toSet() => new Set<SpeechRecognitionResult>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<SpeechRecognitionResult> take(int n) => new ListView<SpeechRecognitionResult>(this, 0, n);
+  List<SpeechRecognitionResult> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<SpeechRecognitionResult> takeWhile(bool test(SpeechRecognitionResult value)) {
-    return new TakeWhileIterable<SpeechRecognitionResult>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<SpeechRecognitionResult> skip(int n) => new ListView<SpeechRecognitionResult>(this, n, null);
+  List<SpeechRecognitionResult> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<SpeechRecognitionResult> skipWhile(bool test(SpeechRecognitionResult value)) {
-    return new SkipWhileIterable<SpeechRecognitionResult>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   SpeechRecognitionResult firstMatching(bool test(SpeechRecognitionResult value), { SpeechRecognitionResult orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   SpeechRecognitionResult lastMatching(bool test(SpeechRecognitionResult value), {SpeechRecognitionResult orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   SpeechRecognitionResult singleMatching(bool test(SpeechRecognitionResult value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   SpeechRecognitionResult elementAt(int index) {
@@ -29648,16 +30167,36 @@
     throw new StateError("More than one element");
   }
 
-  SpeechRecognitionResult min([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => Collections.min(this, compare);
+  SpeechRecognitionResult min([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => IterableMixinWorkaround.min(this, compare);
 
-  SpeechRecognitionResult max([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => Collections.max(this, compare);
+  SpeechRecognitionResult max([int compare(SpeechRecognitionResult a, SpeechRecognitionResult b)]) => IterableMixinWorkaround.max(this, compare);
 
   SpeechRecognitionResult removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   SpeechRecognitionResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(SpeechRecognitionResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(SpeechRecognitionResult element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
@@ -29677,8 +30216,8 @@
 
   // -- end List<SpeechRecognitionResult> mixins.
 
-
-  /** @domName SpeechRecognitionResultList.item */
+  @DocsEditable
+  @DomName('SpeechRecognitionResultList.item')
   SpeechRecognitionResult item(int index) native "SpeechRecognitionResultList_item_Callback";
 
 }
@@ -29689,12 +30228,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName StyleSheetList
+@DocsEditable
+@DomName('StyleSheetList')
 class _StyleSheetList extends NativeFieldWrapperClass1 implements List<StyleSheet> {
   _StyleSheetList.internal();
 
-
-  /** @domName StyleSheetList.length */
+  @DocsEditable
+  @DomName('StyleSheetList.length')
   int get length native "StyleSheetList_length_Getter";
 
   StyleSheet operator[](int index) native "StyleSheetList_item_Callback";
@@ -29715,50 +30255,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, StyleSheet)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(StyleSheet element) => Collections.contains(this, element);
+  bool contains(StyleSheet element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(StyleSheet element)) => Collections.forEach(this, f);
+  void forEach(void f(StyleSheet element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(StyleSheet element)) => new MappedList<StyleSheet, dynamic>(this, f);
+  List mappedBy(f(StyleSheet element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<StyleSheet> where(bool f(StyleSheet element)) => new WhereIterable<StyleSheet>(this, f);
+  Iterable<StyleSheet> where(bool f(StyleSheet element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(StyleSheet element)) => Collections.every(this, f);
+  bool every(bool f(StyleSheet element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(StyleSheet element)) => Collections.any(this, f);
+  bool any(bool f(StyleSheet element)) => IterableMixinWorkaround.any(this, f);
 
   List<StyleSheet> toList() => new List<StyleSheet>.from(this);
   Set<StyleSheet> toSet() => new Set<StyleSheet>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<StyleSheet> take(int n) => new ListView<StyleSheet>(this, 0, n);
+  List<StyleSheet> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<StyleSheet> takeWhile(bool test(StyleSheet value)) {
-    return new TakeWhileIterable<StyleSheet>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<StyleSheet> skip(int n) => new ListView<StyleSheet>(this, n, null);
+  List<StyleSheet> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<StyleSheet> skipWhile(bool test(StyleSheet value)) {
-    return new SkipWhileIterable<StyleSheet>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   StyleSheet firstMatching(bool test(StyleSheet value), { StyleSheet orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   StyleSheet lastMatching(bool test(StyleSheet value), {StyleSheet orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   StyleSheet singleMatching(bool test(StyleSheet value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   StyleSheet elementAt(int index) {
@@ -29816,16 +30356,36 @@
     throw new StateError("More than one element");
   }
 
-  StyleSheet min([int compare(StyleSheet a, StyleSheet b)]) => Collections.min(this, compare);
+  StyleSheet min([int compare(StyleSheet a, StyleSheet b)]) => IterableMixinWorkaround.min(this, compare);
 
-  StyleSheet max([int compare(StyleSheet a, StyleSheet b)]) => Collections.max(this, compare);
+  StyleSheet max([int compare(StyleSheet a, StyleSheet b)]) => IterableMixinWorkaround.max(this, compare);
 
   StyleSheet removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   StyleSheet removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(StyleSheet element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(StyleSheet element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
@@ -29845,8 +30405,8 @@
 
   // -- end List<StyleSheet> mixins.
 
-
-  /** @domName StyleSheetList.item */
+  @DocsEditable
+  @DomName('StyleSheetList.item')
   StyleSheet item(int index) native "StyleSheetList_item_Callback";
 
 }
@@ -30268,11 +30828,12 @@
 
   void add(String value) {
     // TODO - figure out if we need to do any validation here
-    // or if the browser natively does enough
+    // or if the browser natively does enough.
     _modify((s) => s.add(value));
   }
 
-  bool remove(String value) {
+  bool remove(Object value) {
+    if (value is! String) return false;
     Set<String> s = readClasses();
     bool result = s.remove(value);
     writeClasses(s);
@@ -30280,7 +30841,7 @@
   }
 
   void addAll(Iterable<String> iterable) {
-    // TODO - see comment above about validation
+    // TODO - see comment above about validation.
     _modify((s) => s.addAll(iterable));
   }
 
@@ -30288,6 +30849,18 @@
     _modify((s) => s.removeAll(iterable));
   }
 
+  void retainAll(Iterable<String> iterable) {
+    _modify((s) => s.retainAll(iterable));
+  }
+
+  void removeMatching(bool test(String name)) {
+    _modify((s) => s.removeMatching(test));
+  }
+
+  void retainMatching(bool test(String name)) {
+    _modify((s) => s.retainMatching(test));
+  }
+
   bool isSubsetOf(Collection<String> collection) =>
     readClasses().isSubsetOf(collection);
 
@@ -30496,6 +31069,21 @@
     return new _EventStream(e, _eventType, useCapture);
   }
 }
+
+/**
+ * A factory to expose DOM events as streams, where the DOM event name has to
+ * be determined on the fly (for example, mouse wheel events).
+ */
+class _CustomEventStreamProvider<T extends Event>
+    implements EventStreamProvider<T> {
+
+  final _eventTypeGetter;
+  const _CustomEventStreamProvider(this._eventTypeGetter);
+
+  Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
+    return new _EventStream(e, _eventTypeGetter(e), useCapture);
+  }
+}
 // Copyright (c) 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.
@@ -31799,7 +32387,7 @@
 }
 
 class _DocumentFragmentFactoryProvider {
-  /** @domName Document.createDocumentFragment */
+  @DomName('Document.createDocumentFragment')
   static DocumentFragment createDocumentFragment() =>
       document.createDocumentFragment();
 
diff --git a/sdk/lib/html/html_common/filtered_element_list.dart b/sdk/lib/html/html_common/filtered_element_list.dart
index 776d2fd..44768c4 100644
--- a/sdk/lib/html/html_common/filtered_element_list.dart
+++ b/sdk/lib/html/html_common/filtered_element_list.dart
@@ -108,9 +108,39 @@
     return result;
   }
 
+  void remove(Object element) {
+    if (element is! Element) return;
+    for (int i = 0; i < length; i++) {
+      Element indexElement = this[i];
+      if (identical(indexElement, element)) {
+        indexElement.remove();
+        return;
+      }
+    }
+  }
+
+  // Operations defined in terms of [Collections]' [remove].
+
+  void removeAll(Iterable elements) {
+    // This should be optimized to not use [remove] directly.
+    Collections.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    Collections.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(Element element)) {
+    Collections.removeMatching(this, test);
+  }
+
+  void retainMatching(bool test(Element element)) {
+    Collections.retainMatching(this, test);
+  }
+
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Element element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
   bool every(bool f(Element element)) => _filtered.every(f);
   bool any(bool f(Element element)) => _filtered.any(f);
@@ -132,7 +162,6 @@
     return this[index];
   }
 
-
   bool get isEmpty => _filtered.isEmpty;
   int get length => _filtered.length;
   Element operator [](int index) => _filtered[index];
diff --git a/sdk/lib/html/html_common/metadata.dart b/sdk/lib/html/html_common/metadata.dart
index d1b2c41..a729ac5 100644
--- a/sdk/lib/html/html_common/metadata.dart
+++ b/sdk/lib/html/html_common/metadata.dart
@@ -15,6 +15,7 @@
   static const String CHROME = "Chrome";
   static const String FIREFOX = "Firefox";
   static const String IE = "Internet Explorer";
+  static const String OPERA = "Opera";
   static const String SAFARI = "Safari";
 
   /// The name of the browser.
@@ -40,3 +41,23 @@
 class Experimental {
   const Experimental();
 }
+
+
+/**
+ * Metadata that specifies the DOM name associated with the element.
+ *
+ * This is used for API generation.
+ *
+ * [name] should be formatted as `interface.member`.
+ */
+class DomName {
+  final String name;
+  const DomName(this.name);
+}
+
+
+/// Metadata that specifies that that member is editable through generated
+/// files.
+class DocsEditable {
+  const DocsEditable();
+}
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index e1b16f6..dd481b1 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -133,26 +133,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBCursor; @docsEditable true
+
+@DocsEditable
+@DomName('IDBCursor')
 class Cursor native "*IDBCursor" {
 
-  /// @domName IDBCursor.direction; @docsEditable true
+  @DocsEditable @DomName('IDBCursor.direction')
   final String direction;
 
-  /// @domName IDBCursor.key; @docsEditable true
-  @_annotation_Creates_IDBKey @_annotation_Returns_IDBKey
+  @DocsEditable @DomName('IDBCursor.key') @_annotation_Creates_IDBKey @_annotation_Returns_IDBKey
   final Object key;
 
-  /// @domName IDBCursor.primaryKey; @docsEditable true
+  @DocsEditable @DomName('IDBCursor.primaryKey')
   final Object primaryKey;
 
-  /// @domName IDBCursor.source; @docsEditable true
+  @DocsEditable @DomName('IDBCursor.source')
   final dynamic source;
 
-  /// @domName IDBCursor.advance; @docsEditable true
+  @DocsEditable @DomName('IDBCursor.advance')
   void advance(int count) native;
 
-  /// @domName IDBCursor.continueFunction; @docsEditable true
   void continueFunction([/*IDBKey*/ key]) {
     if (?key) {
       var key_1 = _convertDartToNative_IDBKey(key);
@@ -163,19 +163,21 @@
     return;
   }
   @JSName('continue')
+  @DocsEditable @DomName('IDBCursor.continue')
   void _continueFunction_1(key) native;
   @JSName('continue')
+  @DocsEditable @DomName('IDBCursor.continue')
   void _continueFunction_2() native;
 
-  /// @domName IDBCursor.delete; @docsEditable true
+  @DocsEditable @DomName('IDBCursor.delete')
   Request delete() native;
 
-  /// @domName IDBCursor.update; @docsEditable true
   Request update(/*any*/ value) {
     var value_1 = convertDartToNative_SerializedScriptValue(value);
     return _update_1(value_1);
   }
   @JSName('update')
+  @DocsEditable @DomName('IDBCursor.update')
   Request _update_1(value) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -183,11 +185,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBCursorWithValue; @docsEditable true
+
+@DocsEditable
+@DomName('IDBCursorWithValue')
 class CursorWithValue extends Cursor native "*IDBCursorWithValue" {
 
-  /// @domName IDBCursorWithValue.value; @docsEditable true
-  @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
+  @DocsEditable @DomName('IDBCursorWithValue.value') @annotation_Creates_SerializedScriptValue @annotation_Returns_SerializedScriptValue
   final Object value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -195,7 +198,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBDatabase
+@DocsEditable
+@DomName('IDBDatabase')
+@SupportedBrowser(SupportedBrowser.CHROME)
+@SupportedBrowser(SupportedBrowser.FIREFOX, '15')
+@SupportedBrowser(SupportedBrowser.IE, '10')
+@Experimental()
 class Database extends EventTarget native "*IDBDatabase" {
 
   Transaction transaction(storeName_OR_storeNames, String mode) {
@@ -222,28 +230,28 @@
 
   static const EventStreamProvider<UpgradeNeededEvent> versionChangeEvent = const EventStreamProvider<UpgradeNeededEvent>('versionchange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   DatabaseEvents get on =>
     new DatabaseEvents(this);
 
-  /// @domName IDBDatabase.name; @docsEditable true
+  @DocsEditable @DomName('IDBDatabase.name')
   final String name;
 
-  /// @domName IDBDatabase.objectStoreNames; @docsEditable true
+  @DocsEditable @DomName('IDBDatabase.objectStoreNames')
   @Returns('DomStringList') @Creates('DomStringList')
   final List<String> objectStoreNames;
 
-  /// @domName IDBDatabase.version; @docsEditable true
+  @DocsEditable @DomName('IDBDatabase.version')
   final dynamic version;
 
-  /// @domName IDBDatabase.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('IDBDatabase.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName IDBDatabase.close; @docsEditable true
+  @DocsEditable @DomName('IDBDatabase.close')
   void close() native;
 
-  /// @domName IDBDatabase.createObjectStore; @docsEditable true
   ObjectStore createObjectStore(String name, [Map options]) {
     if (?options) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -252,19 +260,21 @@
     return _createObjectStore_2(name);
   }
   @JSName('createObjectStore')
+  @DocsEditable @DomName('IDBDatabase.createObjectStore')
   ObjectStore _createObjectStore_1(name, options) native;
   @JSName('createObjectStore')
+  @DocsEditable @DomName('IDBDatabase.createObjectStore')
   ObjectStore _createObjectStore_2(name) native;
 
-  /// @domName IDBDatabase.deleteObjectStore; @docsEditable true
+  @DocsEditable @DomName('IDBDatabase.deleteObjectStore')
   void deleteObjectStore(String name) native;
 
-  /// @domName IDBDatabase.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('IDBDatabase.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName IDBDatabase.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('IDBDatabase.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -274,18 +284,18 @@
   Stream<UpgradeNeededEvent> get onVersionChange => versionChangeEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class DatabaseEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   DatabaseEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get versionChange => this['versionchange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -293,7 +303,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBFactory
+@DocsEditable
+@DomName('IDBFactory')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -310,23 +321,22 @@
   }
 
 
-  /// @domName IDBFactory.cmp; @docsEditable true
   int cmp(/*IDBKey*/ first, /*IDBKey*/ second) {
     var first_1 = _convertDartToNative_IDBKey(first);
     var second_2 = _convertDartToNative_IDBKey(second);
     return _cmp_1(first_1, second_2);
   }
   @JSName('cmp')
+  @DocsEditable @DomName('IDBFactory.cmp')
   int _cmp_1(first, second) native;
 
-  /// @domName IDBFactory.deleteDatabase; @docsEditable true
+  @DocsEditable @DomName('IDBFactory.deleteDatabase')
   VersionChangeRequest deleteDatabase(String name) native;
 
-  /// @domName IDBFactory.open; @docsEditable true
-  @Returns('Request') @Creates('Request') @Creates('Database')
+  @DocsEditable @DomName('IDBFactory.open') @Returns('Request') @Creates('Request') @Creates('Database')
   OpenDBRequest open(String name, [int version]) native;
 
-  /// @domName IDBFactory.webkitGetDatabaseNames; @docsEditable true
+  @DocsEditable @DomName('IDBFactory.webkitGetDatabaseNames')
   Request webkitGetDatabaseNames() native;
 
 }
@@ -335,25 +345,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBIndex; @docsEditable true
+
+@DocsEditable
+@DomName('IDBIndex')
 class Index native "*IDBIndex" {
 
-  /// @domName IDBIndex.keyPath; @docsEditable true
+  @DocsEditable @DomName('IDBIndex.keyPath')
   final dynamic keyPath;
 
-  /// @domName IDBIndex.multiEntry; @docsEditable true
+  @DocsEditable @DomName('IDBIndex.multiEntry')
   final bool multiEntry;
 
-  /// @domName IDBIndex.name; @docsEditable true
+  @DocsEditable @DomName('IDBIndex.name')
   final String name;
 
-  /// @domName IDBIndex.objectStore; @docsEditable true
+  @DocsEditable @DomName('IDBIndex.objectStore')
   final ObjectStore objectStore;
 
-  /// @domName IDBIndex.unique; @docsEditable true
+  @DocsEditable @DomName('IDBIndex.unique')
   final bool unique;
 
-  /// @domName IDBIndex.count; @docsEditable true
   Request count([key_OR_range]) {
     if (!?key_OR_range) {
       return _count_1();
@@ -368,13 +379,15 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('count')
+  @DocsEditable @DomName('IDBIndex.count')
   Request _count_1() native;
   @JSName('count')
+  @DocsEditable @DomName('IDBIndex.count')
   Request _count_2(KeyRange range) native;
   @JSName('count')
+  @DocsEditable @DomName('IDBIndex.count')
   Request _count_3(key) native;
 
-  /// @domName IDBIndex.get; @docsEditable true
   Request get(key) {
     if ((key is KeyRange || key == null)) {
       return _get_1(key);
@@ -386,13 +399,12 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('get')
-  @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
+  @DocsEditable @DomName('IDBIndex.get') @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
   Request _get_1(KeyRange key) native;
   @JSName('get')
-  @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
+  @DocsEditable @DomName('IDBIndex.get') @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
   Request _get_2(key) native;
 
-  /// @domName IDBIndex.getKey; @docsEditable true
   Request getKey(key) {
     if ((key is KeyRange || key == null)) {
       return _getKey_1(key);
@@ -404,13 +416,12 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('getKey')
-  @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue @Creates('ObjectStore')
+  @DocsEditable @DomName('IDBIndex.getKey') @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue @Creates('ObjectStore')
   Request _getKey_1(KeyRange key) native;
   @JSName('getKey')
-  @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue @Creates('ObjectStore')
+  @DocsEditable @DomName('IDBIndex.getKey') @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue @Creates('ObjectStore')
   Request _getKey_2(key) native;
 
-  /// @domName IDBIndex.openCursor; @docsEditable true
   Request openCursor([key_OR_range, String direction]) {
     if (!?key_OR_range &&
         !?direction) {
@@ -435,22 +446,21 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_1() native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_2(KeyRange range) native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_3(KeyRange range, direction) native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_4(key) native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_5(key, direction) native;
 
-  /// @domName IDBIndex.openKeyCursor; @docsEditable true
   Request openKeyCursor([key_OR_range, String direction]) {
     if (!?key_OR_range &&
         !?direction) {
@@ -475,19 +485,19 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('openKeyCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openKeyCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openKeyCursor_1() native;
   @JSName('openKeyCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openKeyCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openKeyCursor_2(KeyRange range) native;
   @JSName('openKeyCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openKeyCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openKeyCursor_3(KeyRange range, direction) native;
   @JSName('openKeyCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openKeyCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openKeyCursor_4(key) native;
   @JSName('openKeyCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBIndex.openKeyCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openKeyCursor_5(key, direction) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -495,7 +505,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBKey; @docsEditable true
+
+@DocsEditable
+@DomName('IDBKey')
 class Key native "*IDBKey" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -503,52 +515,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBKeyRange
+@DocsEditable
+@DomName('IDBKeyRange')
 class KeyRange native "*IDBKeyRange" {
-  /**
-   * @domName IDBKeyRange.only
-   */
+  @DomName('IDBKeyRange.only')
   factory KeyRange.only(/*Key*/ value) =>
       _KeyRangeFactoryProvider.createKeyRange_only(value);
 
-  /**
-   * @domName IDBKeyRange.lowerBound
-   */
+  @DomName('IDBKeyRange.lowerBound')
   factory KeyRange.lowerBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_lowerBound(bound, open);
 
-  /**
-   * @domName IDBKeyRange.upperBound
-   */
+  @DomName('IDBKeyRange.upperBound')
   factory KeyRange.upperBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_upperBound(bound, open);
 
-  /**
-   * @domName KeyRange.bound
-   */
+  @DomName('KeyRange.bound')
   factory KeyRange.bound(/*Key*/ lower, /*Key*/ upper,
                             [bool lowerOpen = false, bool upperOpen = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_bound(
           lower, upper, lowerOpen, upperOpen);
 
 
-  /// @domName IDBKeyRange.lower; @docsEditable true
   dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
   @JSName('lower')
+  @DocsEditable @DomName('IDBKeyRange.lower')
   final dynamic _lower;
 
-  /// @domName IDBKeyRange.lowerOpen; @docsEditable true
+  @DocsEditable @DomName('IDBKeyRange.lowerOpen')
   final bool lowerOpen;
 
-  /// @domName IDBKeyRange.upper; @docsEditable true
   dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
   @JSName('upper')
+  @DocsEditable @DomName('IDBKeyRange.upper')
   final dynamic _upper;
 
-  /// @domName IDBKeyRange.upperOpen; @docsEditable true
+  @DocsEditable @DomName('IDBKeyRange.upperOpen')
   final bool upperOpen;
 
-  /// @domName IDBKeyRange.bound_; @docsEditable true
   static KeyRange bound_(/*IDBKey*/ lower, /*IDBKey*/ upper, [bool lowerOpen, bool upperOpen]) {
     if (?upperOpen) {
       var lower_1 = _convertDartToNative_IDBKey(lower);
@@ -565,13 +569,15 @@
     return _bound__3(lower_5, upper_6);
   }
   @JSName('bound')
+  @DocsEditable @DomName('IDBKeyRange.bound')
   static KeyRange _bound__1(lower, upper, lowerOpen, upperOpen) native;
   @JSName('bound')
+  @DocsEditable @DomName('IDBKeyRange.bound')
   static KeyRange _bound__2(lower, upper, lowerOpen) native;
   @JSName('bound')
+  @DocsEditable @DomName('IDBKeyRange.bound')
   static KeyRange _bound__3(lower, upper) native;
 
-  /// @domName IDBKeyRange.lowerBound_; @docsEditable true
   static KeyRange lowerBound_(/*IDBKey*/ bound, [bool open]) {
     if (?open) {
       var bound_1 = _convertDartToNative_IDBKey(bound);
@@ -581,19 +587,20 @@
     return _lowerBound__2(bound_2);
   }
   @JSName('lowerBound')
+  @DocsEditable @DomName('IDBKeyRange.lowerBound')
   static KeyRange _lowerBound__1(bound, open) native;
   @JSName('lowerBound')
+  @DocsEditable @DomName('IDBKeyRange.lowerBound')
   static KeyRange _lowerBound__2(bound) native;
 
-  /// @domName IDBKeyRange.only_; @docsEditable true
   static KeyRange only_(/*IDBKey*/ value) {
     var value_1 = _convertDartToNative_IDBKey(value);
     return _only__1(value_1);
   }
   @JSName('only')
+  @DocsEditable @DomName('IDBKeyRange.only')
   static KeyRange _only__1(value) native;
 
-  /// @domName IDBKeyRange.upperBound_; @docsEditable true
   static KeyRange upperBound_(/*IDBKey*/ bound, [bool open]) {
     if (?open) {
       var bound_1 = _convertDartToNative_IDBKey(bound);
@@ -603,8 +610,10 @@
     return _upperBound__2(bound_2);
   }
   @JSName('upperBound')
+  @DocsEditable @DomName('IDBKeyRange.upperBound')
   static KeyRange _upperBound__1(bound, open) native;
   @JSName('upperBound')
+  @DocsEditable @DomName('IDBKeyRange.upperBound')
   static KeyRange _upperBound__2(bound) native;
 
 }
@@ -613,26 +622,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBObjectStore; @docsEditable true
+
+@DocsEditable
+@DomName('IDBObjectStore')
 class ObjectStore native "*IDBObjectStore" {
 
-  /// @domName IDBObjectStore.autoIncrement; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.autoIncrement')
   final bool autoIncrement;
 
-  /// @domName IDBObjectStore.indexNames; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.indexNames')
   @Returns('DomStringList') @Creates('DomStringList')
   final List<String> indexNames;
 
-  /// @domName IDBObjectStore.keyPath; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.keyPath')
   final dynamic keyPath;
 
-  /// @domName IDBObjectStore.name; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.name')
   final String name;
 
-  /// @domName IDBObjectStore.transaction; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.transaction')
   final Transaction transaction;
 
-  /// @domName IDBObjectStore.add; @docsEditable true
   Request add(/*any*/ value, [/*IDBKey*/ key]) {
     if (?key) {
       var value_1 = convertDartToNative_SerializedScriptValue(value);
@@ -643,16 +653,15 @@
     return _add_2(value_3);
   }
   @JSName('add')
-  @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
+  @DocsEditable @DomName('IDBObjectStore.add') @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
   Request _add_1(value, key) native;
   @JSName('add')
-  @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
+  @DocsEditable @DomName('IDBObjectStore.add') @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
   Request _add_2(value) native;
 
-  /// @domName IDBObjectStore.clear; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.clear')
   Request clear() native;
 
-  /// @domName IDBObjectStore.count; @docsEditable true
   Request count([key_OR_range]) {
     if (!?key_OR_range) {
       return _count_1();
@@ -667,13 +676,15 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('count')
+  @DocsEditable @DomName('IDBObjectStore.count')
   Request _count_1() native;
   @JSName('count')
+  @DocsEditable @DomName('IDBObjectStore.count')
   Request _count_2(KeyRange range) native;
   @JSName('count')
+  @DocsEditable @DomName('IDBObjectStore.count')
   Request _count_3(key) native;
 
-  /// @domName IDBObjectStore.createIndex; @docsEditable true
   Index createIndex(String name, keyPath, [Map options]) {
     if ((keyPath is List<String> || keyPath == null) &&
         !?options) {
@@ -694,15 +705,18 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('createIndex')
+  @DocsEditable @DomName('IDBObjectStore.createIndex')
   Index _createIndex_1(name, List<String> keyPath) native;
   @JSName('createIndex')
+  @DocsEditable @DomName('IDBObjectStore.createIndex')
   Index _createIndex_2(name, List<String> keyPath, options) native;
   @JSName('createIndex')
+  @DocsEditable @DomName('IDBObjectStore.createIndex')
   Index _createIndex_3(name, String keyPath) native;
   @JSName('createIndex')
+  @DocsEditable @DomName('IDBObjectStore.createIndex')
   Index _createIndex_4(name, String keyPath, options) native;
 
-  /// @domName IDBObjectStore.delete; @docsEditable true
   Request delete(key_OR_keyRange) {
     if ((key_OR_keyRange is KeyRange || key_OR_keyRange == null)) {
       return _delete_1(key_OR_keyRange);
@@ -714,14 +728,15 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('delete')
+  @DocsEditable @DomName('IDBObjectStore.delete')
   Request _delete_1(KeyRange keyRange) native;
   @JSName('delete')
+  @DocsEditable @DomName('IDBObjectStore.delete')
   Request _delete_2(key) native;
 
-  /// @domName IDBObjectStore.deleteIndex; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.deleteIndex')
   void deleteIndex(String name) native;
 
-  /// @domName IDBObjectStore.getObject; @docsEditable true
   Request getObject(key) {
     if ((key is KeyRange || key == null)) {
       return _getObject_1(key);
@@ -733,16 +748,15 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('get')
-  @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
+  @DocsEditable @DomName('IDBObjectStore.get') @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
   Request _getObject_1(KeyRange key) native;
   @JSName('get')
-  @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
+  @DocsEditable @DomName('IDBObjectStore.get') @Returns('Request') @Creates('Request') @annotation_Creates_SerializedScriptValue
   Request _getObject_2(key) native;
 
-  /// @domName IDBObjectStore.index; @docsEditable true
+  @DocsEditable @DomName('IDBObjectStore.index')
   Index index(String name) native;
 
-  /// @domName IDBObjectStore.openCursor; @docsEditable true
   Request openCursor([key_OR_range, String direction]) {
     if (!?key_OR_range &&
         !?direction) {
@@ -767,22 +781,21 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBObjectStore.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_1() native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBObjectStore.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_2(KeyRange range) native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBObjectStore.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_3(KeyRange range, direction) native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBObjectStore.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_4(key) native;
   @JSName('openCursor')
-  @Returns('Request') @Creates('Request') @Creates('Cursor')
+  @DocsEditable @DomName('IDBObjectStore.openCursor') @Returns('Request') @Creates('Request') @Creates('Cursor')
   Request _openCursor_5(key, direction) native;
 
-  /// @domName IDBObjectStore.put; @docsEditable true
   Request put(/*any*/ value, [/*IDBKey*/ key]) {
     if (?key) {
       var value_1 = convertDartToNative_SerializedScriptValue(value);
@@ -793,10 +806,10 @@
     return _put_2(value_3);
   }
   @JSName('put')
-  @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
+  @DocsEditable @DomName('IDBObjectStore.put') @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
   Request _put_1(value, key) native;
   @JSName('put')
-  @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
+  @DocsEditable @DomName('IDBObjectStore.put') @Returns('Request') @Creates('Request') @_annotation_Creates_IDBKey
   Request _put_2(value) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -804,14 +817,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBOpenDBRequest; @docsEditable true
+
+@DocsEditable
+@DomName('IDBOpenDBRequest')
 class OpenDBRequest extends Request implements EventTarget native "*IDBOpenDBRequest" {
 
   static const EventStreamProvider<Event> blockedEvent = const EventStreamProvider<Event>('blocked');
 
   static const EventStreamProvider<VersionChangeEvent> upgradeNeededEvent = const EventStreamProvider<VersionChangeEvent>('upgradeneeded');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   OpenDBRequestEvents get on =>
     new OpenDBRequestEvents(this);
 
@@ -820,15 +836,15 @@
   Stream<VersionChangeEvent> get onUpgradeNeeded => upgradeNeededEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class OpenDBRequestEvents extends RequestEvents {
-  /// @docsEditable true
+  @DocsEditable
   OpenDBRequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blocked => this['blocked'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get upgradeNeeded => this['upgradeneeded'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -836,49 +852,50 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBRequest; @docsEditable true
+
+@DocsEditable
+@DomName('IDBRequest')
 class Request extends EventTarget native "*IDBRequest" {
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 
   static const EventStreamProvider<Event> successEvent = const EventStreamProvider<Event>('success');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   RequestEvents get on =>
     new RequestEvents(this);
 
-  /// @domName IDBRequest.error; @docsEditable true
+  @DocsEditable @DomName('IDBRequest.error')
   final DomError error;
 
-  /// @domName IDBRequest.readyState; @docsEditable true
+  @DocsEditable @DomName('IDBRequest.readyState')
   final String readyState;
 
-  /// @domName IDBRequest.result; @docsEditable true
   dynamic get result => _convertNativeToDart_IDBAny(this._result);
   @JSName('result')
-  @Creates('Null')
+  @DocsEditable @DomName('IDBRequest.result') @Creates('Null')
   final dynamic _result;
 
-  /// @domName IDBRequest.source; @docsEditable true
-  @Creates('Null')
+  @DocsEditable @DomName('IDBRequest.source') @Creates('Null')
   final dynamic source;
 
-  /// @domName IDBRequest.transaction; @docsEditable true
+  @DocsEditable @DomName('IDBRequest.transaction')
   final Transaction transaction;
 
-  /// @domName IDBRequest.webkitErrorMessage; @docsEditable true
+  @DocsEditable @DomName('IDBRequest.webkitErrorMessage')
   final String webkitErrorMessage;
 
-  /// @domName IDBRequest.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('IDBRequest.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName IDBRequest.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('IDBRequest.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName IDBRequest.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('IDBRequest.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onError => errorEvent.forTarget(this);
@@ -886,15 +903,15 @@
   Stream<Event> get onSuccess => successEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class RequestEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   RequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get success => this['success'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -902,7 +919,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBTransaction; @docsEditable true
+
+@DocsEditable
+@DomName('IDBTransaction')
 class Transaction extends EventTarget native "*IDBTransaction" {
 
   static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
@@ -911,38 +930,39 @@
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TransactionEvents get on =>
     new TransactionEvents(this);
 
-  /// @domName IDBTransaction.db; @docsEditable true
+  @DocsEditable @DomName('IDBTransaction.db')
   final Database db;
 
-  /// @domName IDBTransaction.error; @docsEditable true
+  @DocsEditable @DomName('IDBTransaction.error')
   final DomError error;
 
-  /// @domName IDBTransaction.mode; @docsEditable true
+  @DocsEditable @DomName('IDBTransaction.mode')
   final String mode;
 
-  /// @domName IDBTransaction.webkitErrorMessage; @docsEditable true
+  @DocsEditable @DomName('IDBTransaction.webkitErrorMessage')
   final String webkitErrorMessage;
 
-  /// @domName IDBTransaction.abort; @docsEditable true
+  @DocsEditable @DomName('IDBTransaction.abort')
   void abort() native;
 
-  /// @domName IDBTransaction.addEventListener; @docsEditable true
   @JSName('addEventListener')
+  @DocsEditable @DomName('IDBTransaction.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  /// @domName IDBTransaction.dispatchEvent; @docsEditable true
   @JSName('dispatchEvent')
+  @DocsEditable @DomName('IDBTransaction.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native;
 
-  /// @domName IDBTransaction.objectStore; @docsEditable true
+  @DocsEditable @DomName('IDBTransaction.objectStore')
   ObjectStore objectStore(String name) native;
 
-  /// @domName IDBTransaction.removeEventListener; @docsEditable true
   @JSName('removeEventListener')
+  @DocsEditable @DomName('IDBTransaction.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -952,18 +972,18 @@
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class TransactionEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TransactionEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get complete => this['complete'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -971,13 +991,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBVersionChangeEvent; @docsEditable true
+
+@DocsEditable
+@DomName('IDBVersionChangeEvent')
 class UpgradeNeededEvent extends Event native "*IDBVersionChangeEvent" {
 
-  /// @domName IDBVersionChangeEvent.newVersion; @docsEditable true
+  @DocsEditable @DomName('IDBUpgradeNeededEvent.newVersion')
   final int newVersion;
 
-  /// @domName IDBVersionChangeEvent.oldVersion; @docsEditable true
+  @DocsEditable @DomName('IDBUpgradeNeededEvent.oldVersion')
   final int oldVersion;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -985,10 +1007,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBVersionChangeEvent; @docsEditable true
+
+@DocsEditable
+@DomName('IDBVersionChangeEvent')
 class VersionChangeEvent extends Event native "*IDBVersionChangeEvent" {
 
-  /// @domName IDBVersionChangeEvent.version; @docsEditable true
+  @DocsEditable @DomName('IDBVersionChangeEvent.version')
   final String version;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -996,24 +1020,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBVersionChangeRequest; @docsEditable true
+
+@DocsEditable
+@DomName('IDBVersionChangeRequest')
 class VersionChangeRequest extends Request implements EventTarget native "*IDBVersionChangeRequest" {
 
   static const EventStreamProvider<Event> blockedEvent = const EventStreamProvider<Event>('blocked');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   VersionChangeRequestEvents get on =>
     new VersionChangeRequestEvents(this);
 
   Stream<Event> get onBlocked => blockedEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class VersionChangeRequestEvents extends RequestEvents {
-  /// @docsEditable true
+  @DocsEditable
   VersionChangeRequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blocked => this['blocked'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1021,6 +1048,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBAny; @docsEditable true
+
+@DocsEditable
+@DomName('IDBAny')
 class _Any native "*IDBAny" {
 }
diff --git a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
index 74a6598..fbf035e 100644
--- a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
+++ b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
@@ -40,28 +40,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBCursor
+@DocsEditable
+@DomName('IDBCursor')
 class Cursor extends NativeFieldWrapperClass1 {
   Cursor.internal();
 
-
-  /** @domName IDBCursor.direction */
+  @DocsEditable
+  @DomName('IDBCursor.direction')
   String get direction native "IDBCursor_direction_Getter";
 
-
-  /** @domName IDBCursor.key */
+  @DocsEditable
+  @DomName('IDBCursor.key')
   Object get key native "IDBCursor_key_Getter";
 
-
-  /** @domName IDBCursor.primaryKey */
+  @DocsEditable
+  @DomName('IDBCursor.primaryKey')
   Object get primaryKey native "IDBCursor_primaryKey_Getter";
 
-
-  /** @domName IDBCursor.source */
+  @DocsEditable
+  @DomName('IDBCursor.source')
   dynamic get source native "IDBCursor_source_Getter";
 
-
-  /** @domName IDBCursor.advance */
+  @DocsEditable
+  @DomName('IDBCursor.advance')
   void advance(int count) native "IDBCursor_advance_Callback";
 
   void continueFunction([/*IDBKey*/ key]) {
@@ -72,20 +73,20 @@
     _continue_2();
   }
 
-
-  /** @domName IDBCursor.continue_1 */
+  @DocsEditable
+  @DomName('IDBCursor.continue_1')
   void _continue_1(key) native "IDBCursor_continue_1_Callback";
 
-
-  /** @domName IDBCursor.continue_2 */
+  @DocsEditable
+  @DomName('IDBCursor.continue_2')
   void _continue_2() native "IDBCursor_continue_2_Callback";
 
-
-  /** @domName IDBCursor.delete */
+  @DocsEditable
+  @DomName('IDBCursor.delete')
   Request delete() native "IDBCursor_delete_Callback";
 
-
-  /** @domName IDBCursor.update */
+  @DocsEditable
+  @DomName('IDBCursor.update')
   Request update(Object value) native "IDBCursor_update_Callback";
 
 }
@@ -96,12 +97,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBCursorWithValue
+@DocsEditable
+@DomName('IDBCursorWithValue')
 class CursorWithValue extends Cursor {
   CursorWithValue.internal() : super.internal();
 
-
-  /** @domName IDBCursorWithValue.value */
+  @DocsEditable
+  @DomName('IDBCursorWithValue.value')
   Object get value native "IDBCursorWithValue_value_Getter";
 
 }
@@ -112,7 +114,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBDatabase
+@DocsEditable
+@DomName('IDBDatabase')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -126,47 +129,48 @@
 
   static const EventStreamProvider<UpgradeNeededEvent> versionChangeEvent = const EventStreamProvider<UpgradeNeededEvent>('versionchange');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   DatabaseEvents get on =>
     new DatabaseEvents(this);
 
-
-  /** @domName IDBDatabase.name */
+  @DocsEditable
+  @DomName('IDBDatabase.name')
   String get name native "IDBDatabase_name_Getter";
 
-
-  /** @domName IDBDatabase.objectStoreNames */
+  @DocsEditable
+  @DomName('IDBDatabase.objectStoreNames')
   List<String> get objectStoreNames native "IDBDatabase_objectStoreNames_Getter";
 
-
-  /** @domName IDBDatabase.version */
+  @DocsEditable
+  @DomName('IDBDatabase.version')
   dynamic get version native "IDBDatabase_version_Getter";
 
-
-  /** @domName IDBDatabase.addEventListener */
+  @DocsEditable
+  @DomName('IDBDatabase.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_addEventListener_Callback";
 
-
-  /** @domName IDBDatabase.close */
+  @DocsEditable
+  @DomName('IDBDatabase.close')
   void close() native "IDBDatabase_close_Callback";
 
-
-  /** @domName IDBDatabase.createObjectStore */
+  @DocsEditable
+  @DomName('IDBDatabase.createObjectStore')
   ObjectStore createObjectStore(String name, [Map options]) native "IDBDatabase_createObjectStore_Callback";
 
-
-  /** @domName IDBDatabase.deleteObjectStore */
+  @DocsEditable
+  @DomName('IDBDatabase.deleteObjectStore')
   void deleteObjectStore(String name) native "IDBDatabase_deleteObjectStore_Callback";
 
-
-  /** @domName IDBDatabase.dispatchEvent */
+  @DocsEditable
+  @DomName('IDBDatabase.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "IDBDatabase_dispatchEvent_Callback";
 
-
-  /** @domName IDBDatabase.removeEventListener */
+  @DocsEditable
+  @DomName('IDBDatabase.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_removeEventListener_Callback";
 
-  Transaction transaction(storeName_OR_storeNames, /*DOMString*/ mode) {
+  Transaction transaction(storeName_OR_storeNames, String mode) {
     if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
       return _transaction_1(storeName_OR_storeNames, mode);
     }
@@ -179,16 +183,16 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBDatabase.transaction_1 */
+  @DocsEditable
+  @DomName('IDBDatabase.transaction_1')
   Transaction _transaction_1(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_1_Callback";
 
-
-  /** @domName IDBDatabase.transaction_2 */
+  @DocsEditable
+  @DomName('IDBDatabase.transaction_2')
   Transaction _transaction_2(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_2_Callback";
 
-
-  /** @domName IDBDatabase.transaction_3 */
+  @DocsEditable
+  @DomName('IDBDatabase.transaction_3')
   Transaction _transaction_3(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_3_Callback";
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -199,18 +203,18 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class DatabaseEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   DatabaseEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get versionChange => this['versionchange'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -218,7 +222,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBFactory
+@DocsEditable
+@DomName('IDBFactory')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -233,31 +238,31 @@
 
   IdbFactory.internal();
 
-
-  /** @domName IDBFactory.cmp */
+  @DocsEditable
+  @DomName('IDBFactory.cmp')
   int cmp(/*IDBKey*/ first, /*IDBKey*/ second) native "IDBFactory_cmp_Callback";
 
-
-  /** @domName IDBFactory.deleteDatabase */
+  @DocsEditable
+  @DomName('IDBFactory.deleteDatabase')
   VersionChangeRequest deleteDatabase(String name) native "IDBFactory_deleteDatabase_Callback";
 
-  OpenDBRequest open(/*DOMString*/ name, [/*long long*/ version]) {
+  OpenDBRequest open(String name, [int version]) {
     if (?version) {
       return _open_1(name, version);
     }
     return _open_2(name);
   }
 
-
-  /** @domName IDBFactory.open_1 */
+  @DocsEditable
+  @DomName('IDBFactory.open_1')
   OpenDBRequest _open_1(name, version) native "IDBFactory_open_1_Callback";
 
-
-  /** @domName IDBFactory.open_2 */
+  @DocsEditable
+  @DomName('IDBFactory.open_2')
   OpenDBRequest _open_2(name) native "IDBFactory_open_2_Callback";
 
-
-  /** @domName IDBFactory.webkitGetDatabaseNames */
+  @DocsEditable
+  @DomName('IDBFactory.webkitGetDatabaseNames')
   Request webkitGetDatabaseNames() native "IDBFactory_webkitGetDatabaseNames_Callback";
 
 }
@@ -268,28 +273,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBIndex
+@DocsEditable
+@DomName('IDBIndex')
 class Index extends NativeFieldWrapperClass1 {
   Index.internal();
 
-
-  /** @domName IDBIndex.keyPath */
+  @DocsEditable
+  @DomName('IDBIndex.keyPath')
   dynamic get keyPath native "IDBIndex_keyPath_Getter";
 
-
-  /** @domName IDBIndex.multiEntry */
+  @DocsEditable
+  @DomName('IDBIndex.multiEntry')
   bool get multiEntry native "IDBIndex_multiEntry_Getter";
 
-
-  /** @domName IDBIndex.name */
+  @DocsEditable
+  @DomName('IDBIndex.name')
   String get name native "IDBIndex_name_Getter";
 
-
-  /** @domName IDBIndex.objectStore */
+  @DocsEditable
+  @DomName('IDBIndex.objectStore')
   ObjectStore get objectStore native "IDBIndex_objectStore_Getter";
 
-
-  /** @domName IDBIndex.unique */
+  @DocsEditable
+  @DomName('IDBIndex.unique')
   bool get unique native "IDBIndex_unique_Getter";
 
   Request count([key_OR_range]) {
@@ -305,16 +311,16 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBIndex.count_1 */
+  @DocsEditable
+  @DomName('IDBIndex.count_1')
   Request _count_1() native "IDBIndex_count_1_Callback";
 
-
-  /** @domName IDBIndex.count_2 */
+  @DocsEditable
+  @DomName('IDBIndex.count_2')
   Request _count_2(key_OR_range) native "IDBIndex_count_2_Callback";
 
-
-  /** @domName IDBIndex.count_3 */
+  @DocsEditable
+  @DomName('IDBIndex.count_3')
   Request _count_3(key_OR_range) native "IDBIndex_count_3_Callback";
 
   Request get(key) {
@@ -327,12 +333,12 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBIndex.get_1 */
+  @DocsEditable
+  @DomName('IDBIndex.get_1')
   Request _get_1(key) native "IDBIndex_get_1_Callback";
 
-
-  /** @domName IDBIndex.get_2 */
+  @DocsEditable
+  @DomName('IDBIndex.get_2')
   Request _get_2(key) native "IDBIndex_get_2_Callback";
 
   Request getKey(key) {
@@ -345,15 +351,15 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBIndex.getKey_1 */
+  @DocsEditable
+  @DomName('IDBIndex.getKey_1')
   Request _getKey_1(key) native "IDBIndex_getKey_1_Callback";
 
-
-  /** @domName IDBIndex.getKey_2 */
+  @DocsEditable
+  @DomName('IDBIndex.getKey_2')
   Request _getKey_2(key) native "IDBIndex_getKey_2_Callback";
 
-  Request openCursor([key_OR_range, /*DOMString*/ direction]) {
+  Request openCursor([key_OR_range, String direction]) {
     if (!?key_OR_range && !?direction) {
       return _openCursor_1();
     }
@@ -372,27 +378,27 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBIndex.openCursor_1 */
+  @DocsEditable
+  @DomName('IDBIndex.openCursor_1')
   Request _openCursor_1() native "IDBIndex_openCursor_1_Callback";
 
-
-  /** @domName IDBIndex.openCursor_2 */
+  @DocsEditable
+  @DomName('IDBIndex.openCursor_2')
   Request _openCursor_2(key_OR_range) native "IDBIndex_openCursor_2_Callback";
 
-
-  /** @domName IDBIndex.openCursor_3 */
+  @DocsEditable
+  @DomName('IDBIndex.openCursor_3')
   Request _openCursor_3(key_OR_range, direction) native "IDBIndex_openCursor_3_Callback";
 
-
-  /** @domName IDBIndex.openCursor_4 */
+  @DocsEditable
+  @DomName('IDBIndex.openCursor_4')
   Request _openCursor_4(key_OR_range) native "IDBIndex_openCursor_4_Callback";
 
-
-  /** @domName IDBIndex.openCursor_5 */
+  @DocsEditable
+  @DomName('IDBIndex.openCursor_5')
   Request _openCursor_5(key_OR_range, direction) native "IDBIndex_openCursor_5_Callback";
 
-  Request openKeyCursor([key_OR_range, /*DOMString*/ direction]) {
+  Request openKeyCursor([key_OR_range, String direction]) {
     if (!?key_OR_range && !?direction) {
       return _openKeyCursor_1();
     }
@@ -411,24 +417,24 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBIndex.openKeyCursor_1 */
+  @DocsEditable
+  @DomName('IDBIndex.openKeyCursor_1')
   Request _openKeyCursor_1() native "IDBIndex_openKeyCursor_1_Callback";
 
-
-  /** @domName IDBIndex.openKeyCursor_2 */
+  @DocsEditable
+  @DomName('IDBIndex.openKeyCursor_2')
   Request _openKeyCursor_2(key_OR_range) native "IDBIndex_openKeyCursor_2_Callback";
 
-
-  /** @domName IDBIndex.openKeyCursor_3 */
+  @DocsEditable
+  @DomName('IDBIndex.openKeyCursor_3')
   Request _openKeyCursor_3(key_OR_range, direction) native "IDBIndex_openKeyCursor_3_Callback";
 
-
-  /** @domName IDBIndex.openKeyCursor_4 */
+  @DocsEditable
+  @DomName('IDBIndex.openKeyCursor_4')
   Request _openKeyCursor_4(key_OR_range) native "IDBIndex_openKeyCursor_4_Callback";
 
-
-  /** @domName IDBIndex.openKeyCursor_5 */
+  @DocsEditable
+  @DomName('IDBIndex.openKeyCursor_5')
   Request _openKeyCursor_5(key_OR_range, direction) native "IDBIndex_openKeyCursor_5_Callback";
 
 }
@@ -439,7 +445,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBKey
+@DocsEditable
+@DomName('IDBKey')
 class Key extends NativeFieldWrapperClass1 {
   Key.internal();
 
@@ -449,29 +456,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBKeyRange
+@DocsEditable
+@DomName('IDBKeyRange')
 class KeyRange extends NativeFieldWrapperClass1 {
-  /**
-   * @domName IDBKeyRange.only
-   */
+  @DomName('IDBKeyRange.only')
   factory KeyRange.only(/*Key*/ value) =>
       _KeyRangeFactoryProvider.createKeyRange_only(value);
 
-  /**
-   * @domName IDBKeyRange.lowerBound
-   */
+  @DomName('IDBKeyRange.lowerBound')
   factory KeyRange.lowerBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_lowerBound(bound, open);
 
-  /**
-   * @domName IDBKeyRange.upperBound
-   */
+  @DomName('IDBKeyRange.upperBound')
   factory KeyRange.upperBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_upperBound(bound, open);
 
-  /**
-   * @domName KeyRange.bound
-   */
+  @DomName('KeyRange.bound')
   factory KeyRange.bound(/*Key*/ lower, /*Key*/ upper,
                             [bool lowerOpen = false, bool upperOpen = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_bound(
@@ -479,23 +479,23 @@
 
   KeyRange.internal();
 
-
-  /** @domName IDBKeyRange.lower */
+  @DocsEditable
+  @DomName('IDBKeyRange.lower')
   dynamic get lower native "IDBKeyRange_lower_Getter";
 
-
-  /** @domName IDBKeyRange.lowerOpen */
+  @DocsEditable
+  @DomName('IDBKeyRange.lowerOpen')
   bool get lowerOpen native "IDBKeyRange_lowerOpen_Getter";
 
-
-  /** @domName IDBKeyRange.upper */
+  @DocsEditable
+  @DomName('IDBKeyRange.upper')
   dynamic get upper native "IDBKeyRange_upper_Getter";
 
-
-  /** @domName IDBKeyRange.upperOpen */
+  @DocsEditable
+  @DomName('IDBKeyRange.upperOpen')
   bool get upperOpen native "IDBKeyRange_upperOpen_Getter";
 
-  static KeyRange bound_(/*IDBKey*/ lower, /*IDBKey*/ upper, [/*boolean*/ lowerOpen, /*boolean*/ upperOpen]) {
+  static KeyRange bound_(/*IDBKey*/ lower, /*IDBKey*/ upper, [bool lowerOpen, bool upperOpen]) {
     if (?upperOpen) {
       return _bound_1(lower, upper, lowerOpen, upperOpen);
     }
@@ -505,50 +505,50 @@
     return _bound_3(lower, upper);
   }
 
-
-  /** @domName IDBKeyRange.bound_1 */
+  @DocsEditable
+  @DomName('IDBKeyRange.bound_1')
   static KeyRange _bound_1(lower, upper, lowerOpen, upperOpen) native "IDBKeyRange_bound_1_Callback";
 
-
-  /** @domName IDBKeyRange.bound_2 */
+  @DocsEditable
+  @DomName('IDBKeyRange.bound_2')
   static KeyRange _bound_2(lower, upper, lowerOpen) native "IDBKeyRange_bound_2_Callback";
 
-
-  /** @domName IDBKeyRange.bound_3 */
+  @DocsEditable
+  @DomName('IDBKeyRange.bound_3')
   static KeyRange _bound_3(lower, upper) native "IDBKeyRange_bound_3_Callback";
 
-  static KeyRange lowerBound_(/*IDBKey*/ bound, [/*boolean*/ open]) {
+  static KeyRange lowerBound_(/*IDBKey*/ bound, [bool open]) {
     if (?open) {
       return _lowerBound_1(bound, open);
     }
     return _lowerBound_2(bound);
   }
 
-
-  /** @domName IDBKeyRange.lowerBound_1 */
+  @DocsEditable
+  @DomName('IDBKeyRange.lowerBound_1')
   static KeyRange _lowerBound_1(bound, open) native "IDBKeyRange_lowerBound_1_Callback";
 
-
-  /** @domName IDBKeyRange.lowerBound_2 */
+  @DocsEditable
+  @DomName('IDBKeyRange.lowerBound_2')
   static KeyRange _lowerBound_2(bound) native "IDBKeyRange_lowerBound_2_Callback";
 
-
-  /** @domName IDBKeyRange.only_ */
+  @DocsEditable
+  @DomName('IDBKeyRange.only_')
   static KeyRange only_(/*IDBKey*/ value) native "IDBKeyRange_only__Callback";
 
-  static KeyRange upperBound_(/*IDBKey*/ bound, [/*boolean*/ open]) {
+  static KeyRange upperBound_(/*IDBKey*/ bound, [bool open]) {
     if (?open) {
       return _upperBound_1(bound, open);
     }
     return _upperBound_2(bound);
   }
 
-
-  /** @domName IDBKeyRange.upperBound_1 */
+  @DocsEditable
+  @DomName('IDBKeyRange.upperBound_1')
   static KeyRange _upperBound_1(bound, open) native "IDBKeyRange_upperBound_1_Callback";
 
-
-  /** @domName IDBKeyRange.upperBound_2 */
+  @DocsEditable
+  @DomName('IDBKeyRange.upperBound_2')
   static KeyRange _upperBound_2(bound) native "IDBKeyRange_upperBound_2_Callback";
 
 }
@@ -559,47 +559,48 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBObjectStore
+@DocsEditable
+@DomName('IDBObjectStore')
 class ObjectStore extends NativeFieldWrapperClass1 {
   ObjectStore.internal();
 
-
-  /** @domName IDBObjectStore.autoIncrement */
+  @DocsEditable
+  @DomName('IDBObjectStore.autoIncrement')
   bool get autoIncrement native "IDBObjectStore_autoIncrement_Getter";
 
-
-  /** @domName IDBObjectStore.indexNames */
+  @DocsEditable
+  @DomName('IDBObjectStore.indexNames')
   List<String> get indexNames native "IDBObjectStore_indexNames_Getter";
 
-
-  /** @domName IDBObjectStore.keyPath */
+  @DocsEditable
+  @DomName('IDBObjectStore.keyPath')
   dynamic get keyPath native "IDBObjectStore_keyPath_Getter";
 
-
-  /** @domName IDBObjectStore.name */
+  @DocsEditable
+  @DomName('IDBObjectStore.name')
   String get name native "IDBObjectStore_name_Getter";
 
-
-  /** @domName IDBObjectStore.transaction */
+  @DocsEditable
+  @DomName('IDBObjectStore.transaction')
   Transaction get transaction native "IDBObjectStore_transaction_Getter";
 
-  Request add(/*any*/ value, [/*IDBKey*/ key]) {
+  Request add(Object value, [/*IDBKey*/ key]) {
     if (?key) {
       return _add_1(value, key);
     }
     return _add_2(value);
   }
 
-
-  /** @domName IDBObjectStore.add_1 */
+  @DocsEditable
+  @DomName('IDBObjectStore.add_1')
   Request _add_1(value, key) native "IDBObjectStore_add_1_Callback";
 
-
-  /** @domName IDBObjectStore.add_2 */
+  @DocsEditable
+  @DomName('IDBObjectStore.add_2')
   Request _add_2(value) native "IDBObjectStore_add_2_Callback";
 
-
-  /** @domName IDBObjectStore.clear */
+  @DocsEditable
+  @DomName('IDBObjectStore.clear')
   Request clear() native "IDBObjectStore_clear_Callback";
 
   Request count([key_OR_range]) {
@@ -615,19 +616,19 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBObjectStore.count_1 */
+  @DocsEditable
+  @DomName('IDBObjectStore.count_1')
   Request _count_1() native "IDBObjectStore_count_1_Callback";
 
-
-  /** @domName IDBObjectStore.count_2 */
+  @DocsEditable
+  @DomName('IDBObjectStore.count_2')
   Request _count_2(key_OR_range) native "IDBObjectStore_count_2_Callback";
 
-
-  /** @domName IDBObjectStore.count_3 */
+  @DocsEditable
+  @DomName('IDBObjectStore.count_3')
   Request _count_3(key_OR_range) native "IDBObjectStore_count_3_Callback";
 
-  Index createIndex(/*DOMString*/ name, keyPath, [/*Dictionary*/ options]) {
+  Index createIndex(String name, keyPath, [Map options]) {
     if ((name is String || name == null) && (keyPath is List<String> || keyPath == null) && (options is Map || options == null)) {
       return _createIndex_1(name, keyPath, options);
     }
@@ -637,12 +638,12 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBObjectStore.createIndex_1 */
+  @DocsEditable
+  @DomName('IDBObjectStore.createIndex_1')
   Index _createIndex_1(name, keyPath, options) native "IDBObjectStore_createIndex_1_Callback";
 
-
-  /** @domName IDBObjectStore.createIndex_2 */
+  @DocsEditable
+  @DomName('IDBObjectStore.createIndex_2')
   Index _createIndex_2(name, keyPath, options) native "IDBObjectStore_createIndex_2_Callback";
 
   Request delete(key_OR_keyRange) {
@@ -655,16 +656,16 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBObjectStore.delete_1 */
+  @DocsEditable
+  @DomName('IDBObjectStore.delete_1')
   Request _delete_1(key_OR_keyRange) native "IDBObjectStore_delete_1_Callback";
 
-
-  /** @domName IDBObjectStore.delete_2 */
+  @DocsEditable
+  @DomName('IDBObjectStore.delete_2')
   Request _delete_2(key_OR_keyRange) native "IDBObjectStore_delete_2_Callback";
 
-
-  /** @domName IDBObjectStore.deleteIndex */
+  @DocsEditable
+  @DomName('IDBObjectStore.deleteIndex')
   void deleteIndex(String name) native "IDBObjectStore_deleteIndex_Callback";
 
   Request getObject(key) {
@@ -677,19 +678,19 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBObjectStore.get_1 */
+  @DocsEditable
+  @DomName('IDBObjectStore.get_1')
   Request _get_1(key) native "IDBObjectStore_get_1_Callback";
 
-
-  /** @domName IDBObjectStore.get_2 */
+  @DocsEditable
+  @DomName('IDBObjectStore.get_2')
   Request _get_2(key) native "IDBObjectStore_get_2_Callback";
 
-
-  /** @domName IDBObjectStore.index */
+  @DocsEditable
+  @DomName('IDBObjectStore.index')
   Index index(String name) native "IDBObjectStore_index_Callback";
 
-  Request openCursor([key_OR_range, /*DOMString*/ direction]) {
+  Request openCursor([key_OR_range, String direction]) {
     if (!?key_OR_range && !?direction) {
       return _openCursor_1();
     }
@@ -708,39 +709,39 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName IDBObjectStore.openCursor_1 */
+  @DocsEditable
+  @DomName('IDBObjectStore.openCursor_1')
   Request _openCursor_1() native "IDBObjectStore_openCursor_1_Callback";
 
-
-  /** @domName IDBObjectStore.openCursor_2 */
+  @DocsEditable
+  @DomName('IDBObjectStore.openCursor_2')
   Request _openCursor_2(key_OR_range) native "IDBObjectStore_openCursor_2_Callback";
 
-
-  /** @domName IDBObjectStore.openCursor_3 */
+  @DocsEditable
+  @DomName('IDBObjectStore.openCursor_3')
   Request _openCursor_3(key_OR_range, direction) native "IDBObjectStore_openCursor_3_Callback";
 
-
-  /** @domName IDBObjectStore.openCursor_4 */
+  @DocsEditable
+  @DomName('IDBObjectStore.openCursor_4')
   Request _openCursor_4(key_OR_range) native "IDBObjectStore_openCursor_4_Callback";
 
-
-  /** @domName IDBObjectStore.openCursor_5 */
+  @DocsEditable
+  @DomName('IDBObjectStore.openCursor_5')
   Request _openCursor_5(key_OR_range, direction) native "IDBObjectStore_openCursor_5_Callback";
 
-  Request put(/*any*/ value, [/*IDBKey*/ key]) {
+  Request put(Object value, [/*IDBKey*/ key]) {
     if (?key) {
       return _put_1(value, key);
     }
     return _put_2(value);
   }
 
-
-  /** @domName IDBObjectStore.put_1 */
+  @DocsEditable
+  @DomName('IDBObjectStore.put_1')
   Request _put_1(value, key) native "IDBObjectStore_put_1_Callback";
 
-
-  /** @domName IDBObjectStore.put_2 */
+  @DocsEditable
+  @DomName('IDBObjectStore.put_2')
   Request _put_2(value) native "IDBObjectStore_put_2_Callback";
 
 }
@@ -751,7 +752,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBOpenDBRequest
+@DocsEditable
+@DomName('IDBOpenDBRequest')
 class OpenDBRequest extends Request implements EventTarget {
   OpenDBRequest.internal() : super.internal();
 
@@ -759,7 +761,8 @@
 
   static const EventStreamProvider<VersionChangeEvent> upgradeNeededEvent = const EventStreamProvider<VersionChangeEvent>('upgradeneeded');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   OpenDBRequestEvents get on =>
     new OpenDBRequestEvents(this);
 
@@ -769,15 +772,15 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class OpenDBRequestEvents extends RequestEvents {
-  /// @docsEditable true
+  @DocsEditable
   OpenDBRequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blocked => this['blocked'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get upgradeNeeded => this['upgradeneeded'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -787,7 +790,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBRequest
+@DocsEditable
+@DomName('IDBRequest')
 class Request extends EventTarget {
   Request.internal() : super.internal();
 
@@ -795,44 +799,45 @@
 
   static const EventStreamProvider<Event> successEvent = const EventStreamProvider<Event>('success');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   RequestEvents get on =>
     new RequestEvents(this);
 
-
-  /** @domName IDBRequest.error */
+  @DocsEditable
+  @DomName('IDBRequest.error')
   DomError get error native "IDBRequest_error_Getter";
 
-
-  /** @domName IDBRequest.readyState */
+  @DocsEditable
+  @DomName('IDBRequest.readyState')
   String get readyState native "IDBRequest_readyState_Getter";
 
-
-  /** @domName IDBRequest.result */
+  @DocsEditable
+  @DomName('IDBRequest.result')
   dynamic get result native "IDBRequest_result_Getter";
 
-
-  /** @domName IDBRequest.source */
+  @DocsEditable
+  @DomName('IDBRequest.source')
   dynamic get source native "IDBRequest_source_Getter";
 
-
-  /** @domName IDBRequest.transaction */
+  @DocsEditable
+  @DomName('IDBRequest.transaction')
   Transaction get transaction native "IDBRequest_transaction_Getter";
 
-
-  /** @domName IDBRequest.webkitErrorMessage */
+  @DocsEditable
+  @DomName('IDBRequest.webkitErrorMessage')
   String get webkitErrorMessage native "IDBRequest_webkitErrorMessage_Getter";
 
-
-  /** @domName IDBRequest.addEventListener */
+  @DocsEditable
+  @DomName('IDBRequest.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBRequest_addEventListener_Callback";
 
-
-  /** @domName IDBRequest.dispatchEvent */
+  @DocsEditable
+  @DomName('IDBRequest.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "IDBRequest_dispatchEvent_Callback";
 
-
-  /** @domName IDBRequest.removeEventListener */
+  @DocsEditable
+  @DomName('IDBRequest.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBRequest_removeEventListener_Callback";
 
   Stream<Event> get onError => errorEvent.forTarget(this);
@@ -841,15 +846,15 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class RequestEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   RequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get success => this['success'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -859,7 +864,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBTransaction
+@DocsEditable
+@DomName('IDBTransaction')
 class Transaction extends EventTarget {
   Transaction.internal() : super.internal();
 
@@ -869,44 +875,45 @@
 
   static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   TransactionEvents get on =>
     new TransactionEvents(this);
 
-
-  /** @domName IDBTransaction.db */
+  @DocsEditable
+  @DomName('IDBTransaction.db')
   Database get db native "IDBTransaction_db_Getter";
 
-
-  /** @domName IDBTransaction.error */
+  @DocsEditable
+  @DomName('IDBTransaction.error')
   DomError get error native "IDBTransaction_error_Getter";
 
-
-  /** @domName IDBTransaction.mode */
+  @DocsEditable
+  @DomName('IDBTransaction.mode')
   String get mode native "IDBTransaction_mode_Getter";
 
-
-  /** @domName IDBTransaction.webkitErrorMessage */
+  @DocsEditable
+  @DomName('IDBTransaction.webkitErrorMessage')
   String get webkitErrorMessage native "IDBTransaction_webkitErrorMessage_Getter";
 
-
-  /** @domName IDBTransaction.abort */
+  @DocsEditable
+  @DomName('IDBTransaction.abort')
   void abort() native "IDBTransaction_abort_Callback";
 
-
-  /** @domName IDBTransaction.addEventListener */
+  @DocsEditable
+  @DomName('IDBTransaction.addEventListener')
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBTransaction_addEventListener_Callback";
 
-
-  /** @domName IDBTransaction.dispatchEvent */
+  @DocsEditable
+  @DomName('IDBTransaction.dispatchEvent')
   bool $dom_dispatchEvent(Event evt) native "IDBTransaction_dispatchEvent_Callback";
 
-
-  /** @domName IDBTransaction.objectStore */
+  @DocsEditable
+  @DomName('IDBTransaction.objectStore')
   ObjectStore objectStore(String name) native "IDBTransaction_objectStore_Callback";
 
-
-  /** @domName IDBTransaction.removeEventListener */
+  @DocsEditable
+  @DomName('IDBTransaction.removeEventListener')
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBTransaction_removeEventListener_Callback";
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -917,18 +924,18 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class TransactionEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   TransactionEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get complete => this['complete'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -938,16 +945,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBVersionChangeEvent
+@DocsEditable
+@DomName('IDBVersionChangeEvent')
 class UpgradeNeededEvent extends Event {
   UpgradeNeededEvent.internal() : super.internal();
 
-
-  /** @domName IDBUpgradeNeededEvent.newVersion */
+  @DocsEditable
+  @DomName('IDBUpgradeNeededEvent.newVersion')
   int get newVersion native "IDBUpgradeNeededEvent_newVersion_Getter";
 
-
-  /** @domName IDBUpgradeNeededEvent.oldVersion */
+  @DocsEditable
+  @DomName('IDBUpgradeNeededEvent.oldVersion')
   int get oldVersion native "IDBUpgradeNeededEvent_oldVersion_Getter";
 
 }
@@ -958,12 +966,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBVersionChangeEvent
+@DocsEditable
+@DomName('IDBVersionChangeEvent')
 class VersionChangeEvent extends Event {
   VersionChangeEvent.internal() : super.internal();
 
-
-  /** @domName IDBVersionChangeEvent.version */
+  @DocsEditable
+  @DomName('IDBVersionChangeEvent.version')
   String get version native "IDBVersionChangeEvent_version_Getter";
 
 }
@@ -974,13 +983,15 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBVersionChangeRequest
+@DocsEditable
+@DomName('IDBVersionChangeRequest')
 class VersionChangeRequest extends Request implements EventTarget {
   VersionChangeRequest.internal() : super.internal();
 
   static const EventStreamProvider<Event> blockedEvent = const EventStreamProvider<Event>('blocked');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   VersionChangeRequestEvents get on =>
     new VersionChangeRequestEvents(this);
 
@@ -988,12 +999,12 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class VersionChangeRequestEvents extends RequestEvents {
-  /// @docsEditable true
+  @DocsEditable
   VersionChangeRequestEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blocked => this['blocked'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1003,7 +1014,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName IDBAny
+@DocsEditable
+@DomName('IDBAny')
 class _Any extends NativeFieldWrapperClass1 {
   _Any.internal();
 
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
index 08451ab..c0d315c 100644
--- a/sdk/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -751,9 +751,7 @@
     };
     _socket.onClosed = _httpParser.streamDone;
     _socket.onError = _httpParser.streamError;
-    // Ignore errors in the socket output stream as this is getting
-    // the same errors as the socket itself.
-    _socket.outputStream.onError = (e) => null;
+    _socket.outputStream.onError = _httpParser.streamError;
   }
 
   bool _write(List<int> data, [bool copyBuffer = false]);
@@ -876,13 +874,23 @@
   }
 
   void _onError(e) {
-    onError(e);
+    // Don't report errors for a request parser when HTTP parser is in
+    // idle state. Clients can close the connection and cause a
+    // connection reset by peer error which is OK.
+    _onClosed();
+    if (_state == _HttpConnectionBase.IDLE) return;
+
     // Propagate the error to the streams.
-    if (_request != null && _request._streamErrorHandler != null) {
+    if (_request != null &&
+        !_isRequestDone &&
+        _request._streamErrorHandler != null) {
       _request._streamErrorHandler(e);
-    }
-    if (_response != null && _response._streamErrorHandler != null) {
+    } else if (_response != null &&
+        !_isResponseDone &&
+        _response._streamErrorHandler != null) {
       _response._streamErrorHandler(e);
+    } else {
+      onError(e);
     }
     if (_socket != null) _socket.close();
   }
diff --git a/sdk/lib/io/http_parser.dart b/sdk/lib/io/http_parser.dart
index 69d4505..c0a2819 100644
--- a/sdk/lib/io/http_parser.dart
+++ b/sdk/lib/io/http_parser.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -632,13 +632,6 @@
   }
 
   void streamError(e) {
-    // Don't report errors for a request parser when HTTP parser is in
-    // idle state. Clients can close the connection and cause a
-    // connection reset by peer error which is OK.
-    if (_requestParser && _state == _State.START) {
-      closed();
-      return;
-    }
     error(e);
   }
 
diff --git a/sdk/lib/io/path.dart b/sdk/lib/io/path.dart
index 751b479..c59017a 100644
--- a/sdk/lib/io/path.dart
+++ b/sdk/lib/io/path.dart
@@ -7,7 +7,8 @@
 /**
  * A Path is an immutable wrapper of a String, with additional member functions
  * for useful path manipulations and queries.
- * On the Windows platform, Path also converts from and to native paths.
+ * On the Windows platform, Path also converts from native paths to paths using
+ * '/' as a path separator, and vice versa.
  *
  * Joining of paths and path normalization handle '.' and '..' in the usual way.
  */
@@ -23,7 +24,7 @@
    *
    *     new Path(r'c:\a\b').toString() == '/c:/a/b'
    *
-   * A path starting with '/c:/' (or any other character instead of 'c') is
+   * A path starting with a drive letter is
    * treated specially.  Backwards links ('..') cannot cancel the drive letter.
    *
    * If the path is a share path this is recorded in the Path object and
@@ -50,7 +51,9 @@
   bool get isEmpty;
 
   /**
-   * Is this path an absolute path, beginning with a path separator?
+   * Is this path an absolute path, beginning with a '/'?  Note that
+   * Windows paths beginning with '\' or with a drive letter are absolute,
+   * and a leading '/' is added when they are converted to a Path.
    */
   bool get isAbsolute;
 
@@ -60,12 +63,12 @@
   bool get isWindowsShare;
 
   /**
-   * Does this path end with a path separator?
+   * Does this path end with a '/'?
    */
   bool get hasTrailingSeparator;
 
   /**
-   * Does this path contain no consecutive path separators, no segments that
+   * Does this path contain no consecutive '/'s, no segments that
    * are '.' unless the path is exactly '.', and segments that are '..' only
    * as the leading segments on a relative path?
    */
@@ -74,7 +77,7 @@
   /**
    * Make a path canonical by dropping segments that are '.', cancelling
    * segments that are '..' with preceding segments, if possible,
-   * and combining consecutive path separators.  Leading '..' segments
+   * and combining consecutive '/'s.  Leading '..' segments
    * are kept on relative paths, and dropped from absolute paths.
    */
   Path canonicalize();
@@ -83,7 +86,7 @@
    * Joins the relative path [further] to this path.  Canonicalizes the
    * resulting joined path using [canonicalize],
    * interpreting '.' and '..' as directory traversal commands, and removing
-   * consecutive path separators.
+   * consecutive '/'s.
    *
    * If [further] is an absolute path, an IllegalArgument exception is thrown.
    *
@@ -98,8 +101,9 @@
    *   containing `'a/b/e'`.
    *
    * Note that the join operation does not drop the last segment of the
-   * base path, the way URL joining does.  That would be accomplished with
-   * basepath.directoryPath.join(further).
+   * base path, the way URL joining does.  To join basepath to further using
+   * URL semantics, use
+   *    [:basepath.directoryPath.join(further):].
    *
    * If you want to avoid joins that traverse
    * parent directories in the base, you can check whether
@@ -114,16 +118,21 @@
    * Throws an exception if such a path is impossible.
    * For example, if [base] is '../../a/b' and [this] is '.'.
    * The computation is independent of the file system and current directory.
+   *
+   * To compute a relative path using URL semantics, where the final
+   * path component of the base is dropped unless it ends with a slash,
+   * call [: a.relativeTo(b.directoryPath) :] instead of [: a.relativeTo(b) :].
    */
   Path relativeTo(Path base);
 
   /**
    * Converts a path to a string using the native filesystem's conventions.
    *
-   * On Windows, converts path separators to backwards slashes, and removes
-   * the leading path separator if the path starts with a drive specification.
+   * On Windows, converts '/'s to backwards slashes, and removes
+   * the leading '/' if the path starts with a drive specification.
    * For most valid Windows paths, this should be the inverse of the
-   * constructor Path.fromNative.
+   * conversion that the constructor new Path() performs.  If the path is
+   * a Windows share, restores the '\\' at the start of the path.
    */
   String toNativePath();
 
@@ -135,10 +144,10 @@
   String toString();
 
   /**
-   * Gets the segments of a Path.  Paths beginning or ending with the
-   * path separator do not have leading or terminating empty segments.
-   * Other than that, the segments are just the result of splitting the
-   * path on the path separator.
+   * Gets the segments of a Path. The segments are just the result of
+   * splitting the path on any '/' characters, except that a '/' at the
+   * beginning does not create an empty segment before it, and a '/' at
+   * the end does not create an empty segment after it.
    *
    *     new Path('/a/b/c/d').segments() == ['a', 'b', 'c', d'];
    *     new Path(' foo bar //../') == [' foo bar ', '', '..'];
@@ -146,18 +155,18 @@
   List<String> segments();
 
   /**
-   * Appends [finalSegment] to a path as a new segment.  Adds a path separator
+   * Appends [finalSegment] to a path as a new segment.  Adds a '/'
    * between the path and [finalSegment] if the path does not already end in
-   * a path separator.  The path is not canonicalized, and [finalSegment] may
-   * contain path separators.
+   * a '/'.  The path is not canonicalized, and [finalSegment] may
+   * contain '/'s.
    */
   Path append(String finalSegment);
 
   /**
-   * Drops the final path separator and whatever follows it from this Path,
-   * and returns the resulting Path object.  If the only path separator in
+   * Drops the final '/' and whatever follows it from this Path,
+   * and returns the resulting Path object.  If the only '/' in
    * this Path is the first character, returns '/' instead of the empty string.
-   * If there is no path separator in the Path, returns the empty string.
+   * If there is no '/' in the Path, returns the empty string.
    *
    *     new Path('../images/dot.gif').directoryPath == '../images'
    *     new Path('/usr/geoffrey/www/').directoryPath == '/usr/geoffrey/www'
@@ -168,8 +177,8 @@
   Path get directoryPath;
 
   /**
-   * The part of the path after the last path separator, or the entire path if
-   * it contains no path separator.
+   * The part of the path after the last '/', or the entire path if
+   * it contains no '/'.
    *
    *     new Path('images/DSC_0027.jpg).filename == 'DSC_0027.jpg'
    *     new Path('users/fred/').filename == ''
diff --git a/sdk/lib/io/path_impl.dart b/sdk/lib/io/path_impl.dart
index a7623b0..2ea2fea 100644
--- a/sdk/lib/io/path_impl.dart
+++ b/sdk/lib/io/path_impl.dart
@@ -45,53 +45,68 @@
   String toString() => _path;
 
   Path relativeTo(Path base) {
-    // Throws exception if an unimplemented or impossible case is reached.
     // Returns a path "relative" such that
     //    base.join(relative) == this.canonicalize.
-    // Throws an exception if no such path exists, or the case is not
-    // implemented yet.
-    var basePath = base.toString();
-    if (base.isAbsolute && _path.startsWith(basePath) &&
-        base.isWindowsShare == isWindowsShare) {
-      if (_path == basePath) return new Path('.');
-      if (base.hasTrailingSeparator) {
-        return new Path(_path.substring(basePath.length));
-      }
-      if (_path[basePath.length] == '/') {
-        return new Path(_path.substring(basePath.length + 1));
-      }
-    } else if (base.isAbsolute && isAbsolute &&
-               base.isWindowsShare == isWindowsShare) {
-      List<String> baseSegments = base.canonicalize().segments();
-      List<String> pathSegments = canonicalize().segments();
-      int common = 0;
-      int length = min(pathSegments.length, baseSegments.length);
-      while (common < length && pathSegments[common] == baseSegments[common]) {
-        common++;
-      }
-      final sb = new StringBuffer();
-
-      for (int i = common + 1; i < baseSegments.length; i++) {
-        sb.add('../');
-      }
-      if (base.hasTrailingSeparator) {
-        sb.add('../');
-      }
-      for (int i = common; i < pathSegments.length - 1; i++) {
-        sb.add('${pathSegments[i]}/');
-      }
-      sb.add('${pathSegments.last}');
-      if (hasTrailingSeparator) {
-        sb.add('/');
-      }
-      return new Path(sb.toString());
+    // Throws exception if an impossible case is reached.
+    if (base.isAbsolute != isAbsolute ||
+        base.isWindowsShare != isWindowsShare) {
+      throw new ArgumentError(
+          "Invalid case of Path.relativeTo(base):\n"
+          "  Path and base must both be relative, or both absolute.\n"
+          "  Arguments: $_path.relativeTo($base)");
     }
-    throw new UnimplementedError(
-      "Unimplemented case of Path.relativeTo(base):\n"
-      "  Only absolute paths are handled at present.\n"
-      "  Arguments: $_path.relativeTo($base)");
+
+    var basePath = base.toString();
+    if (_path.startsWith(basePath)) {
+      if (_path == basePath) return new Path('.');
+      // There must be a '/' at the end of the match, or immediately after.
+      int matchEnd = basePath.length;
+      if (_path[matchEnd - 1] == '/' || _path[matchEnd] == '/') {
+        // Drop any extra '/' characters at matchEnd
+        while (matchEnd < _path.length && _path[matchEnd] == '/') {
+          matchEnd++;
+        }
+        return new Path(_path.substring(matchEnd)).canonicalize();
+      }
+    }
+
+    List<String> baseSegments = base.canonicalize().segments();
+    List<String> pathSegments = canonicalize().segments();
+    if (baseSegments.length == 1 && baseSegments[0] == '.') {
+      baseSegments = [];
+    }
+    if (pathSegments.length == 1 && pathSegments[0] == '.') {
+      pathSegments = [];
+    }
+    int common = 0;
+    int length = min(pathSegments.length, baseSegments.length);
+    while (common < length && pathSegments[common] == baseSegments[common]) {
+      common++;
+    }
+    final segments = new List<String>();
+
+    if (common < baseSegments.length && baseSegments[common] == '..') {
+      throw new ArgumentError(
+          "Invalid case of Path.relativeTo(base):\n"
+          "  Base path has more '..'s than path does."
+          "  Arguments: $_path.relativeTo($base)");
+    }
+    for (int i = common; i < baseSegments.length; i++) {
+      segments.add('..');
+    }
+    for (int i = common; i < pathSegments.length; i++) {
+      segments.add('${pathSegments[i]}');
+    }
+    if (segments.isEmpty) {
+      segments.add('.');
+    }
+    if (hasTrailingSeparator) {
+        segments.add('');
+    }
+    return new Path(Strings.join(segments, '/'));
   }
 
+
   Path join(Path further) {
     if (further.isAbsolute) {
       throw new ArgumentError(
diff --git a/sdk/lib/io/socket_stream_impl.dart b/sdk/lib/io/socket_stream_impl.dart
index ffa0cbf..7770932 100644
--- a/sdk/lib/io/socket_stream_impl.dart
+++ b/sdk/lib/io/socket_stream_impl.dart
@@ -129,13 +129,34 @@
   }
 
   bool _write(List<int> buffer, int offset, int len, bool copyBuffer) {
-    if (_closing || _closed) throw new StreamException("Stream closed");
+    if (_closing || _closed) {
+      if (_error) return false;
+      _error = true;
+      var e = new StreamException.streamClosed();
+      if (_onError != null) {
+        _onError(e);
+        return false;
+      } else {
+        throw e;
+      }
+    }
     int bytesWritten = 0;
     if (_pendingWrites.isEmpty) {
       // If nothing is buffered write as much as possible and buffer
       // the rest.
-      bytesWritten = _socket.writeList(buffer, offset, len);
-      if (bytesWritten == len) return true;
+      try {
+        bytesWritten = _socket.writeList(buffer, offset, len);
+        if (bytesWritten == len) return true;
+      } catch (e) {
+        if (_error) return false;
+        _error = true;
+        if (_onError != null) {
+          _onError(e);
+          return false;
+        } else {
+          throw e;
+        }
+      }
     }
 
     // Place remaining data on the pending writes queue.
@@ -163,7 +184,7 @@
         bytesWritten = _socket.writeList(buffer, offset, bytesToWrite);
       } catch (e) {
         _pendingWrites.clear();
-        _onSocketError(e);
+        if (_onError != null) _onError(e);
         return;
       }
       _pendingWrites.removeBytes(bytesWritten);
@@ -192,6 +213,7 @@
 
   bool _onSocketError(e) {
     destroy();
+    if (_error) return true;
     if (_onError != null) {
       _onError(e);
       return true;
@@ -206,4 +228,5 @@
   Function _onClosed;
   bool _closing = false;
   bool _closed = false;
+  bool _error = false;
 }
diff --git a/sdk/lib/io/websocket.dart b/sdk/lib/io/websocket.dart
index 0c1c476..9ded504 100644
--- a/sdk/lib/io/websocket.dart
+++ b/sdk/lib/io/websocket.dart
@@ -24,7 +24,7 @@
 }
 
 /**
- * The web socket protocol is implemented by a HTTP server handler
+ * The web socket protocol is implemented by a HTTP or HTTPS server handler
  * which can be instantiated like this:
  *
  *     WebSocketHandler wsHandler = new WebSocketHandler();
@@ -61,10 +61,12 @@
  */
 abstract class WebSocketConnection {
   /**
-   * Sets the callback to be called when a message have been
+   * Sets the callback to be called when a message has been
    * received. The type on [message] is either [:String:] or
    * [:List<int>:] depending on whether it is a text or binary
    * message. If the message is empty [message] will be [:null:].
+   * If [message] is a [:List<int>:] then it will contain byte values
+   * from 0 to 255.
    */
   void set onMessage(void callback(message));
 
@@ -72,7 +74,7 @@
    * Sets the callback to be called when the web socket connection is
    * closed. [status] indicate the reason for closing. For network
    * errors the value of [status] will be
-   * WebSocketStatus.ABNORMAL_CLOSURE]. In this callbach it is
+   * WebSocketStatus.ABNORMAL_CLOSURE]. In this callback it is
    * possible to call [close] if [close] has not already been called.
    * If [close] has still not been called after the close callback
    * returns the received close status will automatically be echoed
@@ -81,8 +83,8 @@
   void set onClosed(void callback(int status, String reason));
 
   /**
-   * Sends a message. The [message] must be a [:String:] a
-   * [:List<int>:] or [:null:].
+   * Sends a message. The [message] must be a [:String:], a
+   * [:List<int>:] containing bytes, or [:null:].
    */
   send(Object message);
 
@@ -91,11 +93,6 @@
    * and [reason] are [:null:].
    */
   close([int status, String reason]);
-
-  /**
-   * WebSocketConnection is hashable.
-   */
-  int get hashCode;
 }
 
 
@@ -104,8 +101,8 @@
  */
 abstract class WebSocketClientConnection {
   /**
-   * Creates a new web socket client connection based on a HTTP client
-   * connection. The HTTP client connection must be freshly opened.
+   * Creates a new web socket client connection based on a HTTP(S) client
+   * connection. The HTTP or HTTPS client connection must be freshly opened.
    */
   factory WebSocketClientConnection(HttpClientConnection conn,
                                     [List<String> protocols]) {
@@ -115,7 +112,7 @@
   /**
    * Sets the callback to be called when the request object for the
    * opening handshake request is ready. This callback can be used if
-   * one need to add additional headers to the opening handshake
+   * one needs to add additional headers to the opening handshake
    * request.
    */
   void set onRequest(void callback(HttpClientRequest request));
@@ -127,16 +124,18 @@
   void set onOpen(void callback());
 
   /**
-   * Sets the callback to be called when a message have been
+   * Sets the callback to be called when a message has been
    * received. The type of [message] is either [:String:] or
-   * [:List<int>:] depending on whether it is a text or binary
+   * [:List<int>:], depending on whether it is a text or binary
    * message. If the message is empty [message] will be [:null:].
+   * If the message is a [:List<int>:] then it will contain byte values
+   * from 0 to 255.
    */
   void set onMessage(void callback(message));
 
   /**
    * Sets the callback to be called when the web socket connection is
-   * closed. [status] indicate the reason for closing. For network
+   * closed. [status] indicates the reason for closing. For network
    * errors the value of [status] will be
    * WebSocketStatus.ABNORMAL_CLOSURE].
    */
@@ -146,16 +145,16 @@
    * Sets the callback to be called when the response object for the
    * opening handshake did not cause a web socket connection
    * upgrade. This will be called in case the response status code is
-   * not 101 (Switching Protocols). If this callback is not set the
-   * [:onError:] callback will be called if the server did not upgrade
-   * the connection.
+   * not 101 (Switching Protocols). If this callback is not set and the
+   * server does not upgrade the connection, the [:onError:] callback will
+   * be called.
    */
   void set onNoUpgrade(void callback(HttpClientResponse response));
 
   /**
    * Sends a message. The [message] must be a [:String:] or a
-   * [:List<int>:]. To send an empty message use either an empty
-   * [:String:] or an empty [:List<int>:]. [:null:] cannot be used.
+   * [:List<int>:] containing bytes. To send an empty message send either
+   * an empty [:String:] or an empty [:List<int>:]. [:null:] cannot be sent.
    */
   send(message);
 
@@ -164,11 +163,6 @@
    * and [reason] are [:null:].
    */
   close([int status, String reason]);
-
-  /**
-   * WebSocketClientConnection is hashable.
-   */
-  int get hashCode;
 }
 
 
@@ -186,6 +180,9 @@
    * The type of [message] is either [:String:] or [:List<int>:]
    * depending on whether it is a text or binary message. If the
    * message is empty [message] will be [:null:]
+   * If the message is a [:List<int>:] then it will contain byte values
+   * from 0 to 255.
+
    */
   get data;
 }
@@ -285,14 +282,14 @@
   void close(int code, String reason);
 
   /**
-   * Sets the callback to be called when a message have been
+   * Sets the callback to be called when a message has been
    * received.
    */
   void set onmessage(void callback(MessageEvent event));
 
   /**
    * Sends data on the web socket connection. The data in [data] must
-   * be either a [:String:] or [:List<int>:] holding bytes.
+   * be either a [:String:], or a [:List<int>:] holding bytes.
    */
   void send(data);
 }
diff --git a/sdk/lib/io/websocket_impl.dart b/sdk/lib/io/websocket_impl.dart
index 65c4ca4..20ea830 100644
--- a/sdk/lib/io/websocket_impl.dart
+++ b/sdk/lib/io/websocket_impl.dart
@@ -767,7 +767,7 @@
 class _WebSocket implements WebSocket {
   _WebSocket(String url, [protocols]) {
     Uri uri = new Uri.fromString(url);
-    if (uri.scheme != "ws") {
+    if (uri.scheme != "ws" && uri.scheme != "wss") {
       throw new WebSocketException("Unsupported URL scheme ${uri.scheme}");
     }
     if (uri.userInfo != "") {
@@ -785,7 +785,12 @@
     }
 
     HttpClient client = new HttpClient();
-    HttpClientConnection conn = client.open("GET", uri.domain, port, path);
+    bool secure = (uri.scheme == 'wss');
+    HttpClientConnection conn = client.openUrl("GET",
+        new Uri.fromComponents(scheme: secure ? "https" : "http",
+                               domain: uri.domain,
+                               port: port,
+                               path: path));
     if (protocols is String) protocols = [protocols];
     _wsconn = new WebSocketClientConnection(conn, protocols);
     _wsconn.onOpen = () {
diff --git a/sdk/lib/isolate/isolate_stream.dart b/sdk/lib/isolate/isolate_stream.dart
index 092db35..a0a30b0 100644
--- a/sdk/lib/isolate/isolate_stream.dart
+++ b/sdk/lib/isolate/isolate_stream.dart
@@ -52,7 +52,7 @@
 class IsolateStream extends Stream<dynamic> {
   bool _isClosed = false;
   final ReceivePort _port;
-  StreamController _controller = new StreamController();
+  StreamController _controller = new StreamController.multiSubscription();
 
   IsolateStream._fromOriginalReceivePort(this._port) {
     _port.receive((message, replyTo) {
diff --git a/sdk/lib/json/json.dart b/sdk/lib/json/json.dart
index 5de1b0e..e85d93f 100644
--- a/sdk/lib/json/json.dart
+++ b/sdk/lib/json/json.dart
@@ -41,6 +41,12 @@
  * [List]s of parsed JSON values or [Map]s from [String] to parsed
  * JSON values.
  *
+ * The optional [revivier] function, if provided, is called once for each
+ * object or list property parsed. The arguments are the property name
+ * ([String]) or list index ([int]), and the value is the parsed value.
+ * The return value of the revivier will be used as the value of that property
+ * instead the parsed value.
+ *
  * Throws [FormatException] if the input is not valid JSON text.
  */
 parse(String json, [reviver(var key, var value)]) {
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index 5241d91..28ec51b 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -56,84 +56,85 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAElement')
 class AElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGAElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AElement() => _SvgElementFactoryProvider.createSvgElement_tag("a");
 
-  /// @domName SVGAElement.target; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.target')
   final AnimatedString target;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGAElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGAElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.transform')
   final AnimatedTransformList transform;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGAElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -141,7 +142,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAltGlyphDefElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAltGlyphDefElement')
 class AltGlyphDefElement extends SvgElement native "*SVGAltGlyphDefElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -149,18 +152,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAltGlyphElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAltGlyphElement')
 class AltGlyphElement extends TextPositioningElement implements UriReference native "*SVGAltGlyphElement" {
 
-  /// @domName SVGAltGlyphElement.format; @docsEditable true
+  @DocsEditable @DomName('SVGAltGlyphElement.format')
   String format;
 
-  /// @domName SVGAltGlyphElement.glyphRef; @docsEditable true
+  @DocsEditable @DomName('SVGAltGlyphElement.glyphRef')
   String glyphRef;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGAltGlyphElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -168,7 +173,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAltGlyphItemElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAltGlyphItemElement')
 class AltGlyphItemElement extends SvgElement native "*SVGAltGlyphItemElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -176,7 +183,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAngle; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAngle')
 class Angle native "*SVGAngle" {
 
   static const int SVG_ANGLETYPE_DEG = 2;
@@ -189,22 +198,22 @@
 
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
-  /// @domName SVGAngle.unitType; @docsEditable true
+  @DocsEditable @DomName('SVGAngle.unitType')
   final int unitType;
 
-  /// @domName SVGAngle.value; @docsEditable true
+  @DocsEditable @DomName('SVGAngle.value')
   num value;
 
-  /// @domName SVGAngle.valueAsString; @docsEditable true
+  @DocsEditable @DomName('SVGAngle.valueAsString')
   String valueAsString;
 
-  /// @domName SVGAngle.valueInSpecifiedUnits; @docsEditable true
+  @DocsEditable @DomName('SVGAngle.valueInSpecifiedUnits')
   num valueInSpecifiedUnits;
 
-  /// @domName SVGAngle.convertToSpecifiedUnits; @docsEditable true
+  @DocsEditable @DomName('SVGAngle.convertToSpecifiedUnits')
   void convertToSpecifiedUnits(int unitType) native;
 
-  /// @domName SVGAngle.newValueSpecifiedUnits; @docsEditable true
+  @DocsEditable @DomName('SVGAngle.newValueSpecifiedUnits')
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -212,10 +221,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimateColorElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimateColorElement')
 class AnimateColorElement extends AnimationElement native "*SVGAnimateColorElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateColorElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateColor");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -223,10 +234,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimateElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimateElement')
 class AnimateElement extends AnimationElement native "*SVGAnimateElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateElement() => _SvgElementFactoryProvider.createSvgElement_tag("animate");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -234,10 +247,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimateMotionElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimateMotionElement')
 class AnimateMotionElement extends AnimationElement native "*SVGAnimateMotionElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateMotionElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateMotion");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -245,10 +260,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimateTransformElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimateTransformElement')
 class AnimateTransformElement extends AnimationElement native "*SVGAnimateTransformElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateTransformElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateTransform");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -256,13 +273,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedAngle; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedAngle')
 class AnimatedAngle native "*SVGAnimatedAngle" {
 
-  /// @domName SVGAnimatedAngle.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedAngle.animVal')
   final Angle animVal;
 
-  /// @domName SVGAnimatedAngle.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedAngle.baseVal')
   final Angle baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -270,13 +289,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedBoolean; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedBoolean')
 class AnimatedBoolean native "*SVGAnimatedBoolean" {
 
-  /// @domName SVGAnimatedBoolean.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedBoolean.animVal')
   final bool animVal;
 
-  /// @domName SVGAnimatedBoolean.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedBoolean.baseVal')
   bool baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -284,13 +305,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedEnumeration; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedEnumeration')
 class AnimatedEnumeration native "*SVGAnimatedEnumeration" {
 
-  /// @domName SVGAnimatedEnumeration.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedEnumeration.animVal')
   final int animVal;
 
-  /// @domName SVGAnimatedEnumeration.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedEnumeration.baseVal')
   int baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -298,13 +321,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedInteger; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedInteger')
 class AnimatedInteger native "*SVGAnimatedInteger" {
 
-  /// @domName SVGAnimatedInteger.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedInteger.animVal')
   final int animVal;
 
-  /// @domName SVGAnimatedInteger.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedInteger.baseVal')
   int baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -312,13 +337,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedLength; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedLength')
 class AnimatedLength native "*SVGAnimatedLength" {
 
-  /// @domName SVGAnimatedLength.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedLength.animVal')
   final Length animVal;
 
-  /// @domName SVGAnimatedLength.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedLength.baseVal')
   final Length baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -326,13 +353,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedLengthList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedLengthList')
 class AnimatedLengthList native "*SVGAnimatedLengthList" {
 
-  /// @domName SVGAnimatedLengthList.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedLengthList.animVal')
   final LengthList animVal;
 
-  /// @domName SVGAnimatedLengthList.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedLengthList.baseVal')
   final LengthList baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -340,13 +369,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedNumber; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedNumber')
 class AnimatedNumber native "*SVGAnimatedNumber" {
 
-  /// @domName SVGAnimatedNumber.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedNumber.animVal')
   final num animVal;
 
-  /// @domName SVGAnimatedNumber.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedNumber.baseVal')
   num baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -354,13 +385,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedNumberList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedNumberList')
 class AnimatedNumberList native "*SVGAnimatedNumberList" {
 
-  /// @domName SVGAnimatedNumberList.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedNumberList.animVal')
   final NumberList animVal;
 
-  /// @domName SVGAnimatedNumberList.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedNumberList.baseVal')
   final NumberList baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -368,13 +401,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedPreserveAspectRatio; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedPreserveAspectRatio')
 class AnimatedPreserveAspectRatio native "*SVGAnimatedPreserveAspectRatio" {
 
-  /// @domName SVGAnimatedPreserveAspectRatio.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedPreserveAspectRatio.animVal')
   final PreserveAspectRatio animVal;
 
-  /// @domName SVGAnimatedPreserveAspectRatio.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedPreserveAspectRatio.baseVal')
   final PreserveAspectRatio baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -382,13 +417,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedRect; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedRect')
 class AnimatedRect native "*SVGAnimatedRect" {
 
-  /// @domName SVGAnimatedRect.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedRect.animVal')
   final Rect animVal;
 
-  /// @domName SVGAnimatedRect.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedRect.baseVal')
   final Rect baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -396,13 +433,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedString; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedString')
 class AnimatedString native "*SVGAnimatedString" {
 
-  /// @domName SVGAnimatedString.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedString.animVal')
   final String animVal;
 
-  /// @domName SVGAnimatedString.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedString.baseVal')
   String baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -410,13 +449,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedTransformList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimatedTransformList')
 class AnimatedTransformList native "*SVGAnimatedTransformList" {
 
-  /// @domName SVGAnimatedTransformList.animVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedTransformList.animVal')
   final TransformList animVal;
 
-  /// @domName SVGAnimatedTransformList.baseVal; @docsEditable true
+  @DocsEditable @DomName('SVGAnimatedTransformList.baseVal')
   final TransformList baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -424,55 +465,57 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimationElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGAnimationElement')
 class AnimationElement extends SvgElement implements Tests, ElementTimeControl, ExternalResourcesRequired native "*SVGAnimationElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimationElement() => _SvgElementFactoryProvider.createSvgElement_tag("animation");
 
-  /// @domName SVGAnimationElement.targetElement; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.targetElement')
   final SvgElement targetElement;
 
-  /// @domName SVGAnimationElement.getCurrentTime; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.getCurrentTime')
   num getCurrentTime() native;
 
-  /// @domName SVGAnimationElement.getSimpleDuration; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.getSimpleDuration')
   num getSimpleDuration() native;
 
-  /// @domName SVGAnimationElement.getStartTime; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.getStartTime')
   num getStartTime() native;
 
   // From ElementTimeControl
 
-  /// @domName ElementTimeControl.beginElement; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.beginElement')
   void beginElement() native;
 
-  /// @domName ElementTimeControl.beginElementAt; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.beginElementAt')
   void beginElementAt(num offset) native;
 
-  /// @domName ElementTimeControl.endElement; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.endElement')
   void endElement() native;
 
-  /// @domName ElementTimeControl.endElementAt; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.endElementAt')
   void endElementAt(num offset) native;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGAnimationElement.hasExtension')
   bool hasExtension(String extension) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -480,85 +523,86 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGCircleElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGCircleElement')
 class CircleElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGCircleElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory CircleElement() => _SvgElementFactoryProvider.createSvgElement_tag("circle");
 
-  /// @domName SVGCircleElement.cx; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.cx')
   final AnimatedLength cx;
 
-  /// @domName SVGCircleElement.cy; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.cy')
   final AnimatedLength cy;
 
-  /// @domName SVGCircleElement.r; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.r')
   final AnimatedLength r;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGCircleElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGCircleElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGCircleElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -566,79 +610,80 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGClipPathElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGClipPathElement')
 class ClipPathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGClipPathElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ClipPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("clipPath");
 
-  /// @domName SVGClipPathElement.clipPathUnits; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.clipPathUnits')
   final AnimatedEnumeration clipPathUnits;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGClipPathElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGClipPathElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGClipPathElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -646,7 +691,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGColor; @docsEditable true
+
+@DocsEditable
+@DomName('SVGColor')
 class Color extends CssValue native "*SVGColor" {
 
   static const int SVG_COLORTYPE_CURRENTCOLOR = 3;
@@ -657,21 +704,21 @@
 
   static const int SVG_COLORTYPE_UNKNOWN = 0;
 
-  /// @domName SVGColor.colorType; @docsEditable true
+  @DocsEditable @DomName('SVGColor.colorType')
   final int colorType;
 
-  /// @domName SVGColor.rgbColor; @docsEditable true
+  @DocsEditable @DomName('SVGColor.rgbColor')
   final RgbColor rgbColor;
 
-  /// @domName SVGColor.setColor; @docsEditable true
+  @DocsEditable @DomName('SVGColor.setColor')
   void setColor(int colorType, String rgbColor, String iccColor) native;
 
-  /// @domName SVGColor.setRGBColor; @docsEditable true
   @JSName('setRGBColor')
+  @DocsEditable @DomName('SVGColor.setRGBColor')
   void setRgbColor(String rgbColor) native;
 
-  /// @domName SVGColor.setRGBColorICCColor; @docsEditable true
   @JSName('setRGBColorICCColor')
+  @DocsEditable @DomName('SVGColor.setRGBColorICCColor')
   void setRgbColorIccColor(String rgbColor, String iccColor) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -679,7 +726,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGComponentTransferFunctionElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGComponentTransferFunctionElement')
 class ComponentTransferFunctionElement extends SvgElement native "*SVGComponentTransferFunctionElement" {
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
@@ -694,25 +743,25 @@
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
 
-  /// @domName SVGComponentTransferFunctionElement.amplitude; @docsEditable true
+  @DocsEditable @DomName('SVGComponentTransferFunctionElement.amplitude')
   final AnimatedNumber amplitude;
 
-  /// @domName SVGComponentTransferFunctionElement.exponent; @docsEditable true
+  @DocsEditable @DomName('SVGComponentTransferFunctionElement.exponent')
   final AnimatedNumber exponent;
 
-  /// @domName SVGComponentTransferFunctionElement.intercept; @docsEditable true
+  @DocsEditable @DomName('SVGComponentTransferFunctionElement.intercept')
   final AnimatedNumber intercept;
 
-  /// @domName SVGComponentTransferFunctionElement.offset; @docsEditable true
+  @DocsEditable @DomName('SVGComponentTransferFunctionElement.offset')
   final AnimatedNumber offset;
 
-  /// @domName SVGComponentTransferFunctionElement.slope; @docsEditable true
+  @DocsEditable @DomName('SVGComponentTransferFunctionElement.slope')
   final AnimatedNumber slope;
 
-  /// @domName SVGComponentTransferFunctionElement.tableValues; @docsEditable true
+  @DocsEditable @DomName('SVGComponentTransferFunctionElement.tableValues')
   final AnimatedNumberList tableValues;
 
-  /// @domName SVGComponentTransferFunctionElement.type; @docsEditable true
+  @DocsEditable @DomName('SVGComponentTransferFunctionElement.type')
   final AnimatedEnumeration type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -720,40 +769,42 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGCursorElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGCursorElement')
 class CursorElement extends SvgElement implements UriReference, Tests, ExternalResourcesRequired native "*SVGCursorElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory CursorElement() => _SvgElementFactoryProvider.createSvgElement_tag("cursor");
 
-  /// @domName SVGCursorElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGCursorElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.y')
   final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGCursorElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -761,76 +812,77 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGDefsElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGDefsElement')
 class DefsElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGDefsElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DefsElement() => _SvgElementFactoryProvider.createSvgElement_tag("defs");
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGDefsElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGDefsElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGDefsElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -838,30 +890,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGDescElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGDescElement')
 class DescElement extends SvgElement implements Stylable, LangSpace native "*SVGDescElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory DescElement() => _SvgElementFactoryProvider.createSvgElement_tag("desc");
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGDescElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGDescElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGDescElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -869,7 +922,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGElementInstance; @docsEditable true
+
+@DocsEditable
+@DomName('SVGElementInstance')
 class ElementInstance extends EventTarget native "*SVGElementInstance" {
 
   static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
@@ -952,33 +1007,34 @@
 
   static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ElementInstanceEvents get on =>
     new ElementInstanceEvents(this);
 
-  /// @domName SVGElementInstance.childNodes; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.childNodes')
   @Returns('_ElementInstanceList') @Creates('_ElementInstanceList')
   final List<ElementInstance> childNodes;
 
-  /// @domName SVGElementInstance.correspondingElement; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.correspondingElement')
   final SvgElement correspondingElement;
 
-  /// @domName SVGElementInstance.correspondingUseElement; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.correspondingUseElement')
   final UseElement correspondingUseElement;
 
-  /// @domName SVGElementInstance.firstChild; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.firstChild')
   final ElementInstance firstChild;
 
-  /// @domName SVGElementInstance.lastChild; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.lastChild')
   final ElementInstance lastChild;
 
-  /// @domName SVGElementInstance.nextSibling; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.nextSibling')
   final ElementInstance nextSibling;
 
-  /// @domName SVGElementInstance.parentNode; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.parentNode')
   final ElementInstance parentNode;
 
-  /// @domName SVGElementInstance.previousSibling; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstance.previousSibling')
   final ElementInstance previousSibling;
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -1062,129 +1118,129 @@
   Stream<Event> get onUnload => unloadEvent.forTarget(this);
 }
 
-/// @docsEditable true
+@DocsEditable
 class ElementInstanceEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   ElementInstanceEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCopy => this['beforecopy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCut => this['beforecut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforePaste => this['beforepaste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get change => this['change'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contextMenu => this['contextmenu'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get copy => this['copy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cut => this['cut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get doubleClick => this['dblclick'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drag => this['drag'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnd => this['dragend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnter => this['dragenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragLeave => this['dragleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragOver => this['dragover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragStart => this['dragstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drop => this['drop'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get input => this['input'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyDown => this['keydown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyPress => this['keypress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyUp => this['keyup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseDown => this['mousedown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseMove => this['mousemove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOut => this['mouseout'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOver => this['mouseover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseUp => this['mouseup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseWheel => this['mousewheel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get paste => this['paste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get reset => this['reset'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get resize => this['resize'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get scroll => this['scroll'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get search => this['search'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get select => this['select'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get selectStart => this['selectstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get submit => this['submit'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unload => this['unload'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1192,19 +1248,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ElementTimeControl
+@DocsEditable
+@DomName('ElementTimeControl')
 abstract class ElementTimeControl {
 
-  /// @domName ElementTimeControl.beginElement; @docsEditable true
   void beginElement();
 
-  /// @domName ElementTimeControl.beginElementAt; @docsEditable true
   void beginElementAt(num offset);
 
-  /// @domName ElementTimeControl.endElement; @docsEditable true
   void endElement();
 
-  /// @domName ElementTimeControl.endElementAt; @docsEditable true
   void endElementAt(num offset);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1212,88 +1265,89 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGEllipseElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGEllipseElement')
 class EllipseElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGEllipseElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory EllipseElement() => _SvgElementFactoryProvider.createSvgElement_tag("ellipse");
 
-  /// @domName SVGEllipseElement.cx; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.cx')
   final AnimatedLength cx;
 
-  /// @domName SVGEllipseElement.cy; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.cy')
   final AnimatedLength cy;
 
-  /// @domName SVGEllipseElement.rx; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.rx')
   final AnimatedLength rx;
 
-  /// @domName SVGEllipseElement.ry; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.ry')
   final AnimatedLength ry;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGEllipseElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGEllipseElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGEllipseElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1301,7 +1355,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGExternalResourcesRequired
+@DocsEditable
+@DomName('SVGExternalResourcesRequired')
 abstract class ExternalResourcesRequired {
 
   AnimatedBoolean externalResourcesRequired;
@@ -1311,7 +1366,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEBlendElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEBlendElement')
 class FEBlendElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEBlendElement" {
 
   static const int SVG_FEBLEND_MODE_DARKEN = 4;
@@ -1326,42 +1383,41 @@
 
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
-  /// @domName SVGFEBlendElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEBlendElement.in2; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.in2')
   final AnimatedString in2;
 
-  /// @domName SVGFEBlendElement.mode; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.mode')
   final AnimatedEnumeration mode;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEBlendElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1369,7 +1425,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEColorMatrixElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEColorMatrixElement')
 class FEColorMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEColorMatrixElement" {
 
   static const int SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
@@ -1382,42 +1440,41 @@
 
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
-  /// @domName SVGFEColorMatrixElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEColorMatrixElement.type; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.type')
   final AnimatedEnumeration type;
 
-  /// @domName SVGFEColorMatrixElement.values; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.values')
   final AnimatedNumberList values;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEColorMatrixElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1425,39 +1482,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEComponentTransferElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEComponentTransferElement')
 class FEComponentTransferElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEComponentTransferElement" {
 
-  /// @domName SVGFEComponentTransferElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEComponentTransferElement.in1')
   final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEComponentTransferElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEComponentTransferElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEComponentTransferElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEComponentTransferElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEComponentTransferElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEComponentTransferElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1465,7 +1523,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFECompositeElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFECompositeElement')
 class FECompositeElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFECompositeElement" {
 
   static const int SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
@@ -1482,54 +1542,53 @@
 
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
-  /// @domName SVGFECompositeElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFECompositeElement.in2; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.in2')
   final AnimatedString in2;
 
-  /// @domName SVGFECompositeElement.k1; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.k1')
   final AnimatedNumber k1;
 
-  /// @domName SVGFECompositeElement.k2; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.k2')
   final AnimatedNumber k2;
 
-  /// @domName SVGFECompositeElement.k3; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.k3')
   final AnimatedNumber k3;
 
-  /// @domName SVGFECompositeElement.k4; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.k4')
   final AnimatedNumber k4;
 
-  /// @domName SVGFECompositeElement.operator; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.operator')
   final AnimatedEnumeration operator;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFECompositeElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1537,7 +1596,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEConvolveMatrixElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEConvolveMatrixElement')
 class FEConvolveMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEConvolveMatrixElement" {
 
   static const int SVG_EDGEMODE_DUPLICATE = 1;
@@ -1548,69 +1609,68 @@
 
   static const int SVG_EDGEMODE_WRAP = 2;
 
-  /// @domName SVGFEConvolveMatrixElement.bias; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.bias')
   final AnimatedNumber bias;
 
-  /// @domName SVGFEConvolveMatrixElement.divisor; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.divisor')
   final AnimatedNumber divisor;
 
-  /// @domName SVGFEConvolveMatrixElement.edgeMode; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.edgeMode')
   final AnimatedEnumeration edgeMode;
 
-  /// @domName SVGFEConvolveMatrixElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEConvolveMatrixElement.kernelMatrix; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.kernelMatrix')
   final AnimatedNumberList kernelMatrix;
 
-  /// @domName SVGFEConvolveMatrixElement.kernelUnitLengthX; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthX')
   final AnimatedNumber kernelUnitLengthX;
 
-  /// @domName SVGFEConvolveMatrixElement.kernelUnitLengthY; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthY')
   final AnimatedNumber kernelUnitLengthY;
 
-  /// @domName SVGFEConvolveMatrixElement.orderX; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.orderX')
   final AnimatedInteger orderX;
 
-  /// @domName SVGFEConvolveMatrixElement.orderY; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.orderY')
   final AnimatedInteger orderY;
 
-  /// @domName SVGFEConvolveMatrixElement.preserveAlpha; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.preserveAlpha')
   final AnimatedBoolean preserveAlpha;
 
-  /// @domName SVGFEConvolveMatrixElement.targetX; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.targetX')
   final AnimatedInteger targetX;
 
-  /// @domName SVGFEConvolveMatrixElement.targetY; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.targetY')
   final AnimatedInteger targetY;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEConvolveMatrixElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1618,51 +1678,52 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEDiffuseLightingElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEDiffuseLightingElement')
 class FEDiffuseLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEDiffuseLightingElement" {
 
-  /// @domName SVGFEDiffuseLightingElement.diffuseConstant; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.diffuseConstant')
   final AnimatedNumber diffuseConstant;
 
-  /// @domName SVGFEDiffuseLightingElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEDiffuseLightingElement.kernelUnitLengthX; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthX')
   final AnimatedNumber kernelUnitLengthX;
 
-  /// @domName SVGFEDiffuseLightingElement.kernelUnitLengthY; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthY')
   final AnimatedNumber kernelUnitLengthY;
 
-  /// @domName SVGFEDiffuseLightingElement.surfaceScale; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.surfaceScale')
   final AnimatedNumber surfaceScale;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEDiffuseLightingElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1670,7 +1731,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEDisplacementMapElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEDisplacementMapElement')
 class FEDisplacementMapElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEDisplacementMapElement" {
 
   static const int SVG_CHANNEL_A = 4;
@@ -1683,48 +1746,47 @@
 
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
-  /// @domName SVGFEDisplacementMapElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEDisplacementMapElement.in2; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.in2')
   final AnimatedString in2;
 
-  /// @domName SVGFEDisplacementMapElement.scale; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.scale')
   final AnimatedNumber scale;
 
-  /// @domName SVGFEDisplacementMapElement.xChannelSelector; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.xChannelSelector')
   final AnimatedEnumeration xChannelSelector;
 
-  /// @domName SVGFEDisplacementMapElement.yChannelSelector; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.yChannelSelector')
   final AnimatedEnumeration yChannelSelector;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEDisplacementMapElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1732,13 +1794,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEDistantLightElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEDistantLightElement')
 class FEDistantLightElement extends SvgElement native "*SVGFEDistantLightElement" {
 
-  /// @domName SVGFEDistantLightElement.azimuth; @docsEditable true
+  @DocsEditable @DomName('SVGFEDistantLightElement.azimuth')
   final AnimatedNumber azimuth;
 
-  /// @domName SVGFEDistantLightElement.elevation; @docsEditable true
+  @DocsEditable @DomName('SVGFEDistantLightElement.elevation')
   final AnimatedNumber elevation;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1746,54 +1810,55 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEDropShadowElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEDropShadowElement')
 class FEDropShadowElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEDropShadowElement" {
 
-  /// @domName SVGFEDropShadowElement.dx; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.dx')
   final AnimatedNumber dx;
 
-  /// @domName SVGFEDropShadowElement.dy; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.dy')
   final AnimatedNumber dy;
 
-  /// @domName SVGFEDropShadowElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEDropShadowElement.stdDeviationX; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.stdDeviationX')
   final AnimatedNumber stdDeviationX;
 
-  /// @domName SVGFEDropShadowElement.stdDeviationY; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.stdDeviationY')
   final AnimatedNumber stdDeviationY;
 
-  /// @domName SVGFEDropShadowElement.setStdDeviation; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.setStdDeviation')
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEDropShadowElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1801,36 +1866,37 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEFloodElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEFloodElement')
 class FEFloodElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEFloodElement" {
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEFloodElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEFloodElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEFloodElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEFloodElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEFloodElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEFloodElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1838,7 +1904,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEFuncAElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEFuncAElement')
 class FEFuncAElement extends ComponentTransferFunctionElement native "*SVGFEFuncAElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1846,7 +1914,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEFuncBElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEFuncBElement')
 class FEFuncBElement extends ComponentTransferFunctionElement native "*SVGFEFuncBElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1854,7 +1924,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEFuncGElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEFuncGElement')
 class FEFuncGElement extends ComponentTransferFunctionElement native "*SVGFEFuncGElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1862,7 +1934,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEFuncRElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEFuncRElement')
 class FEFuncRElement extends ComponentTransferFunctionElement native "*SVGFEFuncRElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1870,48 +1944,49 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEGaussianBlurElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEGaussianBlurElement')
 class FEGaussianBlurElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEGaussianBlurElement" {
 
-  /// @domName SVGFEGaussianBlurElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEGaussianBlurElement.stdDeviationX; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.stdDeviationX')
   final AnimatedNumber stdDeviationX;
 
-  /// @domName SVGFEGaussianBlurElement.stdDeviationY; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.stdDeviationY')
   final AnimatedNumber stdDeviationY;
 
-  /// @domName SVGFEGaussianBlurElement.setStdDeviation; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.setStdDeviation')
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEGaussianBlurElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1919,57 +1994,58 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEImageElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEImageElement')
 class FEImageElement extends SvgElement implements FilterPrimitiveStandardAttributes, UriReference, ExternalResourcesRequired, LangSpace native "*SVGFEImageElement" {
 
-  /// @domName SVGFEImageElement.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.y')
   final AnimatedLength y;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGFEImageElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1977,36 +2053,37 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEMergeElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEMergeElement')
 class FEMergeElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEMergeElement" {
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEMergeElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEMergeElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEMergeElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEMergeElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEMergeElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEMergeElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2014,10 +2091,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEMergeNodeElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEMergeNodeElement')
 class FEMergeNodeElement extends SvgElement native "*SVGFEMergeNodeElement" {
 
-  /// @domName SVGFEMergeNodeElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEMergeNodeElement.in1')
   final AnimatedString in1;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2025,7 +2104,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEMorphologyElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEMorphologyElement')
 class FEMorphologyElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEMorphologyElement" {
 
   static const int SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
@@ -2034,48 +2115,47 @@
 
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
-  /// @domName SVGFEMorphologyElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFEMorphologyElement.operator; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.operator')
   final AnimatedEnumeration operator;
 
-  /// @domName SVGFEMorphologyElement.radiusX; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.radiusX')
   final AnimatedNumber radiusX;
 
-  /// @domName SVGFEMorphologyElement.radiusY; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.radiusY')
   final AnimatedNumber radiusY;
 
-  /// @domName SVGFEMorphologyElement.setRadius; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.setRadius')
   void setRadius(num radiusX, num radiusY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEMorphologyElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2083,45 +2163,46 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEOffsetElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEOffsetElement')
 class FEOffsetElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEOffsetElement" {
 
-  /// @domName SVGFEOffsetElement.dx; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.dx')
   final AnimatedNumber dx;
 
-  /// @domName SVGFEOffsetElement.dy; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.dy')
   final AnimatedNumber dy;
 
-  /// @domName SVGFEOffsetElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.in1')
   final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFEOffsetElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2129,16 +2210,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEPointLightElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFEPointLightElement')
 class FEPointLightElement extends SvgElement native "*SVGFEPointLightElement" {
 
-  /// @domName SVGFEPointLightElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGFEPointLightElement.x')
   final AnimatedNumber x;
 
-  /// @domName SVGFEPointLightElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGFEPointLightElement.y')
   final AnimatedNumber y;
 
-  /// @domName SVGFEPointLightElement.z; @docsEditable true
+  @DocsEditable @DomName('SVGFEPointLightElement.z')
   final AnimatedNumber z;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2146,48 +2229,49 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFESpecularLightingElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFESpecularLightingElement')
 class FESpecularLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFESpecularLightingElement" {
 
-  /// @domName SVGFESpecularLightingElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.in1')
   final AnimatedString in1;
 
-  /// @domName SVGFESpecularLightingElement.specularConstant; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.specularConstant')
   final AnimatedNumber specularConstant;
 
-  /// @domName SVGFESpecularLightingElement.specularExponent; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.specularExponent')
   final AnimatedNumber specularExponent;
 
-  /// @domName SVGFESpecularLightingElement.surfaceScale; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.surfaceScale')
   final AnimatedNumber surfaceScale;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFESpecularLightingElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2195,31 +2279,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFESpotLightElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFESpotLightElement')
 class FESpotLightElement extends SvgElement native "*SVGFESpotLightElement" {
 
-  /// @domName SVGFESpotLightElement.limitingConeAngle; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.limitingConeAngle')
   final AnimatedNumber limitingConeAngle;
 
-  /// @domName SVGFESpotLightElement.pointsAtX; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.pointsAtX')
   final AnimatedNumber pointsAtX;
 
-  /// @domName SVGFESpotLightElement.pointsAtY; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.pointsAtY')
   final AnimatedNumber pointsAtY;
 
-  /// @domName SVGFESpotLightElement.pointsAtZ; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.pointsAtZ')
   final AnimatedNumber pointsAtZ;
 
-  /// @domName SVGFESpotLightElement.specularExponent; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.specularExponent')
   final AnimatedNumber specularExponent;
 
-  /// @domName SVGFESpotLightElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.x')
   final AnimatedNumber x;
 
-  /// @domName SVGFESpotLightElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.y')
   final AnimatedNumber y;
 
-  /// @domName SVGFESpotLightElement.z; @docsEditable true
+  @DocsEditable @DomName('SVGFESpotLightElement.z')
   final AnimatedNumber z;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2227,39 +2313,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFETileElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFETileElement')
 class FETileElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFETileElement" {
 
-  /// @domName SVGFETileElement.in1; @docsEditable true
+  @DocsEditable @DomName('SVGFETileElement.in1')
   final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFETileElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFETileElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFETileElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFETileElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFETileElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFETileElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2267,7 +2354,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFETurbulenceElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFETurbulenceElement')
 class FETurbulenceElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFETurbulenceElement" {
 
   static const int SVG_STITCHTYPE_NOSTITCH = 2;
@@ -2282,51 +2371,50 @@
 
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
-  /// @domName SVGFETurbulenceElement.baseFrequencyX; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.baseFrequencyX')
   final AnimatedNumber baseFrequencyX;
 
-  /// @domName SVGFETurbulenceElement.baseFrequencyY; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.baseFrequencyY')
   final AnimatedNumber baseFrequencyY;
 
-  /// @domName SVGFETurbulenceElement.numOctaves; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.numOctaves')
   final AnimatedInteger numOctaves;
 
-  /// @domName SVGFETurbulenceElement.seed; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.seed')
   final AnimatedNumber seed;
 
-  /// @domName SVGFETurbulenceElement.stitchTiles; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.stitchTiles')
   final AnimatedEnumeration stitchTiles;
 
-  /// @domName SVGFETurbulenceElement.type; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.type')
   final AnimatedEnumeration type;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.result')
   final AnimatedString result;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.y')
   final AnimatedLength y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFETurbulenceElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2334,67 +2422,68 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFilterElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFilterElement')
 class FilterElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable, LangSpace native "*SVGFilterElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FilterElement() => _SvgElementFactoryProvider.createSvgElement_tag("filter");
 
-  /// @domName SVGFilterElement.filterResX; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.filterResX')
   final AnimatedInteger filterResX;
 
-  /// @domName SVGFilterElement.filterResY; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.filterResY')
   final AnimatedInteger filterResY;
 
-  /// @domName SVGFilterElement.filterUnits; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.filterUnits')
   final AnimatedEnumeration filterUnits;
 
-  /// @domName SVGFilterElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGFilterElement.primitiveUnits; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.primitiveUnits')
   final AnimatedEnumeration primitiveUnits;
 
-  /// @domName SVGFilterElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGFilterElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGFilterElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.y')
   final AnimatedLength y;
 
-  /// @domName SVGFilterElement.setFilterRes; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.setFilterRes')
   void setFilterRes(int filterResX, int filterResY) native;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGFilterElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2402,7 +2491,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFilterPrimitiveStandardAttributes
+@DocsEditable
+@DomName('SVGFilterPrimitiveStandardAttributes')
 abstract class FilterPrimitiveStandardAttributes implements Stylable {
 
   AnimatedLength height;
@@ -2421,7 +2511,6 @@
 
   CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CssValue getPresentationAttribute(String name);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2429,7 +2518,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFitToViewBox
+@DocsEditable
+@DomName('SVGFitToViewBox')
 abstract class FitToViewBox {
 
   AnimatedPreserveAspectRatio preserveAspectRatio;
@@ -2441,10 +2531,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFontElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFontElement')
 class FontElement extends SvgElement native "*SVGFontElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontElement() => _SvgElementFactoryProvider.createSvgElement_tag("font");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2452,10 +2544,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFontFaceElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFontFaceElement')
 class FontFaceElement extends SvgElement native "*SVGFontFaceElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2463,10 +2557,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFontFaceFormatElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFontFaceFormatElement')
 class FontFaceFormatElement extends SvgElement native "*SVGFontFaceFormatElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceFormatElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-format");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2474,10 +2570,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFontFaceNameElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFontFaceNameElement')
 class FontFaceNameElement extends SvgElement native "*SVGFontFaceNameElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceNameElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-name");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2485,10 +2583,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFontFaceSrcElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFontFaceSrcElement')
 class FontFaceSrcElement extends SvgElement native "*SVGFontFaceSrcElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceSrcElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-src");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2496,10 +2596,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFontFaceUriElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGFontFaceUriElement')
 class FontFaceUriElement extends SvgElement native "*SVGFontFaceUriElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceUriElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-uri");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2507,88 +2609,89 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGForeignObjectElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGForeignObjectElement')
 class ForeignObjectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGForeignObjectElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ForeignObjectElement() => _SvgElementFactoryProvider.createSvgElement_tag("foreignObject");
 
-  /// @domName SVGForeignObjectElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGForeignObjectElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGForeignObjectElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGForeignObjectElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.y')
   final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGForeignObjectElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGForeignObjectElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGForeignObjectElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2596,76 +2699,77 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGGElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGGElement')
 class GElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGGElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory GElement() => _SvgElementFactoryProvider.createSvgElement_tag("g");
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGGElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGGElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGGElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2673,10 +2777,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGGlyphElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGGlyphElement')
 class GlyphElement extends SvgElement native "*SVGGlyphElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory GlyphElement() => _SvgElementFactoryProvider.createSvgElement_tag("glyph");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2684,42 +2790,43 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGGlyphRefElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGGlyphRefElement')
 class GlyphRefElement extends SvgElement implements UriReference, Stylable native "*SVGGlyphRefElement" {
 
-  /// @domName SVGGlyphRefElement.dx; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.dx')
   num dx;
 
-  /// @domName SVGGlyphRefElement.dy; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.dy')
   num dy;
 
-  /// @domName SVGGlyphRefElement.format; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.format')
   String format;
 
-  /// @domName SVGGlyphRefElement.glyphRef; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.glyphRef')
   String glyphRef;
 
-  /// @domName SVGGlyphRefElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.x')
   num x;
 
-  /// @domName SVGGlyphRefElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.y')
   num y;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGGlyphRefElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2727,7 +2834,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGGradientElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGGradientElement')
 class GradientElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable native "*SVGGradientElement" {
 
   static const int SVG_SPREADMETHOD_PAD = 1;
@@ -2738,35 +2847,34 @@
 
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
-  /// @domName SVGGradientElement.gradientTransform; @docsEditable true
+  @DocsEditable @DomName('SVGGradientElement.gradientTransform')
   final AnimatedTransformList gradientTransform;
 
-  /// @domName SVGGradientElement.gradientUnits; @docsEditable true
+  @DocsEditable @DomName('SVGGradientElement.gradientUnits')
   final AnimatedEnumeration gradientUnits;
 
-  /// @domName SVGGradientElement.spreadMethod; @docsEditable true
+  @DocsEditable @DomName('SVGGradientElement.spreadMethod')
   final AnimatedEnumeration spreadMethod;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGGradientElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGGradientElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGGradientElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2774,10 +2882,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGHKernElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGHKernElement')
 class HKernElement extends SvgElement native "*SVGHKernElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory HKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("hkern");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2785,96 +2895,97 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGImageElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGImageElement')
 class ImageElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGImageElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ImageElement() => _SvgElementFactoryProvider.createSvgElement_tag("image");
 
-  /// @domName SVGImageElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGImageElement.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /// @domName SVGImageElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGImageElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGImageElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.y')
   final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGImageElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGImageElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.transform')
   final AnimatedTransformList transform;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGImageElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2882,7 +2993,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLangSpace
+@DocsEditable
+@DomName('SVGLangSpace')
 abstract class LangSpace {
 
   String xmllang;
@@ -2894,7 +3006,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLength; @docsEditable true
+
+@DocsEditable
+@DomName('SVGLength')
 class Length native "*SVGLength" {
 
   static const int SVG_LENGTHTYPE_CM = 6;
@@ -2919,22 +3033,22 @@
 
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
-  /// @domName SVGLength.unitType; @docsEditable true
+  @DocsEditable @DomName('SVGLength.unitType')
   final int unitType;
 
-  /// @domName SVGLength.value; @docsEditable true
+  @DocsEditable @DomName('SVGLength.value')
   num value;
 
-  /// @domName SVGLength.valueAsString; @docsEditable true
+  @DocsEditable @DomName('SVGLength.valueAsString')
   String valueAsString;
 
-  /// @domName SVGLength.valueInSpecifiedUnits; @docsEditable true
+  @DocsEditable @DomName('SVGLength.valueInSpecifiedUnits')
   num valueInSpecifiedUnits;
 
-  /// @domName SVGLength.convertToSpecifiedUnits; @docsEditable true
+  @DocsEditable @DomName('SVGLength.convertToSpecifiedUnits')
   void convertToSpecifiedUnits(int unitType) native;
 
-  /// @domName SVGLength.newValueSpecifiedUnits; @docsEditable true
+  @DocsEditable @DomName('SVGLength.newValueSpecifiedUnits')
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2942,10 +3056,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLengthList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGLengthList')
 class LengthList implements JavaScriptIndexingBehavior, List<Length> native "*SVGLengthList" {
 
-  /// @domName SVGLengthList.numberOfItems; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.numberOfItems')
   final int numberOfItems;
 
   Length operator[](int index) => JS("Length", "#[#]", this, index);
@@ -2968,50 +3084,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Length)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Length element) => Collections.contains(this, element);
+  bool contains(Length element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Length element)) => Collections.forEach(this, f);
+  void forEach(void f(Length element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Length element)) => new MappedList<Length, dynamic>(this, f);
+  List mappedBy(f(Length element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Length> where(bool f(Length element)) => new WhereIterable<Length>(this, f);
+  Iterable<Length> where(bool f(Length element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Length element)) => Collections.every(this, f);
+  bool every(bool f(Length element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Length element)) => Collections.any(this, f);
+  bool any(bool f(Length element)) => IterableMixinWorkaround.any(this, f);
 
   List<Length> toList() => new List<Length>.from(this);
   Set<Length> toSet() => new Set<Length>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Length> take(int n) => new ListView<Length>(this, 0, n);
+  List<Length> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Length> takeWhile(bool test(Length value)) {
-    return new TakeWhileIterable<Length>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Length> skip(int n) => new ListView<Length>(this, n, null);
+  List<Length> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Length> skipWhile(bool test(Length value)) {
-    return new SkipWhileIterable<Length>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Length firstMatching(bool test(Length value), { Length orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Length lastMatching(bool test(Length value), {Length orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Length singleMatching(bool test(Length value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Length elementAt(int index) {
@@ -3037,7 +3153,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(Length a, Length b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -3067,16 +3183,36 @@
     throw new StateError("More than one element");
   }
 
-  Length min([int compare(Length a, Length b)]) => Collections.min(this, compare);
+  Length min([int compare(Length a, Length b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Length max([int compare(Length a, Length b)]) => Collections.max(this, compare);
+  Length max([int compare(Length a, Length b)]) => IterableMixinWorkaround.max(this, compare);
 
   Length removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Length removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Length element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Length element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Length> from, [int startFrom]) {
@@ -3096,25 +3232,25 @@
 
   // -- end List<Length> mixins.
 
-  /// @domName SVGLengthList.appendItem; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.appendItem')
   Length appendItem(Length item) native;
 
-  /// @domName SVGLengthList.clear; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.clear')
   void clear() native;
 
-  /// @domName SVGLengthList.getItem; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.getItem')
   Length getItem(int index) native;
 
-  /// @domName SVGLengthList.initialize; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.initialize')
   Length initialize(Length item) native;
 
-  /// @domName SVGLengthList.insertItemBefore; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.insertItemBefore')
   Length insertItemBefore(Length item, int index) native;
 
-  /// @domName SVGLengthList.removeItem; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.removeItem')
   Length removeItem(int index) native;
 
-  /// @domName SVGLengthList.replaceItem; @docsEditable true
+  @DocsEditable @DomName('SVGLengthList.replaceItem')
   Length replaceItem(Length item, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3122,88 +3258,89 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLineElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGLineElement')
 class LineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGLineElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory LineElement() => _SvgElementFactoryProvider.createSvgElement_tag("line");
 
-  /// @domName SVGLineElement.x1; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.x1')
   final AnimatedLength x1;
 
-  /// @domName SVGLineElement.x2; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.x2')
   final AnimatedLength x2;
 
-  /// @domName SVGLineElement.y1; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.y1')
   final AnimatedLength y1;
 
-  /// @domName SVGLineElement.y2; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.y2')
   final AnimatedLength y2;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGLineElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGLineElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGLineElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3211,22 +3348,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLinearGradientElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGLinearGradientElement')
 class LinearGradientElement extends GradientElement native "*SVGLinearGradientElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory LinearGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("linearGradient");
 
-  /// @domName SVGLinearGradientElement.x1; @docsEditable true
+  @DocsEditable @DomName('SVGLinearGradientElement.x1')
   final AnimatedLength x1;
 
-  /// @domName SVGLinearGradientElement.x2; @docsEditable true
+  @DocsEditable @DomName('SVGLinearGradientElement.x2')
   final AnimatedLength x2;
 
-  /// @domName SVGLinearGradientElement.y1; @docsEditable true
+  @DocsEditable @DomName('SVGLinearGradientElement.y1')
   final AnimatedLength y1;
 
-  /// @domName SVGLinearGradientElement.y2; @docsEditable true
+  @DocsEditable @DomName('SVGLinearGradientElement.y2')
   final AnimatedLength y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3234,23 +3373,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLocatable
+@DocsEditable
+@DomName('SVGLocatable')
 abstract class Locatable {
 
   SvgElement farthestViewportElement;
 
   SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
   Rect getBBox();
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   Matrix getCTM();
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   Matrix getScreenCTM();
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
   Matrix getTransformToElement(SvgElement element);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3258,20 +3394,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMPathElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGMPathElement')
 class MPathElement extends SvgElement implements UriReference, ExternalResourcesRequired native "*SVGMPathElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("mpath");
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGMPathElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGMPathElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3279,10 +3417,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMarkerElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGMarkerElement')
 class MarkerElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace native "*SVGMarkerElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MarkerElement() => _SvgElementFactoryProvider.createSvgElement_tag("marker");
 
   static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
@@ -3297,64 +3437,63 @@
 
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
-  /// @domName SVGMarkerElement.markerHeight; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.markerHeight')
   final AnimatedLength markerHeight;
 
-  /// @domName SVGMarkerElement.markerUnits; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.markerUnits')
   final AnimatedEnumeration markerUnits;
 
-  /// @domName SVGMarkerElement.markerWidth; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.markerWidth')
   final AnimatedLength markerWidth;
 
-  /// @domName SVGMarkerElement.orientAngle; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.orientAngle')
   final AnimatedAngle orientAngle;
 
-  /// @domName SVGMarkerElement.orientType; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.orientType')
   final AnimatedEnumeration orientType;
 
-  /// @domName SVGMarkerElement.refX; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.refX')
   final AnimatedLength refX;
 
-  /// @domName SVGMarkerElement.refY; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.refY')
   final AnimatedLength refY;
 
-  /// @domName SVGMarkerElement.setOrientToAngle; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.setOrientToAngle')
   void setOrientToAngle(Angle angle) native;
 
-  /// @domName SVGMarkerElement.setOrientToAuto; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.setOrientToAuto')
   void setOrientToAuto() native;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.viewBox')
   final AnimatedRect viewBox;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGMarkerElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3362,67 +3501,68 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMaskElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGMaskElement')
 class MaskElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGMaskElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory MaskElement() => _SvgElementFactoryProvider.createSvgElement_tag("mask");
 
-  /// @domName SVGMaskElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGMaskElement.maskContentUnits; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.maskContentUnits')
   final AnimatedEnumeration maskContentUnits;
 
-  /// @domName SVGMaskElement.maskUnits; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.maskUnits')
   final AnimatedEnumeration maskUnits;
 
-  /// @domName SVGMaskElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGMaskElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGMaskElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.y')
   final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGMaskElement.hasExtension')
   bool hasExtension(String extension) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3430,58 +3570,60 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMatrix; @docsEditable true
+
+@DocsEditable
+@DomName('SVGMatrix')
 class Matrix native "*SVGMatrix" {
 
-  /// @domName SVGMatrix.a; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.a')
   num a;
 
-  /// @domName SVGMatrix.b; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.b')
   num b;
 
-  /// @domName SVGMatrix.c; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.c')
   num c;
 
-  /// @domName SVGMatrix.d; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.d')
   num d;
 
-  /// @domName SVGMatrix.e; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.e')
   num e;
 
-  /// @domName SVGMatrix.f; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.f')
   num f;
 
-  /// @domName SVGMatrix.flipX; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.flipX')
   Matrix flipX() native;
 
-  /// @domName SVGMatrix.flipY; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.flipY')
   Matrix flipY() native;
 
-  /// @domName SVGMatrix.inverse; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.inverse')
   Matrix inverse() native;
 
-  /// @domName SVGMatrix.multiply; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.multiply')
   Matrix multiply(Matrix secondMatrix) native;
 
-  /// @domName SVGMatrix.rotate; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.rotate')
   Matrix rotate(num angle) native;
 
-  /// @domName SVGMatrix.rotateFromVector; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.rotateFromVector')
   Matrix rotateFromVector(num x, num y) native;
 
-  /// @domName SVGMatrix.scale; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.scale')
   Matrix scale(num scaleFactor) native;
 
-  /// @domName SVGMatrix.scaleNonUniform; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.scaleNonUniform')
   Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native;
 
-  /// @domName SVGMatrix.skewX; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.skewX')
   Matrix skewX(num angle) native;
 
-  /// @domName SVGMatrix.skewY; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.skewY')
   Matrix skewY(num angle) native;
 
-  /// @domName SVGMatrix.translate; @docsEditable true
+  @DocsEditable @DomName('SVGMatrix.translate')
   Matrix translate(num x, num y) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3489,7 +3631,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMetadataElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGMetadataElement')
 class MetadataElement extends SvgElement native "*SVGMetadataElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3497,7 +3641,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMissingGlyphElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGMissingGlyphElement')
 class MissingGlyphElement extends SvgElement native "*SVGMissingGlyphElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3505,10 +3651,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGNumber; @docsEditable true
+
+@DocsEditable
+@DomName('SVGNumber')
 class Number native "*SVGNumber" {
 
-  /// @domName SVGNumber.value; @docsEditable true
+  @DocsEditable @DomName('SVGNumber.value')
   num value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3516,10 +3664,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGNumberList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGNumberList')
 class NumberList implements JavaScriptIndexingBehavior, List<Number> native "*SVGNumberList" {
 
-  /// @domName SVGNumberList.numberOfItems; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.numberOfItems')
   final int numberOfItems;
 
   Number operator[](int index) => JS("Number", "#[#]", this, index);
@@ -3542,50 +3692,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Number)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Number element) => Collections.contains(this, element);
+  bool contains(Number element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Number element)) => Collections.forEach(this, f);
+  void forEach(void f(Number element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Number element)) => new MappedList<Number, dynamic>(this, f);
+  List mappedBy(f(Number element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Number> where(bool f(Number element)) => new WhereIterable<Number>(this, f);
+  Iterable<Number> where(bool f(Number element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Number element)) => Collections.every(this, f);
+  bool every(bool f(Number element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Number element)) => Collections.any(this, f);
+  bool any(bool f(Number element)) => IterableMixinWorkaround.any(this, f);
 
   List<Number> toList() => new List<Number>.from(this);
   Set<Number> toSet() => new Set<Number>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Number> take(int n) => new ListView<Number>(this, 0, n);
+  List<Number> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Number> takeWhile(bool test(Number value)) {
-    return new TakeWhileIterable<Number>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Number> skip(int n) => new ListView<Number>(this, n, null);
+  List<Number> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Number> skipWhile(bool test(Number value)) {
-    return new SkipWhileIterable<Number>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Number firstMatching(bool test(Number value), { Number orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Number lastMatching(bool test(Number value), {Number orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Number singleMatching(bool test(Number value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Number elementAt(int index) {
@@ -3611,7 +3761,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(Number a, Number b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -3641,16 +3791,36 @@
     throw new StateError("More than one element");
   }
 
-  Number min([int compare(Number a, Number b)]) => Collections.min(this, compare);
+  Number min([int compare(Number a, Number b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Number max([int compare(Number a, Number b)]) => Collections.max(this, compare);
+  Number max([int compare(Number a, Number b)]) => IterableMixinWorkaround.max(this, compare);
 
   Number removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Number removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Number element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Number element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Number> from, [int startFrom]) {
@@ -3670,25 +3840,25 @@
 
   // -- end List<Number> mixins.
 
-  /// @domName SVGNumberList.appendItem; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.appendItem')
   Number appendItem(Number item) native;
 
-  /// @domName SVGNumberList.clear; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.clear')
   void clear() native;
 
-  /// @domName SVGNumberList.getItem; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.getItem')
   Number getItem(int index) native;
 
-  /// @domName SVGNumberList.initialize; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.initialize')
   Number initialize(Number item) native;
 
-  /// @domName SVGNumberList.insertItemBefore; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.insertItemBefore')
   Number insertItemBefore(Number item, int index) native;
 
-  /// @domName SVGNumberList.removeItem; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.removeItem')
   Number removeItem(int index) native;
 
-  /// @domName SVGNumberList.replaceItem; @docsEditable true
+  @DocsEditable @DomName('SVGNumberList.replaceItem')
   Number replaceItem(Number item, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3696,7 +3866,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPaint; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPaint')
 class Paint extends Color native "*SVGPaint" {
 
   static const int SVG_PAINTTYPE_CURRENTCOLOR = 102;
@@ -3719,16 +3891,16 @@
 
   static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
 
-  /// @domName SVGPaint.paintType; @docsEditable true
+  @DocsEditable @DomName('SVGPaint.paintType')
   final int paintType;
 
-  /// @domName SVGPaint.uri; @docsEditable true
+  @DocsEditable @DomName('SVGPaint.uri')
   final String uri;
 
-  /// @domName SVGPaint.setPaint; @docsEditable true
+  @DocsEditable @DomName('SVGPaint.setPaint')
   void setPaint(int paintType, String uri, String rgbColor, String iccColor) native;
 
-  /// @domName SVGPaint.setUri; @docsEditable true
+  @DocsEditable @DomName('SVGPaint.setUri')
   void setUri(String uri) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3736,176 +3908,177 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathElement')
 class PathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPathElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory PathElement() => _SvgElementFactoryProvider.createSvgElement_tag("path");
 
-  /// @domName SVGPathElement.animatedNormalizedPathSegList; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.animatedNormalizedPathSegList')
   final PathSegList animatedNormalizedPathSegList;
 
-  /// @domName SVGPathElement.animatedPathSegList; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.animatedPathSegList')
   final PathSegList animatedPathSegList;
 
-  /// @domName SVGPathElement.normalizedPathSegList; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.normalizedPathSegList')
   final PathSegList normalizedPathSegList;
 
-  /// @domName SVGPathElement.pathLength; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.pathLength')
   final AnimatedNumber pathLength;
 
-  /// @domName SVGPathElement.pathSegList; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.pathSegList')
   final PathSegList pathSegList;
 
-  /// @domName SVGPathElement.createSVGPathSegArcAbs; @docsEditable true
   @JSName('createSVGPathSegArcAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegArcAbs')
   PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
 
-  /// @domName SVGPathElement.createSVGPathSegArcRel; @docsEditable true
   @JSName('createSVGPathSegArcRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegArcRel')
   PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
 
-  /// @domName SVGPathElement.createSVGPathSegClosePath; @docsEditable true
   @JSName('createSVGPathSegClosePath')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegClosePath')
   PathSegClosePath createSvgPathSegClosePath() native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs; @docsEditable true
   @JSName('createSVGPathSegCurvetoCubicAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoCubicAbs')
   PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicRel; @docsEditable true
   @JSName('createSVGPathSegCurvetoCubicRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoCubicRel')
   PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs; @docsEditable true
   @JSName('createSVGPathSegCurvetoCubicSmoothAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs')
   PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel; @docsEditable true
   @JSName('createSVGPathSegCurvetoCubicSmoothRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel')
   PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs; @docsEditable true
   @JSName('createSVGPathSegCurvetoQuadraticAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticAbs')
   PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel; @docsEditable true
   @JSName('createSVGPathSegCurvetoQuadraticRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticRel')
   PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs; @docsEditable true
   @JSName('createSVGPathSegCurvetoQuadraticSmoothAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs')
   PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) native;
 
-  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel; @docsEditable true
   @JSName('createSVGPathSegCurvetoQuadraticSmoothRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel')
   PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) native;
 
-  /// @domName SVGPathElement.createSVGPathSegLinetoAbs; @docsEditable true
   @JSName('createSVGPathSegLinetoAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegLinetoAbs')
   PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) native;
 
-  /// @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs; @docsEditable true
   @JSName('createSVGPathSegLinetoHorizontalAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalAbs')
   PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) native;
 
-  /// @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel; @docsEditable true
   @JSName('createSVGPathSegLinetoHorizontalRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalRel')
   PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) native;
 
-  /// @domName SVGPathElement.createSVGPathSegLinetoRel; @docsEditable true
   @JSName('createSVGPathSegLinetoRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegLinetoRel')
   PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) native;
 
-  /// @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs; @docsEditable true
   @JSName('createSVGPathSegLinetoVerticalAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegLinetoVerticalAbs')
   PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) native;
 
-  /// @domName SVGPathElement.createSVGPathSegLinetoVerticalRel; @docsEditable true
   @JSName('createSVGPathSegLinetoVerticalRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegLinetoVerticalRel')
   PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) native;
 
-  /// @domName SVGPathElement.createSVGPathSegMovetoAbs; @docsEditable true
   @JSName('createSVGPathSegMovetoAbs')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegMovetoAbs')
   PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) native;
 
-  /// @domName SVGPathElement.createSVGPathSegMovetoRel; @docsEditable true
   @JSName('createSVGPathSegMovetoRel')
+  @DocsEditable @DomName('SVGPathElement.createSVGPathSegMovetoRel')
   PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) native;
 
-  /// @domName SVGPathElement.getPathSegAtLength; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.getPathSegAtLength')
   int getPathSegAtLength(num distance) native;
 
-  /// @domName SVGPathElement.getPointAtLength; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.getPointAtLength')
   Point getPointAtLength(num distance) native;
 
-  /// @domName SVGPathElement.getTotalLength; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.getTotalLength')
   num getTotalLength() native;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGPathElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGPathElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGPathElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3913,7 +4086,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSeg; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSeg')
 class PathSeg native "*SVGPathSeg" {
 
   static const int PATHSEG_ARC_ABS = 10;
@@ -3956,10 +4131,10 @@
 
   static const int PATHSEG_UNKNOWN = 0;
 
-  /// @domName SVGPathSeg.pathSegType; @docsEditable true
+  @DocsEditable @DomName('SVGPathSeg.pathSegType')
   final int pathSegType;
 
-  /// @domName SVGPathSeg.pathSegTypeAsLetter; @docsEditable true
+  @DocsEditable @DomName('SVGPathSeg.pathSegTypeAsLetter')
   final String pathSegTypeAsLetter;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3967,28 +4142,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegArcAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegArcAbs')
 class PathSegArcAbs extends PathSeg native "*SVGPathSegArcAbs" {
 
-  /// @domName SVGPathSegArcAbs.angle; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcAbs.angle')
   num angle;
 
-  /// @domName SVGPathSegArcAbs.largeArcFlag; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcAbs.largeArcFlag')
   bool largeArcFlag;
 
-  /// @domName SVGPathSegArcAbs.r1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcAbs.r1')
   num r1;
 
-  /// @domName SVGPathSegArcAbs.r2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcAbs.r2')
   num r2;
 
-  /// @domName SVGPathSegArcAbs.sweepFlag; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcAbs.sweepFlag')
   bool sweepFlag;
 
-  /// @domName SVGPathSegArcAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcAbs.x')
   num x;
 
-  /// @domName SVGPathSegArcAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcAbs.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3996,28 +4173,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegArcRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegArcRel')
 class PathSegArcRel extends PathSeg native "*SVGPathSegArcRel" {
 
-  /// @domName SVGPathSegArcRel.angle; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcRel.angle')
   num angle;
 
-  /// @domName SVGPathSegArcRel.largeArcFlag; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcRel.largeArcFlag')
   bool largeArcFlag;
 
-  /// @domName SVGPathSegArcRel.r1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcRel.r1')
   num r1;
 
-  /// @domName SVGPathSegArcRel.r2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcRel.r2')
   num r2;
 
-  /// @domName SVGPathSegArcRel.sweepFlag; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcRel.sweepFlag')
   bool sweepFlag;
 
-  /// @domName SVGPathSegArcRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcRel.x')
   num x;
 
-  /// @domName SVGPathSegArcRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegArcRel.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4025,7 +4204,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegClosePath; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegClosePath')
 class PathSegClosePath extends PathSeg native "*SVGPathSegClosePath" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4033,25 +4214,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoCubicAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicAbs')
 class PathSegCurvetoCubicAbs extends PathSeg native "*SVGPathSegCurvetoCubicAbs" {
 
-  /// @domName SVGPathSegCurvetoCubicAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicAbs.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoCubicAbs.x1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicAbs.x1')
   num x1;
 
-  /// @domName SVGPathSegCurvetoCubicAbs.x2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicAbs.x2')
   num x2;
 
-  /// @domName SVGPathSegCurvetoCubicAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicAbs.y')
   num y;
 
-  /// @domName SVGPathSegCurvetoCubicAbs.y1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicAbs.y1')
   num y1;
 
-  /// @domName SVGPathSegCurvetoCubicAbs.y2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicAbs.y2')
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4059,25 +4242,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoCubicRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicRel')
 class PathSegCurvetoCubicRel extends PathSeg native "*SVGPathSegCurvetoCubicRel" {
 
-  /// @domName SVGPathSegCurvetoCubicRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicRel.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoCubicRel.x1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicRel.x1')
   num x1;
 
-  /// @domName SVGPathSegCurvetoCubicRel.x2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicRel.x2')
   num x2;
 
-  /// @domName SVGPathSegCurvetoCubicRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicRel.y')
   num y;
 
-  /// @domName SVGPathSegCurvetoCubicRel.y1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicRel.y1')
   num y1;
 
-  /// @domName SVGPathSegCurvetoCubicRel.y2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicRel.y2')
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4085,19 +4270,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoCubicSmoothAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicSmoothAbs')
 class PathSegCurvetoCubicSmoothAbs extends PathSeg native "*SVGPathSegCurvetoCubicSmoothAbs" {
 
-  /// @domName SVGPathSegCurvetoCubicSmoothAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoCubicSmoothAbs.x2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   num x2;
 
-  /// @domName SVGPathSegCurvetoCubicSmoothAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   num y;
 
-  /// @domName SVGPathSegCurvetoCubicSmoothAbs.y2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4105,19 +4292,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoCubicSmoothRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicSmoothRel')
 class PathSegCurvetoCubicSmoothRel extends PathSeg native "*SVGPathSegCurvetoCubicSmoothRel" {
 
-  /// @domName SVGPathSegCurvetoCubicSmoothRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoCubicSmoothRel.x2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   num x2;
 
-  /// @domName SVGPathSegCurvetoCubicSmoothRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   num y;
 
-  /// @domName SVGPathSegCurvetoCubicSmoothRel.y2; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4125,19 +4314,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticAbs')
 class PathSegCurvetoQuadraticAbs extends PathSeg native "*SVGPathSegCurvetoQuadraticAbs" {
 
-  /// @domName SVGPathSegCurvetoQuadraticAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoQuadraticAbs.x1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   num x1;
 
-  /// @domName SVGPathSegCurvetoQuadraticAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   num y;
 
-  /// @domName SVGPathSegCurvetoQuadraticAbs.y1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   num y1;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4145,19 +4336,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticRel')
 class PathSegCurvetoQuadraticRel extends PathSeg native "*SVGPathSegCurvetoQuadraticRel" {
 
-  /// @domName SVGPathSegCurvetoQuadraticRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticRel.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoQuadraticRel.x1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   num x1;
 
-  /// @domName SVGPathSegCurvetoQuadraticRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticRel.y')
   num y;
 
-  /// @domName SVGPathSegCurvetoQuadraticRel.y1; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   num y1;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4165,13 +4358,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticSmoothAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticSmoothAbs')
 class PathSegCurvetoQuadraticSmoothAbs extends PathSeg native "*SVGPathSegCurvetoQuadraticSmoothAbs" {
 
-  /// @domName SVGPathSegCurvetoQuadraticSmoothAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoQuadraticSmoothAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4179,13 +4374,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticSmoothRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticSmoothRel')
 class PathSegCurvetoQuadraticSmoothRel extends PathSeg native "*SVGPathSegCurvetoQuadraticSmoothRel" {
 
-  /// @domName SVGPathSegCurvetoQuadraticSmoothRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   num x;
 
-  /// @domName SVGPathSegCurvetoQuadraticSmoothRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4193,13 +4390,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegLinetoAbs')
 class PathSegLinetoAbs extends PathSeg native "*SVGPathSegLinetoAbs" {
 
-  /// @domName SVGPathSegLinetoAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoAbs.x')
   num x;
 
-  /// @domName SVGPathSegLinetoAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoAbs.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4207,10 +4406,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoHorizontalAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegLinetoHorizontalAbs')
 class PathSegLinetoHorizontalAbs extends PathSeg native "*SVGPathSegLinetoHorizontalAbs" {
 
-  /// @domName SVGPathSegLinetoHorizontalAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoHorizontalAbs.x')
   num x;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4218,10 +4419,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoHorizontalRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegLinetoHorizontalRel')
 class PathSegLinetoHorizontalRel extends PathSeg native "*SVGPathSegLinetoHorizontalRel" {
 
-  /// @domName SVGPathSegLinetoHorizontalRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoHorizontalRel.x')
   num x;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4229,13 +4432,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegLinetoRel')
 class PathSegLinetoRel extends PathSeg native "*SVGPathSegLinetoRel" {
 
-  /// @domName SVGPathSegLinetoRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoRel.x')
   num x;
 
-  /// @domName SVGPathSegLinetoRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoRel.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4243,10 +4448,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoVerticalAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegLinetoVerticalAbs')
 class PathSegLinetoVerticalAbs extends PathSeg native "*SVGPathSegLinetoVerticalAbs" {
 
-  /// @domName SVGPathSegLinetoVerticalAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoVerticalAbs.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4254,10 +4461,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoVerticalRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegLinetoVerticalRel')
 class PathSegLinetoVerticalRel extends PathSeg native "*SVGPathSegLinetoVerticalRel" {
 
-  /// @domName SVGPathSegLinetoVerticalRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegLinetoVerticalRel.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4265,10 +4474,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegList')
 class PathSegList implements JavaScriptIndexingBehavior, List<PathSeg> native "*SVGPathSegList" {
 
-  /// @domName SVGPathSegList.numberOfItems; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.numberOfItems')
   final int numberOfItems;
 
   PathSeg operator[](int index) => JS("PathSeg", "#[#]", this, index);
@@ -4291,50 +4502,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, PathSeg)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(PathSeg element) => Collections.contains(this, element);
+  bool contains(PathSeg element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(PathSeg element)) => Collections.forEach(this, f);
+  void forEach(void f(PathSeg element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(PathSeg element)) => new MappedList<PathSeg, dynamic>(this, f);
+  List mappedBy(f(PathSeg element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<PathSeg> where(bool f(PathSeg element)) => new WhereIterable<PathSeg>(this, f);
+  Iterable<PathSeg> where(bool f(PathSeg element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(PathSeg element)) => Collections.every(this, f);
+  bool every(bool f(PathSeg element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(PathSeg element)) => Collections.any(this, f);
+  bool any(bool f(PathSeg element)) => IterableMixinWorkaround.any(this, f);
 
   List<PathSeg> toList() => new List<PathSeg>.from(this);
   Set<PathSeg> toSet() => new Set<PathSeg>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<PathSeg> take(int n) => new ListView<PathSeg>(this, 0, n);
+  List<PathSeg> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<PathSeg> takeWhile(bool test(PathSeg value)) {
-    return new TakeWhileIterable<PathSeg>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<PathSeg> skip(int n) => new ListView<PathSeg>(this, n, null);
+  List<PathSeg> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<PathSeg> skipWhile(bool test(PathSeg value)) {
-    return new SkipWhileIterable<PathSeg>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   PathSeg firstMatching(bool test(PathSeg value), { PathSeg orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   PathSeg lastMatching(bool test(PathSeg value), {PathSeg orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   PathSeg singleMatching(bool test(PathSeg value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   PathSeg elementAt(int index) {
@@ -4360,7 +4571,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(PathSeg a, PathSeg b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -4390,16 +4601,36 @@
     throw new StateError("More than one element");
   }
 
-  PathSeg min([int compare(PathSeg a, PathSeg b)]) => Collections.min(this, compare);
+  PathSeg min([int compare(PathSeg a, PathSeg b)]) => IterableMixinWorkaround.min(this, compare);
 
-  PathSeg max([int compare(PathSeg a, PathSeg b)]) => Collections.max(this, compare);
+  PathSeg max([int compare(PathSeg a, PathSeg b)]) => IterableMixinWorkaround.max(this, compare);
 
   PathSeg removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   PathSeg removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(PathSeg element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(PathSeg element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<PathSeg> from, [int startFrom]) {
@@ -4419,25 +4650,25 @@
 
   // -- end List<PathSeg> mixins.
 
-  /// @domName SVGPathSegList.appendItem; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.appendItem')
   PathSeg appendItem(PathSeg newItem) native;
 
-  /// @domName SVGPathSegList.clear; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.clear')
   void clear() native;
 
-  /// @domName SVGPathSegList.getItem; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.getItem')
   PathSeg getItem(int index) native;
 
-  /// @domName SVGPathSegList.initialize; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.initialize')
   PathSeg initialize(PathSeg newItem) native;
 
-  /// @domName SVGPathSegList.insertItemBefore; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.insertItemBefore')
   PathSeg insertItemBefore(PathSeg newItem, int index) native;
 
-  /// @domName SVGPathSegList.removeItem; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.removeItem')
   PathSeg removeItem(int index) native;
 
-  /// @domName SVGPathSegList.replaceItem; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegList.replaceItem')
   PathSeg replaceItem(PathSeg newItem, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4445,13 +4676,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegMovetoAbs; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegMovetoAbs')
 class PathSegMovetoAbs extends PathSeg native "*SVGPathSegMovetoAbs" {
 
-  /// @domName SVGPathSegMovetoAbs.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegMovetoAbs.x')
   num x;
 
-  /// @domName SVGPathSegMovetoAbs.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegMovetoAbs.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4459,13 +4692,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegMovetoRel; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPathSegMovetoRel')
 class PathSegMovetoRel extends PathSeg native "*SVGPathSegMovetoRel" {
 
-  /// @domName SVGPathSegMovetoRel.x; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegMovetoRel.x')
   num x;
 
-  /// @domName SVGPathSegMovetoRel.y; @docsEditable true
+  @DocsEditable @DomName('SVGPathSegMovetoRel.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4473,83 +4708,84 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPatternElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPatternElement')
 class PatternElement extends SvgElement implements FitToViewBox, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPatternElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory PatternElement() => _SvgElementFactoryProvider.createSvgElement_tag("pattern");
 
-  /// @domName SVGPatternElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGPatternElement.patternContentUnits; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.patternContentUnits')
   final AnimatedEnumeration patternContentUnits;
 
-  /// @domName SVGPatternElement.patternTransform; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.patternTransform')
   final AnimatedTransformList patternTransform;
 
-  /// @domName SVGPatternElement.patternUnits; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.patternUnits')
   final AnimatedEnumeration patternUnits;
 
-  /// @domName SVGPatternElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGPatternElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGPatternElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.y')
   final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.viewBox')
   final AnimatedRect viewBox;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGPatternElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4557,16 +4793,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPoint; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPoint')
 class Point native "*SVGPoint" {
 
-  /// @domName SVGPoint.x; @docsEditable true
+  @DocsEditable @DomName('SVGPoint.x')
   num x;
 
-  /// @domName SVGPoint.y; @docsEditable true
+  @DocsEditable @DomName('SVGPoint.y')
   num y;
 
-  /// @domName SVGPoint.matrixTransform; @docsEditable true
+  @DocsEditable @DomName('SVGPoint.matrixTransform')
   Point matrixTransform(Matrix matrix) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4574,31 +4812,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPointList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPointList')
 class PointList native "*SVGPointList" {
 
-  /// @domName SVGPointList.numberOfItems; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.numberOfItems')
   final int numberOfItems;
 
-  /// @domName SVGPointList.appendItem; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.appendItem')
   Point appendItem(Point item) native;
 
-  /// @domName SVGPointList.clear; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.clear')
   void clear() native;
 
-  /// @domName SVGPointList.getItem; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.getItem')
   Point getItem(int index) native;
 
-  /// @domName SVGPointList.initialize; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.initialize')
   Point initialize(Point item) native;
 
-  /// @domName SVGPointList.insertItemBefore; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.insertItemBefore')
   Point insertItemBefore(Point item, int index) native;
 
-  /// @domName SVGPointList.removeItem; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.removeItem')
   Point removeItem(int index) native;
 
-  /// @domName SVGPointList.replaceItem; @docsEditable true
+  @DocsEditable @DomName('SVGPointList.replaceItem')
   Point replaceItem(Point item, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4606,82 +4846,83 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPolygonElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPolygonElement')
 class PolygonElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPolygonElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory PolygonElement() => _SvgElementFactoryProvider.createSvgElement_tag("polygon");
 
-  /// @domName SVGPolygonElement.animatedPoints; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.animatedPoints')
   final PointList animatedPoints;
 
-  /// @domName SVGPolygonElement.points; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.points')
   final PointList points;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGPolygonElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGPolygonElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGPolygonElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4689,82 +4930,83 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPolylineElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPolylineElement')
 class PolylineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPolylineElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory PolylineElement() => _SvgElementFactoryProvider.createSvgElement_tag("polyline");
 
-  /// @domName SVGPolylineElement.animatedPoints; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.animatedPoints')
   final PointList animatedPoints;
 
-  /// @domName SVGPolylineElement.points; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.points')
   final PointList points;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGPolylineElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGPolylineElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGPolylineElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4772,7 +5014,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPreserveAspectRatio; @docsEditable true
+
+@DocsEditable
+@DomName('SVGPreserveAspectRatio')
 class PreserveAspectRatio native "*SVGPreserveAspectRatio" {
 
   static const int SVG_MEETORSLICE_MEET = 1;
@@ -4803,10 +5047,10 @@
 
   static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
 
-  /// @domName SVGPreserveAspectRatio.align; @docsEditable true
+  @DocsEditable @DomName('SVGPreserveAspectRatio.align')
   int align;
 
-  /// @domName SVGPreserveAspectRatio.meetOrSlice; @docsEditable true
+  @DocsEditable @DomName('SVGPreserveAspectRatio.meetOrSlice')
   int meetOrSlice;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4814,28 +5058,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGRadialGradientElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGRadialGradientElement')
 class RadialGradientElement extends GradientElement native "*SVGRadialGradientElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory RadialGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("radialGradient");
 
-  /// @domName SVGRadialGradientElement.cx; @docsEditable true
+  @DocsEditable @DomName('SVGRadialGradientElement.cx')
   final AnimatedLength cx;
 
-  /// @domName SVGRadialGradientElement.cy; @docsEditable true
+  @DocsEditable @DomName('SVGRadialGradientElement.cy')
   final AnimatedLength cy;
 
-  /// @domName SVGRadialGradientElement.fr; @docsEditable true
+  @DocsEditable @DomName('SVGRadialGradientElement.fr')
   final AnimatedLength fr;
 
-  /// @domName SVGRadialGradientElement.fx; @docsEditable true
+  @DocsEditable @DomName('SVGRadialGradientElement.fx')
   final AnimatedLength fx;
 
-  /// @domName SVGRadialGradientElement.fy; @docsEditable true
+  @DocsEditable @DomName('SVGRadialGradientElement.fy')
   final AnimatedLength fy;
 
-  /// @domName SVGRadialGradientElement.r; @docsEditable true
+  @DocsEditable @DomName('SVGRadialGradientElement.r')
   final AnimatedLength r;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4843,19 +5089,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGRect; @docsEditable true
+
+@DocsEditable
+@DomName('SVGRect')
 class Rect native "*SVGRect" {
 
-  /// @domName SVGRect.height; @docsEditable true
+  @DocsEditable @DomName('SVGRect.height')
   num height;
 
-  /// @domName SVGRect.width; @docsEditable true
+  @DocsEditable @DomName('SVGRect.width')
   num width;
 
-  /// @domName SVGRect.x; @docsEditable true
+  @DocsEditable @DomName('SVGRect.x')
   num x;
 
-  /// @domName SVGRect.y; @docsEditable true
+  @DocsEditable @DomName('SVGRect.y')
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4863,94 +5111,95 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGRectElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGRectElement')
 class RectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGRectElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory RectElement() => _SvgElementFactoryProvider.createSvgElement_tag("rect");
 
-  /// @domName SVGRectElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGRectElement.rx; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.rx')
   final AnimatedLength rx;
 
-  /// @domName SVGRectElement.ry; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.ry')
   final AnimatedLength ry;
 
-  /// @domName SVGRectElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGRectElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGRectElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.y')
   final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGRectElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGRectElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGRectElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4958,7 +5207,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGRenderingIntent; @docsEditable true
+
+@DocsEditable
+@DomName('SVGRenderingIntent')
 class RenderingIntent native "*SVGRenderingIntent" {
 
   static const int RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;
@@ -4978,23 +5229,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGScriptElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGScriptElement')
 class ScriptElement extends SvgElement implements UriReference, ExternalResourcesRequired native "*SVGScriptElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ScriptElement() => _SvgElementFactoryProvider.createSvgElement_tag("script");
 
-  /// @domName SVGScriptElement.type; @docsEditable true
+  @DocsEditable @DomName('SVGScriptElement.type')
   String type;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGScriptElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGScriptElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5002,10 +5255,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGSetElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGSetElement')
 class SetElement extends AnimationElement native "*SVGSetElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SetElement() => _SvgElementFactoryProvider.createSvgElement_tag("set");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5013,25 +5268,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGStopElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGStopElement')
 class StopElement extends SvgElement implements Stylable native "*SVGStopElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory StopElement() => _SvgElementFactoryProvider.createSvgElement_tag("stop");
 
-  /// @domName SVGStopElement.offset; @docsEditable true
+  @DocsEditable @DomName('SVGStopElement.offset')
   final AnimatedNumber offset;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGStopElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5039,10 +5295,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGStringList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGStringList')
 class StringList implements JavaScriptIndexingBehavior, List<String> native "*SVGStringList" {
 
-  /// @domName SVGStringList.numberOfItems; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.numberOfItems')
   final int numberOfItems;
 
   String operator[](int index) => JS("String", "#[#]", this, index);
@@ -5065,50 +5323,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, String)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(String element) => Collections.contains(this, element);
+  bool contains(String element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(String element)) => Collections.forEach(this, f);
+  void forEach(void f(String element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(String element)) => new MappedList<String, dynamic>(this, f);
+  List mappedBy(f(String element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<String> where(bool f(String element)) => new WhereIterable<String>(this, f);
+  Iterable<String> where(bool f(String element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(String element)) => Collections.every(this, f);
+  bool every(bool f(String element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(String element)) => Collections.any(this, f);
+  bool any(bool f(String element)) => IterableMixinWorkaround.any(this, f);
 
   List<String> toList() => new List<String>.from(this);
   Set<String> toSet() => new Set<String>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<String> take(int n) => new ListView<String>(this, 0, n);
+  List<String> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<String> takeWhile(bool test(String value)) {
-    return new TakeWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<String> skip(int n) => new ListView<String>(this, n, null);
+  List<String> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<String> skipWhile(bool test(String value)) {
-    return new SkipWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   String firstMatching(bool test(String value), { String orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   String lastMatching(bool test(String value), {String orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   String singleMatching(bool test(String value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   String elementAt(int index) {
@@ -5134,7 +5392,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(String a, String b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -5164,16 +5422,36 @@
     throw new StateError("More than one element");
   }
 
-  String min([int compare(String a, String b)]) => Collections.min(this, compare);
+  String min([int compare(String a, String b)]) => IterableMixinWorkaround.min(this, compare);
 
-  String max([int compare(String a, String b)]) => Collections.max(this, compare);
+  String max([int compare(String a, String b)]) => IterableMixinWorkaround.max(this, compare);
 
   String removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   String removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
@@ -5193,25 +5471,25 @@
 
   // -- end List<String> mixins.
 
-  /// @domName SVGStringList.appendItem; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.appendItem')
   String appendItem(String item) native;
 
-  /// @domName SVGStringList.clear; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.clear')
   void clear() native;
 
-  /// @domName SVGStringList.getItem; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.getItem')
   String getItem(int index) native;
 
-  /// @domName SVGStringList.initialize; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.initialize')
   String initialize(String item) native;
 
-  /// @domName SVGStringList.insertItemBefore; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.insertItemBefore')
   String insertItemBefore(String item, int index) native;
 
-  /// @domName SVGStringList.removeItem; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.removeItem')
   String removeItem(int index) native;
 
-  /// @domName SVGStringList.replaceItem; @docsEditable true
+  @DocsEditable @DomName('SVGStringList.replaceItem')
   String replaceItem(String item, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5219,14 +5497,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGStylable
+@DocsEditable
+@DomName('SVGStylable')
 abstract class Stylable {
 
   AnimatedString $dom_svgClassName;
 
   CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CssValue getPresentationAttribute(String name);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5234,36 +5512,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGStyleElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGStyleElement')
 class StyleElement extends SvgElement implements LangSpace native "*SVGStyleElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory StyleElement() => _SvgElementFactoryProvider.createSvgElement_tag("style");
 
-  /// @domName SVGStyleElement.disabled; @docsEditable true
+  @DocsEditable @DomName('SVGStyleElement.disabled')
   bool disabled;
 
-  /// @domName SVGStyleElement.media; @docsEditable true
+  @DocsEditable @DomName('SVGStyleElement.media')
   String media;
 
   // Shadowing definition.
-  /// @domName SVGStyleElement.title; @docsEditable true
   String get title => JS("String", "#.title", this);
 
-  /// @domName SVGStyleElement.title; @docsEditable true
   void set title(String value) {
     JS("void", "#.title = #", this, value);
   }
 
-  /// @domName SVGStyleElement.type; @docsEditable true
+  @DocsEditable @DomName('SVGStyleElement.type')
   String type;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGStyleElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGStyleElement.xmlspace')
   String xmlspace;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5271,14 +5549,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGDocument; @docsEditable true
+
+@DocsEditable
+@DomName('SVGDocument')
 class SvgDocument extends Document native "*SVGDocument" {
 
-  /// @domName SVGDocument.rootElement; @docsEditable true
+  @DocsEditable @DomName('SVGDocument.rootElement')
   final SvgSvgElement rootElement;
 
-  /// @domName SVGDocument.createEvent; @docsEditable true
   @JSName('createEvent')
+  @DocsEditable @DomName('SVGDocument.createEvent')
   Event $dom_createEvent(String eventType) native;
 }
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
@@ -5313,7 +5593,8 @@
   }
 }
 
-/// @domName SVGElement
+@DocsEditable
+@DomName('SVGElement')
 class SvgElement extends Element native "*SVGElement" {
   factory SvgElement.tag(String tag) =>
       _SvgElementFactoryProvider.createSvgElement_tag(tag);
@@ -5370,17 +5651,17 @@
 
   // Unsupported methods inherited from Element.
 
-  /** @domName Element.insertAdjacentText */
+  @DomName('Element.insertAdjacentText')
   void insertAdjacentText(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentText on SVG.");
   }
 
-  /** @domName Element.insertAdjacentHTML */
+  @DomName('Element.insertAdjacentHTML')
   void insertAdjacentHtml(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentHtml on SVG.");
   }
 
-  /** @domName Element.insertAdjacentHTML */
+  @DomName('Element.insertAdjacentHTML')
   Element insertAdjacentElement(String where, Element element) {
     throw new UnsupportedError("Cannot invoke insertAdjacentElement on SVG.");
   }
@@ -5396,22 +5677,20 @@
 
 
   // Shadowing definition.
-  /// @domName SVGElement.id; @docsEditable true
   String get id => JS("String", "#.id", this);
 
-  /// @domName SVGElement.id; @docsEditable true
   void set id(String value) {
     JS("void", "#.id = #", this, value);
   }
 
-  /// @domName SVGElement.ownerSVGElement; @docsEditable true
   @JSName('ownerSVGElement')
+  @DocsEditable @DomName('SVGElement.ownerSVGElement')
   final SvgSvgElement ownerSvgElement;
 
-  /// @domName SVGElement.viewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGElement.viewportElement')
   final SvgElement viewportElement;
 
-  /// @domName SVGElement.xmlbase; @docsEditable true
+  @DocsEditable @DomName('SVGElement.xmlbase')
   String xmlbase;
 
 }
@@ -5420,7 +5699,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGException; @docsEditable true
+
+@DocsEditable
+@DomName('SVGException')
 class SvgException native "*SVGException" {
 
   static const int SVG_INVALID_VALUE_ERR = 1;
@@ -5429,16 +5710,16 @@
 
   static const int SVG_WRONG_TYPE_ERR = 0;
 
-  /// @domName SVGException.code; @docsEditable true
+  @DocsEditable @DomName('SVGException.code')
   final int code;
 
-  /// @domName SVGException.message; @docsEditable true
+  @DocsEditable @DomName('SVGException.message')
   final String message;
 
-  /// @domName SVGException.name; @docsEditable true
+  @DocsEditable @DomName('SVGException.name')
   final String name;
 
-  /// @domName SVGException.toString; @docsEditable true
+  @DocsEditable @DomName('SVGException.toString')
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5446,207 +5727,207 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGSVGElement
+@DocsEditable
+@DomName('SVGSVGElement')
 class SvgSvgElement extends SvgElement implements FitToViewBox, Tests, Stylable, Locatable, ExternalResourcesRequired, ZoomAndPan, LangSpace native "*SVGSVGElement" {
   factory SvgSvgElement() => _SvgSvgElementFactoryProvider.createSvgSvgElement();
 
 
-  /// @domName SVGSVGElement.contentScriptType; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.contentScriptType')
   String contentScriptType;
 
-  /// @domName SVGSVGElement.contentStyleType; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.contentStyleType')
   String contentStyleType;
 
-  /// @domName SVGSVGElement.currentScale; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.currentScale')
   num currentScale;
 
-  /// @domName SVGSVGElement.currentTranslate; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.currentTranslate')
   final Point currentTranslate;
 
-  /// @domName SVGSVGElement.currentView; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.currentView')
   final ViewSpec currentView;
 
-  /// @domName SVGSVGElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGSVGElement.pixelUnitToMillimeterX; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.pixelUnitToMillimeterX')
   final num pixelUnitToMillimeterX;
 
-  /// @domName SVGSVGElement.pixelUnitToMillimeterY; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.pixelUnitToMillimeterY')
   final num pixelUnitToMillimeterY;
 
-  /// @domName SVGSVGElement.screenPixelToMillimeterX; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.screenPixelToMillimeterX')
   final num screenPixelToMillimeterX;
 
-  /// @domName SVGSVGElement.screenPixelToMillimeterY; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.screenPixelToMillimeterY')
   final num screenPixelToMillimeterY;
 
-  /// @domName SVGSVGElement.useCurrentView; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.useCurrentView')
   final bool useCurrentView;
 
-  /// @domName SVGSVGElement.viewport; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.viewport')
   final Rect viewport;
 
-  /// @domName SVGSVGElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGSVGElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGSVGElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.y')
   final AnimatedLength y;
 
-  /// @domName SVGSVGElement.animationsPaused; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.animationsPaused')
   bool animationsPaused() native;
 
-  /// @domName SVGSVGElement.checkEnclosure; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.checkEnclosure')
   bool checkEnclosure(SvgElement element, Rect rect) native;
 
-  /// @domName SVGSVGElement.checkIntersection; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.checkIntersection')
   bool checkIntersection(SvgElement element, Rect rect) native;
 
-  /// @domName SVGSVGElement.createSVGAngle; @docsEditable true
   @JSName('createSVGAngle')
+  @DocsEditable @DomName('SVGSVGElement.createSVGAngle')
   Angle createSvgAngle() native;
 
-  /// @domName SVGSVGElement.createSVGLength; @docsEditable true
   @JSName('createSVGLength')
+  @DocsEditable @DomName('SVGSVGElement.createSVGLength')
   Length createSvgLength() native;
 
-  /// @domName SVGSVGElement.createSVGMatrix; @docsEditable true
   @JSName('createSVGMatrix')
+  @DocsEditable @DomName('SVGSVGElement.createSVGMatrix')
   Matrix createSvgMatrix() native;
 
-  /// @domName SVGSVGElement.createSVGNumber; @docsEditable true
   @JSName('createSVGNumber')
+  @DocsEditable @DomName('SVGSVGElement.createSVGNumber')
   Number createSvgNumber() native;
 
-  /// @domName SVGSVGElement.createSVGPoint; @docsEditable true
   @JSName('createSVGPoint')
+  @DocsEditable @DomName('SVGSVGElement.createSVGPoint')
   Point createSvgPoint() native;
 
-  /// @domName SVGSVGElement.createSVGRect; @docsEditable true
   @JSName('createSVGRect')
+  @DocsEditable @DomName('SVGSVGElement.createSVGRect')
   Rect createSvgRect() native;
 
-  /// @domName SVGSVGElement.createSVGTransform; @docsEditable true
   @JSName('createSVGTransform')
+  @DocsEditable @DomName('SVGSVGElement.createSVGTransform')
   Transform createSvgTransform() native;
 
-  /// @domName SVGSVGElement.createSVGTransformFromMatrix; @docsEditable true
   @JSName('createSVGTransformFromMatrix')
+  @DocsEditable @DomName('SVGSVGElement.createSVGTransformFromMatrix')
   Transform createSvgTransformFromMatrix(Matrix matrix) native;
 
-  /// @domName SVGSVGElement.deselectAll; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.deselectAll')
   void deselectAll() native;
 
-  /// @domName SVGSVGElement.forceRedraw; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.forceRedraw')
   void forceRedraw() native;
 
-  /// @domName SVGSVGElement.getCurrentTime; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.getCurrentTime')
   num getCurrentTime() native;
 
-  /// @domName SVGSVGElement.getElementById; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.getElementById')
   Element getElementById(String elementId) native;
 
-  /// @domName SVGSVGElement.getEnclosureList; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.getEnclosureList')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) native;
 
-  /// @domName SVGSVGElement.getIntersectionList; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.getIntersectionList')
   @Returns('NodeList') @Creates('NodeList')
   List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) native;
 
-  /// @domName SVGSVGElement.pauseAnimations; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.pauseAnimations')
   void pauseAnimations() native;
 
-  /// @domName SVGSVGElement.setCurrentTime; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.setCurrentTime')
   void setCurrentTime(num seconds) native;
 
-  /// @domName SVGSVGElement.suspendRedraw; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.suspendRedraw')
   int suspendRedraw(int maxWaitMilliseconds) native;
 
-  /// @domName SVGSVGElement.unpauseAnimations; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.unpauseAnimations')
   void unpauseAnimations() native;
 
-  /// @domName SVGSVGElement.unsuspendRedraw; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.unsuspendRedraw')
   void unsuspendRedraw(int suspendHandleId) native;
 
-  /// @domName SVGSVGElement.unsuspendRedrawAll; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.unsuspendRedrawAll')
   void unsuspendRedrawAll() native;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.viewBox')
   final AnimatedRect viewBox;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGSVGElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGSVGElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGZoomAndPan
 
-  /// @domName SVGZoomAndPan.zoomAndPan; @docsEditable true
+  @DocsEditable @DomName('SVGSVGElement.zoomAndPan')
   int zoomAndPan;
 
 }
@@ -5655,76 +5936,77 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGSwitchElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGSwitchElement')
 class SwitchElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGSwitchElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SwitchElement() => _SvgElementFactoryProvider.createSvgElement_tag("switch");
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGSwitchElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGSwitchElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGSwitchElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5732,43 +6014,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGSymbolElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGSymbolElement')
 class SymbolElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace native "*SVGSymbolElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory SymbolElement() => _SvgElementFactoryProvider.createSvgElement_tag("symbol");
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGSymbolElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGSymbolElement.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  @DocsEditable @DomName('SVGSymbolElement.viewBox')
   final AnimatedRect viewBox;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGSymbolElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGSymbolElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGSymbolElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5776,15 +6059,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTRefElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTRefElement')
 class TRefElement extends TextPositioningElement implements UriReference native "*SVGTRefElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TRefElement() => _SvgElementFactoryProvider.createSvgElement_tag("tref");
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGTRefElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5792,10 +6077,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTSpanElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTSpanElement')
 class TSpanElement extends TextPositioningElement native "*SVGTSpanElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TSpanElement() => _SvgElementFactoryProvider.createSvgElement_tag("tspan");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5803,7 +6090,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTests
+@DocsEditable
+@DomName('SVGTests')
 abstract class Tests {
 
   StringList requiredExtensions;
@@ -5812,7 +6100,6 @@
 
   StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5820,7 +6107,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTextContentElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTextContentElement')
 class TextContentElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGTextContentElement" {
 
   static const int LENGTHADJUST_SPACING = 1;
@@ -5829,76 +6118,75 @@
 
   static const int LENGTHADJUST_UNKNOWN = 0;
 
-  /// @domName SVGTextContentElement.lengthAdjust; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.lengthAdjust')
   final AnimatedEnumeration lengthAdjust;
 
-  /// @domName SVGTextContentElement.textLength; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.textLength')
   final AnimatedLength textLength;
 
-  /// @domName SVGTextContentElement.getCharNumAtPosition; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getCharNumAtPosition')
   int getCharNumAtPosition(Point point) native;
 
-  /// @domName SVGTextContentElement.getComputedTextLength; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getComputedTextLength')
   num getComputedTextLength() native;
 
-  /// @domName SVGTextContentElement.getEndPositionOfChar; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getEndPositionOfChar')
   Point getEndPositionOfChar(int offset) native;
 
-  /// @domName SVGTextContentElement.getExtentOfChar; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getExtentOfChar')
   Rect getExtentOfChar(int offset) native;
 
-  /// @domName SVGTextContentElement.getNumberOfChars; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getNumberOfChars')
   int getNumberOfChars() native;
 
-  /// @domName SVGTextContentElement.getRotationOfChar; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getRotationOfChar')
   num getRotationOfChar(int offset) native;
 
-  /// @domName SVGTextContentElement.getStartPositionOfChar; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getStartPositionOfChar')
   Point getStartPositionOfChar(int offset) native;
 
-  /// @domName SVGTextContentElement.getSubStringLength; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getSubStringLength')
   num getSubStringLength(int offset, int length) native;
 
-  /// @domName SVGTextContentElement.selectSubString; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.selectSubString')
   void selectSubString(int offset, int length) native;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGTextContentElement.hasExtension')
   bool hasExtension(String extension) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5906,37 +6194,39 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTextElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTextElement')
 class TextElement extends TextPositioningElement implements Transformable native "*SVGTextElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TextElement() => _SvgElementFactoryProvider.createSvgElement_tag("text");
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGTextElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGTextElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGTextElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGTextElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGTextElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGTextElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGTextElement.transform')
   final AnimatedTransformList transform;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5944,7 +6234,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTextPathElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTextPathElement')
 class TextPathElement extends TextContentElement implements UriReference native "*SVGTextPathElement" {
 
   static const int TEXTPATH_METHODTYPE_ALIGN = 1;
@@ -5959,18 +6251,18 @@
 
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
-  /// @domName SVGTextPathElement.method; @docsEditable true
+  @DocsEditable @DomName('SVGTextPathElement.method')
   final AnimatedEnumeration method;
 
-  /// @domName SVGTextPathElement.spacing; @docsEditable true
+  @DocsEditable @DomName('SVGTextPathElement.spacing')
   final AnimatedEnumeration spacing;
 
-  /// @domName SVGTextPathElement.startOffset; @docsEditable true
+  @DocsEditable @DomName('SVGTextPathElement.startOffset')
   final AnimatedLength startOffset;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGTextPathElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5978,22 +6270,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTextPositioningElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTextPositioningElement')
 class TextPositioningElement extends TextContentElement native "*SVGTextPositioningElement" {
 
-  /// @domName SVGTextPositioningElement.dx; @docsEditable true
+  @DocsEditable @DomName('SVGTextPositioningElement.dx')
   final AnimatedLengthList dx;
 
-  /// @domName SVGTextPositioningElement.dy; @docsEditable true
+  @DocsEditable @DomName('SVGTextPositioningElement.dy')
   final AnimatedLengthList dy;
 
-  /// @domName SVGTextPositioningElement.rotate; @docsEditable true
+  @DocsEditable @DomName('SVGTextPositioningElement.rotate')
   final AnimatedNumberList rotate;
 
-  /// @domName SVGTextPositioningElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGTextPositioningElement.x')
   final AnimatedLengthList x;
 
-  /// @domName SVGTextPositioningElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGTextPositioningElement.y')
   final AnimatedLengthList y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6001,30 +6295,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTitleElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTitleElement')
 class TitleElement extends SvgElement implements Stylable, LangSpace native "*SVGTitleElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory TitleElement() => _SvgElementFactoryProvider.createSvgElement_tag("title");
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGTitleElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGTitleElement.xmlspace')
   String xmlspace;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGTitleElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6032,7 +6327,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTransform; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTransform')
 class Transform native "*SVGTransform" {
 
   static const int SVG_TRANSFORM_MATRIX = 1;
@@ -6049,31 +6346,31 @@
 
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
-  /// @domName SVGTransform.angle; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.angle')
   final num angle;
 
-  /// @domName SVGTransform.matrix; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.matrix')
   final Matrix matrix;
 
-  /// @domName SVGTransform.type; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.type')
   final int type;
 
-  /// @domName SVGTransform.setMatrix; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.setMatrix')
   void setMatrix(Matrix matrix) native;
 
-  /// @domName SVGTransform.setRotate; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.setRotate')
   void setRotate(num angle, num cx, num cy) native;
 
-  /// @domName SVGTransform.setScale; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.setScale')
   void setScale(num sx, num sy) native;
 
-  /// @domName SVGTransform.setSkewX; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.setSkewX')
   void setSkewX(num angle) native;
 
-  /// @domName SVGTransform.setSkewY; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.setSkewY')
   void setSkewY(num angle) native;
 
-  /// @domName SVGTransform.setTranslate; @docsEditable true
+  @DocsEditable @DomName('SVGTransform.setTranslate')
   void setTranslate(num tx, num ty) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6081,10 +6378,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTransformList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGTransformList')
 class TransformList implements List<Transform>, JavaScriptIndexingBehavior native "*SVGTransformList" {
 
-  /// @domName SVGTransformList.numberOfItems; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.numberOfItems')
   final int numberOfItems;
 
   Transform operator[](int index) => JS("Transform", "#[#]", this, index);
@@ -6107,50 +6406,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Transform)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Transform element) => Collections.contains(this, element);
+  bool contains(Transform element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Transform element)) => Collections.forEach(this, f);
+  void forEach(void f(Transform element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Transform element)) => new MappedList<Transform, dynamic>(this, f);
+  List mappedBy(f(Transform element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Transform> where(bool f(Transform element)) => new WhereIterable<Transform>(this, f);
+  Iterable<Transform> where(bool f(Transform element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Transform element)) => Collections.every(this, f);
+  bool every(bool f(Transform element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Transform element)) => Collections.any(this, f);
+  bool any(bool f(Transform element)) => IterableMixinWorkaround.any(this, f);
 
   List<Transform> toList() => new List<Transform>.from(this);
   Set<Transform> toSet() => new Set<Transform>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Transform> take(int n) => new ListView<Transform>(this, 0, n);
+  List<Transform> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Transform> takeWhile(bool test(Transform value)) {
-    return new TakeWhileIterable<Transform>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Transform> skip(int n) => new ListView<Transform>(this, n, null);
+  List<Transform> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Transform> skipWhile(bool test(Transform value)) {
-    return new SkipWhileIterable<Transform>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Transform firstMatching(bool test(Transform value), { Transform orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Transform lastMatching(bool test(Transform value), {Transform orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Transform singleMatching(bool test(Transform value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Transform elementAt(int index) {
@@ -6176,7 +6475,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(Transform a, Transform b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -6206,16 +6505,36 @@
     throw new StateError("More than one element");
   }
 
-  Transform min([int compare(Transform a, Transform b)]) => Collections.min(this, compare);
+  Transform min([int compare(Transform a, Transform b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Transform max([int compare(Transform a, Transform b)]) => Collections.max(this, compare);
+  Transform max([int compare(Transform a, Transform b)]) => IterableMixinWorkaround.max(this, compare);
 
   Transform removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Transform removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Transform element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Transform element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Transform> from, [int startFrom]) {
@@ -6235,32 +6554,32 @@
 
   // -- end List<Transform> mixins.
 
-  /// @domName SVGTransformList.appendItem; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.appendItem')
   Transform appendItem(Transform item) native;
 
-  /// @domName SVGTransformList.clear; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.clear')
   void clear() native;
 
-  /// @domName SVGTransformList.consolidate; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.consolidate')
   Transform consolidate() native;
 
-  /// @domName SVGTransformList.createSVGTransformFromMatrix; @docsEditable true
   @JSName('createSVGTransformFromMatrix')
+  @DocsEditable @DomName('SVGTransformList.createSVGTransformFromMatrix')
   Transform createSvgTransformFromMatrix(Matrix matrix) native;
 
-  /// @domName SVGTransformList.getItem; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.getItem')
   Transform getItem(int index) native;
 
-  /// @domName SVGTransformList.initialize; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.initialize')
   Transform initialize(Transform item) native;
 
-  /// @domName SVGTransformList.insertItemBefore; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.insertItemBefore')
   Transform insertItemBefore(Transform item, int index) native;
 
-  /// @domName SVGTransformList.removeItem; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.removeItem')
   Transform removeItem(int index) native;
 
-  /// @domName SVGTransformList.replaceItem; @docsEditable true
+  @DocsEditable @DomName('SVGTransformList.replaceItem')
   Transform replaceItem(Transform item, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6268,7 +6587,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTransformable
+@DocsEditable
+@DomName('SVGTransformable')
 abstract class Transformable implements Locatable {
 
   AnimatedTransformList transform;
@@ -6279,16 +6599,12 @@
 
   SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
   Rect getBBox();
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   Matrix getCTM();
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   Matrix getScreenCTM();
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
   Matrix getTransformToElement(SvgElement element);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6296,7 +6612,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGUnitTypes; @docsEditable true
+
+@DocsEditable
+@DomName('SVGUnitTypes')
 class UnitTypes native "*SVGUnitTypes" {
 
   static const int SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
@@ -6310,7 +6628,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGURIReference
+@DocsEditable
+@DomName('SVGURIReference')
 abstract class UriReference {
 
   AnimatedString href;
@@ -6320,99 +6639,100 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGUseElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGUseElement')
 class UseElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGUseElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory UseElement() => _SvgElementFactoryProvider.createSvgElement_tag("use");
 
-  /// @domName SVGUseElement.animatedInstanceRoot; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.animatedInstanceRoot')
   final ElementInstance animatedInstanceRoot;
 
-  /// @domName SVGUseElement.height; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.height')
   final AnimatedLength height;
 
-  /// @domName SVGUseElement.instanceRoot; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.instanceRoot')
   final ElementInstance instanceRoot;
 
-  /// @domName SVGUseElement.width; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.width')
   final AnimatedLength width;
 
-  /// @domName SVGUseElement.x; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.x')
   final AnimatedLength x;
 
-  /// @domName SVGUseElement.y; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.y')
   final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.xmllang')
   String xmllang;
 
-  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.xmlspace')
   String xmlspace;
 
   // From SVGLocatable
 
-  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.farthestViewportElement')
   final SvgElement farthestViewportElement;
 
-  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.nearestViewportElement')
   final SvgElement nearestViewportElement;
 
-  /// @domName SVGLocatable.getBBox; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.getBBox')
   Rect getBBox() native;
 
-  /// @domName SVGLocatable.getCTM; @docsEditable true
   @JSName('getCTM')
+  @DocsEditable @DomName('SVGUseElement.getCTM')
   Matrix getCtm() native;
 
-  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
   @JSName('getScreenCTM')
+  @DocsEditable @DomName('SVGUseElement.getScreenCTM')
   Matrix getScreenCtm() native;
 
-  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
   // Shadowing definition.
-  /// @domName SVGStylable.className; @docsEditable true
   AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CssStyleDeclaration style;
 
-  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.requiredExtensions')
   final StringList requiredExtensions;
 
-  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.requiredFeatures')
   final StringList requiredFeatures;
 
-  /// @domName SVGTests.systemLanguage; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.systemLanguage')
   final StringList systemLanguage;
 
-  /// @domName SVGTests.hasExtension; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.hasExtension')
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /// @domName SVGTransformable.transform; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.transform')
   final AnimatedTransformList transform;
 
   // From SVGURIReference
 
-  /// @domName SVGURIReference.href; @docsEditable true
+  @DocsEditable @DomName('SVGUseElement.href')
   final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6420,10 +6740,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGVKernElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGVKernElement')
 class VKernElement extends SvgElement native "*SVGVKernElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory VKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("vkern");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6431,31 +6753,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGViewElement; @docsEditable true
+
+@DocsEditable
+@DomName('SVGViewElement')
 class ViewElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, ZoomAndPan native "*SVGViewElement" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory ViewElement() => _SvgElementFactoryProvider.createSvgElement_tag("view");
 
-  /// @domName SVGViewElement.viewTarget; @docsEditable true
+  @DocsEditable @DomName('SVGViewElement.viewTarget')
   final StringList viewTarget;
 
   // From SVGExternalResourcesRequired
 
-  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  @DocsEditable @DomName('SVGViewElement.externalResourcesRequired')
   final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGViewElement.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  @DocsEditable @DomName('SVGViewElement.viewBox')
   final AnimatedRect viewBox;
 
   // From SVGZoomAndPan
 
-  /// @domName SVGZoomAndPan.zoomAndPan; @docsEditable true
+  @DocsEditable @DomName('SVGViewElement.zoomAndPan')
   int zoomAndPan;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6463,34 +6787,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGViewSpec; @docsEditable true
+
+@DocsEditable
+@DomName('SVGViewSpec')
 class ViewSpec native "*SVGViewSpec" {
 
-  /// @domName SVGViewSpec.preserveAspectRatio; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.preserveAspectRatio')
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /// @domName SVGViewSpec.preserveAspectRatioString; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.preserveAspectRatioString')
   final String preserveAspectRatioString;
 
-  /// @domName SVGViewSpec.transform; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.transform')
   final TransformList transform;
 
-  /// @domName SVGViewSpec.transformString; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.transformString')
   final String transformString;
 
-  /// @domName SVGViewSpec.viewBox; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.viewBox')
   final AnimatedRect viewBox;
 
-  /// @domName SVGViewSpec.viewBoxString; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.viewBoxString')
   final String viewBoxString;
 
-  /// @domName SVGViewSpec.viewTarget; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.viewTarget')
   final SvgElement viewTarget;
 
-  /// @domName SVGViewSpec.viewTargetString; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.viewTargetString')
   final String viewTargetString;
 
-  /// @domName SVGViewSpec.zoomAndPan; @docsEditable true
+  @DocsEditable @DomName('SVGViewSpec.zoomAndPan')
   int zoomAndPan;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6498,7 +6824,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGZoomAndPan
+@DocsEditable
+@DomName('SVGZoomAndPan')
 abstract class ZoomAndPan {
 
   static const int SVG_ZOOMANDPAN_DISABLE = 1;
@@ -6514,22 +6841,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGZoomEvent; @docsEditable true
+
+@DocsEditable
+@DomName('SVGZoomEvent')
 class ZoomEvent extends UIEvent native "*SVGZoomEvent" {
 
-  /// @domName SVGZoomEvent.newScale; @docsEditable true
+  @DocsEditable @DomName('SVGZoomEvent.newScale')
   final num newScale;
 
-  /// @domName SVGZoomEvent.newTranslate; @docsEditable true
+  @DocsEditable @DomName('SVGZoomEvent.newTranslate')
   final Point newTranslate;
 
-  /// @domName SVGZoomEvent.previousScale; @docsEditable true
+  @DocsEditable @DomName('SVGZoomEvent.previousScale')
   final num previousScale;
 
-  /// @domName SVGZoomEvent.previousTranslate; @docsEditable true
+  @DocsEditable @DomName('SVGZoomEvent.previousTranslate')
   final Point previousTranslate;
 
-  /// @domName SVGZoomEvent.zoomRectScreen; @docsEditable true
+  @DocsEditable @DomName('SVGZoomEvent.zoomRectScreen')
   final Rect zoomRectScreen;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6537,10 +6866,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGElementInstanceList; @docsEditable true
+
+@DocsEditable
+@DomName('SVGElementInstanceList')
 class _ElementInstanceList implements JavaScriptIndexingBehavior, List<ElementInstance> native "*SVGElementInstanceList" {
 
-  /// @domName SVGElementInstanceList.length; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstanceList.length')
   int get length => JS("int", "#.length", this);
 
   ElementInstance operator[](int index) => JS("ElementInstance", "#[#]", this, index);
@@ -6561,50 +6892,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, ElementInstance)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(ElementInstance element) => Collections.contains(this, element);
+  bool contains(ElementInstance element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(ElementInstance element)) => Collections.forEach(this, f);
+  void forEach(void f(ElementInstance element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(ElementInstance element)) => new MappedList<ElementInstance, dynamic>(this, f);
+  List mappedBy(f(ElementInstance element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<ElementInstance> where(bool f(ElementInstance element)) => new WhereIterable<ElementInstance>(this, f);
+  Iterable<ElementInstance> where(bool f(ElementInstance element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(ElementInstance element)) => Collections.every(this, f);
+  bool every(bool f(ElementInstance element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(ElementInstance element)) => Collections.any(this, f);
+  bool any(bool f(ElementInstance element)) => IterableMixinWorkaround.any(this, f);
 
   List<ElementInstance> toList() => new List<ElementInstance>.from(this);
   Set<ElementInstance> toSet() => new Set<ElementInstance>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<ElementInstance> take(int n) => new ListView<ElementInstance>(this, 0, n);
+  List<ElementInstance> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<ElementInstance> takeWhile(bool test(ElementInstance value)) {
-    return new TakeWhileIterable<ElementInstance>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<ElementInstance> skip(int n) => new ListView<ElementInstance>(this, n, null);
+  List<ElementInstance> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<ElementInstance> skipWhile(bool test(ElementInstance value)) {
-    return new SkipWhileIterable<ElementInstance>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   ElementInstance firstMatching(bool test(ElementInstance value), { ElementInstance orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   ElementInstance lastMatching(bool test(ElementInstance value), {ElementInstance orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   ElementInstance singleMatching(bool test(ElementInstance value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   ElementInstance elementAt(int index) {
@@ -6662,16 +6993,36 @@
     throw new StateError("More than one element");
   }
 
-  ElementInstance min([int compare(ElementInstance a, ElementInstance b)]) => Collections.min(this, compare);
+  ElementInstance min([int compare(ElementInstance a, ElementInstance b)]) => IterableMixinWorkaround.min(this, compare);
 
-  ElementInstance max([int compare(ElementInstance a, ElementInstance b)]) => Collections.max(this, compare);
+  ElementInstance max([int compare(ElementInstance a, ElementInstance b)]) => IterableMixinWorkaround.max(this, compare);
 
   ElementInstance removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   ElementInstance removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(ElementInstance element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(ElementInstance element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<ElementInstance> from, [int startFrom]) {
@@ -6691,6 +7042,6 @@
 
   // -- end List<ElementInstance> mixins.
 
-  /// @domName SVGElementInstanceList.item; @docsEditable true
+  @DocsEditable @DomName('SVGElementInstanceList.item')
   ElementInstance item(int index) native;
 }
diff --git a/sdk/lib/svg/dartium/svg_dartium.dart b/sdk/lib/svg/dartium/svg_dartium.dart
index e9f7cb8..ee8eb12 100644
--- a/sdk/lib/svg/dartium/svg_dartium.dart
+++ b/sdk/lib/svg/dartium/svg_dartium.dart
@@ -59,95 +59,96 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAElement
+@DocsEditable
+@DomName('SVGAElement')
 class AElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
   AElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AElement() => _SvgElementFactoryProvider.createSvgElement_tag("a");
 
-
-  /** @domName SVGAElement.target */
+  @DocsEditable
+  @DomName('SVGAElement.target')
   AnimatedString get target native "SVGAElement_target_Getter";
 
-
-  /** @domName SVGAElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGAElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGAElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGAElement.xmllang */
+  @DocsEditable
+  @DomName('SVGAElement.xmllang')
   String get xmllang native "SVGAElement_xmllang_Getter";
 
-
-  /** @domName SVGAElement.xmllang */
+  @DocsEditable
+  @DomName('SVGAElement.xmllang')
   void set xmllang(String value) native "SVGAElement_xmllang_Setter";
 
-
-  /** @domName SVGAElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGAElement.xmlspace')
   String get xmlspace native "SVGAElement_xmlspace_Getter";
 
-
-  /** @domName SVGAElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGAElement.xmlspace')
   void set xmlspace(String value) native "SVGAElement_xmlspace_Setter";
 
-
-  /** @domName SVGAElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGAElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGAElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGAElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGAElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGAElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGAElement.getBBox */
+  @DocsEditable
+  @DomName('SVGAElement.getBBox')
   Rect getBBox() native "SVGAElement_getBBox_Callback";
 
-
-  /** @domName SVGAElement.getCTM */
+  @DocsEditable
+  @DomName('SVGAElement.getCTM')
   Matrix getCtm() native "SVGAElement_getCTM_Callback";
 
-
-  /** @domName SVGAElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGAElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGAElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGAElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGAElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGAElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGAElement.className */
+  @DocsEditable
+  @DomName('SVGAElement.className')
   AnimatedString get $dom_svgClassName native "SVGAElement_className_Getter";
 
-
-  /** @domName SVGAElement.style */
+  @DocsEditable
+  @DomName('SVGAElement.style')
   CssStyleDeclaration get style native "SVGAElement_style_Getter";
 
-
-  /** @domName SVGAElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGAElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGAElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGAElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGAElement.requiredExtensions')
   StringList get requiredExtensions native "SVGAElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGAElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGAElement.requiredFeatures')
   StringList get requiredFeatures native "SVGAElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGAElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGAElement.systemLanguage')
   StringList get systemLanguage native "SVGAElement_systemLanguage_Getter";
 
-
-  /** @domName SVGAElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGAElement.hasExtension')
   bool hasExtension(String extension) native "SVGAElement_hasExtension_Callback";
 
-
-  /** @domName SVGAElement.transform */
+  @DocsEditable
+  @DomName('SVGAElement.transform')
   AnimatedTransformList get transform native "SVGAElement_transform_Getter";
 
-
-  /** @domName SVGAElement.href */
+  @DocsEditable
+  @DomName('SVGAElement.href')
   AnimatedString get href native "SVGAElement_href_Getter";
 
 }
@@ -158,7 +159,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAltGlyphDefElement
+@DocsEditable
+@DomName('SVGAltGlyphDefElement')
 class AltGlyphDefElement extends SvgElement {
   AltGlyphDefElement.internal() : super.internal();
 
@@ -170,28 +172,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAltGlyphElement
+@DocsEditable
+@DomName('SVGAltGlyphElement')
 class AltGlyphElement extends TextPositioningElement implements UriReference {
   AltGlyphElement.internal() : super.internal();
 
-
-  /** @domName SVGAltGlyphElement.format */
+  @DocsEditable
+  @DomName('SVGAltGlyphElement.format')
   String get format native "SVGAltGlyphElement_format_Getter";
 
-
-  /** @domName SVGAltGlyphElement.format */
+  @DocsEditable
+  @DomName('SVGAltGlyphElement.format')
   void set format(String value) native "SVGAltGlyphElement_format_Setter";
 
-
-  /** @domName SVGAltGlyphElement.glyphRef */
+  @DocsEditable
+  @DomName('SVGAltGlyphElement.glyphRef')
   String get glyphRef native "SVGAltGlyphElement_glyphRef_Getter";
 
-
-  /** @domName SVGAltGlyphElement.glyphRef */
+  @DocsEditable
+  @DomName('SVGAltGlyphElement.glyphRef')
   void set glyphRef(String value) native "SVGAltGlyphElement_glyphRef_Setter";
 
-
-  /** @domName SVGAltGlyphElement.href */
+  @DocsEditable
+  @DomName('SVGAltGlyphElement.href')
   AnimatedString get href native "SVGAltGlyphElement_href_Getter";
 
 }
@@ -202,7 +205,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAltGlyphItemElement
+@DocsEditable
+@DomName('SVGAltGlyphItemElement')
 class AltGlyphItemElement extends SvgElement {
   AltGlyphItemElement.internal() : super.internal();
 
@@ -214,7 +218,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAngle
+@DocsEditable
+@DomName('SVGAngle')
 class Angle extends NativeFieldWrapperClass1 {
   Angle.internal();
 
@@ -228,40 +233,40 @@
 
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
-
-  /** @domName SVGAngle.unitType */
+  @DocsEditable
+  @DomName('SVGAngle.unitType')
   int get unitType native "SVGAngle_unitType_Getter";
 
-
-  /** @domName SVGAngle.value */
+  @DocsEditable
+  @DomName('SVGAngle.value')
   num get value native "SVGAngle_value_Getter";
 
-
-  /** @domName SVGAngle.value */
+  @DocsEditable
+  @DomName('SVGAngle.value')
   void set value(num value) native "SVGAngle_value_Setter";
 
-
-  /** @domName SVGAngle.valueAsString */
+  @DocsEditable
+  @DomName('SVGAngle.valueAsString')
   String get valueAsString native "SVGAngle_valueAsString_Getter";
 
-
-  /** @domName SVGAngle.valueAsString */
+  @DocsEditable
+  @DomName('SVGAngle.valueAsString')
   void set valueAsString(String value) native "SVGAngle_valueAsString_Setter";
 
-
-  /** @domName SVGAngle.valueInSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGAngle.valueInSpecifiedUnits')
   num get valueInSpecifiedUnits native "SVGAngle_valueInSpecifiedUnits_Getter";
 
-
-  /** @domName SVGAngle.valueInSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGAngle.valueInSpecifiedUnits')
   void set valueInSpecifiedUnits(num value) native "SVGAngle_valueInSpecifiedUnits_Setter";
 
-
-  /** @domName SVGAngle.convertToSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGAngle.convertToSpecifiedUnits')
   void convertToSpecifiedUnits(int unitType) native "SVGAngle_convertToSpecifiedUnits_Callback";
 
-
-  /** @domName SVGAngle.newValueSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGAngle.newValueSpecifiedUnits')
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native "SVGAngle_newValueSpecifiedUnits_Callback";
 
 }
@@ -272,11 +277,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimateColorElement
+@DocsEditable
+@DomName('SVGAnimateColorElement')
 class AnimateColorElement extends AnimationElement {
   AnimateColorElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateColorElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateColor");
 
 }
@@ -287,11 +293,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimateElement
+@DocsEditable
+@DomName('SVGAnimateElement')
 class AnimateElement extends AnimationElement {
   AnimateElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateElement() => _SvgElementFactoryProvider.createSvgElement_tag("animate");
 
 }
@@ -302,11 +309,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimateMotionElement
+@DocsEditable
+@DomName('SVGAnimateMotionElement')
 class AnimateMotionElement extends AnimationElement {
   AnimateMotionElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateMotionElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateMotion");
 
 }
@@ -317,11 +325,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimateTransformElement
+@DocsEditable
+@DomName('SVGAnimateTransformElement')
 class AnimateTransformElement extends AnimationElement {
   AnimateTransformElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimateTransformElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateTransform");
 
 }
@@ -332,16 +341,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedAngle
+@DocsEditable
+@DomName('SVGAnimatedAngle')
 class AnimatedAngle extends NativeFieldWrapperClass1 {
   AnimatedAngle.internal();
 
-
-  /** @domName SVGAnimatedAngle.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedAngle.animVal')
   Angle get animVal native "SVGAnimatedAngle_animVal_Getter";
 
-
-  /** @domName SVGAnimatedAngle.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedAngle.baseVal')
   Angle get baseVal native "SVGAnimatedAngle_baseVal_Getter";
 
 }
@@ -352,20 +362,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedBoolean
+@DocsEditable
+@DomName('SVGAnimatedBoolean')
 class AnimatedBoolean extends NativeFieldWrapperClass1 {
   AnimatedBoolean.internal();
 
-
-  /** @domName SVGAnimatedBoolean.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedBoolean.animVal')
   bool get animVal native "SVGAnimatedBoolean_animVal_Getter";
 
-
-  /** @domName SVGAnimatedBoolean.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedBoolean.baseVal')
   bool get baseVal native "SVGAnimatedBoolean_baseVal_Getter";
 
-
-  /** @domName SVGAnimatedBoolean.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedBoolean.baseVal')
   void set baseVal(bool value) native "SVGAnimatedBoolean_baseVal_Setter";
 
 }
@@ -376,20 +387,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedEnumeration
+@DocsEditable
+@DomName('SVGAnimatedEnumeration')
 class AnimatedEnumeration extends NativeFieldWrapperClass1 {
   AnimatedEnumeration.internal();
 
-
-  /** @domName SVGAnimatedEnumeration.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedEnumeration.animVal')
   int get animVal native "SVGAnimatedEnumeration_animVal_Getter";
 
-
-  /** @domName SVGAnimatedEnumeration.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedEnumeration.baseVal')
   int get baseVal native "SVGAnimatedEnumeration_baseVal_Getter";
 
-
-  /** @domName SVGAnimatedEnumeration.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedEnumeration.baseVal')
   void set baseVal(int value) native "SVGAnimatedEnumeration_baseVal_Setter";
 
 }
@@ -400,20 +412,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedInteger
+@DocsEditable
+@DomName('SVGAnimatedInteger')
 class AnimatedInteger extends NativeFieldWrapperClass1 {
   AnimatedInteger.internal();
 
-
-  /** @domName SVGAnimatedInteger.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedInteger.animVal')
   int get animVal native "SVGAnimatedInteger_animVal_Getter";
 
-
-  /** @domName SVGAnimatedInteger.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedInteger.baseVal')
   int get baseVal native "SVGAnimatedInteger_baseVal_Getter";
 
-
-  /** @domName SVGAnimatedInteger.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedInteger.baseVal')
   void set baseVal(int value) native "SVGAnimatedInteger_baseVal_Setter";
 
 }
@@ -424,16 +437,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedLength
+@DocsEditable
+@DomName('SVGAnimatedLength')
 class AnimatedLength extends NativeFieldWrapperClass1 {
   AnimatedLength.internal();
 
-
-  /** @domName SVGAnimatedLength.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedLength.animVal')
   Length get animVal native "SVGAnimatedLength_animVal_Getter";
 
-
-  /** @domName SVGAnimatedLength.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedLength.baseVal')
   Length get baseVal native "SVGAnimatedLength_baseVal_Getter";
 
 }
@@ -444,16 +458,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedLengthList
+@DocsEditable
+@DomName('SVGAnimatedLengthList')
 class AnimatedLengthList extends NativeFieldWrapperClass1 {
   AnimatedLengthList.internal();
 
-
-  /** @domName SVGAnimatedLengthList.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedLengthList.animVal')
   LengthList get animVal native "SVGAnimatedLengthList_animVal_Getter";
 
-
-  /** @domName SVGAnimatedLengthList.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedLengthList.baseVal')
   LengthList get baseVal native "SVGAnimatedLengthList_baseVal_Getter";
 
 }
@@ -464,20 +479,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedNumber
+@DocsEditable
+@DomName('SVGAnimatedNumber')
 class AnimatedNumber extends NativeFieldWrapperClass1 {
   AnimatedNumber.internal();
 
-
-  /** @domName SVGAnimatedNumber.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedNumber.animVal')
   num get animVal native "SVGAnimatedNumber_animVal_Getter";
 
-
-  /** @domName SVGAnimatedNumber.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedNumber.baseVal')
   num get baseVal native "SVGAnimatedNumber_baseVal_Getter";
 
-
-  /** @domName SVGAnimatedNumber.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedNumber.baseVal')
   void set baseVal(num value) native "SVGAnimatedNumber_baseVal_Setter";
 
 }
@@ -488,16 +504,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedNumberList
+@DocsEditable
+@DomName('SVGAnimatedNumberList')
 class AnimatedNumberList extends NativeFieldWrapperClass1 {
   AnimatedNumberList.internal();
 
-
-  /** @domName SVGAnimatedNumberList.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedNumberList.animVal')
   NumberList get animVal native "SVGAnimatedNumberList_animVal_Getter";
 
-
-  /** @domName SVGAnimatedNumberList.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedNumberList.baseVal')
   NumberList get baseVal native "SVGAnimatedNumberList_baseVal_Getter";
 
 }
@@ -508,16 +525,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedPreserveAspectRatio
+@DocsEditable
+@DomName('SVGAnimatedPreserveAspectRatio')
 class AnimatedPreserveAspectRatio extends NativeFieldWrapperClass1 {
   AnimatedPreserveAspectRatio.internal();
 
-
-  /** @domName SVGAnimatedPreserveAspectRatio.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedPreserveAspectRatio.animVal')
   PreserveAspectRatio get animVal native "SVGAnimatedPreserveAspectRatio_animVal_Getter";
 
-
-  /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedPreserveAspectRatio.baseVal')
   PreserveAspectRatio get baseVal native "SVGAnimatedPreserveAspectRatio_baseVal_Getter";
 
 }
@@ -528,16 +546,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedRect
+@DocsEditable
+@DomName('SVGAnimatedRect')
 class AnimatedRect extends NativeFieldWrapperClass1 {
   AnimatedRect.internal();
 
-
-  /** @domName SVGAnimatedRect.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedRect.animVal')
   Rect get animVal native "SVGAnimatedRect_animVal_Getter";
 
-
-  /** @domName SVGAnimatedRect.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedRect.baseVal')
   Rect get baseVal native "SVGAnimatedRect_baseVal_Getter";
 
 }
@@ -548,20 +567,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedString
+@DocsEditable
+@DomName('SVGAnimatedString')
 class AnimatedString extends NativeFieldWrapperClass1 {
   AnimatedString.internal();
 
-
-  /** @domName SVGAnimatedString.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedString.animVal')
   String get animVal native "SVGAnimatedString_animVal_Getter";
 
-
-  /** @domName SVGAnimatedString.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedString.baseVal')
   String get baseVal native "SVGAnimatedString_baseVal_Getter";
 
-
-  /** @domName SVGAnimatedString.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedString.baseVal')
   void set baseVal(String value) native "SVGAnimatedString_baseVal_Setter";
 
 }
@@ -572,16 +592,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimatedTransformList
+@DocsEditable
+@DomName('SVGAnimatedTransformList')
 class AnimatedTransformList extends NativeFieldWrapperClass1 {
   AnimatedTransformList.internal();
 
-
-  /** @domName SVGAnimatedTransformList.animVal */
+  @DocsEditable
+  @DomName('SVGAnimatedTransformList.animVal')
   TransformList get animVal native "SVGAnimatedTransformList_animVal_Getter";
 
-
-  /** @domName SVGAnimatedTransformList.baseVal */
+  @DocsEditable
+  @DomName('SVGAnimatedTransformList.baseVal')
   TransformList get baseVal native "SVGAnimatedTransformList_baseVal_Getter";
 
 }
@@ -592,63 +613,64 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGAnimationElement
+@DocsEditable
+@DomName('SVGAnimationElement')
 class AnimationElement extends SvgElement implements Tests, ElementTimeControl, ExternalResourcesRequired {
   AnimationElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory AnimationElement() => _SvgElementFactoryProvider.createSvgElement_tag("animation");
 
-
-  /** @domName SVGAnimationElement.targetElement */
+  @DocsEditable
+  @DomName('SVGAnimationElement.targetElement')
   SvgElement get targetElement native "SVGAnimationElement_targetElement_Getter";
 
-
-  /** @domName SVGAnimationElement.getCurrentTime */
+  @DocsEditable
+  @DomName('SVGAnimationElement.getCurrentTime')
   num getCurrentTime() native "SVGAnimationElement_getCurrentTime_Callback";
 
-
-  /** @domName SVGAnimationElement.getSimpleDuration */
+  @DocsEditable
+  @DomName('SVGAnimationElement.getSimpleDuration')
   num getSimpleDuration() native "SVGAnimationElement_getSimpleDuration_Callback";
 
-
-  /** @domName SVGAnimationElement.getStartTime */
+  @DocsEditable
+  @DomName('SVGAnimationElement.getStartTime')
   num getStartTime() native "SVGAnimationElement_getStartTime_Callback";
 
-
-  /** @domName SVGAnimationElement.beginElement */
+  @DocsEditable
+  @DomName('SVGAnimationElement.beginElement')
   void beginElement() native "SVGAnimationElement_beginElement_Callback";
 
-
-  /** @domName SVGAnimationElement.beginElementAt */
+  @DocsEditable
+  @DomName('SVGAnimationElement.beginElementAt')
   void beginElementAt(num offset) native "SVGAnimationElement_beginElementAt_Callback";
 
-
-  /** @domName SVGAnimationElement.endElement */
+  @DocsEditable
+  @DomName('SVGAnimationElement.endElement')
   void endElement() native "SVGAnimationElement_endElement_Callback";
 
-
-  /** @domName SVGAnimationElement.endElementAt */
+  @DocsEditable
+  @DomName('SVGAnimationElement.endElementAt')
   void endElementAt(num offset) native "SVGAnimationElement_endElementAt_Callback";
 
-
-  /** @domName SVGAnimationElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGAnimationElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGAnimationElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGAnimationElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGAnimationElement.requiredExtensions')
   StringList get requiredExtensions native "SVGAnimationElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGAnimationElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGAnimationElement.requiredFeatures')
   StringList get requiredFeatures native "SVGAnimationElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGAnimationElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGAnimationElement.systemLanguage')
   StringList get systemLanguage native "SVGAnimationElement_systemLanguage_Getter";
 
-
-  /** @domName SVGAnimationElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGAnimationElement.hasExtension')
   bool hasExtension(String extension) native "SVGAnimationElement_hasExtension_Callback";
 
 }
@@ -659,99 +681,100 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGCircleElement
+@DocsEditable
+@DomName('SVGCircleElement')
 class CircleElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   CircleElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory CircleElement() => _SvgElementFactoryProvider.createSvgElement_tag("circle");
 
-
-  /** @domName SVGCircleElement.cx */
+  @DocsEditable
+  @DomName('SVGCircleElement.cx')
   AnimatedLength get cx native "SVGCircleElement_cx_Getter";
 
-
-  /** @domName SVGCircleElement.cy */
+  @DocsEditable
+  @DomName('SVGCircleElement.cy')
   AnimatedLength get cy native "SVGCircleElement_cy_Getter";
 
-
-  /** @domName SVGCircleElement.r */
+  @DocsEditable
+  @DomName('SVGCircleElement.r')
   AnimatedLength get r native "SVGCircleElement_r_Getter";
 
-
-  /** @domName SVGCircleElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGCircleElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGCircleElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGCircleElement.xmllang */
+  @DocsEditable
+  @DomName('SVGCircleElement.xmllang')
   String get xmllang native "SVGCircleElement_xmllang_Getter";
 
-
-  /** @domName SVGCircleElement.xmllang */
+  @DocsEditable
+  @DomName('SVGCircleElement.xmllang')
   void set xmllang(String value) native "SVGCircleElement_xmllang_Setter";
 
-
-  /** @domName SVGCircleElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGCircleElement.xmlspace')
   String get xmlspace native "SVGCircleElement_xmlspace_Getter";
 
-
-  /** @domName SVGCircleElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGCircleElement.xmlspace')
   void set xmlspace(String value) native "SVGCircleElement_xmlspace_Setter";
 
-
-  /** @domName SVGCircleElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGCircleElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGCircleElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGCircleElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGCircleElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGCircleElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGCircleElement.getBBox */
+  @DocsEditable
+  @DomName('SVGCircleElement.getBBox')
   Rect getBBox() native "SVGCircleElement_getBBox_Callback";
 
-
-  /** @domName SVGCircleElement.getCTM */
+  @DocsEditable
+  @DomName('SVGCircleElement.getCTM')
   Matrix getCtm() native "SVGCircleElement_getCTM_Callback";
 
-
-  /** @domName SVGCircleElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGCircleElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGCircleElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGCircleElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGCircleElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGCircleElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGCircleElement.className */
+  @DocsEditable
+  @DomName('SVGCircleElement.className')
   AnimatedString get $dom_svgClassName native "SVGCircleElement_className_Getter";
 
-
-  /** @domName SVGCircleElement.style */
+  @DocsEditable
+  @DomName('SVGCircleElement.style')
   CssStyleDeclaration get style native "SVGCircleElement_style_Getter";
 
-
-  /** @domName SVGCircleElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGCircleElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGCircleElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGCircleElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGCircleElement.requiredExtensions')
   StringList get requiredExtensions native "SVGCircleElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGCircleElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGCircleElement.requiredFeatures')
   StringList get requiredFeatures native "SVGCircleElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGCircleElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGCircleElement.systemLanguage')
   StringList get systemLanguage native "SVGCircleElement_systemLanguage_Getter";
 
-
-  /** @domName SVGCircleElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGCircleElement.hasExtension')
   bool hasExtension(String extension) native "SVGCircleElement_hasExtension_Callback";
 
-
-  /** @domName SVGCircleElement.transform */
+  @DocsEditable
+  @DomName('SVGCircleElement.transform')
   AnimatedTransformList get transform native "SVGCircleElement_transform_Getter";
 
 }
@@ -762,91 +785,92 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGClipPathElement
+@DocsEditable
+@DomName('SVGClipPathElement')
 class ClipPathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   ClipPathElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ClipPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("clipPath");
 
-
-  /** @domName SVGClipPathElement.clipPathUnits */
+  @DocsEditable
+  @DomName('SVGClipPathElement.clipPathUnits')
   AnimatedEnumeration get clipPathUnits native "SVGClipPathElement_clipPathUnits_Getter";
 
-
-  /** @domName SVGClipPathElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGClipPathElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGClipPathElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGClipPathElement.xmllang */
+  @DocsEditable
+  @DomName('SVGClipPathElement.xmllang')
   String get xmllang native "SVGClipPathElement_xmllang_Getter";
 
-
-  /** @domName SVGClipPathElement.xmllang */
+  @DocsEditable
+  @DomName('SVGClipPathElement.xmllang')
   void set xmllang(String value) native "SVGClipPathElement_xmllang_Setter";
 
-
-  /** @domName SVGClipPathElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGClipPathElement.xmlspace')
   String get xmlspace native "SVGClipPathElement_xmlspace_Getter";
 
-
-  /** @domName SVGClipPathElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGClipPathElement.xmlspace')
   void set xmlspace(String value) native "SVGClipPathElement_xmlspace_Setter";
 
-
-  /** @domName SVGClipPathElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGClipPathElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGClipPathElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGClipPathElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGClipPathElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGClipPathElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGClipPathElement.getBBox */
+  @DocsEditable
+  @DomName('SVGClipPathElement.getBBox')
   Rect getBBox() native "SVGClipPathElement_getBBox_Callback";
 
-
-  /** @domName SVGClipPathElement.getCTM */
+  @DocsEditable
+  @DomName('SVGClipPathElement.getCTM')
   Matrix getCtm() native "SVGClipPathElement_getCTM_Callback";
 
-
-  /** @domName SVGClipPathElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGClipPathElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGClipPathElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGClipPathElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGClipPathElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGClipPathElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGClipPathElement.className */
+  @DocsEditable
+  @DomName('SVGClipPathElement.className')
   AnimatedString get $dom_svgClassName native "SVGClipPathElement_className_Getter";
 
-
-  /** @domName SVGClipPathElement.style */
+  @DocsEditable
+  @DomName('SVGClipPathElement.style')
   CssStyleDeclaration get style native "SVGClipPathElement_style_Getter";
 
-
-  /** @domName SVGClipPathElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGClipPathElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGClipPathElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGClipPathElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGClipPathElement.requiredExtensions')
   StringList get requiredExtensions native "SVGClipPathElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGClipPathElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGClipPathElement.requiredFeatures')
   StringList get requiredFeatures native "SVGClipPathElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGClipPathElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGClipPathElement.systemLanguage')
   StringList get systemLanguage native "SVGClipPathElement_systemLanguage_Getter";
 
-
-  /** @domName SVGClipPathElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGClipPathElement.hasExtension')
   bool hasExtension(String extension) native "SVGClipPathElement_hasExtension_Callback";
 
-
-  /** @domName SVGClipPathElement.transform */
+  @DocsEditable
+  @DomName('SVGClipPathElement.transform')
   AnimatedTransformList get transform native "SVGClipPathElement_transform_Getter";
 
 }
@@ -857,7 +881,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGColor
+@DocsEditable
+@DomName('SVGColor')
 class Color extends CssValue {
   Color.internal() : super.internal();
 
@@ -869,24 +894,24 @@
 
   static const int SVG_COLORTYPE_UNKNOWN = 0;
 
-
-  /** @domName SVGColor.colorType */
+  @DocsEditable
+  @DomName('SVGColor.colorType')
   int get colorType native "SVGColor_colorType_Getter";
 
-
-  /** @domName SVGColor.rgbColor */
+  @DocsEditable
+  @DomName('SVGColor.rgbColor')
   RgbColor get rgbColor native "SVGColor_rgbColor_Getter";
 
-
-  /** @domName SVGColor.setColor */
+  @DocsEditable
+  @DomName('SVGColor.setColor')
   void setColor(int colorType, String rgbColor, String iccColor) native "SVGColor_setColor_Callback";
 
-
-  /** @domName SVGColor.setRGBColor */
+  @DocsEditable
+  @DomName('SVGColor.setRGBColor')
   void setRgbColor(String rgbColor) native "SVGColor_setRGBColor_Callback";
 
-
-  /** @domName SVGColor.setRGBColorICCColor */
+  @DocsEditable
+  @DomName('SVGColor.setRGBColorICCColor')
   void setRgbColorIccColor(String rgbColor, String iccColor) native "SVGColor_setRGBColorICCColor_Callback";
 
 }
@@ -897,7 +922,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGComponentTransferFunctionElement
+@DocsEditable
+@DomName('SVGComponentTransferFunctionElement')
 class ComponentTransferFunctionElement extends SvgElement {
   ComponentTransferFunctionElement.internal() : super.internal();
 
@@ -913,32 +939,32 @@
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
 
-
-  /** @domName SVGComponentTransferFunctionElement.amplitude */
+  @DocsEditable
+  @DomName('SVGComponentTransferFunctionElement.amplitude')
   AnimatedNumber get amplitude native "SVGComponentTransferFunctionElement_amplitude_Getter";
 
-
-  /** @domName SVGComponentTransferFunctionElement.exponent */
+  @DocsEditable
+  @DomName('SVGComponentTransferFunctionElement.exponent')
   AnimatedNumber get exponent native "SVGComponentTransferFunctionElement_exponent_Getter";
 
-
-  /** @domName SVGComponentTransferFunctionElement.intercept */
+  @DocsEditable
+  @DomName('SVGComponentTransferFunctionElement.intercept')
   AnimatedNumber get intercept native "SVGComponentTransferFunctionElement_intercept_Getter";
 
-
-  /** @domName SVGComponentTransferFunctionElement.offset */
+  @DocsEditable
+  @DomName('SVGComponentTransferFunctionElement.offset')
   AnimatedNumber get offset native "SVGComponentTransferFunctionElement_offset_Getter";
 
-
-  /** @domName SVGComponentTransferFunctionElement.slope */
+  @DocsEditable
+  @DomName('SVGComponentTransferFunctionElement.slope')
   AnimatedNumber get slope native "SVGComponentTransferFunctionElement_slope_Getter";
 
-
-  /** @domName SVGComponentTransferFunctionElement.tableValues */
+  @DocsEditable
+  @DomName('SVGComponentTransferFunctionElement.tableValues')
   AnimatedNumberList get tableValues native "SVGComponentTransferFunctionElement_tableValues_Getter";
 
-
-  /** @domName SVGComponentTransferFunctionElement.type */
+  @DocsEditable
+  @DomName('SVGComponentTransferFunctionElement.type')
   AnimatedEnumeration get type native "SVGComponentTransferFunctionElement_type_Getter";
 
 }
@@ -949,43 +975,44 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGCursorElement
+@DocsEditable
+@DomName('SVGCursorElement')
 class CursorElement extends SvgElement implements UriReference, Tests, ExternalResourcesRequired {
   CursorElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory CursorElement() => _SvgElementFactoryProvider.createSvgElement_tag("cursor");
 
-
-  /** @domName SVGCursorElement.x */
+  @DocsEditable
+  @DomName('SVGCursorElement.x')
   AnimatedLength get x native "SVGCursorElement_x_Getter";
 
-
-  /** @domName SVGCursorElement.y */
+  @DocsEditable
+  @DomName('SVGCursorElement.y')
   AnimatedLength get y native "SVGCursorElement_y_Getter";
 
-
-  /** @domName SVGCursorElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGCursorElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGCursorElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGCursorElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGCursorElement.requiredExtensions')
   StringList get requiredExtensions native "SVGCursorElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGCursorElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGCursorElement.requiredFeatures')
   StringList get requiredFeatures native "SVGCursorElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGCursorElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGCursorElement.systemLanguage')
   StringList get systemLanguage native "SVGCursorElement_systemLanguage_Getter";
 
-
-  /** @domName SVGCursorElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGCursorElement.hasExtension')
   bool hasExtension(String extension) native "SVGCursorElement_hasExtension_Callback";
 
-
-  /** @domName SVGCursorElement.href */
+  @DocsEditable
+  @DomName('SVGCursorElement.href')
   AnimatedString get href native "SVGCursorElement_href_Getter";
 
 }
@@ -996,87 +1023,88 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGDefsElement
+@DocsEditable
+@DomName('SVGDefsElement')
 class DefsElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   DefsElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DefsElement() => _SvgElementFactoryProvider.createSvgElement_tag("defs");
 
-
-  /** @domName SVGDefsElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGDefsElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGDefsElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGDefsElement.xmllang */
+  @DocsEditable
+  @DomName('SVGDefsElement.xmllang')
   String get xmllang native "SVGDefsElement_xmllang_Getter";
 
-
-  /** @domName SVGDefsElement.xmllang */
+  @DocsEditable
+  @DomName('SVGDefsElement.xmllang')
   void set xmllang(String value) native "SVGDefsElement_xmllang_Setter";
 
-
-  /** @domName SVGDefsElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGDefsElement.xmlspace')
   String get xmlspace native "SVGDefsElement_xmlspace_Getter";
 
-
-  /** @domName SVGDefsElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGDefsElement.xmlspace')
   void set xmlspace(String value) native "SVGDefsElement_xmlspace_Setter";
 
-
-  /** @domName SVGDefsElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGDefsElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGDefsElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGDefsElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGDefsElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGDefsElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGDefsElement.getBBox */
+  @DocsEditable
+  @DomName('SVGDefsElement.getBBox')
   Rect getBBox() native "SVGDefsElement_getBBox_Callback";
 
-
-  /** @domName SVGDefsElement.getCTM */
+  @DocsEditable
+  @DomName('SVGDefsElement.getCTM')
   Matrix getCtm() native "SVGDefsElement_getCTM_Callback";
 
-
-  /** @domName SVGDefsElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGDefsElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGDefsElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGDefsElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGDefsElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGDefsElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGDefsElement.className */
+  @DocsEditable
+  @DomName('SVGDefsElement.className')
   AnimatedString get $dom_svgClassName native "SVGDefsElement_className_Getter";
 
-
-  /** @domName SVGDefsElement.style */
+  @DocsEditable
+  @DomName('SVGDefsElement.style')
   CssStyleDeclaration get style native "SVGDefsElement_style_Getter";
 
-
-  /** @domName SVGDefsElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGDefsElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGDefsElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGDefsElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGDefsElement.requiredExtensions')
   StringList get requiredExtensions native "SVGDefsElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGDefsElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGDefsElement.requiredFeatures')
   StringList get requiredFeatures native "SVGDefsElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGDefsElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGDefsElement.systemLanguage')
   StringList get systemLanguage native "SVGDefsElement_systemLanguage_Getter";
 
-
-  /** @domName SVGDefsElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGDefsElement.hasExtension')
   bool hasExtension(String extension) native "SVGDefsElement_hasExtension_Callback";
 
-
-  /** @domName SVGDefsElement.transform */
+  @DocsEditable
+  @DomName('SVGDefsElement.transform')
   AnimatedTransformList get transform native "SVGDefsElement_transform_Getter";
 
 }
@@ -1087,39 +1115,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGDescElement
+@DocsEditable
+@DomName('SVGDescElement')
 class DescElement extends SvgElement implements Stylable, LangSpace {
   DescElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory DescElement() => _SvgElementFactoryProvider.createSvgElement_tag("desc");
 
-
-  /** @domName SVGDescElement.xmllang */
+  @DocsEditable
+  @DomName('SVGDescElement.xmllang')
   String get xmllang native "SVGDescElement_xmllang_Getter";
 
-
-  /** @domName SVGDescElement.xmllang */
+  @DocsEditable
+  @DomName('SVGDescElement.xmllang')
   void set xmllang(String value) native "SVGDescElement_xmllang_Setter";
 
-
-  /** @domName SVGDescElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGDescElement.xmlspace')
   String get xmlspace native "SVGDescElement_xmlspace_Getter";
 
-
-  /** @domName SVGDescElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGDescElement.xmlspace')
   void set xmlspace(String value) native "SVGDescElement_xmlspace_Setter";
 
-
-  /** @domName SVGDescElement.className */
+  @DocsEditable
+  @DomName('SVGDescElement.className')
   AnimatedString get $dom_svgClassName native "SVGDescElement_className_Getter";
 
-
-  /** @domName SVGDescElement.style */
+  @DocsEditable
+  @DomName('SVGDescElement.style')
   CssStyleDeclaration get style native "SVGDescElement_style_Getter";
 
-
-  /** @domName SVGDescElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGDescElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGDescElement_getPresentationAttribute_Callback";
 
 }
@@ -1130,7 +1159,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGElementInstance
+@DocsEditable
+@DomName('SVGElementInstance')
 class ElementInstance extends EventTarget {
   ElementInstance.internal() : super.internal();
 
@@ -1214,40 +1244,41 @@
 
   static const EventStreamProvider<Event> unloadEvent = const EventStreamProvider<Event>('unload');
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   ElementInstanceEvents get on =>
     new ElementInstanceEvents(this);
 
-
-  /** @domName SVGElementInstance.childNodes */
+  @DocsEditable
+  @DomName('SVGElementInstance.childNodes')
   List<ElementInstance> get childNodes native "SVGElementInstance_childNodes_Getter";
 
-
-  /** @domName SVGElementInstance.correspondingElement */
+  @DocsEditable
+  @DomName('SVGElementInstance.correspondingElement')
   SvgElement get correspondingElement native "SVGElementInstance_correspondingElement_Getter";
 
-
-  /** @domName SVGElementInstance.correspondingUseElement */
+  @DocsEditable
+  @DomName('SVGElementInstance.correspondingUseElement')
   UseElement get correspondingUseElement native "SVGElementInstance_correspondingUseElement_Getter";
 
-
-  /** @domName SVGElementInstance.firstChild */
+  @DocsEditable
+  @DomName('SVGElementInstance.firstChild')
   ElementInstance get firstChild native "SVGElementInstance_firstChild_Getter";
 
-
-  /** @domName SVGElementInstance.lastChild */
+  @DocsEditable
+  @DomName('SVGElementInstance.lastChild')
   ElementInstance get lastChild native "SVGElementInstance_lastChild_Getter";
 
-
-  /** @domName SVGElementInstance.nextSibling */
+  @DocsEditable
+  @DomName('SVGElementInstance.nextSibling')
   ElementInstance get nextSibling native "SVGElementInstance_nextSibling_Getter";
 
-
-  /** @domName SVGElementInstance.parentNode */
+  @DocsEditable
+  @DomName('SVGElementInstance.parentNode')
   ElementInstance get parentNode native "SVGElementInstance_parentNode_Getter";
 
-
-  /** @domName SVGElementInstance.previousSibling */
+  @DocsEditable
+  @DomName('SVGElementInstance.previousSibling')
   ElementInstance get previousSibling native "SVGElementInstance_previousSibling_Getter";
 
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -1332,129 +1363,129 @@
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class ElementInstanceEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   ElementInstanceEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get abort => this['abort'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCopy => this['beforecopy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforeCut => this['beforecut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get beforePaste => this['beforepaste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get blur => this['blur'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get change => this['change'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get click => this['click'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get contextMenu => this['contextmenu'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get copy => this['copy'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get cut => this['cut'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get doubleClick => this['dblclick'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drag => this['drag'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnd => this['dragend'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragEnter => this['dragenter'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragLeave => this['dragleave'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragOver => this['dragover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get dragStart => this['dragstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get drop => this['drop'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get error => this['error'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get focus => this['focus'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get input => this['input'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyDown => this['keydown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyPress => this['keypress'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get keyUp => this['keyup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get load => this['load'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseDown => this['mousedown'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseMove => this['mousemove'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOut => this['mouseout'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseOver => this['mouseover'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseUp => this['mouseup'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get mouseWheel => this['mousewheel'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get paste => this['paste'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get reset => this['reset'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get resize => this['resize'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get scroll => this['scroll'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get search => this['search'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get select => this['select'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get selectStart => this['selectstart'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get submit => this['submit'];
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get unload => this['unload'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1464,24 +1495,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ElementTimeControl
+@DocsEditable
+@DomName('ElementTimeControl')
 class ElementTimeControl extends NativeFieldWrapperClass1 {
   ElementTimeControl.internal();
 
-
-  /** @domName ElementTimeControl.beginElement */
+  @DocsEditable
+  @DomName('ElementTimeControl.beginElement')
   void beginElement() native "ElementTimeControl_beginElement_Callback";
 
-
-  /** @domName ElementTimeControl.beginElementAt */
+  @DocsEditable
+  @DomName('ElementTimeControl.beginElementAt')
   void beginElementAt(num offset) native "ElementTimeControl_beginElementAt_Callback";
 
-
-  /** @domName ElementTimeControl.endElement */
+  @DocsEditable
+  @DomName('ElementTimeControl.endElement')
   void endElement() native "ElementTimeControl_endElement_Callback";
 
-
-  /** @domName ElementTimeControl.endElementAt */
+  @DocsEditable
+  @DomName('ElementTimeControl.endElementAt')
   void endElementAt(num offset) native "ElementTimeControl_endElementAt_Callback";
 
 }
@@ -1492,103 +1524,104 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGEllipseElement
+@DocsEditable
+@DomName('SVGEllipseElement')
 class EllipseElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   EllipseElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory EllipseElement() => _SvgElementFactoryProvider.createSvgElement_tag("ellipse");
 
-
-  /** @domName SVGEllipseElement.cx */
+  @DocsEditable
+  @DomName('SVGEllipseElement.cx')
   AnimatedLength get cx native "SVGEllipseElement_cx_Getter";
 
-
-  /** @domName SVGEllipseElement.cy */
+  @DocsEditable
+  @DomName('SVGEllipseElement.cy')
   AnimatedLength get cy native "SVGEllipseElement_cy_Getter";
 
-
-  /** @domName SVGEllipseElement.rx */
+  @DocsEditable
+  @DomName('SVGEllipseElement.rx')
   AnimatedLength get rx native "SVGEllipseElement_rx_Getter";
 
-
-  /** @domName SVGEllipseElement.ry */
+  @DocsEditable
+  @DomName('SVGEllipseElement.ry')
   AnimatedLength get ry native "SVGEllipseElement_ry_Getter";
 
-
-  /** @domName SVGEllipseElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGEllipseElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGEllipseElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGEllipseElement.xmllang */
+  @DocsEditable
+  @DomName('SVGEllipseElement.xmllang')
   String get xmllang native "SVGEllipseElement_xmllang_Getter";
 
-
-  /** @domName SVGEllipseElement.xmllang */
+  @DocsEditable
+  @DomName('SVGEllipseElement.xmllang')
   void set xmllang(String value) native "SVGEllipseElement_xmllang_Setter";
 
-
-  /** @domName SVGEllipseElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGEllipseElement.xmlspace')
   String get xmlspace native "SVGEllipseElement_xmlspace_Getter";
 
-
-  /** @domName SVGEllipseElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGEllipseElement.xmlspace')
   void set xmlspace(String value) native "SVGEllipseElement_xmlspace_Setter";
 
-
-  /** @domName SVGEllipseElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGEllipseElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGEllipseElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGEllipseElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGEllipseElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGEllipseElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGEllipseElement.getBBox */
+  @DocsEditable
+  @DomName('SVGEllipseElement.getBBox')
   Rect getBBox() native "SVGEllipseElement_getBBox_Callback";
 
-
-  /** @domName SVGEllipseElement.getCTM */
+  @DocsEditable
+  @DomName('SVGEllipseElement.getCTM')
   Matrix getCtm() native "SVGEllipseElement_getCTM_Callback";
 
-
-  /** @domName SVGEllipseElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGEllipseElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGEllipseElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGEllipseElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGEllipseElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGEllipseElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGEllipseElement.className */
+  @DocsEditable
+  @DomName('SVGEllipseElement.className')
   AnimatedString get $dom_svgClassName native "SVGEllipseElement_className_Getter";
 
-
-  /** @domName SVGEllipseElement.style */
+  @DocsEditable
+  @DomName('SVGEllipseElement.style')
   CssStyleDeclaration get style native "SVGEllipseElement_style_Getter";
 
-
-  /** @domName SVGEllipseElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGEllipseElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGEllipseElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGEllipseElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGEllipseElement.requiredExtensions')
   StringList get requiredExtensions native "SVGEllipseElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGEllipseElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGEllipseElement.requiredFeatures')
   StringList get requiredFeatures native "SVGEllipseElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGEllipseElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGEllipseElement.systemLanguage')
   StringList get systemLanguage native "SVGEllipseElement_systemLanguage_Getter";
 
-
-  /** @domName SVGEllipseElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGEllipseElement.hasExtension')
   bool hasExtension(String extension) native "SVGEllipseElement_hasExtension_Callback";
 
-
-  /** @domName SVGEllipseElement.transform */
+  @DocsEditable
+  @DomName('SVGEllipseElement.transform')
   AnimatedTransformList get transform native "SVGEllipseElement_transform_Getter";
 
 }
@@ -1599,12 +1632,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGExternalResourcesRequired
+@DocsEditable
+@DomName('SVGExternalResourcesRequired')
 class ExternalResourcesRequired extends NativeFieldWrapperClass1 {
   ExternalResourcesRequired.internal();
 
-
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGExternalResourcesRequired.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGExternalResourcesRequired_externalResourcesRequired_Getter";
 
 }
@@ -1615,7 +1649,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEBlendElement
+@DocsEditable
+@DomName('SVGFEBlendElement')
 class FEBlendElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEBlendElement.internal() : super.internal();
 
@@ -1631,48 +1666,48 @@
 
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
-
-  /** @domName SVGFEBlendElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.in1')
   AnimatedString get in1 native "SVGFEBlendElement_in1_Getter";
 
-
-  /** @domName SVGFEBlendElement.in2 */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.in2')
   AnimatedString get in2 native "SVGFEBlendElement_in2_Getter";
 
-
-  /** @domName SVGFEBlendElement.mode */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.mode')
   AnimatedEnumeration get mode native "SVGFEBlendElement_mode_Getter";
 
-
-  /** @domName SVGFEBlendElement.height */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.height')
   AnimatedLength get height native "SVGFEBlendElement_height_Getter";
 
-
-  /** @domName SVGFEBlendElement.result */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.result')
   AnimatedString get result native "SVGFEBlendElement_result_Getter";
 
-
-  /** @domName SVGFEBlendElement.width */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.width')
   AnimatedLength get width native "SVGFEBlendElement_width_Getter";
 
-
-  /** @domName SVGFEBlendElement.x */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.x')
   AnimatedLength get x native "SVGFEBlendElement_x_Getter";
 
-
-  /** @domName SVGFEBlendElement.y */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.y')
   AnimatedLength get y native "SVGFEBlendElement_y_Getter";
 
-
-  /** @domName SVGFEBlendElement.className */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEBlendElement_className_Getter";
 
-
-  /** @domName SVGFEBlendElement.style */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.style')
   CssStyleDeclaration get style native "SVGFEBlendElement_style_Getter";
 
-
-  /** @domName SVGFEBlendElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEBlendElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEBlendElement_getPresentationAttribute_Callback";
 
 }
@@ -1683,7 +1718,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEColorMatrixElement
+@DocsEditable
+@DomName('SVGFEColorMatrixElement')
 class FEColorMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEColorMatrixElement.internal() : super.internal();
 
@@ -1697,48 +1733,48 @@
 
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
-
-  /** @domName SVGFEColorMatrixElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.in1')
   AnimatedString get in1 native "SVGFEColorMatrixElement_in1_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.type */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.type')
   AnimatedEnumeration get type native "SVGFEColorMatrixElement_type_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.values */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.values')
   AnimatedNumberList get values native "SVGFEColorMatrixElement_values_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.height */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.height')
   AnimatedLength get height native "SVGFEColorMatrixElement_height_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.result */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.result')
   AnimatedString get result native "SVGFEColorMatrixElement_result_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.width */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.width')
   AnimatedLength get width native "SVGFEColorMatrixElement_width_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.x */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.x')
   AnimatedLength get x native "SVGFEColorMatrixElement_x_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.y */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.y')
   AnimatedLength get y native "SVGFEColorMatrixElement_y_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.className */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEColorMatrixElement_className_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.style */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.style')
   CssStyleDeclaration get style native "SVGFEColorMatrixElement_style_Getter";
 
-
-  /** @domName SVGFEColorMatrixElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEColorMatrixElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEColorMatrixElement_getPresentationAttribute_Callback";
 
 }
@@ -1749,44 +1785,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEComponentTransferElement
+@DocsEditable
+@DomName('SVGFEComponentTransferElement')
 class FEComponentTransferElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEComponentTransferElement.internal() : super.internal();
 
-
-  /** @domName SVGFEComponentTransferElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.in1')
   AnimatedString get in1 native "SVGFEComponentTransferElement_in1_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.height */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.height')
   AnimatedLength get height native "SVGFEComponentTransferElement_height_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.result */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.result')
   AnimatedString get result native "SVGFEComponentTransferElement_result_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.width */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.width')
   AnimatedLength get width native "SVGFEComponentTransferElement_width_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.x */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.x')
   AnimatedLength get x native "SVGFEComponentTransferElement_x_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.y */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.y')
   AnimatedLength get y native "SVGFEComponentTransferElement_y_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.className */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEComponentTransferElement_className_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.style */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.style')
   CssStyleDeclaration get style native "SVGFEComponentTransferElement_style_Getter";
 
-
-  /** @domName SVGFEComponentTransferElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEComponentTransferElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEComponentTransferElement_getPresentationAttribute_Callback";
 
 }
@@ -1797,7 +1834,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFECompositeElement
+@DocsEditable
+@DomName('SVGFECompositeElement')
 class FECompositeElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FECompositeElement.internal() : super.internal();
 
@@ -1815,64 +1853,64 @@
 
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
-
-  /** @domName SVGFECompositeElement.in1 */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.in1')
   AnimatedString get in1 native "SVGFECompositeElement_in1_Getter";
 
-
-  /** @domName SVGFECompositeElement.in2 */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.in2')
   AnimatedString get in2 native "SVGFECompositeElement_in2_Getter";
 
-
-  /** @domName SVGFECompositeElement.k1 */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.k1')
   AnimatedNumber get k1 native "SVGFECompositeElement_k1_Getter";
 
-
-  /** @domName SVGFECompositeElement.k2 */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.k2')
   AnimatedNumber get k2 native "SVGFECompositeElement_k2_Getter";
 
-
-  /** @domName SVGFECompositeElement.k3 */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.k3')
   AnimatedNumber get k3 native "SVGFECompositeElement_k3_Getter";
 
-
-  /** @domName SVGFECompositeElement.k4 */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.k4')
   AnimatedNumber get k4 native "SVGFECompositeElement_k4_Getter";
 
-
-  /** @domName SVGFECompositeElement.operator */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.operator')
   AnimatedEnumeration get operator native "SVGFECompositeElement_operator_Getter";
 
-
-  /** @domName SVGFECompositeElement.height */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.height')
   AnimatedLength get height native "SVGFECompositeElement_height_Getter";
 
-
-  /** @domName SVGFECompositeElement.result */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.result')
   AnimatedString get result native "SVGFECompositeElement_result_Getter";
 
-
-  /** @domName SVGFECompositeElement.width */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.width')
   AnimatedLength get width native "SVGFECompositeElement_width_Getter";
 
-
-  /** @domName SVGFECompositeElement.x */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.x')
   AnimatedLength get x native "SVGFECompositeElement_x_Getter";
 
-
-  /** @domName SVGFECompositeElement.y */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.y')
   AnimatedLength get y native "SVGFECompositeElement_y_Getter";
 
-
-  /** @domName SVGFECompositeElement.className */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.className')
   AnimatedString get $dom_svgClassName native "SVGFECompositeElement_className_Getter";
 
-
-  /** @domName SVGFECompositeElement.style */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.style')
   CssStyleDeclaration get style native "SVGFECompositeElement_style_Getter";
 
-
-  /** @domName SVGFECompositeElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFECompositeElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFECompositeElement_getPresentationAttribute_Callback";
 
 }
@@ -1883,7 +1921,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEConvolveMatrixElement
+@DocsEditable
+@DomName('SVGFEConvolveMatrixElement')
 class FEConvolveMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEConvolveMatrixElement.internal() : super.internal();
 
@@ -1895,84 +1934,84 @@
 
   static const int SVG_EDGEMODE_WRAP = 2;
 
-
-  /** @domName SVGFEConvolveMatrixElement.bias */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.bias')
   AnimatedNumber get bias native "SVGFEConvolveMatrixElement_bias_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.divisor */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.divisor')
   AnimatedNumber get divisor native "SVGFEConvolveMatrixElement_divisor_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.edgeMode */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.edgeMode')
   AnimatedEnumeration get edgeMode native "SVGFEConvolveMatrixElement_edgeMode_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.in1')
   AnimatedString get in1 native "SVGFEConvolveMatrixElement_in1_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.kernelMatrix')
   AnimatedNumberList get kernelMatrix native "SVGFEConvolveMatrixElement_kernelMatrix_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthX')
   AnimatedNumber get kernelUnitLengthX native "SVGFEConvolveMatrixElement_kernelUnitLengthX_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthY')
   AnimatedNumber get kernelUnitLengthY native "SVGFEConvolveMatrixElement_kernelUnitLengthY_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.orderX */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.orderX')
   AnimatedInteger get orderX native "SVGFEConvolveMatrixElement_orderX_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.orderY */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.orderY')
   AnimatedInteger get orderY native "SVGFEConvolveMatrixElement_orderY_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.preserveAlpha')
   AnimatedBoolean get preserveAlpha native "SVGFEConvolveMatrixElement_preserveAlpha_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.targetX */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.targetX')
   AnimatedInteger get targetX native "SVGFEConvolveMatrixElement_targetX_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.targetY */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.targetY')
   AnimatedInteger get targetY native "SVGFEConvolveMatrixElement_targetY_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.height */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.height')
   AnimatedLength get height native "SVGFEConvolveMatrixElement_height_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.result */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.result')
   AnimatedString get result native "SVGFEConvolveMatrixElement_result_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.width */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.width')
   AnimatedLength get width native "SVGFEConvolveMatrixElement_width_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.x */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.x')
   AnimatedLength get x native "SVGFEConvolveMatrixElement_x_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.y */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.y')
   AnimatedLength get y native "SVGFEConvolveMatrixElement_y_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.className */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEConvolveMatrixElement_className_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.style */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.style')
   CssStyleDeclaration get style native "SVGFEConvolveMatrixElement_style_Getter";
 
-
-  /** @domName SVGFEConvolveMatrixElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEConvolveMatrixElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEConvolveMatrixElement_getPresentationAttribute_Callback";
 
 }
@@ -1983,60 +2022,61 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEDiffuseLightingElement
+@DocsEditable
+@DomName('SVGFEDiffuseLightingElement')
 class FEDiffuseLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEDiffuseLightingElement.internal() : super.internal();
 
-
-  /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.diffuseConstant')
   AnimatedNumber get diffuseConstant native "SVGFEDiffuseLightingElement_diffuseConstant_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.in1')
   AnimatedString get in1 native "SVGFEDiffuseLightingElement_in1_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthX')
   AnimatedNumber get kernelUnitLengthX native "SVGFEDiffuseLightingElement_kernelUnitLengthX_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthY')
   AnimatedNumber get kernelUnitLengthY native "SVGFEDiffuseLightingElement_kernelUnitLengthY_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.surfaceScale */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.surfaceScale')
   AnimatedNumber get surfaceScale native "SVGFEDiffuseLightingElement_surfaceScale_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.height */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.height')
   AnimatedLength get height native "SVGFEDiffuseLightingElement_height_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.result */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.result')
   AnimatedString get result native "SVGFEDiffuseLightingElement_result_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.width */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.width')
   AnimatedLength get width native "SVGFEDiffuseLightingElement_width_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.x */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.x')
   AnimatedLength get x native "SVGFEDiffuseLightingElement_x_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.y */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.y')
   AnimatedLength get y native "SVGFEDiffuseLightingElement_y_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.className */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEDiffuseLightingElement_className_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.style */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.style')
   CssStyleDeclaration get style native "SVGFEDiffuseLightingElement_style_Getter";
 
-
-  /** @domName SVGFEDiffuseLightingElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEDiffuseLightingElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEDiffuseLightingElement_getPresentationAttribute_Callback";
 
 }
@@ -2047,7 +2087,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEDisplacementMapElement
+@DocsEditable
+@DomName('SVGFEDisplacementMapElement')
 class FEDisplacementMapElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEDisplacementMapElement.internal() : super.internal();
 
@@ -2061,56 +2102,56 @@
 
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
-
-  /** @domName SVGFEDisplacementMapElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.in1')
   AnimatedString get in1 native "SVGFEDisplacementMapElement_in1_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.in2 */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.in2')
   AnimatedString get in2 native "SVGFEDisplacementMapElement_in2_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.scale */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.scale')
   AnimatedNumber get scale native "SVGFEDisplacementMapElement_scale_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.xChannelSelector */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.xChannelSelector')
   AnimatedEnumeration get xChannelSelector native "SVGFEDisplacementMapElement_xChannelSelector_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.yChannelSelector */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.yChannelSelector')
   AnimatedEnumeration get yChannelSelector native "SVGFEDisplacementMapElement_yChannelSelector_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.height */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.height')
   AnimatedLength get height native "SVGFEDisplacementMapElement_height_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.result */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.result')
   AnimatedString get result native "SVGFEDisplacementMapElement_result_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.width */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.width')
   AnimatedLength get width native "SVGFEDisplacementMapElement_width_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.x */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.x')
   AnimatedLength get x native "SVGFEDisplacementMapElement_x_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.y */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.y')
   AnimatedLength get y native "SVGFEDisplacementMapElement_y_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.className */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEDisplacementMapElement_className_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.style */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.style')
   CssStyleDeclaration get style native "SVGFEDisplacementMapElement_style_Getter";
 
-
-  /** @domName SVGFEDisplacementMapElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEDisplacementMapElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEDisplacementMapElement_getPresentationAttribute_Callback";
 
 }
@@ -2121,16 +2162,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEDistantLightElement
+@DocsEditable
+@DomName('SVGFEDistantLightElement')
 class FEDistantLightElement extends SvgElement {
   FEDistantLightElement.internal() : super.internal();
 
-
-  /** @domName SVGFEDistantLightElement.azimuth */
+  @DocsEditable
+  @DomName('SVGFEDistantLightElement.azimuth')
   AnimatedNumber get azimuth native "SVGFEDistantLightElement_azimuth_Getter";
 
-
-  /** @domName SVGFEDistantLightElement.elevation */
+  @DocsEditable
+  @DomName('SVGFEDistantLightElement.elevation')
   AnimatedNumber get elevation native "SVGFEDistantLightElement_elevation_Getter";
 
 }
@@ -2141,64 +2183,65 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEDropShadowElement
+@DocsEditable
+@DomName('SVGFEDropShadowElement')
 class FEDropShadowElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEDropShadowElement.internal() : super.internal();
 
-
-  /** @domName SVGFEDropShadowElement.dx */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.dx')
   AnimatedNumber get dx native "SVGFEDropShadowElement_dx_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.dy */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.dy')
   AnimatedNumber get dy native "SVGFEDropShadowElement_dy_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.in1')
   AnimatedString get in1 native "SVGFEDropShadowElement_in1_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.stdDeviationX */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.stdDeviationX')
   AnimatedNumber get stdDeviationX native "SVGFEDropShadowElement_stdDeviationX_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.stdDeviationY */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.stdDeviationY')
   AnimatedNumber get stdDeviationY native "SVGFEDropShadowElement_stdDeviationY_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.setStdDeviation */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.setStdDeviation')
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native "SVGFEDropShadowElement_setStdDeviation_Callback";
 
-
-  /** @domName SVGFEDropShadowElement.height */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.height')
   AnimatedLength get height native "SVGFEDropShadowElement_height_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.result */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.result')
   AnimatedString get result native "SVGFEDropShadowElement_result_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.width */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.width')
   AnimatedLength get width native "SVGFEDropShadowElement_width_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.x */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.x')
   AnimatedLength get x native "SVGFEDropShadowElement_x_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.y */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.y')
   AnimatedLength get y native "SVGFEDropShadowElement_y_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.className */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEDropShadowElement_className_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.style */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.style')
   CssStyleDeclaration get style native "SVGFEDropShadowElement_style_Getter";
 
-
-  /** @domName SVGFEDropShadowElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEDropShadowElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEDropShadowElement_getPresentationAttribute_Callback";
 
 }
@@ -2209,40 +2252,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEFloodElement
+@DocsEditable
+@DomName('SVGFEFloodElement')
 class FEFloodElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEFloodElement.internal() : super.internal();
 
-
-  /** @domName SVGFEFloodElement.height */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.height')
   AnimatedLength get height native "SVGFEFloodElement_height_Getter";
 
-
-  /** @domName SVGFEFloodElement.result */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.result')
   AnimatedString get result native "SVGFEFloodElement_result_Getter";
 
-
-  /** @domName SVGFEFloodElement.width */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.width')
   AnimatedLength get width native "SVGFEFloodElement_width_Getter";
 
-
-  /** @domName SVGFEFloodElement.x */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.x')
   AnimatedLength get x native "SVGFEFloodElement_x_Getter";
 
-
-  /** @domName SVGFEFloodElement.y */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.y')
   AnimatedLength get y native "SVGFEFloodElement_y_Getter";
 
-
-  /** @domName SVGFEFloodElement.className */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEFloodElement_className_Getter";
 
-
-  /** @domName SVGFEFloodElement.style */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.style')
   CssStyleDeclaration get style native "SVGFEFloodElement_style_Getter";
 
-
-  /** @domName SVGFEFloodElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEFloodElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEFloodElement_getPresentationAttribute_Callback";
 
 }
@@ -2253,7 +2297,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEFuncAElement
+@DocsEditable
+@DomName('SVGFEFuncAElement')
 class FEFuncAElement extends ComponentTransferFunctionElement {
   FEFuncAElement.internal() : super.internal();
 
@@ -2265,7 +2310,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEFuncBElement
+@DocsEditable
+@DomName('SVGFEFuncBElement')
 class FEFuncBElement extends ComponentTransferFunctionElement {
   FEFuncBElement.internal() : super.internal();
 
@@ -2277,7 +2323,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEFuncGElement
+@DocsEditable
+@DomName('SVGFEFuncGElement')
 class FEFuncGElement extends ComponentTransferFunctionElement {
   FEFuncGElement.internal() : super.internal();
 
@@ -2289,7 +2336,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEFuncRElement
+@DocsEditable
+@DomName('SVGFEFuncRElement')
 class FEFuncRElement extends ComponentTransferFunctionElement {
   FEFuncRElement.internal() : super.internal();
 
@@ -2301,56 +2349,57 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEGaussianBlurElement
+@DocsEditable
+@DomName('SVGFEGaussianBlurElement')
 class FEGaussianBlurElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEGaussianBlurElement.internal() : super.internal();
 
-
-  /** @domName SVGFEGaussianBlurElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.in1')
   AnimatedString get in1 native "SVGFEGaussianBlurElement_in1_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.stdDeviationX */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.stdDeviationX')
   AnimatedNumber get stdDeviationX native "SVGFEGaussianBlurElement_stdDeviationX_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.stdDeviationY */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.stdDeviationY')
   AnimatedNumber get stdDeviationY native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.setStdDeviation */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.setStdDeviation')
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
 
-
-  /** @domName SVGFEGaussianBlurElement.height */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.height')
   AnimatedLength get height native "SVGFEGaussianBlurElement_height_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.result */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.result')
   AnimatedString get result native "SVGFEGaussianBlurElement_result_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.width */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.width')
   AnimatedLength get width native "SVGFEGaussianBlurElement_width_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.x */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.x')
   AnimatedLength get x native "SVGFEGaussianBlurElement_x_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.y */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.y')
   AnimatedLength get y native "SVGFEGaussianBlurElement_y_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.className */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEGaussianBlurElement_className_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.style */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.style')
   CssStyleDeclaration get style native "SVGFEGaussianBlurElement_style_Getter";
 
-
-  /** @domName SVGFEGaussianBlurElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEGaussianBlurElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEGaussianBlurElement_getPresentationAttribute_Callback";
 
 }
@@ -2361,68 +2410,69 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEImageElement
+@DocsEditable
+@DomName('SVGFEImageElement')
 class FEImageElement extends SvgElement implements FilterPrimitiveStandardAttributes, UriReference, ExternalResourcesRequired, LangSpace {
   FEImageElement.internal() : super.internal();
 
-
-  /** @domName SVGFEImageElement.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGFEImageElement.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFEImageElement_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGFEImageElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGFEImageElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGFEImageElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGFEImageElement.height */
+  @DocsEditable
+  @DomName('SVGFEImageElement.height')
   AnimatedLength get height native "SVGFEImageElement_height_Getter";
 
-
-  /** @domName SVGFEImageElement.result */
+  @DocsEditable
+  @DomName('SVGFEImageElement.result')
   AnimatedString get result native "SVGFEImageElement_result_Getter";
 
-
-  /** @domName SVGFEImageElement.width */
+  @DocsEditable
+  @DomName('SVGFEImageElement.width')
   AnimatedLength get width native "SVGFEImageElement_width_Getter";
 
-
-  /** @domName SVGFEImageElement.x */
+  @DocsEditable
+  @DomName('SVGFEImageElement.x')
   AnimatedLength get x native "SVGFEImageElement_x_Getter";
 
-
-  /** @domName SVGFEImageElement.y */
+  @DocsEditable
+  @DomName('SVGFEImageElement.y')
   AnimatedLength get y native "SVGFEImageElement_y_Getter";
 
-
-  /** @domName SVGFEImageElement.xmllang */
+  @DocsEditable
+  @DomName('SVGFEImageElement.xmllang')
   String get xmllang native "SVGFEImageElement_xmllang_Getter";
 
-
-  /** @domName SVGFEImageElement.xmllang */
+  @DocsEditable
+  @DomName('SVGFEImageElement.xmllang')
   void set xmllang(String value) native "SVGFEImageElement_xmllang_Setter";
 
-
-  /** @domName SVGFEImageElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGFEImageElement.xmlspace')
   String get xmlspace native "SVGFEImageElement_xmlspace_Getter";
 
-
-  /** @domName SVGFEImageElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGFEImageElement.xmlspace')
   void set xmlspace(String value) native "SVGFEImageElement_xmlspace_Setter";
 
-
-  /** @domName SVGFEImageElement.className */
+  @DocsEditable
+  @DomName('SVGFEImageElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEImageElement_className_Getter";
 
-
-  /** @domName SVGFEImageElement.style */
+  @DocsEditable
+  @DomName('SVGFEImageElement.style')
   CssStyleDeclaration get style native "SVGFEImageElement_style_Getter";
 
-
-  /** @domName SVGFEImageElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEImageElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEImageElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGFEImageElement.href */
+  @DocsEditable
+  @DomName('SVGFEImageElement.href')
   AnimatedString get href native "SVGFEImageElement_href_Getter";
 
 }
@@ -2433,40 +2483,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEMergeElement
+@DocsEditable
+@DomName('SVGFEMergeElement')
 class FEMergeElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEMergeElement.internal() : super.internal();
 
-
-  /** @domName SVGFEMergeElement.height */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.height')
   AnimatedLength get height native "SVGFEMergeElement_height_Getter";
 
-
-  /** @domName SVGFEMergeElement.result */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.result')
   AnimatedString get result native "SVGFEMergeElement_result_Getter";
 
-
-  /** @domName SVGFEMergeElement.width */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.width')
   AnimatedLength get width native "SVGFEMergeElement_width_Getter";
 
-
-  /** @domName SVGFEMergeElement.x */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.x')
   AnimatedLength get x native "SVGFEMergeElement_x_Getter";
 
-
-  /** @domName SVGFEMergeElement.y */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.y')
   AnimatedLength get y native "SVGFEMergeElement_y_Getter";
 
-
-  /** @domName SVGFEMergeElement.className */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEMergeElement_className_Getter";
 
-
-  /** @domName SVGFEMergeElement.style */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.style')
   CssStyleDeclaration get style native "SVGFEMergeElement_style_Getter";
 
-
-  /** @domName SVGFEMergeElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEMergeElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEMergeElement_getPresentationAttribute_Callback";
 
 }
@@ -2477,12 +2528,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEMergeNodeElement
+@DocsEditable
+@DomName('SVGFEMergeNodeElement')
 class FEMergeNodeElement extends SvgElement {
   FEMergeNodeElement.internal() : super.internal();
 
-
-  /** @domName SVGFEMergeNodeElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEMergeNodeElement.in1')
   AnimatedString get in1 native "SVGFEMergeNodeElement_in1_Getter";
 
 }
@@ -2493,7 +2545,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEMorphologyElement
+@DocsEditable
+@DomName('SVGFEMorphologyElement')
 class FEMorphologyElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEMorphologyElement.internal() : super.internal();
 
@@ -2503,56 +2556,56 @@
 
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
-
-  /** @domName SVGFEMorphologyElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.in1')
   AnimatedString get in1 native "SVGFEMorphologyElement_in1_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.operator */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.operator')
   AnimatedEnumeration get operator native "SVGFEMorphologyElement_operator_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.radiusX */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.radiusX')
   AnimatedNumber get radiusX native "SVGFEMorphologyElement_radiusX_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.radiusY */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.radiusY')
   AnimatedNumber get radiusY native "SVGFEMorphologyElement_radiusY_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.setRadius */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.setRadius')
   void setRadius(num radiusX, num radiusY) native "SVGFEMorphologyElement_setRadius_Callback";
 
-
-  /** @domName SVGFEMorphologyElement.height */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.height')
   AnimatedLength get height native "SVGFEMorphologyElement_height_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.result */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.result')
   AnimatedString get result native "SVGFEMorphologyElement_result_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.width */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.width')
   AnimatedLength get width native "SVGFEMorphologyElement_width_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.x */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.x')
   AnimatedLength get x native "SVGFEMorphologyElement_x_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.y */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.y')
   AnimatedLength get y native "SVGFEMorphologyElement_y_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.className */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEMorphologyElement_className_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.style */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.style')
   CssStyleDeclaration get style native "SVGFEMorphologyElement_style_Getter";
 
-
-  /** @domName SVGFEMorphologyElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEMorphologyElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEMorphologyElement_getPresentationAttribute_Callback";
 
 }
@@ -2563,52 +2616,53 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEOffsetElement
+@DocsEditable
+@DomName('SVGFEOffsetElement')
 class FEOffsetElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FEOffsetElement.internal() : super.internal();
 
-
-  /** @domName SVGFEOffsetElement.dx */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.dx')
   AnimatedNumber get dx native "SVGFEOffsetElement_dx_Getter";
 
-
-  /** @domName SVGFEOffsetElement.dy */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.dy')
   AnimatedNumber get dy native "SVGFEOffsetElement_dy_Getter";
 
-
-  /** @domName SVGFEOffsetElement.in1 */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.in1')
   AnimatedString get in1 native "SVGFEOffsetElement_in1_Getter";
 
-
-  /** @domName SVGFEOffsetElement.height */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.height')
   AnimatedLength get height native "SVGFEOffsetElement_height_Getter";
 
-
-  /** @domName SVGFEOffsetElement.result */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.result')
   AnimatedString get result native "SVGFEOffsetElement_result_Getter";
 
-
-  /** @domName SVGFEOffsetElement.width */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.width')
   AnimatedLength get width native "SVGFEOffsetElement_width_Getter";
 
-
-  /** @domName SVGFEOffsetElement.x */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.x')
   AnimatedLength get x native "SVGFEOffsetElement_x_Getter";
 
-
-  /** @domName SVGFEOffsetElement.y */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.y')
   AnimatedLength get y native "SVGFEOffsetElement_y_Getter";
 
-
-  /** @domName SVGFEOffsetElement.className */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.className')
   AnimatedString get $dom_svgClassName native "SVGFEOffsetElement_className_Getter";
 
-
-  /** @domName SVGFEOffsetElement.style */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.style')
   CssStyleDeclaration get style native "SVGFEOffsetElement_style_Getter";
 
-
-  /** @domName SVGFEOffsetElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFEOffsetElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFEOffsetElement_getPresentationAttribute_Callback";
 
 }
@@ -2619,20 +2673,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFEPointLightElement
+@DocsEditable
+@DomName('SVGFEPointLightElement')
 class FEPointLightElement extends SvgElement {
   FEPointLightElement.internal() : super.internal();
 
-
-  /** @domName SVGFEPointLightElement.x */
+  @DocsEditable
+  @DomName('SVGFEPointLightElement.x')
   AnimatedNumber get x native "SVGFEPointLightElement_x_Getter";
 
-
-  /** @domName SVGFEPointLightElement.y */
+  @DocsEditable
+  @DomName('SVGFEPointLightElement.y')
   AnimatedNumber get y native "SVGFEPointLightElement_y_Getter";
 
-
-  /** @domName SVGFEPointLightElement.z */
+  @DocsEditable
+  @DomName('SVGFEPointLightElement.z')
   AnimatedNumber get z native "SVGFEPointLightElement_z_Getter";
 
 }
@@ -2643,56 +2698,57 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFESpecularLightingElement
+@DocsEditable
+@DomName('SVGFESpecularLightingElement')
 class FESpecularLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FESpecularLightingElement.internal() : super.internal();
 
-
-  /** @domName SVGFESpecularLightingElement.in1 */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.in1')
   AnimatedString get in1 native "SVGFESpecularLightingElement_in1_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.specularConstant */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.specularConstant')
   AnimatedNumber get specularConstant native "SVGFESpecularLightingElement_specularConstant_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.specularExponent */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.specularExponent')
   AnimatedNumber get specularExponent native "SVGFESpecularLightingElement_specularExponent_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.surfaceScale */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.surfaceScale')
   AnimatedNumber get surfaceScale native "SVGFESpecularLightingElement_surfaceScale_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.height */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.height')
   AnimatedLength get height native "SVGFESpecularLightingElement_height_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.result */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.result')
   AnimatedString get result native "SVGFESpecularLightingElement_result_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.width */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.width')
   AnimatedLength get width native "SVGFESpecularLightingElement_width_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.x */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.x')
   AnimatedLength get x native "SVGFESpecularLightingElement_x_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.y */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.y')
   AnimatedLength get y native "SVGFESpecularLightingElement_y_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.className */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.className')
   AnimatedString get $dom_svgClassName native "SVGFESpecularLightingElement_className_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.style */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.style')
   CssStyleDeclaration get style native "SVGFESpecularLightingElement_style_Getter";
 
-
-  /** @domName SVGFESpecularLightingElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFESpecularLightingElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFESpecularLightingElement_getPresentationAttribute_Callback";
 
 }
@@ -2703,40 +2759,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFESpotLightElement
+@DocsEditable
+@DomName('SVGFESpotLightElement')
 class FESpotLightElement extends SvgElement {
   FESpotLightElement.internal() : super.internal();
 
-
-  /** @domName SVGFESpotLightElement.limitingConeAngle */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.limitingConeAngle')
   AnimatedNumber get limitingConeAngle native "SVGFESpotLightElement_limitingConeAngle_Getter";
 
-
-  /** @domName SVGFESpotLightElement.pointsAtX */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.pointsAtX')
   AnimatedNumber get pointsAtX native "SVGFESpotLightElement_pointsAtX_Getter";
 
-
-  /** @domName SVGFESpotLightElement.pointsAtY */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.pointsAtY')
   AnimatedNumber get pointsAtY native "SVGFESpotLightElement_pointsAtY_Getter";
 
-
-  /** @domName SVGFESpotLightElement.pointsAtZ */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.pointsAtZ')
   AnimatedNumber get pointsAtZ native "SVGFESpotLightElement_pointsAtZ_Getter";
 
-
-  /** @domName SVGFESpotLightElement.specularExponent */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.specularExponent')
   AnimatedNumber get specularExponent native "SVGFESpotLightElement_specularExponent_Getter";
 
-
-  /** @domName SVGFESpotLightElement.x */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.x')
   AnimatedNumber get x native "SVGFESpotLightElement_x_Getter";
 
-
-  /** @domName SVGFESpotLightElement.y */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.y')
   AnimatedNumber get y native "SVGFESpotLightElement_y_Getter";
 
-
-  /** @domName SVGFESpotLightElement.z */
+  @DocsEditable
+  @DomName('SVGFESpotLightElement.z')
   AnimatedNumber get z native "SVGFESpotLightElement_z_Getter";
 
 }
@@ -2747,44 +2804,45 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFETileElement
+@DocsEditable
+@DomName('SVGFETileElement')
 class FETileElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FETileElement.internal() : super.internal();
 
-
-  /** @domName SVGFETileElement.in1 */
+  @DocsEditable
+  @DomName('SVGFETileElement.in1')
   AnimatedString get in1 native "SVGFETileElement_in1_Getter";
 
-
-  /** @domName SVGFETileElement.height */
+  @DocsEditable
+  @DomName('SVGFETileElement.height')
   AnimatedLength get height native "SVGFETileElement_height_Getter";
 
-
-  /** @domName SVGFETileElement.result */
+  @DocsEditable
+  @DomName('SVGFETileElement.result')
   AnimatedString get result native "SVGFETileElement_result_Getter";
 
-
-  /** @domName SVGFETileElement.width */
+  @DocsEditable
+  @DomName('SVGFETileElement.width')
   AnimatedLength get width native "SVGFETileElement_width_Getter";
 
-
-  /** @domName SVGFETileElement.x */
+  @DocsEditable
+  @DomName('SVGFETileElement.x')
   AnimatedLength get x native "SVGFETileElement_x_Getter";
 
-
-  /** @domName SVGFETileElement.y */
+  @DocsEditable
+  @DomName('SVGFETileElement.y')
   AnimatedLength get y native "SVGFETileElement_y_Getter";
 
-
-  /** @domName SVGFETileElement.className */
+  @DocsEditable
+  @DomName('SVGFETileElement.className')
   AnimatedString get $dom_svgClassName native "SVGFETileElement_className_Getter";
 
-
-  /** @domName SVGFETileElement.style */
+  @DocsEditable
+  @DomName('SVGFETileElement.style')
   CssStyleDeclaration get style native "SVGFETileElement_style_Getter";
 
-
-  /** @domName SVGFETileElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFETileElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFETileElement_getPresentationAttribute_Callback";
 
 }
@@ -2795,7 +2853,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFETurbulenceElement
+@DocsEditable
+@DomName('SVGFETurbulenceElement')
 class FETurbulenceElement extends SvgElement implements FilterPrimitiveStandardAttributes {
   FETurbulenceElement.internal() : super.internal();
 
@@ -2811,60 +2870,60 @@
 
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
-
-  /** @domName SVGFETurbulenceElement.baseFrequencyX */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.baseFrequencyX')
   AnimatedNumber get baseFrequencyX native "SVGFETurbulenceElement_baseFrequencyX_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.baseFrequencyY */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.baseFrequencyY')
   AnimatedNumber get baseFrequencyY native "SVGFETurbulenceElement_baseFrequencyY_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.numOctaves */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.numOctaves')
   AnimatedInteger get numOctaves native "SVGFETurbulenceElement_numOctaves_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.seed */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.seed')
   AnimatedNumber get seed native "SVGFETurbulenceElement_seed_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.stitchTiles */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.stitchTiles')
   AnimatedEnumeration get stitchTiles native "SVGFETurbulenceElement_stitchTiles_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.type */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.type')
   AnimatedEnumeration get type native "SVGFETurbulenceElement_type_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.height */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.height')
   AnimatedLength get height native "SVGFETurbulenceElement_height_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.result */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.result')
   AnimatedString get result native "SVGFETurbulenceElement_result_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.width */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.width')
   AnimatedLength get width native "SVGFETurbulenceElement_width_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.x */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.x')
   AnimatedLength get x native "SVGFETurbulenceElement_x_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.y */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.y')
   AnimatedLength get y native "SVGFETurbulenceElement_y_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.className */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.className')
   AnimatedString get $dom_svgClassName native "SVGFETurbulenceElement_className_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.style */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.style')
   CssStyleDeclaration get style native "SVGFETurbulenceElement_style_Getter";
 
-
-  /** @domName SVGFETurbulenceElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFETurbulenceElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFETurbulenceElement_getPresentationAttribute_Callback";
 
 }
@@ -2875,83 +2934,84 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFilterElement
+@DocsEditable
+@DomName('SVGFilterElement')
 class FilterElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable, LangSpace {
   FilterElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FilterElement() => _SvgElementFactoryProvider.createSvgElement_tag("filter");
 
-
-  /** @domName SVGFilterElement.filterResX */
+  @DocsEditable
+  @DomName('SVGFilterElement.filterResX')
   AnimatedInteger get filterResX native "SVGFilterElement_filterResX_Getter";
 
-
-  /** @domName SVGFilterElement.filterResY */
+  @DocsEditable
+  @DomName('SVGFilterElement.filterResY')
   AnimatedInteger get filterResY native "SVGFilterElement_filterResY_Getter";
 
-
-  /** @domName SVGFilterElement.filterUnits */
+  @DocsEditable
+  @DomName('SVGFilterElement.filterUnits')
   AnimatedEnumeration get filterUnits native "SVGFilterElement_filterUnits_Getter";
 
-
-  /** @domName SVGFilterElement.height */
+  @DocsEditable
+  @DomName('SVGFilterElement.height')
   AnimatedLength get height native "SVGFilterElement_height_Getter";
 
-
-  /** @domName SVGFilterElement.primitiveUnits */
+  @DocsEditable
+  @DomName('SVGFilterElement.primitiveUnits')
   AnimatedEnumeration get primitiveUnits native "SVGFilterElement_primitiveUnits_Getter";
 
-
-  /** @domName SVGFilterElement.width */
+  @DocsEditable
+  @DomName('SVGFilterElement.width')
   AnimatedLength get width native "SVGFilterElement_width_Getter";
 
-
-  /** @domName SVGFilterElement.x */
+  @DocsEditable
+  @DomName('SVGFilterElement.x')
   AnimatedLength get x native "SVGFilterElement_x_Getter";
 
-
-  /** @domName SVGFilterElement.y */
+  @DocsEditable
+  @DomName('SVGFilterElement.y')
   AnimatedLength get y native "SVGFilterElement_y_Getter";
 
-
-  /** @domName SVGFilterElement.setFilterRes */
+  @DocsEditable
+  @DomName('SVGFilterElement.setFilterRes')
   void setFilterRes(int filterResX, int filterResY) native "SVGFilterElement_setFilterRes_Callback";
 
-
-  /** @domName SVGFilterElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGFilterElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGFilterElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGFilterElement.xmllang */
+  @DocsEditable
+  @DomName('SVGFilterElement.xmllang')
   String get xmllang native "SVGFilterElement_xmllang_Getter";
 
-
-  /** @domName SVGFilterElement.xmllang */
+  @DocsEditable
+  @DomName('SVGFilterElement.xmllang')
   void set xmllang(String value) native "SVGFilterElement_xmllang_Setter";
 
-
-  /** @domName SVGFilterElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGFilterElement.xmlspace')
   String get xmlspace native "SVGFilterElement_xmlspace_Getter";
 
-
-  /** @domName SVGFilterElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGFilterElement.xmlspace')
   void set xmlspace(String value) native "SVGFilterElement_xmlspace_Setter";
 
-
-  /** @domName SVGFilterElement.className */
+  @DocsEditable
+  @DomName('SVGFilterElement.className')
   AnimatedString get $dom_svgClassName native "SVGFilterElement_className_Getter";
 
-
-  /** @domName SVGFilterElement.style */
+  @DocsEditable
+  @DomName('SVGFilterElement.style')
   CssStyleDeclaration get style native "SVGFilterElement_style_Getter";
 
-
-  /** @domName SVGFilterElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFilterElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFilterElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGFilterElement.href */
+  @DocsEditable
+  @DomName('SVGFilterElement.href')
   AnimatedString get href native "SVGFilterElement_href_Getter";
 
 }
@@ -2962,40 +3022,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFilterPrimitiveStandardAttributes
+@DocsEditable
+@DomName('SVGFilterPrimitiveStandardAttributes')
 class FilterPrimitiveStandardAttributes extends NativeFieldWrapperClass1 implements Stylable {
   FilterPrimitiveStandardAttributes.internal();
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.height')
   AnimatedLength get height native "SVGFilterPrimitiveStandardAttributes_height_Getter";
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.result')
   AnimatedString get result native "SVGFilterPrimitiveStandardAttributes_result_Getter";
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.width')
   AnimatedLength get width native "SVGFilterPrimitiveStandardAttributes_width_Getter";
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.x')
   AnimatedLength get x native "SVGFilterPrimitiveStandardAttributes_x_Getter";
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.y')
   AnimatedLength get y native "SVGFilterPrimitiveStandardAttributes_y_Getter";
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.className */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.className')
   AnimatedString get $dom_svgClassName native "SVGFilterPrimitiveStandardAttributes_className_Getter";
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.style */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.style')
   CssStyleDeclaration get style native "SVGFilterPrimitiveStandardAttributes_style_Getter";
 
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGFilterPrimitiveStandardAttributes.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGFilterPrimitiveStandardAttributes_getPresentationAttribute_Callback";
 
 }
@@ -3006,16 +3067,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFitToViewBox
+@DocsEditable
+@DomName('SVGFitToViewBox')
 class FitToViewBox extends NativeFieldWrapperClass1 {
   FitToViewBox.internal();
 
-
-  /** @domName SVGFitToViewBox.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGFitToViewBox.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFitToViewBox_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGFitToViewBox.viewBox */
+  @DocsEditable
+  @DomName('SVGFitToViewBox.viewBox')
   AnimatedRect get viewBox native "SVGFitToViewBox_viewBox_Getter";
 
 }
@@ -3026,11 +3088,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFontElement
+@DocsEditable
+@DomName('SVGFontElement')
 class FontElement extends SvgElement {
   FontElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontElement() => _SvgElementFactoryProvider.createSvgElement_tag("font");
 
 }
@@ -3041,11 +3104,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFontFaceElement
+@DocsEditable
+@DomName('SVGFontFaceElement')
 class FontFaceElement extends SvgElement {
   FontFaceElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face");
 
 }
@@ -3056,11 +3120,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFontFaceFormatElement
+@DocsEditable
+@DomName('SVGFontFaceFormatElement')
 class FontFaceFormatElement extends SvgElement {
   FontFaceFormatElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceFormatElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-format");
 
 }
@@ -3071,11 +3136,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFontFaceNameElement
+@DocsEditable
+@DomName('SVGFontFaceNameElement')
 class FontFaceNameElement extends SvgElement {
   FontFaceNameElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceNameElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-name");
 
 }
@@ -3086,11 +3152,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFontFaceSrcElement
+@DocsEditable
+@DomName('SVGFontFaceSrcElement')
 class FontFaceSrcElement extends SvgElement {
   FontFaceSrcElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceSrcElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-src");
 
 }
@@ -3101,11 +3168,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGFontFaceUriElement
+@DocsEditable
+@DomName('SVGFontFaceUriElement')
 class FontFaceUriElement extends SvgElement {
   FontFaceUriElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory FontFaceUriElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-uri");
 
 }
@@ -3116,103 +3184,104 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGForeignObjectElement
+@DocsEditable
+@DomName('SVGForeignObjectElement')
 class ForeignObjectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   ForeignObjectElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ForeignObjectElement() => _SvgElementFactoryProvider.createSvgElement_tag("foreignObject");
 
-
-  /** @domName SVGForeignObjectElement.height */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.height')
   AnimatedLength get height native "SVGForeignObjectElement_height_Getter";
 
-
-  /** @domName SVGForeignObjectElement.width */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.width')
   AnimatedLength get width native "SVGForeignObjectElement_width_Getter";
 
-
-  /** @domName SVGForeignObjectElement.x */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.x')
   AnimatedLength get x native "SVGForeignObjectElement_x_Getter";
 
-
-  /** @domName SVGForeignObjectElement.y */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.y')
   AnimatedLength get y native "SVGForeignObjectElement_y_Getter";
 
-
-  /** @domName SVGForeignObjectElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGForeignObjectElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGForeignObjectElement.xmllang */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.xmllang')
   String get xmllang native "SVGForeignObjectElement_xmllang_Getter";
 
-
-  /** @domName SVGForeignObjectElement.xmllang */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.xmllang')
   void set xmllang(String value) native "SVGForeignObjectElement_xmllang_Setter";
 
-
-  /** @domName SVGForeignObjectElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.xmlspace')
   String get xmlspace native "SVGForeignObjectElement_xmlspace_Getter";
 
-
-  /** @domName SVGForeignObjectElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.xmlspace')
   void set xmlspace(String value) native "SVGForeignObjectElement_xmlspace_Setter";
 
-
-  /** @domName SVGForeignObjectElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGForeignObjectElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGForeignObjectElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGForeignObjectElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGForeignObjectElement.getBBox */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.getBBox')
   Rect getBBox() native "SVGForeignObjectElement_getBBox_Callback";
 
-
-  /** @domName SVGForeignObjectElement.getCTM */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.getCTM')
   Matrix getCtm() native "SVGForeignObjectElement_getCTM_Callback";
 
-
-  /** @domName SVGForeignObjectElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGForeignObjectElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGForeignObjectElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGForeignObjectElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGForeignObjectElement.className */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.className')
   AnimatedString get $dom_svgClassName native "SVGForeignObjectElement_className_Getter";
 
-
-  /** @domName SVGForeignObjectElement.style */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.style')
   CssStyleDeclaration get style native "SVGForeignObjectElement_style_Getter";
 
-
-  /** @domName SVGForeignObjectElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGForeignObjectElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGForeignObjectElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.requiredExtensions')
   StringList get requiredExtensions native "SVGForeignObjectElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGForeignObjectElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.requiredFeatures')
   StringList get requiredFeatures native "SVGForeignObjectElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGForeignObjectElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.systemLanguage')
   StringList get systemLanguage native "SVGForeignObjectElement_systemLanguage_Getter";
 
-
-  /** @domName SVGForeignObjectElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.hasExtension')
   bool hasExtension(String extension) native "SVGForeignObjectElement_hasExtension_Callback";
 
-
-  /** @domName SVGForeignObjectElement.transform */
+  @DocsEditable
+  @DomName('SVGForeignObjectElement.transform')
   AnimatedTransformList get transform native "SVGForeignObjectElement_transform_Getter";
 
 }
@@ -3223,87 +3292,88 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGGElement
+@DocsEditable
+@DomName('SVGGElement')
 class GElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   GElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory GElement() => _SvgElementFactoryProvider.createSvgElement_tag("g");
 
-
-  /** @domName SVGGElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGGElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGGElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGGElement.xmllang */
+  @DocsEditable
+  @DomName('SVGGElement.xmllang')
   String get xmllang native "SVGGElement_xmllang_Getter";
 
-
-  /** @domName SVGGElement.xmllang */
+  @DocsEditable
+  @DomName('SVGGElement.xmllang')
   void set xmllang(String value) native "SVGGElement_xmllang_Setter";
 
-
-  /** @domName SVGGElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGGElement.xmlspace')
   String get xmlspace native "SVGGElement_xmlspace_Getter";
 
-
-  /** @domName SVGGElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGGElement.xmlspace')
   void set xmlspace(String value) native "SVGGElement_xmlspace_Setter";
 
-
-  /** @domName SVGGElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGGElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGGElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGGElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGGElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGGElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGGElement.getBBox */
+  @DocsEditable
+  @DomName('SVGGElement.getBBox')
   Rect getBBox() native "SVGGElement_getBBox_Callback";
 
-
-  /** @domName SVGGElement.getCTM */
+  @DocsEditable
+  @DomName('SVGGElement.getCTM')
   Matrix getCtm() native "SVGGElement_getCTM_Callback";
 
-
-  /** @domName SVGGElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGGElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGGElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGGElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGGElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGGElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGGElement.className */
+  @DocsEditable
+  @DomName('SVGGElement.className')
   AnimatedString get $dom_svgClassName native "SVGGElement_className_Getter";
 
-
-  /** @domName SVGGElement.style */
+  @DocsEditable
+  @DomName('SVGGElement.style')
   CssStyleDeclaration get style native "SVGGElement_style_Getter";
 
-
-  /** @domName SVGGElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGGElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGGElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGGElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGGElement.requiredExtensions')
   StringList get requiredExtensions native "SVGGElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGGElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGGElement.requiredFeatures')
   StringList get requiredFeatures native "SVGGElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGGElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGGElement.systemLanguage')
   StringList get systemLanguage native "SVGGElement_systemLanguage_Getter";
 
-
-  /** @domName SVGGElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGGElement.hasExtension')
   bool hasExtension(String extension) native "SVGGElement_hasExtension_Callback";
 
-
-  /** @domName SVGGElement.transform */
+  @DocsEditable
+  @DomName('SVGGElement.transform')
   AnimatedTransformList get transform native "SVGGElement_transform_Getter";
 
 }
@@ -3314,11 +3384,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGGlyphElement
+@DocsEditable
+@DomName('SVGGlyphElement')
 class GlyphElement extends SvgElement {
   GlyphElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory GlyphElement() => _SvgElementFactoryProvider.createSvgElement_tag("glyph");
 
 }
@@ -3329,72 +3400,73 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGGlyphRefElement
+@DocsEditable
+@DomName('SVGGlyphRefElement')
 class GlyphRefElement extends SvgElement implements UriReference, Stylable {
   GlyphRefElement.internal() : super.internal();
 
-
-  /** @domName SVGGlyphRefElement.dx */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.dx')
   num get dx native "SVGGlyphRefElement_dx_Getter";
 
-
-  /** @domName SVGGlyphRefElement.dx */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.dx')
   void set dx(num value) native "SVGGlyphRefElement_dx_Setter";
 
-
-  /** @domName SVGGlyphRefElement.dy */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.dy')
   num get dy native "SVGGlyphRefElement_dy_Getter";
 
-
-  /** @domName SVGGlyphRefElement.dy */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.dy')
   void set dy(num value) native "SVGGlyphRefElement_dy_Setter";
 
-
-  /** @domName SVGGlyphRefElement.format */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.format')
   String get format native "SVGGlyphRefElement_format_Getter";
 
-
-  /** @domName SVGGlyphRefElement.format */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.format')
   void set format(String value) native "SVGGlyphRefElement_format_Setter";
 
-
-  /** @domName SVGGlyphRefElement.glyphRef */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.glyphRef')
   String get glyphRef native "SVGGlyphRefElement_glyphRef_Getter";
 
-
-  /** @domName SVGGlyphRefElement.glyphRef */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.glyphRef')
   void set glyphRef(String value) native "SVGGlyphRefElement_glyphRef_Setter";
 
-
-  /** @domName SVGGlyphRefElement.x */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.x')
   num get x native "SVGGlyphRefElement_x_Getter";
 
-
-  /** @domName SVGGlyphRefElement.x */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.x')
   void set x(num value) native "SVGGlyphRefElement_x_Setter";
 
-
-  /** @domName SVGGlyphRefElement.y */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.y')
   num get y native "SVGGlyphRefElement_y_Getter";
 
-
-  /** @domName SVGGlyphRefElement.y */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.y')
   void set y(num value) native "SVGGlyphRefElement_y_Setter";
 
-
-  /** @domName SVGGlyphRefElement.className */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.className')
   AnimatedString get $dom_svgClassName native "SVGGlyphRefElement_className_Getter";
 
-
-  /** @domName SVGGlyphRefElement.style */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.style')
   CssStyleDeclaration get style native "SVGGlyphRefElement_style_Getter";
 
-
-  /** @domName SVGGlyphRefElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGGlyphRefElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGGlyphRefElement.href */
+  @DocsEditable
+  @DomName('SVGGlyphRefElement.href')
   AnimatedString get href native "SVGGlyphRefElement_href_Getter";
 
 }
@@ -3405,7 +3477,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGGradientElement
+@DocsEditable
+@DomName('SVGGradientElement')
 class GradientElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable {
   GradientElement.internal() : super.internal();
 
@@ -3417,36 +3490,36 @@
 
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
-
-  /** @domName SVGGradientElement.gradientTransform */
+  @DocsEditable
+  @DomName('SVGGradientElement.gradientTransform')
   AnimatedTransformList get gradientTransform native "SVGGradientElement_gradientTransform_Getter";
 
-
-  /** @domName SVGGradientElement.gradientUnits */
+  @DocsEditable
+  @DomName('SVGGradientElement.gradientUnits')
   AnimatedEnumeration get gradientUnits native "SVGGradientElement_gradientUnits_Getter";
 
-
-  /** @domName SVGGradientElement.spreadMethod */
+  @DocsEditable
+  @DomName('SVGGradientElement.spreadMethod')
   AnimatedEnumeration get spreadMethod native "SVGGradientElement_spreadMethod_Getter";
 
-
-  /** @domName SVGGradientElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGGradientElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGGradientElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGGradientElement.className */
+  @DocsEditable
+  @DomName('SVGGradientElement.className')
   AnimatedString get $dom_svgClassName native "SVGGradientElement_className_Getter";
 
-
-  /** @domName SVGGradientElement.style */
+  @DocsEditable
+  @DomName('SVGGradientElement.style')
   CssStyleDeclaration get style native "SVGGradientElement_style_Getter";
 
-
-  /** @domName SVGGradientElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGGradientElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGGradientElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGGradientElement.href */
+  @DocsEditable
+  @DomName('SVGGradientElement.href')
   AnimatedString get href native "SVGGradientElement_href_Getter";
 
 }
@@ -3457,11 +3530,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGHKernElement
+@DocsEditable
+@DomName('SVGHKernElement')
 class HKernElement extends SvgElement {
   HKernElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory HKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("hkern");
 
 }
@@ -3472,111 +3546,112 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGImageElement
+@DocsEditable
+@DomName('SVGImageElement')
 class ImageElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
   ImageElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ImageElement() => _SvgElementFactoryProvider.createSvgElement_tag("image");
 
-
-  /** @domName SVGImageElement.height */
+  @DocsEditable
+  @DomName('SVGImageElement.height')
   AnimatedLength get height native "SVGImageElement_height_Getter";
 
-
-  /** @domName SVGImageElement.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGImageElement.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGImageElement_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGImageElement.width */
+  @DocsEditable
+  @DomName('SVGImageElement.width')
   AnimatedLength get width native "SVGImageElement_width_Getter";
 
-
-  /** @domName SVGImageElement.x */
+  @DocsEditable
+  @DomName('SVGImageElement.x')
   AnimatedLength get x native "SVGImageElement_x_Getter";
 
-
-  /** @domName SVGImageElement.y */
+  @DocsEditable
+  @DomName('SVGImageElement.y')
   AnimatedLength get y native "SVGImageElement_y_Getter";
 
-
-  /** @domName SVGImageElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGImageElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGImageElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGImageElement.xmllang */
+  @DocsEditable
+  @DomName('SVGImageElement.xmllang')
   String get xmllang native "SVGImageElement_xmllang_Getter";
 
-
-  /** @domName SVGImageElement.xmllang */
+  @DocsEditable
+  @DomName('SVGImageElement.xmllang')
   void set xmllang(String value) native "SVGImageElement_xmllang_Setter";
 
-
-  /** @domName SVGImageElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGImageElement.xmlspace')
   String get xmlspace native "SVGImageElement_xmlspace_Getter";
 
-
-  /** @domName SVGImageElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGImageElement.xmlspace')
   void set xmlspace(String value) native "SVGImageElement_xmlspace_Setter";
 
-
-  /** @domName SVGImageElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGImageElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGImageElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGImageElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGImageElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGImageElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGImageElement.getBBox */
+  @DocsEditable
+  @DomName('SVGImageElement.getBBox')
   Rect getBBox() native "SVGImageElement_getBBox_Callback";
 
-
-  /** @domName SVGImageElement.getCTM */
+  @DocsEditable
+  @DomName('SVGImageElement.getCTM')
   Matrix getCtm() native "SVGImageElement_getCTM_Callback";
 
-
-  /** @domName SVGImageElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGImageElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGImageElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGImageElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGImageElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGImageElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGImageElement.className */
+  @DocsEditable
+  @DomName('SVGImageElement.className')
   AnimatedString get $dom_svgClassName native "SVGImageElement_className_Getter";
 
-
-  /** @domName SVGImageElement.style */
+  @DocsEditable
+  @DomName('SVGImageElement.style')
   CssStyleDeclaration get style native "SVGImageElement_style_Getter";
 
-
-  /** @domName SVGImageElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGImageElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGImageElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGImageElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGImageElement.requiredExtensions')
   StringList get requiredExtensions native "SVGImageElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGImageElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGImageElement.requiredFeatures')
   StringList get requiredFeatures native "SVGImageElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGImageElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGImageElement.systemLanguage')
   StringList get systemLanguage native "SVGImageElement_systemLanguage_Getter";
 
-
-  /** @domName SVGImageElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGImageElement.hasExtension')
   bool hasExtension(String extension) native "SVGImageElement_hasExtension_Callback";
 
-
-  /** @domName SVGImageElement.transform */
+  @DocsEditable
+  @DomName('SVGImageElement.transform')
   AnimatedTransformList get transform native "SVGImageElement_transform_Getter";
 
-
-  /** @domName SVGImageElement.href */
+  @DocsEditable
+  @DomName('SVGImageElement.href')
   AnimatedString get href native "SVGImageElement_href_Getter";
 
 }
@@ -3587,24 +3662,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGLangSpace
+@DocsEditable
+@DomName('SVGLangSpace')
 class LangSpace extends NativeFieldWrapperClass1 {
   LangSpace.internal();
 
-
-  /** @domName SVGLangSpace.xmllang */
+  @DocsEditable
+  @DomName('SVGLangSpace.xmllang')
   String get xmllang native "SVGLangSpace_xmllang_Getter";
 
-
-  /** @domName SVGLangSpace.xmllang */
+  @DocsEditable
+  @DomName('SVGLangSpace.xmllang')
   void set xmllang(String value) native "SVGLangSpace_xmllang_Setter";
 
-
-  /** @domName SVGLangSpace.xmlspace */
+  @DocsEditable
+  @DomName('SVGLangSpace.xmlspace')
   String get xmlspace native "SVGLangSpace_xmlspace_Getter";
 
-
-  /** @domName SVGLangSpace.xmlspace */
+  @DocsEditable
+  @DomName('SVGLangSpace.xmlspace')
   void set xmlspace(String value) native "SVGLangSpace_xmlspace_Setter";
 
 }
@@ -3615,7 +3691,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGLength
+@DocsEditable
+@DomName('SVGLength')
 class Length extends NativeFieldWrapperClass1 {
   Length.internal();
 
@@ -3641,40 +3718,40 @@
 
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
-
-  /** @domName SVGLength.unitType */
+  @DocsEditable
+  @DomName('SVGLength.unitType')
   int get unitType native "SVGLength_unitType_Getter";
 
-
-  /** @domName SVGLength.value */
+  @DocsEditable
+  @DomName('SVGLength.value')
   num get value native "SVGLength_value_Getter";
 
-
-  /** @domName SVGLength.value */
+  @DocsEditable
+  @DomName('SVGLength.value')
   void set value(num value) native "SVGLength_value_Setter";
 
-
-  /** @domName SVGLength.valueAsString */
+  @DocsEditable
+  @DomName('SVGLength.valueAsString')
   String get valueAsString native "SVGLength_valueAsString_Getter";
 
-
-  /** @domName SVGLength.valueAsString */
+  @DocsEditable
+  @DomName('SVGLength.valueAsString')
   void set valueAsString(String value) native "SVGLength_valueAsString_Setter";
 
-
-  /** @domName SVGLength.valueInSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGLength.valueInSpecifiedUnits')
   num get valueInSpecifiedUnits native "SVGLength_valueInSpecifiedUnits_Getter";
 
-
-  /** @domName SVGLength.valueInSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGLength.valueInSpecifiedUnits')
   void set valueInSpecifiedUnits(num value) native "SVGLength_valueInSpecifiedUnits_Setter";
 
-
-  /** @domName SVGLength.convertToSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGLength.convertToSpecifiedUnits')
   void convertToSpecifiedUnits(int unitType) native "SVGLength_convertToSpecifiedUnits_Callback";
 
-
-  /** @domName SVGLength.newValueSpecifiedUnits */
+  @DocsEditable
+  @DomName('SVGLength.newValueSpecifiedUnits')
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native "SVGLength_newValueSpecifiedUnits_Callback";
 
 }
@@ -3685,12 +3762,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGLengthList
+@DocsEditable
+@DomName('SVGLengthList')
 class LengthList extends NativeFieldWrapperClass1 implements List<Length> {
   LengthList.internal();
 
-
-  /** @domName SVGLengthList.numberOfItems */
+  @DocsEditable
+  @DomName('SVGLengthList.numberOfItems')
   int get numberOfItems native "SVGLengthList_numberOfItems_Getter";
 
   Length operator[](int index) native "SVGLengthList_item_Callback";
@@ -3713,50 +3791,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Length)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Length element) => Collections.contains(this, element);
+  bool contains(Length element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Length element)) => Collections.forEach(this, f);
+  void forEach(void f(Length element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Length element)) => new MappedList<Length, dynamic>(this, f);
+  List mappedBy(f(Length element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Length> where(bool f(Length element)) => new WhereIterable<Length>(this, f);
+  Iterable<Length> where(bool f(Length element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Length element)) => Collections.every(this, f);
+  bool every(bool f(Length element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Length element)) => Collections.any(this, f);
+  bool any(bool f(Length element)) => IterableMixinWorkaround.any(this, f);
 
   List<Length> toList() => new List<Length>.from(this);
   Set<Length> toSet() => new Set<Length>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Length> take(int n) => new ListView<Length>(this, 0, n);
+  List<Length> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Length> takeWhile(bool test(Length value)) {
-    return new TakeWhileIterable<Length>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Length> skip(int n) => new ListView<Length>(this, n, null);
+  List<Length> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Length> skipWhile(bool test(Length value)) {
-    return new SkipWhileIterable<Length>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Length firstMatching(bool test(Length value), { Length orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Length lastMatching(bool test(Length value), {Length orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Length singleMatching(bool test(Length value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Length elementAt(int index) {
@@ -3782,7 +3860,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(Length a, Length b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -3812,16 +3890,36 @@
     throw new StateError("More than one element");
   }
 
-  Length min([int compare(Length a, Length b)]) => Collections.min(this, compare);
+  Length min([int compare(Length a, Length b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Length max([int compare(Length a, Length b)]) => Collections.max(this, compare);
+  Length max([int compare(Length a, Length b)]) => IterableMixinWorkaround.max(this, compare);
 
   Length removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Length removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Length element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Length element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Length> from, [int startFrom]) {
@@ -3841,32 +3939,32 @@
 
   // -- end List<Length> mixins.
 
-
-  /** @domName SVGLengthList.appendItem */
+  @DocsEditable
+  @DomName('SVGLengthList.appendItem')
   Length appendItem(Length item) native "SVGLengthList_appendItem_Callback";
 
-
-  /** @domName SVGLengthList.clear */
+  @DocsEditable
+  @DomName('SVGLengthList.clear')
   void clear() native "SVGLengthList_clear_Callback";
 
-
-  /** @domName SVGLengthList.getItem */
+  @DocsEditable
+  @DomName('SVGLengthList.getItem')
   Length getItem(int index) native "SVGLengthList_getItem_Callback";
 
-
-  /** @domName SVGLengthList.initialize */
+  @DocsEditable
+  @DomName('SVGLengthList.initialize')
   Length initialize(Length item) native "SVGLengthList_initialize_Callback";
 
-
-  /** @domName SVGLengthList.insertItemBefore */
+  @DocsEditable
+  @DomName('SVGLengthList.insertItemBefore')
   Length insertItemBefore(Length item, int index) native "SVGLengthList_insertItemBefore_Callback";
 
-
-  /** @domName SVGLengthList.removeItem */
+  @DocsEditable
+  @DomName('SVGLengthList.removeItem')
   Length removeItem(int index) native "SVGLengthList_removeItem_Callback";
 
-
-  /** @domName SVGLengthList.replaceItem */
+  @DocsEditable
+  @DomName('SVGLengthList.replaceItem')
   Length replaceItem(Length item, int index) native "SVGLengthList_replaceItem_Callback";
 
 }
@@ -3877,103 +3975,104 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGLineElement
+@DocsEditable
+@DomName('SVGLineElement')
 class LineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   LineElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory LineElement() => _SvgElementFactoryProvider.createSvgElement_tag("line");
 
-
-  /** @domName SVGLineElement.x1 */
+  @DocsEditable
+  @DomName('SVGLineElement.x1')
   AnimatedLength get x1 native "SVGLineElement_x1_Getter";
 
-
-  /** @domName SVGLineElement.x2 */
+  @DocsEditable
+  @DomName('SVGLineElement.x2')
   AnimatedLength get x2 native "SVGLineElement_x2_Getter";
 
-
-  /** @domName SVGLineElement.y1 */
+  @DocsEditable
+  @DomName('SVGLineElement.y1')
   AnimatedLength get y1 native "SVGLineElement_y1_Getter";
 
-
-  /** @domName SVGLineElement.y2 */
+  @DocsEditable
+  @DomName('SVGLineElement.y2')
   AnimatedLength get y2 native "SVGLineElement_y2_Getter";
 
-
-  /** @domName SVGLineElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGLineElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGLineElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGLineElement.xmllang */
+  @DocsEditable
+  @DomName('SVGLineElement.xmllang')
   String get xmllang native "SVGLineElement_xmllang_Getter";
 
-
-  /** @domName SVGLineElement.xmllang */
+  @DocsEditable
+  @DomName('SVGLineElement.xmllang')
   void set xmllang(String value) native "SVGLineElement_xmllang_Setter";
 
-
-  /** @domName SVGLineElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGLineElement.xmlspace')
   String get xmlspace native "SVGLineElement_xmlspace_Getter";
 
-
-  /** @domName SVGLineElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGLineElement.xmlspace')
   void set xmlspace(String value) native "SVGLineElement_xmlspace_Setter";
 
-
-  /** @domName SVGLineElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGLineElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGLineElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGLineElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGLineElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGLineElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGLineElement.getBBox */
+  @DocsEditable
+  @DomName('SVGLineElement.getBBox')
   Rect getBBox() native "SVGLineElement_getBBox_Callback";
 
-
-  /** @domName SVGLineElement.getCTM */
+  @DocsEditable
+  @DomName('SVGLineElement.getCTM')
   Matrix getCtm() native "SVGLineElement_getCTM_Callback";
 
-
-  /** @domName SVGLineElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGLineElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGLineElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGLineElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGLineElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGLineElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGLineElement.className */
+  @DocsEditable
+  @DomName('SVGLineElement.className')
   AnimatedString get $dom_svgClassName native "SVGLineElement_className_Getter";
 
-
-  /** @domName SVGLineElement.style */
+  @DocsEditable
+  @DomName('SVGLineElement.style')
   CssStyleDeclaration get style native "SVGLineElement_style_Getter";
 
-
-  /** @domName SVGLineElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGLineElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGLineElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGLineElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGLineElement.requiredExtensions')
   StringList get requiredExtensions native "SVGLineElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGLineElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGLineElement.requiredFeatures')
   StringList get requiredFeatures native "SVGLineElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGLineElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGLineElement.systemLanguage')
   StringList get systemLanguage native "SVGLineElement_systemLanguage_Getter";
 
-
-  /** @domName SVGLineElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGLineElement.hasExtension')
   bool hasExtension(String extension) native "SVGLineElement_hasExtension_Callback";
 
-
-  /** @domName SVGLineElement.transform */
+  @DocsEditable
+  @DomName('SVGLineElement.transform')
   AnimatedTransformList get transform native "SVGLineElement_transform_Getter";
 
 }
@@ -3984,27 +4083,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGLinearGradientElement
+@DocsEditable
+@DomName('SVGLinearGradientElement')
 class LinearGradientElement extends GradientElement {
   LinearGradientElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory LinearGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("linearGradient");
 
-
-  /** @domName SVGLinearGradientElement.x1 */
+  @DocsEditable
+  @DomName('SVGLinearGradientElement.x1')
   AnimatedLength get x1 native "SVGLinearGradientElement_x1_Getter";
 
-
-  /** @domName SVGLinearGradientElement.x2 */
+  @DocsEditable
+  @DomName('SVGLinearGradientElement.x2')
   AnimatedLength get x2 native "SVGLinearGradientElement_x2_Getter";
 
-
-  /** @domName SVGLinearGradientElement.y1 */
+  @DocsEditable
+  @DomName('SVGLinearGradientElement.y1')
   AnimatedLength get y1 native "SVGLinearGradientElement_y1_Getter";
 
-
-  /** @domName SVGLinearGradientElement.y2 */
+  @DocsEditable
+  @DomName('SVGLinearGradientElement.y2')
   AnimatedLength get y2 native "SVGLinearGradientElement_y2_Getter";
 
 }
@@ -4015,32 +4115,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGLocatable
+@DocsEditable
+@DomName('SVGLocatable')
 class Locatable extends NativeFieldWrapperClass1 {
   Locatable.internal();
 
-
-  /** @domName SVGLocatable.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGLocatable.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGLocatable_farthestViewportElement_Getter";
 
-
-  /** @domName SVGLocatable.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGLocatable.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGLocatable_nearestViewportElement_Getter";
 
-
-  /** @domName SVGLocatable.getBBox */
+  @DocsEditable
+  @DomName('SVGLocatable.getBBox')
   Rect getBBox() native "SVGLocatable_getBBox_Callback";
 
-
-  /** @domName SVGLocatable.getCTM */
+  @DocsEditable
+  @DomName('SVGLocatable.getCTM')
   Matrix getCtm() native "SVGLocatable_getCTM_Callback";
 
-
-  /** @domName SVGLocatable.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGLocatable.getScreenCTM')
   Matrix getScreenCtm() native "SVGLocatable_getScreenCTM_Callback";
 
-
-  /** @domName SVGLocatable.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGLocatable.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGLocatable_getTransformToElement_Callback";
 
 }
@@ -4051,19 +4152,20 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGMPathElement
+@DocsEditable
+@DomName('SVGMPathElement')
 class MPathElement extends SvgElement implements UriReference, ExternalResourcesRequired {
   MPathElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("mpath");
 
-
-  /** @domName SVGMPathElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGMPathElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGMPathElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGMPathElement.href */
+  @DocsEditable
+  @DomName('SVGMPathElement.href')
   AnimatedString get href native "SVGMPathElement_href_Getter";
 
 }
@@ -4074,11 +4176,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGMarkerElement
+@DocsEditable
+@DomName('SVGMarkerElement')
 class MarkerElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace {
   MarkerElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MarkerElement() => _SvgElementFactoryProvider.createSvgElement_tag("marker");
 
   static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
@@ -4093,80 +4196,80 @@
 
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
-
-  /** @domName SVGMarkerElement.markerHeight */
+  @DocsEditable
+  @DomName('SVGMarkerElement.markerHeight')
   AnimatedLength get markerHeight native "SVGMarkerElement_markerHeight_Getter";
 
-
-  /** @domName SVGMarkerElement.markerUnits */
+  @DocsEditable
+  @DomName('SVGMarkerElement.markerUnits')
   AnimatedEnumeration get markerUnits native "SVGMarkerElement_markerUnits_Getter";
 
-
-  /** @domName SVGMarkerElement.markerWidth */
+  @DocsEditable
+  @DomName('SVGMarkerElement.markerWidth')
   AnimatedLength get markerWidth native "SVGMarkerElement_markerWidth_Getter";
 
-
-  /** @domName SVGMarkerElement.orientAngle */
+  @DocsEditable
+  @DomName('SVGMarkerElement.orientAngle')
   AnimatedAngle get orientAngle native "SVGMarkerElement_orientAngle_Getter";
 
-
-  /** @domName SVGMarkerElement.orientType */
+  @DocsEditable
+  @DomName('SVGMarkerElement.orientType')
   AnimatedEnumeration get orientType native "SVGMarkerElement_orientType_Getter";
 
-
-  /** @domName SVGMarkerElement.refX */
+  @DocsEditable
+  @DomName('SVGMarkerElement.refX')
   AnimatedLength get refX native "SVGMarkerElement_refX_Getter";
 
-
-  /** @domName SVGMarkerElement.refY */
+  @DocsEditable
+  @DomName('SVGMarkerElement.refY')
   AnimatedLength get refY native "SVGMarkerElement_refY_Getter";
 
-
-  /** @domName SVGMarkerElement.setOrientToAngle */
+  @DocsEditable
+  @DomName('SVGMarkerElement.setOrientToAngle')
   void setOrientToAngle(Angle angle) native "SVGMarkerElement_setOrientToAngle_Callback";
 
-
-  /** @domName SVGMarkerElement.setOrientToAuto */
+  @DocsEditable
+  @DomName('SVGMarkerElement.setOrientToAuto')
   void setOrientToAuto() native "SVGMarkerElement_setOrientToAuto_Callback";
 
-
-  /** @domName SVGMarkerElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGMarkerElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGMarkerElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGMarkerElement.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGMarkerElement.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGMarkerElement_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGMarkerElement.viewBox */
+  @DocsEditable
+  @DomName('SVGMarkerElement.viewBox')
   AnimatedRect get viewBox native "SVGMarkerElement_viewBox_Getter";
 
-
-  /** @domName SVGMarkerElement.xmllang */
+  @DocsEditable
+  @DomName('SVGMarkerElement.xmllang')
   String get xmllang native "SVGMarkerElement_xmllang_Getter";
 
-
-  /** @domName SVGMarkerElement.xmllang */
+  @DocsEditable
+  @DomName('SVGMarkerElement.xmllang')
   void set xmllang(String value) native "SVGMarkerElement_xmllang_Setter";
 
-
-  /** @domName SVGMarkerElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGMarkerElement.xmlspace')
   String get xmlspace native "SVGMarkerElement_xmlspace_Getter";
 
-
-  /** @domName SVGMarkerElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGMarkerElement.xmlspace')
   void set xmlspace(String value) native "SVGMarkerElement_xmlspace_Setter";
 
-
-  /** @domName SVGMarkerElement.className */
+  @DocsEditable
+  @DomName('SVGMarkerElement.className')
   AnimatedString get $dom_svgClassName native "SVGMarkerElement_className_Getter";
 
-
-  /** @domName SVGMarkerElement.style */
+  @DocsEditable
+  @DomName('SVGMarkerElement.style')
   CssStyleDeclaration get style native "SVGMarkerElement_style_Getter";
 
-
-  /** @domName SVGMarkerElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGMarkerElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGMarkerElement_getPresentationAttribute_Callback";
 
 }
@@ -4177,83 +4280,84 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGMaskElement
+@DocsEditable
+@DomName('SVGMaskElement')
 class MaskElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace {
   MaskElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory MaskElement() => _SvgElementFactoryProvider.createSvgElement_tag("mask");
 
-
-  /** @domName SVGMaskElement.height */
+  @DocsEditable
+  @DomName('SVGMaskElement.height')
   AnimatedLength get height native "SVGMaskElement_height_Getter";
 
-
-  /** @domName SVGMaskElement.maskContentUnits */
+  @DocsEditable
+  @DomName('SVGMaskElement.maskContentUnits')
   AnimatedEnumeration get maskContentUnits native "SVGMaskElement_maskContentUnits_Getter";
 
-
-  /** @domName SVGMaskElement.maskUnits */
+  @DocsEditable
+  @DomName('SVGMaskElement.maskUnits')
   AnimatedEnumeration get maskUnits native "SVGMaskElement_maskUnits_Getter";
 
-
-  /** @domName SVGMaskElement.width */
+  @DocsEditable
+  @DomName('SVGMaskElement.width')
   AnimatedLength get width native "SVGMaskElement_width_Getter";
 
-
-  /** @domName SVGMaskElement.x */
+  @DocsEditable
+  @DomName('SVGMaskElement.x')
   AnimatedLength get x native "SVGMaskElement_x_Getter";
 
-
-  /** @domName SVGMaskElement.y */
+  @DocsEditable
+  @DomName('SVGMaskElement.y')
   AnimatedLength get y native "SVGMaskElement_y_Getter";
 
-
-  /** @domName SVGMaskElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGMaskElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGMaskElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGMaskElement.xmllang */
+  @DocsEditable
+  @DomName('SVGMaskElement.xmllang')
   String get xmllang native "SVGMaskElement_xmllang_Getter";
 
-
-  /** @domName SVGMaskElement.xmllang */
+  @DocsEditable
+  @DomName('SVGMaskElement.xmllang')
   void set xmllang(String value) native "SVGMaskElement_xmllang_Setter";
 
-
-  /** @domName SVGMaskElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGMaskElement.xmlspace')
   String get xmlspace native "SVGMaskElement_xmlspace_Getter";
 
-
-  /** @domName SVGMaskElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGMaskElement.xmlspace')
   void set xmlspace(String value) native "SVGMaskElement_xmlspace_Setter";
 
-
-  /** @domName SVGMaskElement.className */
+  @DocsEditable
+  @DomName('SVGMaskElement.className')
   AnimatedString get $dom_svgClassName native "SVGMaskElement_className_Getter";
 
-
-  /** @domName SVGMaskElement.style */
+  @DocsEditable
+  @DomName('SVGMaskElement.style')
   CssStyleDeclaration get style native "SVGMaskElement_style_Getter";
 
-
-  /** @domName SVGMaskElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGMaskElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGMaskElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGMaskElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGMaskElement.requiredExtensions')
   StringList get requiredExtensions native "SVGMaskElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGMaskElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGMaskElement.requiredFeatures')
   StringList get requiredFeatures native "SVGMaskElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGMaskElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGMaskElement.systemLanguage')
   StringList get systemLanguage native "SVGMaskElement_systemLanguage_Getter";
 
-
-  /** @domName SVGMaskElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGMaskElement.hasExtension')
   bool hasExtension(String extension) native "SVGMaskElement_hasExtension_Callback";
 
 }
@@ -4264,100 +4368,101 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGMatrix
+@DocsEditable
+@DomName('SVGMatrix')
 class Matrix extends NativeFieldWrapperClass1 {
   Matrix.internal();
 
-
-  /** @domName SVGMatrix.a */
+  @DocsEditable
+  @DomName('SVGMatrix.a')
   num get a native "SVGMatrix_a_Getter";
 
-
-  /** @domName SVGMatrix.a */
+  @DocsEditable
+  @DomName('SVGMatrix.a')
   void set a(num value) native "SVGMatrix_a_Setter";
 
-
-  /** @domName SVGMatrix.b */
+  @DocsEditable
+  @DomName('SVGMatrix.b')
   num get b native "SVGMatrix_b_Getter";
 
-
-  /** @domName SVGMatrix.b */
+  @DocsEditable
+  @DomName('SVGMatrix.b')
   void set b(num value) native "SVGMatrix_b_Setter";
 
-
-  /** @domName SVGMatrix.c */
+  @DocsEditable
+  @DomName('SVGMatrix.c')
   num get c native "SVGMatrix_c_Getter";
 
-
-  /** @domName SVGMatrix.c */
+  @DocsEditable
+  @DomName('SVGMatrix.c')
   void set c(num value) native "SVGMatrix_c_Setter";
 
-
-  /** @domName SVGMatrix.d */
+  @DocsEditable
+  @DomName('SVGMatrix.d')
   num get d native "SVGMatrix_d_Getter";
 
-
-  /** @domName SVGMatrix.d */
+  @DocsEditable
+  @DomName('SVGMatrix.d')
   void set d(num value) native "SVGMatrix_d_Setter";
 
-
-  /** @domName SVGMatrix.e */
+  @DocsEditable
+  @DomName('SVGMatrix.e')
   num get e native "SVGMatrix_e_Getter";
 
-
-  /** @domName SVGMatrix.e */
+  @DocsEditable
+  @DomName('SVGMatrix.e')
   void set e(num value) native "SVGMatrix_e_Setter";
 
-
-  /** @domName SVGMatrix.f */
+  @DocsEditable
+  @DomName('SVGMatrix.f')
   num get f native "SVGMatrix_f_Getter";
 
-
-  /** @domName SVGMatrix.f */
+  @DocsEditable
+  @DomName('SVGMatrix.f')
   void set f(num value) native "SVGMatrix_f_Setter";
 
-
-  /** @domName SVGMatrix.flipX */
+  @DocsEditable
+  @DomName('SVGMatrix.flipX')
   Matrix flipX() native "SVGMatrix_flipX_Callback";
 
-
-  /** @domName SVGMatrix.flipY */
+  @DocsEditable
+  @DomName('SVGMatrix.flipY')
   Matrix flipY() native "SVGMatrix_flipY_Callback";
 
-
-  /** @domName SVGMatrix.inverse */
+  @DocsEditable
+  @DomName('SVGMatrix.inverse')
   Matrix inverse() native "SVGMatrix_inverse_Callback";
 
-
-  /** @domName SVGMatrix.multiply */
+  @DocsEditable
+  @DomName('SVGMatrix.multiply')
   Matrix multiply(Matrix secondMatrix) native "SVGMatrix_multiply_Callback";
 
-
-  /** @domName SVGMatrix.rotate */
+  @DocsEditable
+  @DomName('SVGMatrix.rotate')
   Matrix rotate(num angle) native "SVGMatrix_rotate_Callback";
 
-
-  /** @domName SVGMatrix.rotateFromVector */
+  @DocsEditable
+  @DomName('SVGMatrix.rotateFromVector')
   Matrix rotateFromVector(num x, num y) native "SVGMatrix_rotateFromVector_Callback";
 
-
-  /** @domName SVGMatrix.scale */
+  @DocsEditable
+  @DomName('SVGMatrix.scale')
   Matrix scale(num scaleFactor) native "SVGMatrix_scale_Callback";
 
-
-  /** @domName SVGMatrix.scaleNonUniform */
+  @DocsEditable
+  @DomName('SVGMatrix.scaleNonUniform')
   Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback";
 
-
-  /** @domName SVGMatrix.skewX */
+  @DocsEditable
+  @DomName('SVGMatrix.skewX')
   Matrix skewX(num angle) native "SVGMatrix_skewX_Callback";
 
-
-  /** @domName SVGMatrix.skewY */
+  @DocsEditable
+  @DomName('SVGMatrix.skewY')
   Matrix skewY(num angle) native "SVGMatrix_skewY_Callback";
 
-
-  /** @domName SVGMatrix.translate */
+  @DocsEditable
+  @DomName('SVGMatrix.translate')
   Matrix translate(num x, num y) native "SVGMatrix_translate_Callback";
 
 }
@@ -4368,7 +4473,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGMetadataElement
+@DocsEditable
+@DomName('SVGMetadataElement')
 class MetadataElement extends SvgElement {
   MetadataElement.internal() : super.internal();
 
@@ -4380,7 +4486,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGMissingGlyphElement
+@DocsEditable
+@DomName('SVGMissingGlyphElement')
 class MissingGlyphElement extends SvgElement {
   MissingGlyphElement.internal() : super.internal();
 
@@ -4392,16 +4499,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGNumber
+@DocsEditable
+@DomName('SVGNumber')
 class Number extends NativeFieldWrapperClass1 {
   Number.internal();
 
-
-  /** @domName SVGNumber.value */
+  @DocsEditable
+  @DomName('SVGNumber.value')
   num get value native "SVGNumber_value_Getter";
 
-
-  /** @domName SVGNumber.value */
+  @DocsEditable
+  @DomName('SVGNumber.value')
   void set value(num value) native "SVGNumber_value_Setter";
 
 }
@@ -4412,12 +4520,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGNumberList
+@DocsEditable
+@DomName('SVGNumberList')
 class NumberList extends NativeFieldWrapperClass1 implements List<Number> {
   NumberList.internal();
 
-
-  /** @domName SVGNumberList.numberOfItems */
+  @DocsEditable
+  @DomName('SVGNumberList.numberOfItems')
   int get numberOfItems native "SVGNumberList_numberOfItems_Getter";
 
   Number operator[](int index) native "SVGNumberList_item_Callback";
@@ -4440,50 +4549,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Number)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Number element) => Collections.contains(this, element);
+  bool contains(Number element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Number element)) => Collections.forEach(this, f);
+  void forEach(void f(Number element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Number element)) => new MappedList<Number, dynamic>(this, f);
+  List mappedBy(f(Number element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Number> where(bool f(Number element)) => new WhereIterable<Number>(this, f);
+  Iterable<Number> where(bool f(Number element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Number element)) => Collections.every(this, f);
+  bool every(bool f(Number element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Number element)) => Collections.any(this, f);
+  bool any(bool f(Number element)) => IterableMixinWorkaround.any(this, f);
 
   List<Number> toList() => new List<Number>.from(this);
   Set<Number> toSet() => new Set<Number>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Number> take(int n) => new ListView<Number>(this, 0, n);
+  List<Number> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Number> takeWhile(bool test(Number value)) {
-    return new TakeWhileIterable<Number>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Number> skip(int n) => new ListView<Number>(this, n, null);
+  List<Number> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Number> skipWhile(bool test(Number value)) {
-    return new SkipWhileIterable<Number>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Number firstMatching(bool test(Number value), { Number orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Number lastMatching(bool test(Number value), {Number orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Number singleMatching(bool test(Number value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Number elementAt(int index) {
@@ -4509,7 +4618,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(Number a, Number b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -4539,16 +4648,36 @@
     throw new StateError("More than one element");
   }
 
-  Number min([int compare(Number a, Number b)]) => Collections.min(this, compare);
+  Number min([int compare(Number a, Number b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Number max([int compare(Number a, Number b)]) => Collections.max(this, compare);
+  Number max([int compare(Number a, Number b)]) => IterableMixinWorkaround.max(this, compare);
 
   Number removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Number removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Number element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Number element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Number> from, [int startFrom]) {
@@ -4568,32 +4697,32 @@
 
   // -- end List<Number> mixins.
 
-
-  /** @domName SVGNumberList.appendItem */
+  @DocsEditable
+  @DomName('SVGNumberList.appendItem')
   Number appendItem(Number item) native "SVGNumberList_appendItem_Callback";
 
-
-  /** @domName SVGNumberList.clear */
+  @DocsEditable
+  @DomName('SVGNumberList.clear')
   void clear() native "SVGNumberList_clear_Callback";
 
-
-  /** @domName SVGNumberList.getItem */
+  @DocsEditable
+  @DomName('SVGNumberList.getItem')
   Number getItem(int index) native "SVGNumberList_getItem_Callback";
 
-
-  /** @domName SVGNumberList.initialize */
+  @DocsEditable
+  @DomName('SVGNumberList.initialize')
   Number initialize(Number item) native "SVGNumberList_initialize_Callback";
 
-
-  /** @domName SVGNumberList.insertItemBefore */
+  @DocsEditable
+  @DomName('SVGNumberList.insertItemBefore')
   Number insertItemBefore(Number item, int index) native "SVGNumberList_insertItemBefore_Callback";
 
-
-  /** @domName SVGNumberList.removeItem */
+  @DocsEditable
+  @DomName('SVGNumberList.removeItem')
   Number removeItem(int index) native "SVGNumberList_removeItem_Callback";
 
-
-  /** @domName SVGNumberList.replaceItem */
+  @DocsEditable
+  @DomName('SVGNumberList.replaceItem')
   Number replaceItem(Number item, int index) native "SVGNumberList_replaceItem_Callback";
 
 }
@@ -4604,7 +4733,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPaint
+@DocsEditable
+@DomName('SVGPaint')
 class Paint extends Color {
   Paint.internal() : super.internal();
 
@@ -4628,20 +4758,20 @@
 
   static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
 
-
-  /** @domName SVGPaint.paintType */
+  @DocsEditable
+  @DomName('SVGPaint.paintType')
   int get paintType native "SVGPaint_paintType_Getter";
 
-
-  /** @domName SVGPaint.uri */
+  @DocsEditable
+  @DomName('SVGPaint.uri')
   String get uri native "SVGPaint_uri_Getter";
 
-
-  /** @domName SVGPaint.setPaint */
+  @DocsEditable
+  @DomName('SVGPaint.setPaint')
   void setPaint(int paintType, String uri, String rgbColor, String iccColor) native "SVGPaint_setPaint_Callback";
 
-
-  /** @domName SVGPaint.setUri */
+  @DocsEditable
+  @DomName('SVGPaint.setUri')
   void setUri(String uri) native "SVGPaint_setUri_Callback";
 
 }
@@ -4652,195 +4782,196 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathElement
+@DocsEditable
+@DomName('SVGPathElement')
 class PathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   PathElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory PathElement() => _SvgElementFactoryProvider.createSvgElement_tag("path");
 
-
-  /** @domName SVGPathElement.animatedNormalizedPathSegList */
+  @DocsEditable
+  @DomName('SVGPathElement.animatedNormalizedPathSegList')
   PathSegList get animatedNormalizedPathSegList native "SVGPathElement_animatedNormalizedPathSegList_Getter";
 
-
-  /** @domName SVGPathElement.animatedPathSegList */
+  @DocsEditable
+  @DomName('SVGPathElement.animatedPathSegList')
   PathSegList get animatedPathSegList native "SVGPathElement_animatedPathSegList_Getter";
 
-
-  /** @domName SVGPathElement.normalizedPathSegList */
+  @DocsEditable
+  @DomName('SVGPathElement.normalizedPathSegList')
   PathSegList get normalizedPathSegList native "SVGPathElement_normalizedPathSegList_Getter";
 
-
-  /** @domName SVGPathElement.pathLength */
+  @DocsEditable
+  @DomName('SVGPathElement.pathLength')
   AnimatedNumber get pathLength native "SVGPathElement_pathLength_Getter";
 
-
-  /** @domName SVGPathElement.pathSegList */
+  @DocsEditable
+  @DomName('SVGPathElement.pathSegList')
   PathSegList get pathSegList native "SVGPathElement_pathSegList_Getter";
 
-
-  /** @domName SVGPathElement.createSVGPathSegArcAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegArcAbs')
   PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegArcRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegArcRel')
   PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegClosePath */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegClosePath')
   PathSegClosePath createSvgPathSegClosePath() native "SVGPathElement_createSVGPathSegClosePath_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoCubicAbs')
   PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoCubicRel')
   PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs')
   PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel')
   PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticAbs')
   PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticRel')
   PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs')
   PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel')
   PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegLinetoAbs')
   PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalAbs')
   PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalRel')
   PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegLinetoRel')
   PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegLinetoVerticalAbs')
   PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegLinetoVerticalRel')
   PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegMovetoAbs */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegMovetoAbs')
   PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
 
-
-  /** @domName SVGPathElement.createSVGPathSegMovetoRel */
+  @DocsEditable
+  @DomName('SVGPathElement.createSVGPathSegMovetoRel')
   PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
 
-
-  /** @domName SVGPathElement.getPathSegAtLength */
+  @DocsEditable
+  @DomName('SVGPathElement.getPathSegAtLength')
   int getPathSegAtLength(num distance) native "SVGPathElement_getPathSegAtLength_Callback";
 
-
-  /** @domName SVGPathElement.getPointAtLength */
+  @DocsEditable
+  @DomName('SVGPathElement.getPointAtLength')
   Point getPointAtLength(num distance) native "SVGPathElement_getPointAtLength_Callback";
 
-
-  /** @domName SVGPathElement.getTotalLength */
+  @DocsEditable
+  @DomName('SVGPathElement.getTotalLength')
   num getTotalLength() native "SVGPathElement_getTotalLength_Callback";
 
-
-  /** @domName SVGPathElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGPathElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGPathElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGPathElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPathElement.xmllang')
   String get xmllang native "SVGPathElement_xmllang_Getter";
 
-
-  /** @domName SVGPathElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPathElement.xmllang')
   void set xmllang(String value) native "SVGPathElement_xmllang_Setter";
 
-
-  /** @domName SVGPathElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPathElement.xmlspace')
   String get xmlspace native "SVGPathElement_xmlspace_Getter";
 
-
-  /** @domName SVGPathElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPathElement.xmlspace')
   void set xmlspace(String value) native "SVGPathElement_xmlspace_Setter";
 
-
-  /** @domName SVGPathElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGPathElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGPathElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGPathElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGPathElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGPathElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGPathElement.getBBox */
+  @DocsEditable
+  @DomName('SVGPathElement.getBBox')
   Rect getBBox() native "SVGPathElement_getBBox_Callback";
 
-
-  /** @domName SVGPathElement.getCTM */
+  @DocsEditable
+  @DomName('SVGPathElement.getCTM')
   Matrix getCtm() native "SVGPathElement_getCTM_Callback";
 
-
-  /** @domName SVGPathElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGPathElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGPathElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGPathElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGPathElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGPathElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGPathElement.className */
+  @DocsEditable
+  @DomName('SVGPathElement.className')
   AnimatedString get $dom_svgClassName native "SVGPathElement_className_Getter";
 
-
-  /** @domName SVGPathElement.style */
+  @DocsEditable
+  @DomName('SVGPathElement.style')
   CssStyleDeclaration get style native "SVGPathElement_style_Getter";
 
-
-  /** @domName SVGPathElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGPathElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGPathElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGPathElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGPathElement.requiredExtensions')
   StringList get requiredExtensions native "SVGPathElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGPathElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGPathElement.requiredFeatures')
   StringList get requiredFeatures native "SVGPathElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGPathElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGPathElement.systemLanguage')
   StringList get systemLanguage native "SVGPathElement_systemLanguage_Getter";
 
-
-  /** @domName SVGPathElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGPathElement.hasExtension')
   bool hasExtension(String extension) native "SVGPathElement_hasExtension_Callback";
 
-
-  /** @domName SVGPathElement.transform */
+  @DocsEditable
+  @DomName('SVGPathElement.transform')
   AnimatedTransformList get transform native "SVGPathElement_transform_Getter";
 
 }
@@ -4851,7 +4982,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSeg
+@DocsEditable
+@DomName('SVGPathSeg')
 class PathSeg extends NativeFieldWrapperClass1 {
   PathSeg.internal();
 
@@ -4895,12 +5027,12 @@
 
   static const int PATHSEG_UNKNOWN = 0;
 
-
-  /** @domName SVGPathSeg.pathSegType */
+  @DocsEditable
+  @DomName('SVGPathSeg.pathSegType')
   int get pathSegType native "SVGPathSeg_pathSegType_Getter";
 
-
-  /** @domName SVGPathSeg.pathSegTypeAsLetter */
+  @DocsEditable
+  @DomName('SVGPathSeg.pathSegTypeAsLetter')
   String get pathSegTypeAsLetter native "SVGPathSeg_pathSegTypeAsLetter_Getter";
 
 }
@@ -4911,64 +5043,65 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegArcAbs
+@DocsEditable
+@DomName('SVGPathSegArcAbs')
 class PathSegArcAbs extends PathSeg {
   PathSegArcAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegArcAbs.angle */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.angle')
   num get angle native "SVGPathSegArcAbs_angle_Getter";
 
-
-  /** @domName SVGPathSegArcAbs.angle */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.angle')
   void set angle(num value) native "SVGPathSegArcAbs_angle_Setter";
 
-
-  /** @domName SVGPathSegArcAbs.largeArcFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.largeArcFlag')
   bool get largeArcFlag native "SVGPathSegArcAbs_largeArcFlag_Getter";
 
-
-  /** @domName SVGPathSegArcAbs.largeArcFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.largeArcFlag')
   void set largeArcFlag(bool value) native "SVGPathSegArcAbs_largeArcFlag_Setter";
 
-
-  /** @domName SVGPathSegArcAbs.r1 */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.r1')
   num get r1 native "SVGPathSegArcAbs_r1_Getter";
 
-
-  /** @domName SVGPathSegArcAbs.r1 */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.r1')
   void set r1(num value) native "SVGPathSegArcAbs_r1_Setter";
 
-
-  /** @domName SVGPathSegArcAbs.r2 */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.r2')
   num get r2 native "SVGPathSegArcAbs_r2_Getter";
 
-
-  /** @domName SVGPathSegArcAbs.r2 */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.r2')
   void set r2(num value) native "SVGPathSegArcAbs_r2_Setter";
 
-
-  /** @domName SVGPathSegArcAbs.sweepFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.sweepFlag')
   bool get sweepFlag native "SVGPathSegArcAbs_sweepFlag_Getter";
 
-
-  /** @domName SVGPathSegArcAbs.sweepFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.sweepFlag')
   void set sweepFlag(bool value) native "SVGPathSegArcAbs_sweepFlag_Setter";
 
-
-  /** @domName SVGPathSegArcAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.x')
   num get x native "SVGPathSegArcAbs_x_Getter";
 
-
-  /** @domName SVGPathSegArcAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.x')
   void set x(num value) native "SVGPathSegArcAbs_x_Setter";
 
-
-  /** @domName SVGPathSegArcAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.y')
   num get y native "SVGPathSegArcAbs_y_Getter";
 
-
-  /** @domName SVGPathSegArcAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegArcAbs.y')
   void set y(num value) native "SVGPathSegArcAbs_y_Setter";
 
 }
@@ -4979,64 +5112,65 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegArcRel
+@DocsEditable
+@DomName('SVGPathSegArcRel')
 class PathSegArcRel extends PathSeg {
   PathSegArcRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegArcRel.angle */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.angle')
   num get angle native "SVGPathSegArcRel_angle_Getter";
 
-
-  /** @domName SVGPathSegArcRel.angle */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.angle')
   void set angle(num value) native "SVGPathSegArcRel_angle_Setter";
 
-
-  /** @domName SVGPathSegArcRel.largeArcFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.largeArcFlag')
   bool get largeArcFlag native "SVGPathSegArcRel_largeArcFlag_Getter";
 
-
-  /** @domName SVGPathSegArcRel.largeArcFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.largeArcFlag')
   void set largeArcFlag(bool value) native "SVGPathSegArcRel_largeArcFlag_Setter";
 
-
-  /** @domName SVGPathSegArcRel.r1 */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.r1')
   num get r1 native "SVGPathSegArcRel_r1_Getter";
 
-
-  /** @domName SVGPathSegArcRel.r1 */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.r1')
   void set r1(num value) native "SVGPathSegArcRel_r1_Setter";
 
-
-  /** @domName SVGPathSegArcRel.r2 */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.r2')
   num get r2 native "SVGPathSegArcRel_r2_Getter";
 
-
-  /** @domName SVGPathSegArcRel.r2 */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.r2')
   void set r2(num value) native "SVGPathSegArcRel_r2_Setter";
 
-
-  /** @domName SVGPathSegArcRel.sweepFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.sweepFlag')
   bool get sweepFlag native "SVGPathSegArcRel_sweepFlag_Getter";
 
-
-  /** @domName SVGPathSegArcRel.sweepFlag */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.sweepFlag')
   void set sweepFlag(bool value) native "SVGPathSegArcRel_sweepFlag_Setter";
 
-
-  /** @domName SVGPathSegArcRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.x')
   num get x native "SVGPathSegArcRel_x_Getter";
 
-
-  /** @domName SVGPathSegArcRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.x')
   void set x(num value) native "SVGPathSegArcRel_x_Setter";
 
-
-  /** @domName SVGPathSegArcRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.y')
   num get y native "SVGPathSegArcRel_y_Getter";
 
-
-  /** @domName SVGPathSegArcRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegArcRel.y')
   void set y(num value) native "SVGPathSegArcRel_y_Setter";
 
 }
@@ -5047,7 +5181,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegClosePath
+@DocsEditable
+@DomName('SVGPathSegClosePath')
 class PathSegClosePath extends PathSeg {
   PathSegClosePath.internal() : super.internal();
 
@@ -5059,56 +5194,57 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoCubicAbs
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicAbs')
 class PathSegCurvetoCubicAbs extends PathSeg {
   PathSegCurvetoCubicAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.x')
   num get x native "SVGPathSegCurvetoCubicAbs_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.x')
   void set x(num value) native "SVGPathSegCurvetoCubicAbs_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.x1')
   num get x1 native "SVGPathSegCurvetoCubicAbs_x1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.x1')
   void set x1(num value) native "SVGPathSegCurvetoCubicAbs_x1_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.x2')
   num get x2 native "SVGPathSegCurvetoCubicAbs_x2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.x2')
   void set x2(num value) native "SVGPathSegCurvetoCubicAbs_x2_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.y')
   num get y native "SVGPathSegCurvetoCubicAbs_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.y')
   void set y(num value) native "SVGPathSegCurvetoCubicAbs_y_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.y1')
   num get y1 native "SVGPathSegCurvetoCubicAbs_y1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.y1')
   void set y1(num value) native "SVGPathSegCurvetoCubicAbs_y1_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.y2')
   num get y2 native "SVGPathSegCurvetoCubicAbs_y2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicAbs.y2')
   void set y2(num value) native "SVGPathSegCurvetoCubicAbs_y2_Setter";
 
 }
@@ -5119,56 +5255,57 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoCubicRel
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicRel')
 class PathSegCurvetoCubicRel extends PathSeg {
   PathSegCurvetoCubicRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.x')
   num get x native "SVGPathSegCurvetoCubicRel_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.x')
   void set x(num value) native "SVGPathSegCurvetoCubicRel_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.x1')
   num get x1 native "SVGPathSegCurvetoCubicRel_x1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.x1')
   void set x1(num value) native "SVGPathSegCurvetoCubicRel_x1_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.x2')
   num get x2 native "SVGPathSegCurvetoCubicRel_x2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.x2')
   void set x2(num value) native "SVGPathSegCurvetoCubicRel_x2_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.y')
   num get y native "SVGPathSegCurvetoCubicRel_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.y')
   void set y(num value) native "SVGPathSegCurvetoCubicRel_y_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.y1')
   num get y1 native "SVGPathSegCurvetoCubicRel_y1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.y1')
   void set y1(num value) native "SVGPathSegCurvetoCubicRel_y1_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.y2')
   num get y2 native "SVGPathSegCurvetoCubicRel_y2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicRel.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicRel.y2')
   void set y2(num value) native "SVGPathSegCurvetoCubicRel_y2_Setter";
 
 }
@@ -5179,40 +5316,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoCubicSmoothAbs
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicSmoothAbs')
 class PathSegCurvetoCubicSmoothAbs extends PathSeg {
   PathSegCurvetoCubicSmoothAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   num get x native "SVGPathSegCurvetoCubicSmoothAbs_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   void set x(num value) native "SVGPathSegCurvetoCubicSmoothAbs_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   num get x2 native "SVGPathSegCurvetoCubicSmoothAbs_x2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   void set x2(num value) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   num get y native "SVGPathSegCurvetoCubicSmoothAbs_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   void set y(num value) native "SVGPathSegCurvetoCubicSmoothAbs_y_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   num get y2 native "SVGPathSegCurvetoCubicSmoothAbs_y2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   void set y2(num value) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Setter";
 
 }
@@ -5223,40 +5361,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoCubicSmoothRel
+@DocsEditable
+@DomName('SVGPathSegCurvetoCubicSmoothRel')
 class PathSegCurvetoCubicSmoothRel extends PathSeg {
   PathSegCurvetoCubicSmoothRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   num get x native "SVGPathSegCurvetoCubicSmoothRel_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   void set x(num value) native "SVGPathSegCurvetoCubicSmoothRel_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   num get x2 native "SVGPathSegCurvetoCubicSmoothRel_x2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   void set x2(num value) native "SVGPathSegCurvetoCubicSmoothRel_x2_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   num get y native "SVGPathSegCurvetoCubicSmoothRel_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   void set y(num value) native "SVGPathSegCurvetoCubicSmoothRel_y_Setter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   num get y2 native "SVGPathSegCurvetoCubicSmoothRel_y2_Getter";
 
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   void set y2(num value) native "SVGPathSegCurvetoCubicSmoothRel_y2_Setter";
 
 }
@@ -5267,40 +5406,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoQuadraticAbs
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticAbs')
 class PathSegCurvetoQuadraticAbs extends PathSeg {
   PathSegCurvetoQuadraticAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   num get x native "SVGPathSegCurvetoQuadraticAbs_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   void set x(num value) native "SVGPathSegCurvetoQuadraticAbs_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   num get x1 native "SVGPathSegCurvetoQuadraticAbs_x1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   void set x1(num value) native "SVGPathSegCurvetoQuadraticAbs_x1_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   num get y native "SVGPathSegCurvetoQuadraticAbs_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   void set y(num value) native "SVGPathSegCurvetoQuadraticAbs_y_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   num get y1 native "SVGPathSegCurvetoQuadraticAbs_y1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   void set y1(num value) native "SVGPathSegCurvetoQuadraticAbs_y1_Setter";
 
 }
@@ -5311,40 +5451,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoQuadraticRel
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticRel')
 class PathSegCurvetoQuadraticRel extends PathSeg {
   PathSegCurvetoQuadraticRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.x')
   num get x native "SVGPathSegCurvetoQuadraticRel_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.x')
   void set x(num value) native "SVGPathSegCurvetoQuadraticRel_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   num get x1 native "SVGPathSegCurvetoQuadraticRel_x1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   void set x1(num value) native "SVGPathSegCurvetoQuadraticRel_x1_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.y')
   num get y native "SVGPathSegCurvetoQuadraticRel_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.y')
   void set y(num value) native "SVGPathSegCurvetoQuadraticRel_y_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   num get y1 native "SVGPathSegCurvetoQuadraticRel_y1_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   void set y1(num value) native "SVGPathSegCurvetoQuadraticRel_y1_Setter";
 
 }
@@ -5355,24 +5496,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoQuadraticSmoothAbs
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticSmoothAbs')
 class PathSegCurvetoQuadraticSmoothAbs extends PathSeg {
   PathSegCurvetoQuadraticSmoothAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   num get x native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   void set x(num value) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   num get y native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   void set y(num value) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Setter";
 
 }
@@ -5383,24 +5525,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegCurvetoQuadraticSmoothRel
+@DocsEditable
+@DomName('SVGPathSegCurvetoQuadraticSmoothRel')
 class PathSegCurvetoQuadraticSmoothRel extends PathSeg {
   PathSegCurvetoQuadraticSmoothRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   num get x native "SVGPathSegCurvetoQuadraticSmoothRel_x_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   void set x(num value) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Setter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   num get y native "SVGPathSegCurvetoQuadraticSmoothRel_y_Getter";
 
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   void set y(num value) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Setter";
 
 }
@@ -5411,24 +5554,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegLinetoAbs
+@DocsEditable
+@DomName('SVGPathSegLinetoAbs')
 class PathSegLinetoAbs extends PathSeg {
   PathSegLinetoAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegLinetoAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoAbs.x')
   num get x native "SVGPathSegLinetoAbs_x_Getter";
 
-
-  /** @domName SVGPathSegLinetoAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoAbs.x')
   void set x(num value) native "SVGPathSegLinetoAbs_x_Setter";
 
-
-  /** @domName SVGPathSegLinetoAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoAbs.y')
   num get y native "SVGPathSegLinetoAbs_y_Getter";
 
-
-  /** @domName SVGPathSegLinetoAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoAbs.y')
   void set y(num value) native "SVGPathSegLinetoAbs_y_Setter";
 
 }
@@ -5439,16 +5583,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegLinetoHorizontalAbs
+@DocsEditable
+@DomName('SVGPathSegLinetoHorizontalAbs')
 class PathSegLinetoHorizontalAbs extends PathSeg {
   PathSegLinetoHorizontalAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegLinetoHorizontalAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoHorizontalAbs.x')
   num get x native "SVGPathSegLinetoHorizontalAbs_x_Getter";
 
-
-  /** @domName SVGPathSegLinetoHorizontalAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoHorizontalAbs.x')
   void set x(num value) native "SVGPathSegLinetoHorizontalAbs_x_Setter";
 
 }
@@ -5459,16 +5604,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegLinetoHorizontalRel
+@DocsEditable
+@DomName('SVGPathSegLinetoHorizontalRel')
 class PathSegLinetoHorizontalRel extends PathSeg {
   PathSegLinetoHorizontalRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegLinetoHorizontalRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoHorizontalRel.x')
   num get x native "SVGPathSegLinetoHorizontalRel_x_Getter";
 
-
-  /** @domName SVGPathSegLinetoHorizontalRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoHorizontalRel.x')
   void set x(num value) native "SVGPathSegLinetoHorizontalRel_x_Setter";
 
 }
@@ -5479,24 +5625,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegLinetoRel
+@DocsEditable
+@DomName('SVGPathSegLinetoRel')
 class PathSegLinetoRel extends PathSeg {
   PathSegLinetoRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegLinetoRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoRel.x')
   num get x native "SVGPathSegLinetoRel_x_Getter";
 
-
-  /** @domName SVGPathSegLinetoRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoRel.x')
   void set x(num value) native "SVGPathSegLinetoRel_x_Setter";
 
-
-  /** @domName SVGPathSegLinetoRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoRel.y')
   num get y native "SVGPathSegLinetoRel_y_Getter";
 
-
-  /** @domName SVGPathSegLinetoRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoRel.y')
   void set y(num value) native "SVGPathSegLinetoRel_y_Setter";
 
 }
@@ -5507,16 +5654,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegLinetoVerticalAbs
+@DocsEditable
+@DomName('SVGPathSegLinetoVerticalAbs')
 class PathSegLinetoVerticalAbs extends PathSeg {
   PathSegLinetoVerticalAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegLinetoVerticalAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoVerticalAbs.y')
   num get y native "SVGPathSegLinetoVerticalAbs_y_Getter";
 
-
-  /** @domName SVGPathSegLinetoVerticalAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoVerticalAbs.y')
   void set y(num value) native "SVGPathSegLinetoVerticalAbs_y_Setter";
 
 }
@@ -5527,16 +5675,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegLinetoVerticalRel
+@DocsEditable
+@DomName('SVGPathSegLinetoVerticalRel')
 class PathSegLinetoVerticalRel extends PathSeg {
   PathSegLinetoVerticalRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegLinetoVerticalRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoVerticalRel.y')
   num get y native "SVGPathSegLinetoVerticalRel_y_Getter";
 
-
-  /** @domName SVGPathSegLinetoVerticalRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegLinetoVerticalRel.y')
   void set y(num value) native "SVGPathSegLinetoVerticalRel_y_Setter";
 
 }
@@ -5547,12 +5696,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegList
+@DocsEditable
+@DomName('SVGPathSegList')
 class PathSegList extends NativeFieldWrapperClass1 implements List<PathSeg> {
   PathSegList.internal();
 
-
-  /** @domName SVGPathSegList.numberOfItems */
+  @DocsEditable
+  @DomName('SVGPathSegList.numberOfItems')
   int get numberOfItems native "SVGPathSegList_numberOfItems_Getter";
 
   PathSeg operator[](int index) native "SVGPathSegList_item_Callback";
@@ -5575,50 +5725,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, PathSeg)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(PathSeg element) => Collections.contains(this, element);
+  bool contains(PathSeg element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(PathSeg element)) => Collections.forEach(this, f);
+  void forEach(void f(PathSeg element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(PathSeg element)) => new MappedList<PathSeg, dynamic>(this, f);
+  List mappedBy(f(PathSeg element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<PathSeg> where(bool f(PathSeg element)) => new WhereIterable<PathSeg>(this, f);
+  Iterable<PathSeg> where(bool f(PathSeg element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(PathSeg element)) => Collections.every(this, f);
+  bool every(bool f(PathSeg element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(PathSeg element)) => Collections.any(this, f);
+  bool any(bool f(PathSeg element)) => IterableMixinWorkaround.any(this, f);
 
   List<PathSeg> toList() => new List<PathSeg>.from(this);
   Set<PathSeg> toSet() => new Set<PathSeg>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<PathSeg> take(int n) => new ListView<PathSeg>(this, 0, n);
+  List<PathSeg> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<PathSeg> takeWhile(bool test(PathSeg value)) {
-    return new TakeWhileIterable<PathSeg>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<PathSeg> skip(int n) => new ListView<PathSeg>(this, n, null);
+  List<PathSeg> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<PathSeg> skipWhile(bool test(PathSeg value)) {
-    return new SkipWhileIterable<PathSeg>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   PathSeg firstMatching(bool test(PathSeg value), { PathSeg orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   PathSeg lastMatching(bool test(PathSeg value), {PathSeg orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   PathSeg singleMatching(bool test(PathSeg value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   PathSeg elementAt(int index) {
@@ -5644,7 +5794,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(PathSeg a, PathSeg b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -5674,16 +5824,36 @@
     throw new StateError("More than one element");
   }
 
-  PathSeg min([int compare(PathSeg a, PathSeg b)]) => Collections.min(this, compare);
+  PathSeg min([int compare(PathSeg a, PathSeg b)]) => IterableMixinWorkaround.min(this, compare);
 
-  PathSeg max([int compare(PathSeg a, PathSeg b)]) => Collections.max(this, compare);
+  PathSeg max([int compare(PathSeg a, PathSeg b)]) => IterableMixinWorkaround.max(this, compare);
 
   PathSeg removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   PathSeg removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(PathSeg element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(PathSeg element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<PathSeg> from, [int startFrom]) {
@@ -5703,32 +5873,32 @@
 
   // -- end List<PathSeg> mixins.
 
-
-  /** @domName SVGPathSegList.appendItem */
+  @DocsEditable
+  @DomName('SVGPathSegList.appendItem')
   PathSeg appendItem(PathSeg newItem) native "SVGPathSegList_appendItem_Callback";
 
-
-  /** @domName SVGPathSegList.clear */
+  @DocsEditable
+  @DomName('SVGPathSegList.clear')
   void clear() native "SVGPathSegList_clear_Callback";
 
-
-  /** @domName SVGPathSegList.getItem */
+  @DocsEditable
+  @DomName('SVGPathSegList.getItem')
   PathSeg getItem(int index) native "SVGPathSegList_getItem_Callback";
 
-
-  /** @domName SVGPathSegList.initialize */
+  @DocsEditable
+  @DomName('SVGPathSegList.initialize')
   PathSeg initialize(PathSeg newItem) native "SVGPathSegList_initialize_Callback";
 
-
-  /** @domName SVGPathSegList.insertItemBefore */
+  @DocsEditable
+  @DomName('SVGPathSegList.insertItemBefore')
   PathSeg insertItemBefore(PathSeg newItem, int index) native "SVGPathSegList_insertItemBefore_Callback";
 
-
-  /** @domName SVGPathSegList.removeItem */
+  @DocsEditable
+  @DomName('SVGPathSegList.removeItem')
   PathSeg removeItem(int index) native "SVGPathSegList_removeItem_Callback";
 
-
-  /** @domName SVGPathSegList.replaceItem */
+  @DocsEditable
+  @DomName('SVGPathSegList.replaceItem')
   PathSeg replaceItem(PathSeg newItem, int index) native "SVGPathSegList_replaceItem_Callback";
 
 }
@@ -5739,24 +5909,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegMovetoAbs
+@DocsEditable
+@DomName('SVGPathSegMovetoAbs')
 class PathSegMovetoAbs extends PathSeg {
   PathSegMovetoAbs.internal() : super.internal();
 
-
-  /** @domName SVGPathSegMovetoAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoAbs.x')
   num get x native "SVGPathSegMovetoAbs_x_Getter";
 
-
-  /** @domName SVGPathSegMovetoAbs.x */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoAbs.x')
   void set x(num value) native "SVGPathSegMovetoAbs_x_Setter";
 
-
-  /** @domName SVGPathSegMovetoAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoAbs.y')
   num get y native "SVGPathSegMovetoAbs_y_Getter";
 
-
-  /** @domName SVGPathSegMovetoAbs.y */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoAbs.y')
   void set y(num value) native "SVGPathSegMovetoAbs_y_Setter";
 
 }
@@ -5767,24 +5938,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPathSegMovetoRel
+@DocsEditable
+@DomName('SVGPathSegMovetoRel')
 class PathSegMovetoRel extends PathSeg {
   PathSegMovetoRel.internal() : super.internal();
 
-
-  /** @domName SVGPathSegMovetoRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoRel.x')
   num get x native "SVGPathSegMovetoRel_x_Getter";
 
-
-  /** @domName SVGPathSegMovetoRel.x */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoRel.x')
   void set x(num value) native "SVGPathSegMovetoRel_x_Setter";
 
-
-  /** @domName SVGPathSegMovetoRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoRel.y')
   num get y native "SVGPathSegMovetoRel_y_Getter";
 
-
-  /** @domName SVGPathSegMovetoRel.y */
+  @DocsEditable
+  @DomName('SVGPathSegMovetoRel.y')
   void set y(num value) native "SVGPathSegMovetoRel_y_Setter";
 
 }
@@ -5795,99 +5967,100 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPatternElement
+@DocsEditable
+@DomName('SVGPatternElement')
 class PatternElement extends SvgElement implements FitToViewBox, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
   PatternElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory PatternElement() => _SvgElementFactoryProvider.createSvgElement_tag("pattern");
 
-
-  /** @domName SVGPatternElement.height */
+  @DocsEditable
+  @DomName('SVGPatternElement.height')
   AnimatedLength get height native "SVGPatternElement_height_Getter";
 
-
-  /** @domName SVGPatternElement.patternContentUnits */
+  @DocsEditable
+  @DomName('SVGPatternElement.patternContentUnits')
   AnimatedEnumeration get patternContentUnits native "SVGPatternElement_patternContentUnits_Getter";
 
-
-  /** @domName SVGPatternElement.patternTransform */
+  @DocsEditable
+  @DomName('SVGPatternElement.patternTransform')
   AnimatedTransformList get patternTransform native "SVGPatternElement_patternTransform_Getter";
 
-
-  /** @domName SVGPatternElement.patternUnits */
+  @DocsEditable
+  @DomName('SVGPatternElement.patternUnits')
   AnimatedEnumeration get patternUnits native "SVGPatternElement_patternUnits_Getter";
 
-
-  /** @domName SVGPatternElement.width */
+  @DocsEditable
+  @DomName('SVGPatternElement.width')
   AnimatedLength get width native "SVGPatternElement_width_Getter";
 
-
-  /** @domName SVGPatternElement.x */
+  @DocsEditable
+  @DomName('SVGPatternElement.x')
   AnimatedLength get x native "SVGPatternElement_x_Getter";
 
-
-  /** @domName SVGPatternElement.y */
+  @DocsEditable
+  @DomName('SVGPatternElement.y')
   AnimatedLength get y native "SVGPatternElement_y_Getter";
 
-
-  /** @domName SVGPatternElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGPatternElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGPatternElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGPatternElement.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGPatternElement.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGPatternElement_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGPatternElement.viewBox */
+  @DocsEditable
+  @DomName('SVGPatternElement.viewBox')
   AnimatedRect get viewBox native "SVGPatternElement_viewBox_Getter";
 
-
-  /** @domName SVGPatternElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPatternElement.xmllang')
   String get xmllang native "SVGPatternElement_xmllang_Getter";
 
-
-  /** @domName SVGPatternElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPatternElement.xmllang')
   void set xmllang(String value) native "SVGPatternElement_xmllang_Setter";
 
-
-  /** @domName SVGPatternElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPatternElement.xmlspace')
   String get xmlspace native "SVGPatternElement_xmlspace_Getter";
 
-
-  /** @domName SVGPatternElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPatternElement.xmlspace')
   void set xmlspace(String value) native "SVGPatternElement_xmlspace_Setter";
 
-
-  /** @domName SVGPatternElement.className */
+  @DocsEditable
+  @DomName('SVGPatternElement.className')
   AnimatedString get $dom_svgClassName native "SVGPatternElement_className_Getter";
 
-
-  /** @domName SVGPatternElement.style */
+  @DocsEditable
+  @DomName('SVGPatternElement.style')
   CssStyleDeclaration get style native "SVGPatternElement_style_Getter";
 
-
-  /** @domName SVGPatternElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGPatternElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGPatternElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGPatternElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGPatternElement.requiredExtensions')
   StringList get requiredExtensions native "SVGPatternElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGPatternElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGPatternElement.requiredFeatures')
   StringList get requiredFeatures native "SVGPatternElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGPatternElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGPatternElement.systemLanguage')
   StringList get systemLanguage native "SVGPatternElement_systemLanguage_Getter";
 
-
-  /** @domName SVGPatternElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGPatternElement.hasExtension')
   bool hasExtension(String extension) native "SVGPatternElement_hasExtension_Callback";
 
-
-  /** @domName SVGPatternElement.href */
+  @DocsEditable
+  @DomName('SVGPatternElement.href')
   AnimatedString get href native "SVGPatternElement_href_Getter";
 
 }
@@ -5898,28 +6071,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPoint
+@DocsEditable
+@DomName('SVGPoint')
 class Point extends NativeFieldWrapperClass1 {
   Point.internal();
 
-
-  /** @domName SVGPoint.x */
+  @DocsEditable
+  @DomName('SVGPoint.x')
   num get x native "SVGPoint_x_Getter";
 
-
-  /** @domName SVGPoint.x */
+  @DocsEditable
+  @DomName('SVGPoint.x')
   void set x(num value) native "SVGPoint_x_Setter";
 
-
-  /** @domName SVGPoint.y */
+  @DocsEditable
+  @DomName('SVGPoint.y')
   num get y native "SVGPoint_y_Getter";
 
-
-  /** @domName SVGPoint.y */
+  @DocsEditable
+  @DomName('SVGPoint.y')
   void set y(num value) native "SVGPoint_y_Setter";
 
-
-  /** @domName SVGPoint.matrixTransform */
+  @DocsEditable
+  @DomName('SVGPoint.matrixTransform')
   Point matrixTransform(Matrix matrix) native "SVGPoint_matrixTransform_Callback";
 
 }
@@ -5930,40 +6104,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPointList
+@DocsEditable
+@DomName('SVGPointList')
 class PointList extends NativeFieldWrapperClass1 {
   PointList.internal();
 
-
-  /** @domName SVGPointList.numberOfItems */
+  @DocsEditable
+  @DomName('SVGPointList.numberOfItems')
   int get numberOfItems native "SVGPointList_numberOfItems_Getter";
 
-
-  /** @domName SVGPointList.appendItem */
+  @DocsEditable
+  @DomName('SVGPointList.appendItem')
   Point appendItem(Point item) native "SVGPointList_appendItem_Callback";
 
-
-  /** @domName SVGPointList.clear */
+  @DocsEditable
+  @DomName('SVGPointList.clear')
   void clear() native "SVGPointList_clear_Callback";
 
-
-  /** @domName SVGPointList.getItem */
+  @DocsEditable
+  @DomName('SVGPointList.getItem')
   Point getItem(int index) native "SVGPointList_getItem_Callback";
 
-
-  /** @domName SVGPointList.initialize */
+  @DocsEditable
+  @DomName('SVGPointList.initialize')
   Point initialize(Point item) native "SVGPointList_initialize_Callback";
 
-
-  /** @domName SVGPointList.insertItemBefore */
+  @DocsEditable
+  @DomName('SVGPointList.insertItemBefore')
   Point insertItemBefore(Point item, int index) native "SVGPointList_insertItemBefore_Callback";
 
-
-  /** @domName SVGPointList.removeItem */
+  @DocsEditable
+  @DomName('SVGPointList.removeItem')
   Point removeItem(int index) native "SVGPointList_removeItem_Callback";
 
-
-  /** @domName SVGPointList.replaceItem */
+  @DocsEditable
+  @DomName('SVGPointList.replaceItem')
   Point replaceItem(Point item, int index) native "SVGPointList_replaceItem_Callback";
 
 }
@@ -5974,95 +6149,96 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPolygonElement
+@DocsEditable
+@DomName('SVGPolygonElement')
 class PolygonElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   PolygonElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory PolygonElement() => _SvgElementFactoryProvider.createSvgElement_tag("polygon");
 
-
-  /** @domName SVGPolygonElement.animatedPoints */
+  @DocsEditable
+  @DomName('SVGPolygonElement.animatedPoints')
   PointList get animatedPoints native "SVGPolygonElement_animatedPoints_Getter";
 
-
-  /** @domName SVGPolygonElement.points */
+  @DocsEditable
+  @DomName('SVGPolygonElement.points')
   PointList get points native "SVGPolygonElement_points_Getter";
 
-
-  /** @domName SVGPolygonElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGPolygonElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGPolygonElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGPolygonElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPolygonElement.xmllang')
   String get xmllang native "SVGPolygonElement_xmllang_Getter";
 
-
-  /** @domName SVGPolygonElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPolygonElement.xmllang')
   void set xmllang(String value) native "SVGPolygonElement_xmllang_Setter";
 
-
-  /** @domName SVGPolygonElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPolygonElement.xmlspace')
   String get xmlspace native "SVGPolygonElement_xmlspace_Getter";
 
-
-  /** @domName SVGPolygonElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPolygonElement.xmlspace')
   void set xmlspace(String value) native "SVGPolygonElement_xmlspace_Setter";
 
-
-  /** @domName SVGPolygonElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGPolygonElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGPolygonElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGPolygonElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGPolygonElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGPolygonElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGPolygonElement.getBBox */
+  @DocsEditable
+  @DomName('SVGPolygonElement.getBBox')
   Rect getBBox() native "SVGPolygonElement_getBBox_Callback";
 
-
-  /** @domName SVGPolygonElement.getCTM */
+  @DocsEditable
+  @DomName('SVGPolygonElement.getCTM')
   Matrix getCtm() native "SVGPolygonElement_getCTM_Callback";
 
-
-  /** @domName SVGPolygonElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGPolygonElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGPolygonElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGPolygonElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGPolygonElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGPolygonElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGPolygonElement.className */
+  @DocsEditable
+  @DomName('SVGPolygonElement.className')
   AnimatedString get $dom_svgClassName native "SVGPolygonElement_className_Getter";
 
-
-  /** @domName SVGPolygonElement.style */
+  @DocsEditable
+  @DomName('SVGPolygonElement.style')
   CssStyleDeclaration get style native "SVGPolygonElement_style_Getter";
 
-
-  /** @domName SVGPolygonElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGPolygonElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGPolygonElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGPolygonElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGPolygonElement.requiredExtensions')
   StringList get requiredExtensions native "SVGPolygonElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGPolygonElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGPolygonElement.requiredFeatures')
   StringList get requiredFeatures native "SVGPolygonElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGPolygonElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGPolygonElement.systemLanguage')
   StringList get systemLanguage native "SVGPolygonElement_systemLanguage_Getter";
 
-
-  /** @domName SVGPolygonElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGPolygonElement.hasExtension')
   bool hasExtension(String extension) native "SVGPolygonElement_hasExtension_Callback";
 
-
-  /** @domName SVGPolygonElement.transform */
+  @DocsEditable
+  @DomName('SVGPolygonElement.transform')
   AnimatedTransformList get transform native "SVGPolygonElement_transform_Getter";
 
 }
@@ -6073,95 +6249,96 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPolylineElement
+@DocsEditable
+@DomName('SVGPolylineElement')
 class PolylineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   PolylineElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory PolylineElement() => _SvgElementFactoryProvider.createSvgElement_tag("polyline");
 
-
-  /** @domName SVGPolylineElement.animatedPoints */
+  @DocsEditable
+  @DomName('SVGPolylineElement.animatedPoints')
   PointList get animatedPoints native "SVGPolylineElement_animatedPoints_Getter";
 
-
-  /** @domName SVGPolylineElement.points */
+  @DocsEditable
+  @DomName('SVGPolylineElement.points')
   PointList get points native "SVGPolylineElement_points_Getter";
 
-
-  /** @domName SVGPolylineElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGPolylineElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGPolylineElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGPolylineElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPolylineElement.xmllang')
   String get xmllang native "SVGPolylineElement_xmllang_Getter";
 
-
-  /** @domName SVGPolylineElement.xmllang */
+  @DocsEditable
+  @DomName('SVGPolylineElement.xmllang')
   void set xmllang(String value) native "SVGPolylineElement_xmllang_Setter";
 
-
-  /** @domName SVGPolylineElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPolylineElement.xmlspace')
   String get xmlspace native "SVGPolylineElement_xmlspace_Getter";
 
-
-  /** @domName SVGPolylineElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGPolylineElement.xmlspace')
   void set xmlspace(String value) native "SVGPolylineElement_xmlspace_Setter";
 
-
-  /** @domName SVGPolylineElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGPolylineElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGPolylineElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGPolylineElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGPolylineElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGPolylineElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGPolylineElement.getBBox */
+  @DocsEditable
+  @DomName('SVGPolylineElement.getBBox')
   Rect getBBox() native "SVGPolylineElement_getBBox_Callback";
 
-
-  /** @domName SVGPolylineElement.getCTM */
+  @DocsEditable
+  @DomName('SVGPolylineElement.getCTM')
   Matrix getCtm() native "SVGPolylineElement_getCTM_Callback";
 
-
-  /** @domName SVGPolylineElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGPolylineElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGPolylineElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGPolylineElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGPolylineElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGPolylineElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGPolylineElement.className */
+  @DocsEditable
+  @DomName('SVGPolylineElement.className')
   AnimatedString get $dom_svgClassName native "SVGPolylineElement_className_Getter";
 
-
-  /** @domName SVGPolylineElement.style */
+  @DocsEditable
+  @DomName('SVGPolylineElement.style')
   CssStyleDeclaration get style native "SVGPolylineElement_style_Getter";
 
-
-  /** @domName SVGPolylineElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGPolylineElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGPolylineElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGPolylineElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGPolylineElement.requiredExtensions')
   StringList get requiredExtensions native "SVGPolylineElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGPolylineElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGPolylineElement.requiredFeatures')
   StringList get requiredFeatures native "SVGPolylineElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGPolylineElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGPolylineElement.systemLanguage')
   StringList get systemLanguage native "SVGPolylineElement_systemLanguage_Getter";
 
-
-  /** @domName SVGPolylineElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGPolylineElement.hasExtension')
   bool hasExtension(String extension) native "SVGPolylineElement_hasExtension_Callback";
 
-
-  /** @domName SVGPolylineElement.transform */
+  @DocsEditable
+  @DomName('SVGPolylineElement.transform')
   AnimatedTransformList get transform native "SVGPolylineElement_transform_Getter";
 
 }
@@ -6172,7 +6349,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPreserveAspectRatio
+@DocsEditable
+@DomName('SVGPreserveAspectRatio')
 class PreserveAspectRatio extends NativeFieldWrapperClass1 {
   PreserveAspectRatio.internal();
 
@@ -6204,20 +6382,20 @@
 
   static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
 
-
-  /** @domName SVGPreserveAspectRatio.align */
+  @DocsEditable
+  @DomName('SVGPreserveAspectRatio.align')
   int get align native "SVGPreserveAspectRatio_align_Getter";
 
-
-  /** @domName SVGPreserveAspectRatio.align */
+  @DocsEditable
+  @DomName('SVGPreserveAspectRatio.align')
   void set align(int value) native "SVGPreserveAspectRatio_align_Setter";
 
-
-  /** @domName SVGPreserveAspectRatio.meetOrSlice */
+  @DocsEditable
+  @DomName('SVGPreserveAspectRatio.meetOrSlice')
   int get meetOrSlice native "SVGPreserveAspectRatio_meetOrSlice_Getter";
 
-
-  /** @domName SVGPreserveAspectRatio.meetOrSlice */
+  @DocsEditable
+  @DomName('SVGPreserveAspectRatio.meetOrSlice')
   void set meetOrSlice(int value) native "SVGPreserveAspectRatio_meetOrSlice_Setter";
 
 }
@@ -6228,35 +6406,36 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGRadialGradientElement
+@DocsEditable
+@DomName('SVGRadialGradientElement')
 class RadialGradientElement extends GradientElement {
   RadialGradientElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory RadialGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("radialGradient");
 
-
-  /** @domName SVGRadialGradientElement.cx */
+  @DocsEditable
+  @DomName('SVGRadialGradientElement.cx')
   AnimatedLength get cx native "SVGRadialGradientElement_cx_Getter";
 
-
-  /** @domName SVGRadialGradientElement.cy */
+  @DocsEditable
+  @DomName('SVGRadialGradientElement.cy')
   AnimatedLength get cy native "SVGRadialGradientElement_cy_Getter";
 
-
-  /** @domName SVGRadialGradientElement.fr */
+  @DocsEditable
+  @DomName('SVGRadialGradientElement.fr')
   AnimatedLength get fr native "SVGRadialGradientElement_fr_Getter";
 
-
-  /** @domName SVGRadialGradientElement.fx */
+  @DocsEditable
+  @DomName('SVGRadialGradientElement.fx')
   AnimatedLength get fx native "SVGRadialGradientElement_fx_Getter";
 
-
-  /** @domName SVGRadialGradientElement.fy */
+  @DocsEditable
+  @DomName('SVGRadialGradientElement.fy')
   AnimatedLength get fy native "SVGRadialGradientElement_fy_Getter";
 
-
-  /** @domName SVGRadialGradientElement.r */
+  @DocsEditable
+  @DomName('SVGRadialGradientElement.r')
   AnimatedLength get r native "SVGRadialGradientElement_r_Getter";
 
 }
@@ -6267,40 +6446,41 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGRect
+@DocsEditable
+@DomName('SVGRect')
 class Rect extends NativeFieldWrapperClass1 {
   Rect.internal();
 
-
-  /** @domName SVGRect.height */
+  @DocsEditable
+  @DomName('SVGRect.height')
   num get height native "SVGRect_height_Getter";
 
-
-  /** @domName SVGRect.height */
+  @DocsEditable
+  @DomName('SVGRect.height')
   void set height(num value) native "SVGRect_height_Setter";
 
-
-  /** @domName SVGRect.width */
+  @DocsEditable
+  @DomName('SVGRect.width')
   num get width native "SVGRect_width_Getter";
 
-
-  /** @domName SVGRect.width */
+  @DocsEditable
+  @DomName('SVGRect.width')
   void set width(num value) native "SVGRect_width_Setter";
 
-
-  /** @domName SVGRect.x */
+  @DocsEditable
+  @DomName('SVGRect.x')
   num get x native "SVGRect_x_Getter";
 
-
-  /** @domName SVGRect.x */
+  @DocsEditable
+  @DomName('SVGRect.x')
   void set x(num value) native "SVGRect_x_Setter";
 
-
-  /** @domName SVGRect.y */
+  @DocsEditable
+  @DomName('SVGRect.y')
   num get y native "SVGRect_y_Getter";
 
-
-  /** @domName SVGRect.y */
+  @DocsEditable
+  @DomName('SVGRect.y')
   void set y(num value) native "SVGRect_y_Setter";
 
 }
@@ -6311,111 +6491,112 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGRectElement
+@DocsEditable
+@DomName('SVGRectElement')
 class RectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   RectElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory RectElement() => _SvgElementFactoryProvider.createSvgElement_tag("rect");
 
-
-  /** @domName SVGRectElement.height */
+  @DocsEditable
+  @DomName('SVGRectElement.height')
   AnimatedLength get height native "SVGRectElement_height_Getter";
 
-
-  /** @domName SVGRectElement.rx */
+  @DocsEditable
+  @DomName('SVGRectElement.rx')
   AnimatedLength get rx native "SVGRectElement_rx_Getter";
 
-
-  /** @domName SVGRectElement.ry */
+  @DocsEditable
+  @DomName('SVGRectElement.ry')
   AnimatedLength get ry native "SVGRectElement_ry_Getter";
 
-
-  /** @domName SVGRectElement.width */
+  @DocsEditable
+  @DomName('SVGRectElement.width')
   AnimatedLength get width native "SVGRectElement_width_Getter";
 
-
-  /** @domName SVGRectElement.x */
+  @DocsEditable
+  @DomName('SVGRectElement.x')
   AnimatedLength get x native "SVGRectElement_x_Getter";
 
-
-  /** @domName SVGRectElement.y */
+  @DocsEditable
+  @DomName('SVGRectElement.y')
   AnimatedLength get y native "SVGRectElement_y_Getter";
 
-
-  /** @domName SVGRectElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGRectElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGRectElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGRectElement.xmllang */
+  @DocsEditable
+  @DomName('SVGRectElement.xmllang')
   String get xmllang native "SVGRectElement_xmllang_Getter";
 
-
-  /** @domName SVGRectElement.xmllang */
+  @DocsEditable
+  @DomName('SVGRectElement.xmllang')
   void set xmllang(String value) native "SVGRectElement_xmllang_Setter";
 
-
-  /** @domName SVGRectElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGRectElement.xmlspace')
   String get xmlspace native "SVGRectElement_xmlspace_Getter";
 
-
-  /** @domName SVGRectElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGRectElement.xmlspace')
   void set xmlspace(String value) native "SVGRectElement_xmlspace_Setter";
 
-
-  /** @domName SVGRectElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGRectElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGRectElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGRectElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGRectElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGRectElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGRectElement.getBBox */
+  @DocsEditable
+  @DomName('SVGRectElement.getBBox')
   Rect getBBox() native "SVGRectElement_getBBox_Callback";
 
-
-  /** @domName SVGRectElement.getCTM */
+  @DocsEditable
+  @DomName('SVGRectElement.getCTM')
   Matrix getCtm() native "SVGRectElement_getCTM_Callback";
 
-
-  /** @domName SVGRectElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGRectElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGRectElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGRectElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGRectElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGRectElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGRectElement.className */
+  @DocsEditable
+  @DomName('SVGRectElement.className')
   AnimatedString get $dom_svgClassName native "SVGRectElement_className_Getter";
 
-
-  /** @domName SVGRectElement.style */
+  @DocsEditable
+  @DomName('SVGRectElement.style')
   CssStyleDeclaration get style native "SVGRectElement_style_Getter";
 
-
-  /** @domName SVGRectElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGRectElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGRectElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGRectElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGRectElement.requiredExtensions')
   StringList get requiredExtensions native "SVGRectElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGRectElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGRectElement.requiredFeatures')
   StringList get requiredFeatures native "SVGRectElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGRectElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGRectElement.systemLanguage')
   StringList get systemLanguage native "SVGRectElement_systemLanguage_Getter";
 
-
-  /** @domName SVGRectElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGRectElement.hasExtension')
   bool hasExtension(String extension) native "SVGRectElement_hasExtension_Callback";
 
-
-  /** @domName SVGRectElement.transform */
+  @DocsEditable
+  @DomName('SVGRectElement.transform')
   AnimatedTransformList get transform native "SVGRectElement_transform_Getter";
 
 }
@@ -6426,7 +6607,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGRenderingIntent
+@DocsEditable
+@DomName('SVGRenderingIntent')
 class RenderingIntent extends NativeFieldWrapperClass1 {
   RenderingIntent.internal();
 
@@ -6450,27 +6632,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGScriptElement
+@DocsEditable
+@DomName('SVGScriptElement')
 class ScriptElement extends SvgElement implements UriReference, ExternalResourcesRequired {
   ScriptElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ScriptElement() => _SvgElementFactoryProvider.createSvgElement_tag("script");
 
-
-  /** @domName SVGScriptElement.type */
+  @DocsEditable
+  @DomName('SVGScriptElement.type')
   String get type native "SVGScriptElement_type_Getter";
 
-
-  /** @domName SVGScriptElement.type */
+  @DocsEditable
+  @DomName('SVGScriptElement.type')
   void set type(String value) native "SVGScriptElement_type_Setter";
 
-
-  /** @domName SVGScriptElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGScriptElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGScriptElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGScriptElement.href */
+  @DocsEditable
+  @DomName('SVGScriptElement.href')
   AnimatedString get href native "SVGScriptElement_href_Getter";
 
 }
@@ -6481,11 +6664,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGSetElement
+@DocsEditable
+@DomName('SVGSetElement')
 class SetElement extends AnimationElement {
   SetElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SetElement() => _SvgElementFactoryProvider.createSvgElement_tag("set");
 
 }
@@ -6496,27 +6680,28 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGStopElement
+@DocsEditable
+@DomName('SVGStopElement')
 class StopElement extends SvgElement implements Stylable {
   StopElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory StopElement() => _SvgElementFactoryProvider.createSvgElement_tag("stop");
 
-
-  /** @domName SVGStopElement.offset */
+  @DocsEditable
+  @DomName('SVGStopElement.offset')
   AnimatedNumber get offset native "SVGStopElement_offset_Getter";
 
-
-  /** @domName SVGStopElement.className */
+  @DocsEditable
+  @DomName('SVGStopElement.className')
   AnimatedString get $dom_svgClassName native "SVGStopElement_className_Getter";
 
-
-  /** @domName SVGStopElement.style */
+  @DocsEditable
+  @DomName('SVGStopElement.style')
   CssStyleDeclaration get style native "SVGStopElement_style_Getter";
 
-
-  /** @domName SVGStopElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGStopElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGStopElement_getPresentationAttribute_Callback";
 
 }
@@ -6527,12 +6712,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGStringList
+@DocsEditable
+@DomName('SVGStringList')
 class StringList extends NativeFieldWrapperClass1 implements List<String> {
   StringList.internal();
 
-
-  /** @domName SVGStringList.numberOfItems */
+  @DocsEditable
+  @DomName('SVGStringList.numberOfItems')
   int get numberOfItems native "SVGStringList_numberOfItems_Getter";
 
   String operator[](int index) native "SVGStringList_item_Callback";
@@ -6555,50 +6741,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, String)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(String element) => Collections.contains(this, element);
+  bool contains(String element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(String element)) => Collections.forEach(this, f);
+  void forEach(void f(String element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(String element)) => new MappedList<String, dynamic>(this, f);
+  List mappedBy(f(String element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<String> where(bool f(String element)) => new WhereIterable<String>(this, f);
+  Iterable<String> where(bool f(String element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(String element)) => Collections.every(this, f);
+  bool every(bool f(String element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(String element)) => Collections.any(this, f);
+  bool any(bool f(String element)) => IterableMixinWorkaround.any(this, f);
 
   List<String> toList() => new List<String>.from(this);
   Set<String> toSet() => new Set<String>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<String> take(int n) => new ListView<String>(this, 0, n);
+  List<String> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<String> takeWhile(bool test(String value)) {
-    return new TakeWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<String> skip(int n) => new ListView<String>(this, n, null);
+  List<String> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<String> skipWhile(bool test(String value)) {
-    return new SkipWhileIterable<String>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   String firstMatching(bool test(String value), { String orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   String lastMatching(bool test(String value), {String orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   String singleMatching(bool test(String value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   String elementAt(int index) {
@@ -6624,7 +6810,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(String a, String b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -6654,16 +6840,36 @@
     throw new StateError("More than one element");
   }
 
-  String min([int compare(String a, String b)]) => Collections.min(this, compare);
+  String min([int compare(String a, String b)]) => IterableMixinWorkaround.min(this, compare);
 
-  String max([int compare(String a, String b)]) => Collections.max(this, compare);
+  String max([int compare(String a, String b)]) => IterableMixinWorkaround.max(this, compare);
 
   String removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   String removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(String element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
@@ -6683,32 +6889,32 @@
 
   // -- end List<String> mixins.
 
-
-  /** @domName SVGStringList.appendItem */
+  @DocsEditable
+  @DomName('SVGStringList.appendItem')
   String appendItem(String item) native "SVGStringList_appendItem_Callback";
 
-
-  /** @domName SVGStringList.clear */
+  @DocsEditable
+  @DomName('SVGStringList.clear')
   void clear() native "SVGStringList_clear_Callback";
 
-
-  /** @domName SVGStringList.getItem */
+  @DocsEditable
+  @DomName('SVGStringList.getItem')
   String getItem(int index) native "SVGStringList_getItem_Callback";
 
-
-  /** @domName SVGStringList.initialize */
+  @DocsEditable
+  @DomName('SVGStringList.initialize')
   String initialize(String item) native "SVGStringList_initialize_Callback";
 
-
-  /** @domName SVGStringList.insertItemBefore */
+  @DocsEditable
+  @DomName('SVGStringList.insertItemBefore')
   String insertItemBefore(String item, int index) native "SVGStringList_insertItemBefore_Callback";
 
-
-  /** @domName SVGStringList.removeItem */
+  @DocsEditable
+  @DomName('SVGStringList.removeItem')
   String removeItem(int index) native "SVGStringList_removeItem_Callback";
 
-
-  /** @domName SVGStringList.replaceItem */
+  @DocsEditable
+  @DomName('SVGStringList.replaceItem')
   String replaceItem(String item, int index) native "SVGStringList_replaceItem_Callback";
 
 }
@@ -6719,20 +6925,21 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGStylable
+@DocsEditable
+@DomName('SVGStylable')
 class Stylable extends NativeFieldWrapperClass1 {
   Stylable.internal();
 
-
-  /** @domName SVGStylable.className */
+  @DocsEditable
+  @DomName('SVGStylable.className')
   AnimatedString get $dom_svgClassName native "SVGStylable_className_Getter";
 
-
-  /** @domName SVGStylable.style */
+  @DocsEditable
+  @DomName('SVGStylable.style')
   CssStyleDeclaration get style native "SVGStylable_style_Getter";
 
-
-  /** @domName SVGStylable.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGStylable.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGStylable_getPresentationAttribute_Callback";
 
 }
@@ -6743,59 +6950,60 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGStyleElement
+@DocsEditable
+@DomName('SVGStyleElement')
 class StyleElement extends SvgElement implements LangSpace {
   StyleElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory StyleElement() => _SvgElementFactoryProvider.createSvgElement_tag("style");
 
-
-  /** @domName SVGStyleElement.disabled */
+  @DocsEditable
+  @DomName('SVGStyleElement.disabled')
   bool get disabled native "SVGStyleElement_disabled_Getter";
 
-
-  /** @domName SVGStyleElement.disabled */
+  @DocsEditable
+  @DomName('SVGStyleElement.disabled')
   void set disabled(bool value) native "SVGStyleElement_disabled_Setter";
 
-
-  /** @domName SVGStyleElement.media */
+  @DocsEditable
+  @DomName('SVGStyleElement.media')
   String get media native "SVGStyleElement_media_Getter";
 
-
-  /** @domName SVGStyleElement.media */
+  @DocsEditable
+  @DomName('SVGStyleElement.media')
   void set media(String value) native "SVGStyleElement_media_Setter";
 
-
-  /** @domName SVGStyleElement.title */
+  @DocsEditable
+  @DomName('SVGStyleElement.title')
   String get title native "SVGStyleElement_title_Getter";
 
-
-  /** @domName SVGStyleElement.title */
+  @DocsEditable
+  @DomName('SVGStyleElement.title')
   void set title(String value) native "SVGStyleElement_title_Setter";
 
-
-  /** @domName SVGStyleElement.type */
+  @DocsEditable
+  @DomName('SVGStyleElement.type')
   String get type native "SVGStyleElement_type_Getter";
 
-
-  /** @domName SVGStyleElement.type */
+  @DocsEditable
+  @DomName('SVGStyleElement.type')
   void set type(String value) native "SVGStyleElement_type_Setter";
 
-
-  /** @domName SVGStyleElement.xmllang */
+  @DocsEditable
+  @DomName('SVGStyleElement.xmllang')
   String get xmllang native "SVGStyleElement_xmllang_Getter";
 
-
-  /** @domName SVGStyleElement.xmllang */
+  @DocsEditable
+  @DomName('SVGStyleElement.xmllang')
   void set xmllang(String value) native "SVGStyleElement_xmllang_Setter";
 
-
-  /** @domName SVGStyleElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGStyleElement.xmlspace')
   String get xmlspace native "SVGStyleElement_xmlspace_Getter";
 
-
-  /** @domName SVGStyleElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGStyleElement.xmlspace')
   void set xmlspace(String value) native "SVGStyleElement_xmlspace_Setter";
 
 }
@@ -6806,16 +7014,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGDocument
+@DocsEditable
+@DomName('SVGDocument')
 class SvgDocument extends Document {
   SvgDocument.internal() : super.internal();
 
-
-  /** @domName SVGDocument.rootElement */
+  @DocsEditable
+  @DomName('SVGDocument.rootElement')
   SvgSvgElement get rootElement native "SVGDocument_rootElement_Getter";
 
-
-  /** @domName SVGDocument.createEvent */
+  @DocsEditable
+  @DomName('SVGDocument.createEvent')
   Event $dom_createEvent(String eventType) native "SVGDocument_createEvent_Callback";
 
 }
@@ -6851,7 +7060,8 @@
   }
 }
 
-/// @domName SVGElement
+@DocsEditable
+@DomName('SVGElement')
 class SvgElement extends Element {
   factory SvgElement.tag(String tag) =>
       _SvgElementFactoryProvider.createSvgElement_tag(tag);
@@ -6908,17 +7118,17 @@
 
   // Unsupported methods inherited from Element.
 
-  /** @domName Element.insertAdjacentText */
+  @DomName('Element.insertAdjacentText')
   void insertAdjacentText(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentText on SVG.");
   }
 
-  /** @domName Element.insertAdjacentHTML */
+  @DomName('Element.insertAdjacentHTML')
   void insertAdjacentHtml(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentHtml on SVG.");
   }
 
-  /** @domName Element.insertAdjacentHTML */
+  @DomName('Element.insertAdjacentHTML')
   Element insertAdjacentElement(String where, Element element) {
     throw new UnsupportedError("Cannot invoke insertAdjacentElement on SVG.");
   }
@@ -6934,28 +7144,28 @@
 
   SvgElement.internal() : super.internal();
 
-
-  /** @domName SVGElement.id */
+  @DocsEditable
+  @DomName('SVGElement.id')
   String get id native "SVGElement_id_Getter";
 
-
-  /** @domName SVGElement.id */
+  @DocsEditable
+  @DomName('SVGElement.id')
   void set id(String value) native "SVGElement_id_Setter";
 
-
-  /** @domName SVGElement.ownerSVGElement */
+  @DocsEditable
+  @DomName('SVGElement.ownerSVGElement')
   SvgSvgElement get ownerSvgElement native "SVGElement_ownerSVGElement_Getter";
 
-
-  /** @domName SVGElement.viewportElement */
+  @DocsEditable
+  @DomName('SVGElement.viewportElement')
   SvgElement get viewportElement native "SVGElement_viewportElement_Getter";
 
-
-  /** @domName SVGElement.xmlbase */
+  @DocsEditable
+  @DomName('SVGElement.xmlbase')
   String get xmlbase native "SVGElement_xmlbase_Getter";
 
-
-  /** @domName SVGElement.xmlbase */
+  @DocsEditable
+  @DomName('SVGElement.xmlbase')
   void set xmlbase(String value) native "SVGElement_xmlbase_Setter";
 
 }
@@ -6966,7 +7176,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGException
+@DocsEditable
+@DomName('SVGException')
 class SvgException extends NativeFieldWrapperClass1 {
   SvgException.internal();
 
@@ -6976,20 +7187,20 @@
 
   static const int SVG_WRONG_TYPE_ERR = 0;
 
-
-  /** @domName SVGException.code */
+  @DocsEditable
+  @DomName('SVGException.code')
   int get code native "SVGException_code_Getter";
 
-
-  /** @domName SVGException.message */
+  @DocsEditable
+  @DomName('SVGException.message')
   String get message native "SVGException_message_Getter";
 
-
-  /** @domName SVGException.name */
+  @DocsEditable
+  @DomName('SVGException.name')
   String get name native "SVGException_name_Getter";
 
-
-  /** @domName SVGException.toString */
+  @DocsEditable
+  @DomName('SVGException.toString')
   String toString() native "SVGException_toString_Callback";
 
 }
@@ -6998,262 +7209,263 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGSVGElement
+@DocsEditable
+@DomName('SVGSVGElement')
 class SvgSvgElement extends SvgElement implements FitToViewBox, Tests, Stylable, Locatable, ExternalResourcesRequired, ZoomAndPan, LangSpace {
   factory SvgSvgElement() => _SvgSvgElementFactoryProvider.createSvgSvgElement();
 
   SvgSvgElement.internal() : super.internal();
 
-
-  /** @domName SVGSVGElement.contentScriptType */
+  @DocsEditable
+  @DomName('SVGSVGElement.contentScriptType')
   String get contentScriptType native "SVGSVGElement_contentScriptType_Getter";
 
-
-  /** @domName SVGSVGElement.contentScriptType */
+  @DocsEditable
+  @DomName('SVGSVGElement.contentScriptType')
   void set contentScriptType(String value) native "SVGSVGElement_contentScriptType_Setter";
 
-
-  /** @domName SVGSVGElement.contentStyleType */
+  @DocsEditable
+  @DomName('SVGSVGElement.contentStyleType')
   String get contentStyleType native "SVGSVGElement_contentStyleType_Getter";
 
-
-  /** @domName SVGSVGElement.contentStyleType */
+  @DocsEditable
+  @DomName('SVGSVGElement.contentStyleType')
   void set contentStyleType(String value) native "SVGSVGElement_contentStyleType_Setter";
 
-
-  /** @domName SVGSVGElement.currentScale */
+  @DocsEditable
+  @DomName('SVGSVGElement.currentScale')
   num get currentScale native "SVGSVGElement_currentScale_Getter";
 
-
-  /** @domName SVGSVGElement.currentScale */
+  @DocsEditable
+  @DomName('SVGSVGElement.currentScale')
   void set currentScale(num value) native "SVGSVGElement_currentScale_Setter";
 
-
-  /** @domName SVGSVGElement.currentTranslate */
+  @DocsEditable
+  @DomName('SVGSVGElement.currentTranslate')
   Point get currentTranslate native "SVGSVGElement_currentTranslate_Getter";
 
-
-  /** @domName SVGSVGElement.currentView */
+  @DocsEditable
+  @DomName('SVGSVGElement.currentView')
   ViewSpec get currentView native "SVGSVGElement_currentView_Getter";
 
-
-  /** @domName SVGSVGElement.height */
+  @DocsEditable
+  @DomName('SVGSVGElement.height')
   AnimatedLength get height native "SVGSVGElement_height_Getter";
 
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
+  @DocsEditable
+  @DomName('SVGSVGElement.pixelUnitToMillimeterX')
   num get pixelUnitToMillimeterX native "SVGSVGElement_pixelUnitToMillimeterX_Getter";
 
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
+  @DocsEditable
+  @DomName('SVGSVGElement.pixelUnitToMillimeterY')
   num get pixelUnitToMillimeterY native "SVGSVGElement_pixelUnitToMillimeterY_Getter";
 
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterX */
+  @DocsEditable
+  @DomName('SVGSVGElement.screenPixelToMillimeterX')
   num get screenPixelToMillimeterX native "SVGSVGElement_screenPixelToMillimeterX_Getter";
 
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterY */
+  @DocsEditable
+  @DomName('SVGSVGElement.screenPixelToMillimeterY')
   num get screenPixelToMillimeterY native "SVGSVGElement_screenPixelToMillimeterY_Getter";
 
-
-  /** @domName SVGSVGElement.useCurrentView */
+  @DocsEditable
+  @DomName('SVGSVGElement.useCurrentView')
   bool get useCurrentView native "SVGSVGElement_useCurrentView_Getter";
 
-
-  /** @domName SVGSVGElement.viewport */
+  @DocsEditable
+  @DomName('SVGSVGElement.viewport')
   Rect get viewport native "SVGSVGElement_viewport_Getter";
 
-
-  /** @domName SVGSVGElement.width */
+  @DocsEditable
+  @DomName('SVGSVGElement.width')
   AnimatedLength get width native "SVGSVGElement_width_Getter";
 
-
-  /** @domName SVGSVGElement.x */
+  @DocsEditable
+  @DomName('SVGSVGElement.x')
   AnimatedLength get x native "SVGSVGElement_x_Getter";
 
-
-  /** @domName SVGSVGElement.y */
+  @DocsEditable
+  @DomName('SVGSVGElement.y')
   AnimatedLength get y native "SVGSVGElement_y_Getter";
 
-
-  /** @domName SVGSVGElement.animationsPaused */
+  @DocsEditable
+  @DomName('SVGSVGElement.animationsPaused')
   bool animationsPaused() native "SVGSVGElement_animationsPaused_Callback";
 
-
-  /** @domName SVGSVGElement.checkEnclosure */
+  @DocsEditable
+  @DomName('SVGSVGElement.checkEnclosure')
   bool checkEnclosure(SvgElement element, Rect rect) native "SVGSVGElement_checkEnclosure_Callback";
 
-
-  /** @domName SVGSVGElement.checkIntersection */
+  @DocsEditable
+  @DomName('SVGSVGElement.checkIntersection')
   bool checkIntersection(SvgElement element, Rect rect) native "SVGSVGElement_checkIntersection_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGAngle */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGAngle')
   Angle createSvgAngle() native "SVGSVGElement_createSVGAngle_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGLength */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGLength')
   Length createSvgLength() native "SVGSVGElement_createSVGLength_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGMatrix */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGMatrix')
   Matrix createSvgMatrix() native "SVGSVGElement_createSVGMatrix_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGNumber */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGNumber')
   Number createSvgNumber() native "SVGSVGElement_createSVGNumber_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGPoint */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGPoint')
   Point createSvgPoint() native "SVGSVGElement_createSVGPoint_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGRect */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGRect')
   Rect createSvgRect() native "SVGSVGElement_createSVGRect_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGTransform */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGTransform')
   Transform createSvgTransform() native "SVGSVGElement_createSVGTransform_Callback";
 
-
-  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
+  @DocsEditable
+  @DomName('SVGSVGElement.createSVGTransformFromMatrix')
   Transform createSvgTransformFromMatrix(Matrix matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
 
-
-  /** @domName SVGSVGElement.deselectAll */
+  @DocsEditable
+  @DomName('SVGSVGElement.deselectAll')
   void deselectAll() native "SVGSVGElement_deselectAll_Callback";
 
-
-  /** @domName SVGSVGElement.forceRedraw */
+  @DocsEditable
+  @DomName('SVGSVGElement.forceRedraw')
   void forceRedraw() native "SVGSVGElement_forceRedraw_Callback";
 
-
-  /** @domName SVGSVGElement.getCurrentTime */
+  @DocsEditable
+  @DomName('SVGSVGElement.getCurrentTime')
   num getCurrentTime() native "SVGSVGElement_getCurrentTime_Callback";
 
-
-  /** @domName SVGSVGElement.getElementById */
+  @DocsEditable
+  @DomName('SVGSVGElement.getElementById')
   Element getElementById(String elementId) native "SVGSVGElement_getElementById_Callback";
 
-
-  /** @domName SVGSVGElement.getEnclosureList */
+  @DocsEditable
+  @DomName('SVGSVGElement.getEnclosureList')
   List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) native "SVGSVGElement_getEnclosureList_Callback";
 
-
-  /** @domName SVGSVGElement.getIntersectionList */
+  @DocsEditable
+  @DomName('SVGSVGElement.getIntersectionList')
   List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) native "SVGSVGElement_getIntersectionList_Callback";
 
-
-  /** @domName SVGSVGElement.pauseAnimations */
+  @DocsEditable
+  @DomName('SVGSVGElement.pauseAnimations')
   void pauseAnimations() native "SVGSVGElement_pauseAnimations_Callback";
 
-
-  /** @domName SVGSVGElement.setCurrentTime */
+  @DocsEditable
+  @DomName('SVGSVGElement.setCurrentTime')
   void setCurrentTime(num seconds) native "SVGSVGElement_setCurrentTime_Callback";
 
-
-  /** @domName SVGSVGElement.suspendRedraw */
+  @DocsEditable
+  @DomName('SVGSVGElement.suspendRedraw')
   int suspendRedraw(int maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback";
 
-
-  /** @domName SVGSVGElement.unpauseAnimations */
+  @DocsEditable
+  @DomName('SVGSVGElement.unpauseAnimations')
   void unpauseAnimations() native "SVGSVGElement_unpauseAnimations_Callback";
 
-
-  /** @domName SVGSVGElement.unsuspendRedraw */
+  @DocsEditable
+  @DomName('SVGSVGElement.unsuspendRedraw')
   void unsuspendRedraw(int suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback";
 
-
-  /** @domName SVGSVGElement.unsuspendRedrawAll */
+  @DocsEditable
+  @DomName('SVGSVGElement.unsuspendRedrawAll')
   void unsuspendRedrawAll() native "SVGSVGElement_unsuspendRedrawAll_Callback";
 
-
-  /** @domName SVGSVGElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGSVGElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGSVGElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGSVGElement.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGSVGElement.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSVGElement_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGSVGElement.viewBox */
+  @DocsEditable
+  @DomName('SVGSVGElement.viewBox')
   AnimatedRect get viewBox native "SVGSVGElement_viewBox_Getter";
 
-
-  /** @domName SVGSVGElement.xmllang */
+  @DocsEditable
+  @DomName('SVGSVGElement.xmllang')
   String get xmllang native "SVGSVGElement_xmllang_Getter";
 
-
-  /** @domName SVGSVGElement.xmllang */
+  @DocsEditable
+  @DomName('SVGSVGElement.xmllang')
   void set xmllang(String value) native "SVGSVGElement_xmllang_Setter";
 
-
-  /** @domName SVGSVGElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGSVGElement.xmlspace')
   String get xmlspace native "SVGSVGElement_xmlspace_Getter";
 
-
-  /** @domName SVGSVGElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGSVGElement.xmlspace')
   void set xmlspace(String value) native "SVGSVGElement_xmlspace_Setter";
 
-
-  /** @domName SVGSVGElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGSVGElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGSVGElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGSVGElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGSVGElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGSVGElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGSVGElement.getBBox */
+  @DocsEditable
+  @DomName('SVGSVGElement.getBBox')
   Rect getBBox() native "SVGSVGElement_getBBox_Callback";
 
-
-  /** @domName SVGSVGElement.getCTM */
+  @DocsEditable
+  @DomName('SVGSVGElement.getCTM')
   Matrix getCtm() native "SVGSVGElement_getCTM_Callback";
 
-
-  /** @domName SVGSVGElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGSVGElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGSVGElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGSVGElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGSVGElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGSVGElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGSVGElement.className */
+  @DocsEditable
+  @DomName('SVGSVGElement.className')
   AnimatedString get $dom_svgClassName native "SVGSVGElement_className_Getter";
 
-
-  /** @domName SVGSVGElement.style */
+  @DocsEditable
+  @DomName('SVGSVGElement.style')
   CssStyleDeclaration get style native "SVGSVGElement_style_Getter";
 
-
-  /** @domName SVGSVGElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGSVGElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGSVGElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGSVGElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGSVGElement.requiredExtensions')
   StringList get requiredExtensions native "SVGSVGElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGSVGElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGSVGElement.requiredFeatures')
   StringList get requiredFeatures native "SVGSVGElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGSVGElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGSVGElement.systemLanguage')
   StringList get systemLanguage native "SVGSVGElement_systemLanguage_Getter";
 
-
-  /** @domName SVGSVGElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGSVGElement.hasExtension')
   bool hasExtension(String extension) native "SVGSVGElement_hasExtension_Callback";
 
-
-  /** @domName SVGSVGElement.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGSVGElement.zoomAndPan')
   int get zoomAndPan native "SVGSVGElement_zoomAndPan_Getter";
 
-
-  /** @domName SVGSVGElement.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGSVGElement.zoomAndPan')
   void set zoomAndPan(int value) native "SVGSVGElement_zoomAndPan_Setter";
 
 }
@@ -7264,87 +7476,88 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGSwitchElement
+@DocsEditable
+@DomName('SVGSwitchElement')
 class SwitchElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
   SwitchElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SwitchElement() => _SvgElementFactoryProvider.createSvgElement_tag("switch");
 
-
-  /** @domName SVGSwitchElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGSwitchElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGSwitchElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGSwitchElement.xmllang */
+  @DocsEditable
+  @DomName('SVGSwitchElement.xmllang')
   String get xmllang native "SVGSwitchElement_xmllang_Getter";
 
-
-  /** @domName SVGSwitchElement.xmllang */
+  @DocsEditable
+  @DomName('SVGSwitchElement.xmllang')
   void set xmllang(String value) native "SVGSwitchElement_xmllang_Setter";
 
-
-  /** @domName SVGSwitchElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGSwitchElement.xmlspace')
   String get xmlspace native "SVGSwitchElement_xmlspace_Getter";
 
-
-  /** @domName SVGSwitchElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGSwitchElement.xmlspace')
   void set xmlspace(String value) native "SVGSwitchElement_xmlspace_Setter";
 
-
-  /** @domName SVGSwitchElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGSwitchElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGSwitchElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGSwitchElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGSwitchElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGSwitchElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGSwitchElement.getBBox */
+  @DocsEditable
+  @DomName('SVGSwitchElement.getBBox')
   Rect getBBox() native "SVGSwitchElement_getBBox_Callback";
 
-
-  /** @domName SVGSwitchElement.getCTM */
+  @DocsEditable
+  @DomName('SVGSwitchElement.getCTM')
   Matrix getCtm() native "SVGSwitchElement_getCTM_Callback";
 
-
-  /** @domName SVGSwitchElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGSwitchElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGSwitchElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGSwitchElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGSwitchElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGSwitchElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGSwitchElement.className */
+  @DocsEditable
+  @DomName('SVGSwitchElement.className')
   AnimatedString get $dom_svgClassName native "SVGSwitchElement_className_Getter";
 
-
-  /** @domName SVGSwitchElement.style */
+  @DocsEditable
+  @DomName('SVGSwitchElement.style')
   CssStyleDeclaration get style native "SVGSwitchElement_style_Getter";
 
-
-  /** @domName SVGSwitchElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGSwitchElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGSwitchElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGSwitchElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGSwitchElement.requiredExtensions')
   StringList get requiredExtensions native "SVGSwitchElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGSwitchElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGSwitchElement.requiredFeatures')
   StringList get requiredFeatures native "SVGSwitchElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGSwitchElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGSwitchElement.systemLanguage')
   StringList get systemLanguage native "SVGSwitchElement_systemLanguage_Getter";
 
-
-  /** @domName SVGSwitchElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGSwitchElement.hasExtension')
   bool hasExtension(String extension) native "SVGSwitchElement_hasExtension_Callback";
 
-
-  /** @domName SVGSwitchElement.transform */
+  @DocsEditable
+  @DomName('SVGSwitchElement.transform')
   AnimatedTransformList get transform native "SVGSwitchElement_transform_Getter";
 
 }
@@ -7355,51 +7568,52 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGSymbolElement
+@DocsEditable
+@DomName('SVGSymbolElement')
 class SymbolElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace {
   SymbolElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory SymbolElement() => _SvgElementFactoryProvider.createSvgElement_tag("symbol");
 
-
-  /** @domName SVGSymbolElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGSymbolElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGSymbolElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGSymbolElement.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGSymbolElement.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSymbolElement_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGSymbolElement.viewBox */
+  @DocsEditable
+  @DomName('SVGSymbolElement.viewBox')
   AnimatedRect get viewBox native "SVGSymbolElement_viewBox_Getter";
 
-
-  /** @domName SVGSymbolElement.xmllang */
+  @DocsEditable
+  @DomName('SVGSymbolElement.xmllang')
   String get xmllang native "SVGSymbolElement_xmllang_Getter";
 
-
-  /** @domName SVGSymbolElement.xmllang */
+  @DocsEditable
+  @DomName('SVGSymbolElement.xmllang')
   void set xmllang(String value) native "SVGSymbolElement_xmllang_Setter";
 
-
-  /** @domName SVGSymbolElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGSymbolElement.xmlspace')
   String get xmlspace native "SVGSymbolElement_xmlspace_Getter";
 
-
-  /** @domName SVGSymbolElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGSymbolElement.xmlspace')
   void set xmlspace(String value) native "SVGSymbolElement_xmlspace_Setter";
 
-
-  /** @domName SVGSymbolElement.className */
+  @DocsEditable
+  @DomName('SVGSymbolElement.className')
   AnimatedString get $dom_svgClassName native "SVGSymbolElement_className_Getter";
 
-
-  /** @domName SVGSymbolElement.style */
+  @DocsEditable
+  @DomName('SVGSymbolElement.style')
   CssStyleDeclaration get style native "SVGSymbolElement_style_Getter";
 
-
-  /** @domName SVGSymbolElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGSymbolElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGSymbolElement_getPresentationAttribute_Callback";
 
 }
@@ -7410,15 +7624,16 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTRefElement
+@DocsEditable
+@DomName('SVGTRefElement')
 class TRefElement extends TextPositioningElement implements UriReference {
   TRefElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TRefElement() => _SvgElementFactoryProvider.createSvgElement_tag("tref");
 
-
-  /** @domName SVGTRefElement.href */
+  @DocsEditable
+  @DomName('SVGTRefElement.href')
   AnimatedString get href native "SVGTRefElement_href_Getter";
 
 }
@@ -7429,11 +7644,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTSpanElement
+@DocsEditable
+@DomName('SVGTSpanElement')
 class TSpanElement extends TextPositioningElement {
   TSpanElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TSpanElement() => _SvgElementFactoryProvider.createSvgElement_tag("tspan");
 
 }
@@ -7444,24 +7660,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTests
+@DocsEditable
+@DomName('SVGTests')
 class Tests extends NativeFieldWrapperClass1 {
   Tests.internal();
 
-
-  /** @domName SVGTests.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGTests.requiredExtensions')
   StringList get requiredExtensions native "SVGTests_requiredExtensions_Getter";
 
-
-  /** @domName SVGTests.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGTests.requiredFeatures')
   StringList get requiredFeatures native "SVGTests_requiredFeatures_Getter";
 
-
-  /** @domName SVGTests.systemLanguage */
+  @DocsEditable
+  @DomName('SVGTests.systemLanguage')
   StringList get systemLanguage native "SVGTests_systemLanguage_Getter";
 
-
-  /** @domName SVGTests.hasExtension */
+  @DocsEditable
+  @DomName('SVGTests.hasExtension')
   bool hasExtension(String extension) native "SVGTests_hasExtension_Callback";
 
 }
@@ -7472,7 +7689,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTextContentElement
+@DocsEditable
+@DomName('SVGTextContentElement')
 class TextContentElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace {
   TextContentElement.internal() : super.internal();
 
@@ -7482,96 +7700,96 @@
 
   static const int LENGTHADJUST_UNKNOWN = 0;
 
-
-  /** @domName SVGTextContentElement.lengthAdjust */
+  @DocsEditable
+  @DomName('SVGTextContentElement.lengthAdjust')
   AnimatedEnumeration get lengthAdjust native "SVGTextContentElement_lengthAdjust_Getter";
 
-
-  /** @domName SVGTextContentElement.textLength */
+  @DocsEditable
+  @DomName('SVGTextContentElement.textLength')
   AnimatedLength get textLength native "SVGTextContentElement_textLength_Getter";
 
-
-  /** @domName SVGTextContentElement.getCharNumAtPosition */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getCharNumAtPosition')
   int getCharNumAtPosition(Point point) native "SVGTextContentElement_getCharNumAtPosition_Callback";
 
-
-  /** @domName SVGTextContentElement.getComputedTextLength */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getComputedTextLength')
   num getComputedTextLength() native "SVGTextContentElement_getComputedTextLength_Callback";
 
-
-  /** @domName SVGTextContentElement.getEndPositionOfChar */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getEndPositionOfChar')
   Point getEndPositionOfChar(int offset) native "SVGTextContentElement_getEndPositionOfChar_Callback";
 
-
-  /** @domName SVGTextContentElement.getExtentOfChar */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getExtentOfChar')
   Rect getExtentOfChar(int offset) native "SVGTextContentElement_getExtentOfChar_Callback";
 
-
-  /** @domName SVGTextContentElement.getNumberOfChars */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getNumberOfChars')
   int getNumberOfChars() native "SVGTextContentElement_getNumberOfChars_Callback";
 
-
-  /** @domName SVGTextContentElement.getRotationOfChar */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getRotationOfChar')
   num getRotationOfChar(int offset) native "SVGTextContentElement_getRotationOfChar_Callback";
 
-
-  /** @domName SVGTextContentElement.getStartPositionOfChar */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getStartPositionOfChar')
   Point getStartPositionOfChar(int offset) native "SVGTextContentElement_getStartPositionOfChar_Callback";
 
-
-  /** @domName SVGTextContentElement.getSubStringLength */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getSubStringLength')
   num getSubStringLength(int offset, int length) native "SVGTextContentElement_getSubStringLength_Callback";
 
-
-  /** @domName SVGTextContentElement.selectSubString */
+  @DocsEditable
+  @DomName('SVGTextContentElement.selectSubString')
   void selectSubString(int offset, int length) native "SVGTextContentElement_selectSubString_Callback";
 
-
-  /** @domName SVGTextContentElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGTextContentElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGTextContentElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGTextContentElement.xmllang */
+  @DocsEditable
+  @DomName('SVGTextContentElement.xmllang')
   String get xmllang native "SVGTextContentElement_xmllang_Getter";
 
-
-  /** @domName SVGTextContentElement.xmllang */
+  @DocsEditable
+  @DomName('SVGTextContentElement.xmllang')
   void set xmllang(String value) native "SVGTextContentElement_xmllang_Setter";
 
-
-  /** @domName SVGTextContentElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGTextContentElement.xmlspace')
   String get xmlspace native "SVGTextContentElement_xmlspace_Getter";
 
-
-  /** @domName SVGTextContentElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGTextContentElement.xmlspace')
   void set xmlspace(String value) native "SVGTextContentElement_xmlspace_Setter";
 
-
-  /** @domName SVGTextContentElement.className */
+  @DocsEditable
+  @DomName('SVGTextContentElement.className')
   AnimatedString get $dom_svgClassName native "SVGTextContentElement_className_Getter";
 
-
-  /** @domName SVGTextContentElement.style */
+  @DocsEditable
+  @DomName('SVGTextContentElement.style')
   CssStyleDeclaration get style native "SVGTextContentElement_style_Getter";
 
-
-  /** @domName SVGTextContentElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGTextContentElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGTextContentElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGTextContentElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGTextContentElement.requiredExtensions')
   StringList get requiredExtensions native "SVGTextContentElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGTextContentElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGTextContentElement.requiredFeatures')
   StringList get requiredFeatures native "SVGTextContentElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGTextContentElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGTextContentElement.systemLanguage')
   StringList get systemLanguage native "SVGTextContentElement_systemLanguage_Getter";
 
-
-  /** @domName SVGTextContentElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGTextContentElement.hasExtension')
   bool hasExtension(String extension) native "SVGTextContentElement_hasExtension_Callback";
 
 }
@@ -7582,39 +7800,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTextElement
+@DocsEditable
+@DomName('SVGTextElement')
 class TextElement extends TextPositioningElement implements Transformable {
   TextElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TextElement() => _SvgElementFactoryProvider.createSvgElement_tag("text");
 
-
-  /** @domName SVGTextElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGTextElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGTextElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGTextElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGTextElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGTextElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGTextElement.getBBox */
+  @DocsEditable
+  @DomName('SVGTextElement.getBBox')
   Rect getBBox() native "SVGTextElement_getBBox_Callback";
 
-
-  /** @domName SVGTextElement.getCTM */
+  @DocsEditable
+  @DomName('SVGTextElement.getCTM')
   Matrix getCtm() native "SVGTextElement_getCTM_Callback";
 
-
-  /** @domName SVGTextElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGTextElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGTextElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGTextElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGTextElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGTextElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGTextElement.transform */
+  @DocsEditable
+  @DomName('SVGTextElement.transform')
   AnimatedTransformList get transform native "SVGTextElement_transform_Getter";
 
 }
@@ -7625,7 +7844,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTextPathElement
+@DocsEditable
+@DomName('SVGTextPathElement')
 class TextPathElement extends TextContentElement implements UriReference {
   TextPathElement.internal() : super.internal();
 
@@ -7641,20 +7861,20 @@
 
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
-
-  /** @domName SVGTextPathElement.method */
+  @DocsEditable
+  @DomName('SVGTextPathElement.method')
   AnimatedEnumeration get method native "SVGTextPathElement_method_Getter";
 
-
-  /** @domName SVGTextPathElement.spacing */
+  @DocsEditable
+  @DomName('SVGTextPathElement.spacing')
   AnimatedEnumeration get spacing native "SVGTextPathElement_spacing_Getter";
 
-
-  /** @domName SVGTextPathElement.startOffset */
+  @DocsEditable
+  @DomName('SVGTextPathElement.startOffset')
   AnimatedLength get startOffset native "SVGTextPathElement_startOffset_Getter";
 
-
-  /** @domName SVGTextPathElement.href */
+  @DocsEditable
+  @DomName('SVGTextPathElement.href')
   AnimatedString get href native "SVGTextPathElement_href_Getter";
 
 }
@@ -7665,28 +7885,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTextPositioningElement
+@DocsEditable
+@DomName('SVGTextPositioningElement')
 class TextPositioningElement extends TextContentElement {
   TextPositioningElement.internal() : super.internal();
 
-
-  /** @domName SVGTextPositioningElement.dx */
+  @DocsEditable
+  @DomName('SVGTextPositioningElement.dx')
   AnimatedLengthList get dx native "SVGTextPositioningElement_dx_Getter";
 
-
-  /** @domName SVGTextPositioningElement.dy */
+  @DocsEditable
+  @DomName('SVGTextPositioningElement.dy')
   AnimatedLengthList get dy native "SVGTextPositioningElement_dy_Getter";
 
-
-  /** @domName SVGTextPositioningElement.rotate */
+  @DocsEditable
+  @DomName('SVGTextPositioningElement.rotate')
   AnimatedNumberList get rotate native "SVGTextPositioningElement_rotate_Getter";
 
-
-  /** @domName SVGTextPositioningElement.x */
+  @DocsEditable
+  @DomName('SVGTextPositioningElement.x')
   AnimatedLengthList get x native "SVGTextPositioningElement_x_Getter";
 
-
-  /** @domName SVGTextPositioningElement.y */
+  @DocsEditable
+  @DomName('SVGTextPositioningElement.y')
   AnimatedLengthList get y native "SVGTextPositioningElement_y_Getter";
 
 }
@@ -7697,39 +7918,40 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTitleElement
+@DocsEditable
+@DomName('SVGTitleElement')
 class TitleElement extends SvgElement implements Stylable, LangSpace {
   TitleElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory TitleElement() => _SvgElementFactoryProvider.createSvgElement_tag("title");
 
-
-  /** @domName SVGTitleElement.xmllang */
+  @DocsEditable
+  @DomName('SVGTitleElement.xmllang')
   String get xmllang native "SVGTitleElement_xmllang_Getter";
 
-
-  /** @domName SVGTitleElement.xmllang */
+  @DocsEditable
+  @DomName('SVGTitleElement.xmllang')
   void set xmllang(String value) native "SVGTitleElement_xmllang_Setter";
 
-
-  /** @domName SVGTitleElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGTitleElement.xmlspace')
   String get xmlspace native "SVGTitleElement_xmlspace_Getter";
 
-
-  /** @domName SVGTitleElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGTitleElement.xmlspace')
   void set xmlspace(String value) native "SVGTitleElement_xmlspace_Setter";
 
-
-  /** @domName SVGTitleElement.className */
+  @DocsEditable
+  @DomName('SVGTitleElement.className')
   AnimatedString get $dom_svgClassName native "SVGTitleElement_className_Getter";
 
-
-  /** @domName SVGTitleElement.style */
+  @DocsEditable
+  @DomName('SVGTitleElement.style')
   CssStyleDeclaration get style native "SVGTitleElement_style_Getter";
 
-
-  /** @domName SVGTitleElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGTitleElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGTitleElement_getPresentationAttribute_Callback";
 
 }
@@ -7740,7 +7962,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTransform
+@DocsEditable
+@DomName('SVGTransform')
 class Transform extends NativeFieldWrapperClass1 {
   Transform.internal();
 
@@ -7758,40 +7981,40 @@
 
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
-
-  /** @domName SVGTransform.angle */
+  @DocsEditable
+  @DomName('SVGTransform.angle')
   num get angle native "SVGTransform_angle_Getter";
 
-
-  /** @domName SVGTransform.matrix */
+  @DocsEditable
+  @DomName('SVGTransform.matrix')
   Matrix get matrix native "SVGTransform_matrix_Getter";
 
-
-  /** @domName SVGTransform.type */
+  @DocsEditable
+  @DomName('SVGTransform.type')
   int get type native "SVGTransform_type_Getter";
 
-
-  /** @domName SVGTransform.setMatrix */
+  @DocsEditable
+  @DomName('SVGTransform.setMatrix')
   void setMatrix(Matrix matrix) native "SVGTransform_setMatrix_Callback";
 
-
-  /** @domName SVGTransform.setRotate */
+  @DocsEditable
+  @DomName('SVGTransform.setRotate')
   void setRotate(num angle, num cx, num cy) native "SVGTransform_setRotate_Callback";
 
-
-  /** @domName SVGTransform.setScale */
+  @DocsEditable
+  @DomName('SVGTransform.setScale')
   void setScale(num sx, num sy) native "SVGTransform_setScale_Callback";
 
-
-  /** @domName SVGTransform.setSkewX */
+  @DocsEditable
+  @DomName('SVGTransform.setSkewX')
   void setSkewX(num angle) native "SVGTransform_setSkewX_Callback";
 
-
-  /** @domName SVGTransform.setSkewY */
+  @DocsEditable
+  @DomName('SVGTransform.setSkewY')
   void setSkewY(num angle) native "SVGTransform_setSkewY_Callback";
 
-
-  /** @domName SVGTransform.setTranslate */
+  @DocsEditable
+  @DomName('SVGTransform.setTranslate')
   void setTranslate(num tx, num ty) native "SVGTransform_setTranslate_Callback";
 
 }
@@ -7802,12 +8025,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTransformList
+@DocsEditable
+@DomName('SVGTransformList')
 class TransformList extends NativeFieldWrapperClass1 implements List<Transform> {
   TransformList.internal();
 
-
-  /** @domName SVGTransformList.numberOfItems */
+  @DocsEditable
+  @DomName('SVGTransformList.numberOfItems')
   int get numberOfItems native "SVGTransformList_numberOfItems_Getter";
 
   Transform operator[](int index) native "SVGTransformList_item_Callback";
@@ -7830,50 +8054,50 @@
   // SVG Collections expose numberOfItems rather than length.
   int get length => numberOfItems;
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, Transform)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(Transform element) => Collections.contains(this, element);
+  bool contains(Transform element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Transform element)) => Collections.forEach(this, f);
+  void forEach(void f(Transform element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(Transform element)) => new MappedList<Transform, dynamic>(this, f);
+  List mappedBy(f(Transform element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<Transform> where(bool f(Transform element)) => new WhereIterable<Transform>(this, f);
+  Iterable<Transform> where(bool f(Transform element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(Transform element)) => Collections.every(this, f);
+  bool every(bool f(Transform element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Transform element)) => Collections.any(this, f);
+  bool any(bool f(Transform element)) => IterableMixinWorkaround.any(this, f);
 
   List<Transform> toList() => new List<Transform>.from(this);
   Set<Transform> toSet() => new Set<Transform>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<Transform> take(int n) => new ListView<Transform>(this, 0, n);
+  List<Transform> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<Transform> takeWhile(bool test(Transform value)) {
-    return new TakeWhileIterable<Transform>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<Transform> skip(int n) => new ListView<Transform>(this, n, null);
+  List<Transform> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<Transform> skipWhile(bool test(Transform value)) {
-    return new SkipWhileIterable<Transform>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Transform firstMatching(bool test(Transform value), { Transform orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Transform lastMatching(bool test(Transform value), {Transform orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Transform singleMatching(bool test(Transform value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Transform elementAt(int index) {
@@ -7899,7 +8123,7 @@
     throw new UnsupportedError("Cannot resize immutable List.");
   }
 
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 
   void sort([int compare(Transform a, Transform b)]) {
     throw new UnsupportedError("Cannot sort immutable List.");
@@ -7929,16 +8153,36 @@
     throw new StateError("More than one element");
   }
 
-  Transform min([int compare(Transform a, Transform b)]) => Collections.min(this, compare);
+  Transform min([int compare(Transform a, Transform b)]) => IterableMixinWorkaround.min(this, compare);
 
-  Transform max([int compare(Transform a, Transform b)]) => Collections.max(this, compare);
+  Transform max([int compare(Transform a, Transform b)]) => IterableMixinWorkaround.max(this, compare);
 
   Transform removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   Transform removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(Transform element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(Transform element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<Transform> from, [int startFrom]) {
@@ -7958,40 +8202,40 @@
 
   // -- end List<Transform> mixins.
 
-
-  /** @domName SVGTransformList.appendItem */
+  @DocsEditable
+  @DomName('SVGTransformList.appendItem')
   Transform appendItem(Transform item) native "SVGTransformList_appendItem_Callback";
 
-
-  /** @domName SVGTransformList.clear */
+  @DocsEditable
+  @DomName('SVGTransformList.clear')
   void clear() native "SVGTransformList_clear_Callback";
 
-
-  /** @domName SVGTransformList.consolidate */
+  @DocsEditable
+  @DomName('SVGTransformList.consolidate')
   Transform consolidate() native "SVGTransformList_consolidate_Callback";
 
-
-  /** @domName SVGTransformList.createSVGTransformFromMatrix */
+  @DocsEditable
+  @DomName('SVGTransformList.createSVGTransformFromMatrix')
   Transform createSvgTransformFromMatrix(Matrix matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
 
-
-  /** @domName SVGTransformList.getItem */
+  @DocsEditable
+  @DomName('SVGTransformList.getItem')
   Transform getItem(int index) native "SVGTransformList_getItem_Callback";
 
-
-  /** @domName SVGTransformList.initialize */
+  @DocsEditable
+  @DomName('SVGTransformList.initialize')
   Transform initialize(Transform item) native "SVGTransformList_initialize_Callback";
 
-
-  /** @domName SVGTransformList.insertItemBefore */
+  @DocsEditable
+  @DomName('SVGTransformList.insertItemBefore')
   Transform insertItemBefore(Transform item, int index) native "SVGTransformList_insertItemBefore_Callback";
 
-
-  /** @domName SVGTransformList.removeItem */
+  @DocsEditable
+  @DomName('SVGTransformList.removeItem')
   Transform removeItem(int index) native "SVGTransformList_removeItem_Callback";
 
-
-  /** @domName SVGTransformList.replaceItem */
+  @DocsEditable
+  @DomName('SVGTransformList.replaceItem')
   Transform replaceItem(Transform item, int index) native "SVGTransformList_replaceItem_Callback";
 
 }
@@ -8002,36 +8246,37 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGTransformable
+@DocsEditable
+@DomName('SVGTransformable')
 class Transformable extends NativeFieldWrapperClass1 implements Locatable {
   Transformable.internal();
 
-
-  /** @domName SVGTransformable.transform */
+  @DocsEditable
+  @DomName('SVGTransformable.transform')
   AnimatedTransformList get transform native "SVGTransformable_transform_Getter";
 
-
-  /** @domName SVGTransformable.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGTransformable.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGTransformable_farthestViewportElement_Getter";
 
-
-  /** @domName SVGTransformable.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGTransformable.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGTransformable_nearestViewportElement_Getter";
 
-
-  /** @domName SVGTransformable.getBBox */
+  @DocsEditable
+  @DomName('SVGTransformable.getBBox')
   Rect getBBox() native "SVGTransformable_getBBox_Callback";
 
-
-  /** @domName SVGTransformable.getCTM */
+  @DocsEditable
+  @DomName('SVGTransformable.getCTM')
   Matrix getCtm() native "SVGTransformable_getCTM_Callback";
 
-
-  /** @domName SVGTransformable.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGTransformable.getScreenCTM')
   Matrix getScreenCtm() native "SVGTransformable_getScreenCTM_Callback";
 
-
-  /** @domName SVGTransformable.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGTransformable.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGTransformable_getTransformToElement_Callback";
 
 }
@@ -8042,7 +8287,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGUnitTypes
+@DocsEditable
+@DomName('SVGUnitTypes')
 class UnitTypes extends NativeFieldWrapperClass1 {
   UnitTypes.internal();
 
@@ -8060,12 +8306,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGURIReference
+@DocsEditable
+@DomName('SVGURIReference')
 class UriReference extends NativeFieldWrapperClass1 {
   UriReference.internal();
 
-
-  /** @domName SVGURIReference.href */
+  @DocsEditable
+  @DomName('SVGURIReference.href')
   AnimatedString get href native "SVGURIReference_href_Getter";
 
 }
@@ -8076,115 +8323,116 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGUseElement
+@DocsEditable
+@DomName('SVGUseElement')
 class UseElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
   UseElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory UseElement() => _SvgElementFactoryProvider.createSvgElement_tag("use");
 
-
-  /** @domName SVGUseElement.animatedInstanceRoot */
+  @DocsEditable
+  @DomName('SVGUseElement.animatedInstanceRoot')
   ElementInstance get animatedInstanceRoot native "SVGUseElement_animatedInstanceRoot_Getter";
 
-
-  /** @domName SVGUseElement.height */
+  @DocsEditable
+  @DomName('SVGUseElement.height')
   AnimatedLength get height native "SVGUseElement_height_Getter";
 
-
-  /** @domName SVGUseElement.instanceRoot */
+  @DocsEditable
+  @DomName('SVGUseElement.instanceRoot')
   ElementInstance get instanceRoot native "SVGUseElement_instanceRoot_Getter";
 
-
-  /** @domName SVGUseElement.width */
+  @DocsEditable
+  @DomName('SVGUseElement.width')
   AnimatedLength get width native "SVGUseElement_width_Getter";
 
-
-  /** @domName SVGUseElement.x */
+  @DocsEditable
+  @DomName('SVGUseElement.x')
   AnimatedLength get x native "SVGUseElement_x_Getter";
 
-
-  /** @domName SVGUseElement.y */
+  @DocsEditable
+  @DomName('SVGUseElement.y')
   AnimatedLength get y native "SVGUseElement_y_Getter";
 
-
-  /** @domName SVGUseElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGUseElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGUseElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGUseElement.xmllang */
+  @DocsEditable
+  @DomName('SVGUseElement.xmllang')
   String get xmllang native "SVGUseElement_xmllang_Getter";
 
-
-  /** @domName SVGUseElement.xmllang */
+  @DocsEditable
+  @DomName('SVGUseElement.xmllang')
   void set xmllang(String value) native "SVGUseElement_xmllang_Setter";
 
-
-  /** @domName SVGUseElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGUseElement.xmlspace')
   String get xmlspace native "SVGUseElement_xmlspace_Getter";
 
-
-  /** @domName SVGUseElement.xmlspace */
+  @DocsEditable
+  @DomName('SVGUseElement.xmlspace')
   void set xmlspace(String value) native "SVGUseElement_xmlspace_Setter";
 
-
-  /** @domName SVGUseElement.farthestViewportElement */
+  @DocsEditable
+  @DomName('SVGUseElement.farthestViewportElement')
   SvgElement get farthestViewportElement native "SVGUseElement_farthestViewportElement_Getter";
 
-
-  /** @domName SVGUseElement.nearestViewportElement */
+  @DocsEditable
+  @DomName('SVGUseElement.nearestViewportElement')
   SvgElement get nearestViewportElement native "SVGUseElement_nearestViewportElement_Getter";
 
-
-  /** @domName SVGUseElement.getBBox */
+  @DocsEditable
+  @DomName('SVGUseElement.getBBox')
   Rect getBBox() native "SVGUseElement_getBBox_Callback";
 
-
-  /** @domName SVGUseElement.getCTM */
+  @DocsEditable
+  @DomName('SVGUseElement.getCTM')
   Matrix getCtm() native "SVGUseElement_getCTM_Callback";
 
-
-  /** @domName SVGUseElement.getScreenCTM */
+  @DocsEditable
+  @DomName('SVGUseElement.getScreenCTM')
   Matrix getScreenCtm() native "SVGUseElement_getScreenCTM_Callback";
 
-
-  /** @domName SVGUseElement.getTransformToElement */
+  @DocsEditable
+  @DomName('SVGUseElement.getTransformToElement')
   Matrix getTransformToElement(SvgElement element) native "SVGUseElement_getTransformToElement_Callback";
 
-
-  /** @domName SVGUseElement.className */
+  @DocsEditable
+  @DomName('SVGUseElement.className')
   AnimatedString get $dom_svgClassName native "SVGUseElement_className_Getter";
 
-
-  /** @domName SVGUseElement.style */
+  @DocsEditable
+  @DomName('SVGUseElement.style')
   CssStyleDeclaration get style native "SVGUseElement_style_Getter";
 
-
-  /** @domName SVGUseElement.getPresentationAttribute */
+  @DocsEditable
+  @DomName('SVGUseElement.getPresentationAttribute')
   CssValue getPresentationAttribute(String name) native "SVGUseElement_getPresentationAttribute_Callback";
 
-
-  /** @domName SVGUseElement.requiredExtensions */
+  @DocsEditable
+  @DomName('SVGUseElement.requiredExtensions')
   StringList get requiredExtensions native "SVGUseElement_requiredExtensions_Getter";
 
-
-  /** @domName SVGUseElement.requiredFeatures */
+  @DocsEditable
+  @DomName('SVGUseElement.requiredFeatures')
   StringList get requiredFeatures native "SVGUseElement_requiredFeatures_Getter";
 
-
-  /** @domName SVGUseElement.systemLanguage */
+  @DocsEditable
+  @DomName('SVGUseElement.systemLanguage')
   StringList get systemLanguage native "SVGUseElement_systemLanguage_Getter";
 
-
-  /** @domName SVGUseElement.hasExtension */
+  @DocsEditable
+  @DomName('SVGUseElement.hasExtension')
   bool hasExtension(String extension) native "SVGUseElement_hasExtension_Callback";
 
-
-  /** @domName SVGUseElement.transform */
+  @DocsEditable
+  @DomName('SVGUseElement.transform')
   AnimatedTransformList get transform native "SVGUseElement_transform_Getter";
 
-
-  /** @domName SVGUseElement.href */
+  @DocsEditable
+  @DomName('SVGUseElement.href')
   AnimatedString get href native "SVGUseElement_href_Getter";
 
 }
@@ -8195,11 +8443,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGVKernElement
+@DocsEditable
+@DomName('SVGVKernElement')
 class VKernElement extends SvgElement {
   VKernElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory VKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("vkern");
 
 }
@@ -8210,35 +8459,36 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGViewElement
+@DocsEditable
+@DomName('SVGViewElement')
 class ViewElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, ZoomAndPan {
   ViewElement.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory ViewElement() => _SvgElementFactoryProvider.createSvgElement_tag("view");
 
-
-  /** @domName SVGViewElement.viewTarget */
+  @DocsEditable
+  @DomName('SVGViewElement.viewTarget')
   StringList get viewTarget native "SVGViewElement_viewTarget_Getter";
 
-
-  /** @domName SVGViewElement.externalResourcesRequired */
+  @DocsEditable
+  @DomName('SVGViewElement.externalResourcesRequired')
   AnimatedBoolean get externalResourcesRequired native "SVGViewElement_externalResourcesRequired_Getter";
 
-
-  /** @domName SVGViewElement.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGViewElement.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewElement_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGViewElement.viewBox */
+  @DocsEditable
+  @DomName('SVGViewElement.viewBox')
   AnimatedRect get viewBox native "SVGViewElement_viewBox_Getter";
 
-
-  /** @domName SVGViewElement.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGViewElement.zoomAndPan')
   int get zoomAndPan native "SVGViewElement_zoomAndPan_Getter";
 
-
-  /** @domName SVGViewElement.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGViewElement.zoomAndPan')
   void set zoomAndPan(int value) native "SVGViewElement_zoomAndPan_Setter";
 
 }
@@ -8249,48 +8499,49 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGViewSpec
+@DocsEditable
+@DomName('SVGViewSpec')
 class ViewSpec extends NativeFieldWrapperClass1 {
   ViewSpec.internal();
 
-
-  /** @domName SVGViewSpec.preserveAspectRatio */
+  @DocsEditable
+  @DomName('SVGViewSpec.preserveAspectRatio')
   AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewSpec_preserveAspectRatio_Getter";
 
-
-  /** @domName SVGViewSpec.preserveAspectRatioString */
+  @DocsEditable
+  @DomName('SVGViewSpec.preserveAspectRatioString')
   String get preserveAspectRatioString native "SVGViewSpec_preserveAspectRatioString_Getter";
 
-
-  /** @domName SVGViewSpec.transform */
+  @DocsEditable
+  @DomName('SVGViewSpec.transform')
   TransformList get transform native "SVGViewSpec_transform_Getter";
 
-
-  /** @domName SVGViewSpec.transformString */
+  @DocsEditable
+  @DomName('SVGViewSpec.transformString')
   String get transformString native "SVGViewSpec_transformString_Getter";
 
-
-  /** @domName SVGViewSpec.viewBox */
+  @DocsEditable
+  @DomName('SVGViewSpec.viewBox')
   AnimatedRect get viewBox native "SVGViewSpec_viewBox_Getter";
 
-
-  /** @domName SVGViewSpec.viewBoxString */
+  @DocsEditable
+  @DomName('SVGViewSpec.viewBoxString')
   String get viewBoxString native "SVGViewSpec_viewBoxString_Getter";
 
-
-  /** @domName SVGViewSpec.viewTarget */
+  @DocsEditable
+  @DomName('SVGViewSpec.viewTarget')
   SvgElement get viewTarget native "SVGViewSpec_viewTarget_Getter";
 
-
-  /** @domName SVGViewSpec.viewTargetString */
+  @DocsEditable
+  @DomName('SVGViewSpec.viewTargetString')
   String get viewTargetString native "SVGViewSpec_viewTargetString_Getter";
 
-
-  /** @domName SVGViewSpec.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGViewSpec.zoomAndPan')
   int get zoomAndPan native "SVGViewSpec_zoomAndPan_Getter";
 
-
-  /** @domName SVGViewSpec.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGViewSpec.zoomAndPan')
   void set zoomAndPan(int value) native "SVGViewSpec_zoomAndPan_Setter";
 
 }
@@ -8301,7 +8552,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGZoomAndPan
+@DocsEditable
+@DomName('SVGZoomAndPan')
 class ZoomAndPan extends NativeFieldWrapperClass1 {
   ZoomAndPan.internal();
 
@@ -8311,12 +8563,12 @@
 
   static const int SVG_ZOOMANDPAN_UNKNOWN = 0;
 
-
-  /** @domName SVGZoomAndPan.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGZoomAndPan.zoomAndPan')
   int get zoomAndPan native "SVGZoomAndPan_zoomAndPan_Getter";
 
-
-  /** @domName SVGZoomAndPan.zoomAndPan */
+  @DocsEditable
+  @DomName('SVGZoomAndPan.zoomAndPan')
   void set zoomAndPan(int value) native "SVGZoomAndPan_zoomAndPan_Setter";
 
 }
@@ -8327,28 +8579,29 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGZoomEvent
+@DocsEditable
+@DomName('SVGZoomEvent')
 class ZoomEvent extends UIEvent {
   ZoomEvent.internal() : super.internal();
 
-
-  /** @domName SVGZoomEvent.newScale */
+  @DocsEditable
+  @DomName('SVGZoomEvent.newScale')
   num get newScale native "SVGZoomEvent_newScale_Getter";
 
-
-  /** @domName SVGZoomEvent.newTranslate */
+  @DocsEditable
+  @DomName('SVGZoomEvent.newTranslate')
   Point get newTranslate native "SVGZoomEvent_newTranslate_Getter";
 
-
-  /** @domName SVGZoomEvent.previousScale */
+  @DocsEditable
+  @DomName('SVGZoomEvent.previousScale')
   num get previousScale native "SVGZoomEvent_previousScale_Getter";
 
-
-  /** @domName SVGZoomEvent.previousTranslate */
+  @DocsEditable
+  @DomName('SVGZoomEvent.previousTranslate')
   Point get previousTranslate native "SVGZoomEvent_previousTranslate_Getter";
 
-
-  /** @domName SVGZoomEvent.zoomRectScreen */
+  @DocsEditable
+  @DomName('SVGZoomEvent.zoomRectScreen')
   Rect get zoomRectScreen native "SVGZoomEvent_zoomRectScreen_Getter";
 
 }
@@ -8359,12 +8612,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGElementInstanceList
+@DocsEditable
+@DomName('SVGElementInstanceList')
 class _ElementInstanceList extends NativeFieldWrapperClass1 implements List<ElementInstance> {
   _ElementInstanceList.internal();
 
-
-  /** @domName SVGElementInstanceList.length */
+  @DocsEditable
+  @DomName('SVGElementInstanceList.length')
   int get length native "SVGElementInstanceList_length_Getter";
 
   ElementInstance operator[](int index) native "SVGElementInstanceList_item_Callback";
@@ -8385,50 +8639,50 @@
   }
 
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, ElementInstance)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
-  bool contains(ElementInstance element) => Collections.contains(this, element);
+  bool contains(ElementInstance element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(ElementInstance element)) => Collections.forEach(this, f);
+  void forEach(void f(ElementInstance element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f(ElementInstance element)) => new MappedList<ElementInstance, dynamic>(this, f);
+  List mappedBy(f(ElementInstance element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<ElementInstance> where(bool f(ElementInstance element)) => new WhereIterable<ElementInstance>(this, f);
+  Iterable<ElementInstance> where(bool f(ElementInstance element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f(ElementInstance element)) => Collections.every(this, f);
+  bool every(bool f(ElementInstance element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(ElementInstance element)) => Collections.any(this, f);
+  bool any(bool f(ElementInstance element)) => IterableMixinWorkaround.any(this, f);
 
   List<ElementInstance> toList() => new List<ElementInstance>.from(this);
   Set<ElementInstance> toSet() => new Set<ElementInstance>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<ElementInstance> take(int n) => new ListView<ElementInstance>(this, 0, n);
+  List<ElementInstance> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<ElementInstance> takeWhile(bool test(ElementInstance value)) {
-    return new TakeWhileIterable<ElementInstance>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<ElementInstance> skip(int n) => new ListView<ElementInstance>(this, n, null);
+  List<ElementInstance> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<ElementInstance> skipWhile(bool test(ElementInstance value)) {
-    return new SkipWhileIterable<ElementInstance>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   ElementInstance firstMatching(bool test(ElementInstance value), { ElementInstance orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   ElementInstance lastMatching(bool test(ElementInstance value), {ElementInstance orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   ElementInstance singleMatching(bool test(ElementInstance value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   ElementInstance elementAt(int index) {
@@ -8486,16 +8740,36 @@
     throw new StateError("More than one element");
   }
 
-  ElementInstance min([int compare(ElementInstance a, ElementInstance b)]) => Collections.min(this, compare);
+  ElementInstance min([int compare(ElementInstance a, ElementInstance b)]) => IterableMixinWorkaround.min(this, compare);
 
-  ElementInstance max([int compare(ElementInstance a, ElementInstance b)]) => Collections.max(this, compare);
+  ElementInstance max([int compare(ElementInstance a, ElementInstance b)]) => IterableMixinWorkaround.max(this, compare);
 
   ElementInstance removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   ElementInstance removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test(ElementInstance element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test(ElementInstance element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<ElementInstance> from, [int startFrom]) {
@@ -8515,8 +8789,8 @@
 
   // -- end List<ElementInstance> mixins.
 
-
-  /** @domName SVGElementInstanceList.item */
+  @DocsEditable
+  @DomName('SVGElementInstanceList.item')
   ElementInstance item(int index) native "SVGElementInstanceList_item_Callback";
 
 }
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index b016061..e684d70 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -2,6 +2,7 @@
 
 import 'dart:async';
 import 'dart:html';
+import 'dart:html_common';
 // DO NOT EDIT
 // Auto-generated dart:audio library.
 
@@ -13,31 +14,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AnalyserNode; @docsEditable true
+
+@DocsEditable
+@DomName('AnalyserNode')
 class AnalyserNode extends AudioNode native "*AnalyserNode" {
 
-  /// @domName AnalyserNode.fftSize; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.fftSize')
   int fftSize;
 
-  /// @domName AnalyserNode.frequencyBinCount; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.frequencyBinCount')
   final int frequencyBinCount;
 
-  /// @domName AnalyserNode.maxDecibels; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.maxDecibels')
   num maxDecibels;
 
-  /// @domName AnalyserNode.minDecibels; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.minDecibels')
   num minDecibels;
 
-  /// @domName AnalyserNode.smoothingTimeConstant; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.smoothingTimeConstant')
   num smoothingTimeConstant;
 
-  /// @domName AnalyserNode.getByteFrequencyData; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.getByteFrequencyData')
   void getByteFrequencyData(Uint8Array array) native;
 
-  /// @domName AnalyserNode.getByteTimeDomainData; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.getByteTimeDomainData')
   void getByteTimeDomainData(Uint8Array array) native;
 
-  /// @domName AnalyserNode.getFloatFrequencyData; @docsEditable true
+  @DocsEditable @DomName('AnalyserNode.getFloatFrequencyData')
   void getFloatFrequencyData(Float32Array array) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -45,25 +48,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioBuffer; @docsEditable true
+
+@DocsEditable
+@DomName('AudioBuffer')
 class AudioBuffer native "*AudioBuffer" {
 
-  /// @domName AudioBuffer.duration; @docsEditable true
+  @DocsEditable @DomName('AudioBuffer.duration')
   final num duration;
 
-  /// @domName AudioBuffer.gain; @docsEditable true
+  @DocsEditable @DomName('AudioBuffer.gain')
   num gain;
 
-  /// @domName AudioBuffer.length; @docsEditable true
+  @DocsEditable @DomName('AudioBuffer.length')
   final int length;
 
-  /// @domName AudioBuffer.numberOfChannels; @docsEditable true
+  @DocsEditable @DomName('AudioBuffer.numberOfChannels')
   final int numberOfChannels;
 
-  /// @domName AudioBuffer.sampleRate; @docsEditable true
+  @DocsEditable @DomName('AudioBuffer.sampleRate')
   final num sampleRate;
 
-  /// @domName AudioBuffer.getChannelData; @docsEditable true
+  @DocsEditable @DomName('AudioBuffer.getChannelData')
   Float32Array getChannelData(int channelIndex) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -79,7 +84,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioBufferSourceNode
+@DocsEditable
+@DomName('AudioBufferSourceNode')
 class AudioBufferSourceNode extends AudioSourceNode native "*AudioBufferSourceNode" {
 
   // TODO(efortuna): Remove these methods when Chrome stable also uses start
@@ -120,25 +126,25 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
-  /// @domName AudioBufferSourceNode.buffer; @docsEditable true
+  @DocsEditable @DomName('AudioBufferSourceNode.buffer')
   AudioBuffer buffer;
 
-  /// @domName AudioBufferSourceNode.gain; @docsEditable true
+  @DocsEditable @DomName('AudioBufferSourceNode.gain')
   final AudioGain gain;
 
-  /// @domName AudioBufferSourceNode.loop; @docsEditable true
+  @DocsEditable @DomName('AudioBufferSourceNode.loop')
   bool loop;
 
-  /// @domName AudioBufferSourceNode.loopEnd; @docsEditable true
+  @DocsEditable @DomName('AudioBufferSourceNode.loopEnd')
   num loopEnd;
 
-  /// @domName AudioBufferSourceNode.loopStart; @docsEditable true
+  @DocsEditable @DomName('AudioBufferSourceNode.loopStart')
   num loopStart;
 
-  /// @domName AudioBufferSourceNode.playbackRate; @docsEditable true
+  @DocsEditable @DomName('AudioBufferSourceNode.playbackRate')
   final AudioParam playbackRate;
 
-  /// @domName AudioBufferSourceNode.playbackState; @docsEditable true
+  @DocsEditable @DomName('AudioBufferSourceNode.playbackState')
   final int playbackState;
 
 }
@@ -147,85 +153,87 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioContext
+@DocsEditable
+@DomName('AudioContext')
 class AudioContext extends EventTarget native "*AudioContext" {
 
   static const EventStreamProvider<Event> completeEvent = const EventStreamProvider<Event>('complete');
 
-  ///@docsEditable true
+  @DocsEditable
   factory AudioContext() => AudioContext._create();
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   AudioContextEvents get on =>
     new AudioContextEvents(this);
 
-  /// @domName AudioContext.activeSourceCount; @docsEditable true
+  @DocsEditable @DomName('AudioContext.activeSourceCount')
   final int activeSourceCount;
 
-  /// @domName AudioContext.currentTime; @docsEditable true
+  @DocsEditable @DomName('AudioContext.currentTime')
   final num currentTime;
 
-  /// @domName AudioContext.destination; @docsEditable true
+  @DocsEditable @DomName('AudioContext.destination')
   final AudioDestinationNode destination;
 
-  /// @domName AudioContext.listener; @docsEditable true
+  @DocsEditable @DomName('AudioContext.listener')
   final AudioListener listener;
 
-  /// @domName AudioContext.sampleRate; @docsEditable true
+  @DocsEditable @DomName('AudioContext.sampleRate')
   final num sampleRate;
 
-  /// @domName AudioContext.createAnalyser; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createAnalyser')
   AnalyserNode createAnalyser() native;
 
-  /// @domName AudioContext.createBiquadFilter; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createBiquadFilter')
   BiquadFilterNode createBiquadFilter() native;
 
-  /// @domName AudioContext.createBuffer; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createBuffer')
   AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [num sampleRate]) native;
 
-  /// @domName AudioContext.createBufferSource; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createBufferSource')
   AudioBufferSourceNode createBufferSource() native;
 
-  /// @domName AudioContext.createChannelMerger; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createChannelMerger')
   ChannelMergerNode createChannelMerger([int numberOfInputs]) native;
 
-  /// @domName AudioContext.createChannelSplitter; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createChannelSplitter')
   ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) native;
 
-  /// @domName AudioContext.createConvolver; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createConvolver')
   ConvolverNode createConvolver() native;
 
-  /// @domName AudioContext.createDelay; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createDelay')
   DelayNode createDelay([num maxDelayTime]) native;
 
-  /// @domName AudioContext.createDynamicsCompressor; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createDynamicsCompressor')
   DynamicsCompressorNode createDynamicsCompressor() native;
 
-  /// @domName AudioContext.createMediaElementSource; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createMediaElementSource')
   MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) native;
 
-  /// @domName AudioContext.createMediaStreamDestination; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createMediaStreamDestination')
   MediaStreamAudioDestinationNode createMediaStreamDestination() native;
 
-  /// @domName AudioContext.createMediaStreamSource; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createMediaStreamSource')
   MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) native;
 
-  /// @domName AudioContext.createOscillator; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createOscillator')
   OscillatorNode createOscillator() native;
 
-  /// @domName AudioContext.createPanner; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createPanner')
   PannerNode createPanner() native;
 
-  /// @domName AudioContext.createWaveShaper; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createWaveShaper')
   WaveShaperNode createWaveShaper() native;
 
-  /// @domName AudioContext.createWaveTable; @docsEditable true
+  @DocsEditable @DomName('AudioContext.createWaveTable')
   WaveTable createWaveTable(Float32Array real, Float32Array imag) native;
 
-  /// @domName AudioContext.decodeAudioData; @docsEditable true
+  @DocsEditable @DomName('AudioContext.decodeAudioData')
   void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) native;
 
-  /// @domName AudioContext.startRendering; @docsEditable true
+  @DocsEditable @DomName('AudioContext.startRendering')
   void startRendering() native;
 
   Stream<Event> get onComplete => completeEvent.forTarget(this);
@@ -258,12 +266,12 @@
   }
 }
 
-/// @docsEditable true
+@DocsEditable
 class AudioContextEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   AudioContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get complete => this['complete'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -271,10 +279,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioDestinationNode; @docsEditable true
+
+@DocsEditable
+@DomName('AudioDestinationNode')
 class AudioDestinationNode extends AudioNode native "*AudioDestinationNode" {
 
-  /// @domName AudioDestinationNode.numberOfChannels; @docsEditable true
+  @DocsEditable @DomName('AudioDestinationNode.numberOfChannels')
   final int numberOfChannels;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -282,7 +292,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioGain; @docsEditable true
+
+@DocsEditable
+@DomName('AudioGain')
 class AudioGain extends AudioParam native "*AudioGain" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -290,22 +302,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioListener; @docsEditable true
+
+@DocsEditable
+@DomName('AudioListener')
 class AudioListener native "*AudioListener" {
 
-  /// @domName AudioListener.dopplerFactor; @docsEditable true
+  @DocsEditable @DomName('AudioListener.dopplerFactor')
   num dopplerFactor;
 
-  /// @domName AudioListener.speedOfSound; @docsEditable true
+  @DocsEditable @DomName('AudioListener.speedOfSound')
   num speedOfSound;
 
-  /// @domName AudioListener.setOrientation; @docsEditable true
+  @DocsEditable @DomName('AudioListener.setOrientation')
   void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native;
 
-  /// @domName AudioListener.setPosition; @docsEditable true
+  @DocsEditable @DomName('AudioListener.setPosition')
   void setPosition(num x, num y, num z) native;
 
-  /// @domName AudioListener.setVelocity; @docsEditable true
+  @DocsEditable @DomName('AudioListener.setVelocity')
   void setVelocity(num x, num y, num z) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -313,22 +327,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioNode; @docsEditable true
+
+@DocsEditable
+@DomName('AudioNode')
 class AudioNode native "*AudioNode" {
 
-  /// @domName AudioNode.context; @docsEditable true
+  @DocsEditable @DomName('AudioNode.context')
   final AudioContext context;
 
-  /// @domName AudioNode.numberOfInputs; @docsEditable true
+  @DocsEditable @DomName('AudioNode.numberOfInputs')
   final int numberOfInputs;
 
-  /// @domName AudioNode.numberOfOutputs; @docsEditable true
+  @DocsEditable @DomName('AudioNode.numberOfOutputs')
   final int numberOfOutputs;
 
-  /// @domName AudioNode.connect; @docsEditable true
+  @DocsEditable @DomName('AudioNode.connect')
   void connect(destination, int output, [int input]) native;
 
-  /// @domName AudioNode.disconnect; @docsEditable true
+  @DocsEditable @DomName('AudioNode.disconnect')
   void disconnect(int output) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -336,43 +352,45 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioParam; @docsEditable true
+
+@DocsEditable
+@DomName('AudioParam')
 class AudioParam native "*AudioParam" {
 
-  /// @domName AudioParam.defaultValue; @docsEditable true
+  @DocsEditable @DomName('AudioParam.defaultValue')
   final num defaultValue;
 
-  /// @domName AudioParam.maxValue; @docsEditable true
+  @DocsEditable @DomName('AudioParam.maxValue')
   final num maxValue;
 
-  /// @domName AudioParam.minValue; @docsEditable true
+  @DocsEditable @DomName('AudioParam.minValue')
   final num minValue;
 
-  /// @domName AudioParam.name; @docsEditable true
+  @DocsEditable @DomName('AudioParam.name')
   final String name;
 
-  /// @domName AudioParam.units; @docsEditable true
+  @DocsEditable @DomName('AudioParam.units')
   final int units;
 
-  /// @domName AudioParam.value; @docsEditable true
+  @DocsEditable @DomName('AudioParam.value')
   num value;
 
-  /// @domName AudioParam.cancelScheduledValues; @docsEditable true
+  @DocsEditable @DomName('AudioParam.cancelScheduledValues')
   void cancelScheduledValues(num startTime) native;
 
-  /// @domName AudioParam.exponentialRampToValueAtTime; @docsEditable true
+  @DocsEditable @DomName('AudioParam.exponentialRampToValueAtTime')
   void exponentialRampToValueAtTime(num value, num time) native;
 
-  /// @domName AudioParam.linearRampToValueAtTime; @docsEditable true
+  @DocsEditable @DomName('AudioParam.linearRampToValueAtTime')
   void linearRampToValueAtTime(num value, num time) native;
 
-  /// @domName AudioParam.setTargetAtTime; @docsEditable true
+  @DocsEditable @DomName('AudioParam.setTargetAtTime')
   void setTargetAtTime(num target, num time, num timeConstant) native;
 
-  /// @domName AudioParam.setValueAtTime; @docsEditable true
+  @DocsEditable @DomName('AudioParam.setValueAtTime')
   void setValueAtTime(num value, num time) native;
 
-  /// @domName AudioParam.setValueCurveAtTime; @docsEditable true
+  @DocsEditable @DomName('AudioParam.setValueCurveAtTime')
   void setValueCurveAtTime(Float32Array values, num time, num duration) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -380,13 +398,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioProcessingEvent; @docsEditable true
+
+@DocsEditable
+@DomName('AudioProcessingEvent')
 class AudioProcessingEvent extends Event native "*AudioProcessingEvent" {
 
-  /// @domName AudioProcessingEvent.inputBuffer; @docsEditable true
+  @DocsEditable @DomName('AudioProcessingEvent.inputBuffer')
   final AudioBuffer inputBuffer;
 
-  /// @domName AudioProcessingEvent.outputBuffer; @docsEditable true
+  @DocsEditable @DomName('AudioProcessingEvent.outputBuffer')
   final AudioBuffer outputBuffer;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -394,7 +414,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioSourceNode; @docsEditable true
+
+@DocsEditable
+@DomName('AudioSourceNode')
 class AudioSourceNode extends AudioNode native "*AudioSourceNode" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -402,7 +424,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName BiquadFilterNode; @docsEditable true
+
+@DocsEditable
+@DomName('BiquadFilterNode')
 class BiquadFilterNode extends AudioNode native "*BiquadFilterNode" {
 
   static const int ALLPASS = 7;
@@ -421,22 +445,22 @@
 
   static const int PEAKING = 5;
 
-  /// @domName BiquadFilterNode.Q; @docsEditable true
+  @DocsEditable @DomName('BiquadFilterNode.Q')
   final AudioParam Q;
 
-  /// @domName BiquadFilterNode.detune; @docsEditable true
+  @DocsEditable @DomName('BiquadFilterNode.detune')
   final AudioParam detune;
 
-  /// @domName BiquadFilterNode.frequency; @docsEditable true
+  @DocsEditable @DomName('BiquadFilterNode.frequency')
   final AudioParam frequency;
 
-  /// @domName BiquadFilterNode.gain; @docsEditable true
+  @DocsEditable @DomName('BiquadFilterNode.gain')
   final AudioParam gain;
 
-  /// @domName BiquadFilterNode.type; @docsEditable true
-  int type;
+  @DocsEditable @DomName('BiquadFilterNode.type')
+  String type;
 
-  /// @domName BiquadFilterNode.getFrequencyResponse; @docsEditable true
+  @DocsEditable @DomName('BiquadFilterNode.getFrequencyResponse')
   void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -444,7 +468,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ChannelMergerNode; @docsEditable true
+
+@DocsEditable
+@DomName('ChannelMergerNode')
 class ChannelMergerNode extends AudioNode native "*ChannelMergerNode" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -452,7 +478,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ChannelSplitterNode; @docsEditable true
+
+@DocsEditable
+@DomName('ChannelSplitterNode')
 class ChannelSplitterNode extends AudioNode native "*ChannelSplitterNode" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -460,13 +488,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ConvolverNode; @docsEditable true
+
+@DocsEditable
+@DomName('ConvolverNode')
 class ConvolverNode extends AudioNode native "*ConvolverNode" {
 
-  /// @domName ConvolverNode.buffer; @docsEditable true
+  @DocsEditable @DomName('ConvolverNode.buffer')
   AudioBuffer buffer;
 
-  /// @domName ConvolverNode.normalize; @docsEditable true
+  @DocsEditable @DomName('ConvolverNode.normalize')
   bool normalize;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -474,10 +504,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DelayNode; @docsEditable true
+
+@DocsEditable
+@DomName('DelayNode')
 class DelayNode extends AudioNode native "*DelayNode" {
 
-  /// @domName DelayNode.delayTime; @docsEditable true
+  @DocsEditable @DomName('DelayNode.delayTime')
   final AudioParam delayTime;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -485,25 +517,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DynamicsCompressorNode; @docsEditable true
+
+@DocsEditable
+@DomName('DynamicsCompressorNode')
 class DynamicsCompressorNode extends AudioNode native "*DynamicsCompressorNode" {
 
-  /// @domName DynamicsCompressorNode.attack; @docsEditable true
+  @DocsEditable @DomName('DynamicsCompressorNode.attack')
   final AudioParam attack;
 
-  /// @domName DynamicsCompressorNode.knee; @docsEditable true
+  @DocsEditable @DomName('DynamicsCompressorNode.knee')
   final AudioParam knee;
 
-  /// @domName DynamicsCompressorNode.ratio; @docsEditable true
+  @DocsEditable @DomName('DynamicsCompressorNode.ratio')
   final AudioParam ratio;
 
-  /// @domName DynamicsCompressorNode.reduction; @docsEditable true
+  @DocsEditable @DomName('DynamicsCompressorNode.reduction')
   final AudioParam reduction;
 
-  /// @domName DynamicsCompressorNode.release; @docsEditable true
+  @DocsEditable @DomName('DynamicsCompressorNode.release')
   final AudioParam release;
 
-  /// @domName DynamicsCompressorNode.threshold; @docsEditable true
+  @DocsEditable @DomName('DynamicsCompressorNode.threshold')
   final AudioParam threshold;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -511,10 +545,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName GainNode; @docsEditable true
+
+@DocsEditable
+@DomName('GainNode')
 class GainNode extends AudioNode native "*GainNode" {
 
-  /// @domName GainNode.gain; @docsEditable true
+  @DocsEditable @DomName('GainNode.gain')
   final AudioGain gain;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -522,10 +558,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaElementAudioSourceNode; @docsEditable true
+
+@DocsEditable
+@DomName('MediaElementAudioSourceNode')
 class MediaElementAudioSourceNode extends AudioSourceNode native "*MediaElementAudioSourceNode" {
 
-  /// @domName MediaElementAudioSourceNode.mediaElement; @docsEditable true
+  @DocsEditable @DomName('MediaElementAudioSourceNode.mediaElement')
   final MediaElement mediaElement;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -533,10 +571,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamAudioDestinationNode; @docsEditable true
+
+@DocsEditable
+@DomName('MediaStreamAudioDestinationNode')
 class MediaStreamAudioDestinationNode extends AudioSourceNode native "*MediaStreamAudioDestinationNode" {
 
-  /// @domName MediaStreamAudioDestinationNode.stream; @docsEditable true
+  @DocsEditable @DomName('MediaStreamAudioDestinationNode.stream')
   final MediaStream stream;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -544,10 +584,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamAudioSourceNode; @docsEditable true
+
+@DocsEditable
+@DomName('MediaStreamAudioSourceNode')
 class MediaStreamAudioSourceNode extends AudioSourceNode native "*MediaStreamAudioSourceNode" {
 
-  /// @domName MediaStreamAudioSourceNode.mediaStream; @docsEditable true
+  @DocsEditable @DomName('MediaStreamAudioSourceNode.mediaStream')
   final MediaStream mediaStream;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -555,10 +597,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OfflineAudioCompletionEvent; @docsEditable true
+
+@DocsEditable
+@DomName('OfflineAudioCompletionEvent')
 class OfflineAudioCompletionEvent extends Event native "*OfflineAudioCompletionEvent" {
 
-  /// @domName OfflineAudioCompletionEvent.renderedBuffer; @docsEditable true
+  @DocsEditable @DomName('OfflineAudioCompletionEvent.renderedBuffer')
   final AudioBuffer renderedBuffer;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -566,10 +610,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OfflineAudioContext; @docsEditable true
+
+@DocsEditable
+@DomName('OfflineAudioContext')
 class OfflineAudioContext extends AudioContext implements EventTarget native "*OfflineAudioContext" {
 
-  ///@docsEditable true
+  @DocsEditable
   factory OfflineAudioContext(int numberOfChannels, int numberOfFrames, num sampleRate) => OfflineAudioContext._create(numberOfChannels, numberOfFrames, sampleRate);
   static OfflineAudioContext _create(int numberOfChannels, int numberOfFrames, num sampleRate) => JS('OfflineAudioContext', 'new OfflineAudioContext(#,#,#)', numberOfChannels, numberOfFrames, sampleRate);
 }
@@ -578,7 +624,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OscillatorNode; @docsEditable true
+
+@DocsEditable
+@DomName('OscillatorNode')
 class OscillatorNode extends AudioSourceNode native "*OscillatorNode" {
 
   static const int CUSTOM = 4;
@@ -599,25 +647,25 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
-  /// @domName OscillatorNode.detune; @docsEditable true
+  @DocsEditable @DomName('OscillatorNode.detune')
   final AudioParam detune;
 
-  /// @domName OscillatorNode.frequency; @docsEditable true
+  @DocsEditable @DomName('OscillatorNode.frequency')
   final AudioParam frequency;
 
-  /// @domName OscillatorNode.playbackState; @docsEditable true
+  @DocsEditable @DomName('OscillatorNode.playbackState')
   final int playbackState;
 
-  /// @domName OscillatorNode.type; @docsEditable true
-  int type;
+  @DocsEditable @DomName('OscillatorNode.type')
+  String type;
 
-  /// @domName OscillatorNode.setWaveTable; @docsEditable true
+  @DocsEditable @DomName('OscillatorNode.setWaveTable')
   void setWaveTable(WaveTable waveTable) native;
 
-  /// @domName OscillatorNode.start; @docsEditable true
+  @DocsEditable @DomName('OscillatorNode.start')
   void start(num when) native;
 
-  /// @domName OscillatorNode.stop; @docsEditable true
+  @DocsEditable @DomName('OscillatorNode.stop')
   void stop(num when) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -625,7 +673,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PannerNode; @docsEditable true
+
+@DocsEditable
+@DomName('PannerNode')
 class PannerNode extends AudioNode native "*PannerNode" {
 
   static const int EQUALPOWER = 0;
@@ -640,37 +690,37 @@
 
   static const int SOUNDFIELD = 2;
 
-  /// @domName PannerNode.coneInnerAngle; @docsEditable true
+  @DocsEditable @DomName('PannerNode.coneInnerAngle')
   num coneInnerAngle;
 
-  /// @domName PannerNode.coneOuterAngle; @docsEditable true
+  @DocsEditable @DomName('PannerNode.coneOuterAngle')
   num coneOuterAngle;
 
-  /// @domName PannerNode.coneOuterGain; @docsEditable true
+  @DocsEditable @DomName('PannerNode.coneOuterGain')
   num coneOuterGain;
 
-  /// @domName PannerNode.distanceModel; @docsEditable true
-  int distanceModel;
+  @DocsEditable @DomName('PannerNode.distanceModel')
+  String distanceModel;
 
-  /// @domName PannerNode.maxDistance; @docsEditable true
+  @DocsEditable @DomName('PannerNode.maxDistance')
   num maxDistance;
 
-  /// @domName PannerNode.panningModel; @docsEditable true
-  int panningModel;
+  @DocsEditable @DomName('PannerNode.panningModel')
+  String panningModel;
 
-  /// @domName PannerNode.refDistance; @docsEditable true
+  @DocsEditable @DomName('PannerNode.refDistance')
   num refDistance;
 
-  /// @domName PannerNode.rolloffFactor; @docsEditable true
+  @DocsEditable @DomName('PannerNode.rolloffFactor')
   num rolloffFactor;
 
-  /// @domName PannerNode.setOrientation; @docsEditable true
+  @DocsEditable @DomName('PannerNode.setOrientation')
   void setOrientation(num x, num y, num z) native;
 
-  /// @domName PannerNode.setPosition; @docsEditable true
+  @DocsEditable @DomName('PannerNode.setPosition')
   void setPosition(num x, num y, num z) native;
 
-  /// @domName PannerNode.setVelocity; @docsEditable true
+  @DocsEditable @DomName('PannerNode.setVelocity')
   void setVelocity(num x, num y, num z) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -678,10 +728,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ScriptProcessorNode; @docsEditable true
+
+@DocsEditable
+@DomName('ScriptProcessorNode')
 class ScriptProcessorNode extends AudioNode implements EventTarget native "*ScriptProcessorNode" {
 
-  /// @domName ScriptProcessorNode.bufferSize; @docsEditable true
+  @DocsEditable @DomName('ScriptProcessorNode.bufferSize')
   final int bufferSize;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -689,10 +741,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WaveShaperNode; @docsEditable true
+
+@DocsEditable
+@DomName('WaveShaperNode')
 class WaveShaperNode extends AudioNode native "*WaveShaperNode" {
 
-  /// @domName WaveShaperNode.curve; @docsEditable true
+  @DocsEditable @DomName('WaveShaperNode.curve')
   Float32Array curve;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -700,6 +754,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WaveTable; @docsEditable true
+
+@DocsEditable
+@DomName('WaveTable')
 class WaveTable native "*WaveTable" {
 }
diff --git a/sdk/lib/web_audio/dartium/web_audio_dartium.dart b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
index 22e287f..c37f538 100644
--- a/sdk/lib/web_audio/dartium/web_audio_dartium.dart
+++ b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
@@ -16,56 +16,57 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AnalyserNode
+@DocsEditable
+@DomName('AnalyserNode')
 class AnalyserNode extends AudioNode {
   AnalyserNode.internal() : super.internal();
 
-
-  /** @domName AnalyserNode.fftSize */
+  @DocsEditable
+  @DomName('AnalyserNode.fftSize')
   int get fftSize native "AnalyserNode_fftSize_Getter";
 
-
-  /** @domName AnalyserNode.fftSize */
+  @DocsEditable
+  @DomName('AnalyserNode.fftSize')
   void set fftSize(int value) native "AnalyserNode_fftSize_Setter";
 
-
-  /** @domName AnalyserNode.frequencyBinCount */
+  @DocsEditable
+  @DomName('AnalyserNode.frequencyBinCount')
   int get frequencyBinCount native "AnalyserNode_frequencyBinCount_Getter";
 
-
-  /** @domName AnalyserNode.maxDecibels */
+  @DocsEditable
+  @DomName('AnalyserNode.maxDecibels')
   num get maxDecibels native "AnalyserNode_maxDecibels_Getter";
 
-
-  /** @domName AnalyserNode.maxDecibels */
+  @DocsEditable
+  @DomName('AnalyserNode.maxDecibels')
   void set maxDecibels(num value) native "AnalyserNode_maxDecibels_Setter";
 
-
-  /** @domName AnalyserNode.minDecibels */
+  @DocsEditable
+  @DomName('AnalyserNode.minDecibels')
   num get minDecibels native "AnalyserNode_minDecibels_Getter";
 
-
-  /** @domName AnalyserNode.minDecibels */
+  @DocsEditable
+  @DomName('AnalyserNode.minDecibels')
   void set minDecibels(num value) native "AnalyserNode_minDecibels_Setter";
 
-
-  /** @domName AnalyserNode.smoothingTimeConstant */
+  @DocsEditable
+  @DomName('AnalyserNode.smoothingTimeConstant')
   num get smoothingTimeConstant native "AnalyserNode_smoothingTimeConstant_Getter";
 
-
-  /** @domName AnalyserNode.smoothingTimeConstant */
+  @DocsEditable
+  @DomName('AnalyserNode.smoothingTimeConstant')
   void set smoothingTimeConstant(num value) native "AnalyserNode_smoothingTimeConstant_Setter";
 
-
-  /** @domName AnalyserNode.getByteFrequencyData */
+  @DocsEditable
+  @DomName('AnalyserNode.getByteFrequencyData')
   void getByteFrequencyData(Uint8Array array) native "AnalyserNode_getByteFrequencyData_Callback";
 
-
-  /** @domName AnalyserNode.getByteTimeDomainData */
+  @DocsEditable
+  @DomName('AnalyserNode.getByteTimeDomainData')
   void getByteTimeDomainData(Uint8Array array) native "AnalyserNode_getByteTimeDomainData_Callback";
 
-
-  /** @domName AnalyserNode.getFloatFrequencyData */
+  @DocsEditable
+  @DomName('AnalyserNode.getFloatFrequencyData')
   void getFloatFrequencyData(Float32Array array) native "AnalyserNode_getFloatFrequencyData_Callback";
 
 }
@@ -76,36 +77,37 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioBuffer
+@DocsEditable
+@DomName('AudioBuffer')
 class AudioBuffer extends NativeFieldWrapperClass1 {
   AudioBuffer.internal();
 
-
-  /** @domName AudioBuffer.duration */
+  @DocsEditable
+  @DomName('AudioBuffer.duration')
   num get duration native "AudioBuffer_duration_Getter";
 
-
-  /** @domName AudioBuffer.gain */
+  @DocsEditable
+  @DomName('AudioBuffer.gain')
   num get gain native "AudioBuffer_gain_Getter";
 
-
-  /** @domName AudioBuffer.gain */
+  @DocsEditable
+  @DomName('AudioBuffer.gain')
   void set gain(num value) native "AudioBuffer_gain_Setter";
 
-
-  /** @domName AudioBuffer.length */
+  @DocsEditable
+  @DomName('AudioBuffer.length')
   int get length native "AudioBuffer_length_Getter";
 
-
-  /** @domName AudioBuffer.numberOfChannels */
+  @DocsEditable
+  @DomName('AudioBuffer.numberOfChannels')
   int get numberOfChannels native "AudioBuffer_numberOfChannels_Getter";
 
-
-  /** @domName AudioBuffer.sampleRate */
+  @DocsEditable
+  @DomName('AudioBuffer.sampleRate')
   num get sampleRate native "AudioBuffer_sampleRate_Getter";
 
-
-  /** @domName AudioBuffer.getChannelData */
+  @DocsEditable
+  @DomName('AudioBuffer.getChannelData')
   Float32Array getChannelData(int channelIndex) native "AudioBuffer_getChannelData_Callback";
 
 }
@@ -124,7 +126,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioBufferSourceNode
+@DocsEditable
+@DomName('AudioBufferSourceNode')
 class AudioBufferSourceNode extends AudioSourceNode {
   AudioBufferSourceNode.internal() : super.internal();
 
@@ -136,51 +139,51 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
-
-  /** @domName AudioBufferSourceNode.buffer */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.buffer')
   AudioBuffer get buffer native "AudioBufferSourceNode_buffer_Getter";
 
-
-  /** @domName AudioBufferSourceNode.buffer */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.buffer')
   void set buffer(AudioBuffer value) native "AudioBufferSourceNode_buffer_Setter";
 
-
-  /** @domName AudioBufferSourceNode.gain */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.gain')
   AudioGain get gain native "AudioBufferSourceNode_gain_Getter";
 
-
-  /** @domName AudioBufferSourceNode.loop */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.loop')
   bool get loop native "AudioBufferSourceNode_loop_Getter";
 
-
-  /** @domName AudioBufferSourceNode.loop */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.loop')
   void set loop(bool value) native "AudioBufferSourceNode_loop_Setter";
 
-
-  /** @domName AudioBufferSourceNode.loopEnd */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.loopEnd')
   num get loopEnd native "AudioBufferSourceNode_loopEnd_Getter";
 
-
-  /** @domName AudioBufferSourceNode.loopEnd */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.loopEnd')
   void set loopEnd(num value) native "AudioBufferSourceNode_loopEnd_Setter";
 
-
-  /** @domName AudioBufferSourceNode.loopStart */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.loopStart')
   num get loopStart native "AudioBufferSourceNode_loopStart_Getter";
 
-
-  /** @domName AudioBufferSourceNode.loopStart */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.loopStart')
   void set loopStart(num value) native "AudioBufferSourceNode_loopStart_Setter";
 
-
-  /** @domName AudioBufferSourceNode.playbackRate */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.playbackRate')
   AudioParam get playbackRate native "AudioBufferSourceNode_playbackRate_Getter";
 
-
-  /** @domName AudioBufferSourceNode.playbackState */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.playbackState')
   int get playbackState native "AudioBufferSourceNode_playbackState_Getter";
 
-  void start(/*double*/ when, [/*double*/ grainOffset, /*double*/ grainDuration]) {
+  void start(num when, [num grainOffset, num grainDuration]) {
     if ((when is num || when == null) && !?grainOffset && !?grainDuration) {
       _start_1(when);
       return;
@@ -196,20 +199,20 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName AudioBufferSourceNode.start_1 */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.start_1')
   void _start_1(when) native "AudioBufferSourceNode_start_1_Callback";
 
-
-  /** @domName AudioBufferSourceNode.start_2 */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.start_2')
   void _start_2(when, grainOffset) native "AudioBufferSourceNode_start_2_Callback";
 
-
-  /** @domName AudioBufferSourceNode.start_3 */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.start_3')
   void _start_3(when, grainOffset, grainDuration) native "AudioBufferSourceNode_start_3_Callback";
 
-
-  /** @domName AudioBufferSourceNode.stop */
+  @DocsEditable
+  @DomName('AudioBufferSourceNode.stop')
   void stop(num when) native "AudioBufferSourceNode_stop_Callback";
 
 }
@@ -218,49 +221,51 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioContext
+@DocsEditable
+@DomName('AudioContext')
 class AudioContext extends EventTarget {
   AudioContext.internal() : super.internal();
 
   static const EventStreamProvider<Event> completeEvent = const EventStreamProvider<Event>('complete');
 
-  ///@docsEditable true
+  @DocsEditable
   factory AudioContext() => AudioContext._create();
   static AudioContext _create() native "AudioContext_constructor_Callback";
 
-  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  @DocsEditable
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   AudioContextEvents get on =>
     new AudioContextEvents(this);
 
-
-  /** @domName AudioContext.activeSourceCount */
+  @DocsEditable
+  @DomName('AudioContext.activeSourceCount')
   int get activeSourceCount native "AudioContext_activeSourceCount_Getter";
 
-
-  /** @domName AudioContext.currentTime */
+  @DocsEditable
+  @DomName('AudioContext.currentTime')
   num get currentTime native "AudioContext_currentTime_Getter";
 
-
-  /** @domName AudioContext.destination */
+  @DocsEditable
+  @DomName('AudioContext.destination')
   AudioDestinationNode get destination native "AudioContext_destination_Getter";
 
-
-  /** @domName AudioContext.listener */
+  @DocsEditable
+  @DomName('AudioContext.listener')
   AudioListener get listener native "AudioContext_listener_Getter";
 
-
-  /** @domName AudioContext.sampleRate */
+  @DocsEditable
+  @DomName('AudioContext.sampleRate')
   num get sampleRate native "AudioContext_sampleRate_Getter";
 
-
-  /** @domName AudioContext.createAnalyser */
+  @DocsEditable
+  @DomName('AudioContext.createAnalyser')
   AnalyserNode createAnalyser() native "AudioContext_createAnalyser_Callback";
 
-
-  /** @domName AudioContext.createBiquadFilter */
+  @DocsEditable
+  @DomName('AudioContext.createBiquadFilter')
   BiquadFilterNode createBiquadFilter() native "AudioContext_createBiquadFilter_Callback";
 
-  AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [/*float*/ sampleRate]) {
+  AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [num sampleRate]) {
     if ((buffer_OR_numberOfChannels is int || buffer_OR_numberOfChannels == null) && (mixToMono_OR_numberOfFrames is int || mixToMono_OR_numberOfFrames == null) && (sampleRate is num || sampleRate == null)) {
       return _createBuffer_1(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, sampleRate);
     }
@@ -270,96 +275,96 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName AudioContext.createBuffer_1 */
+  @DocsEditable
+  @DomName('AudioContext.createBuffer_1')
   AudioBuffer _createBuffer_1(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, sampleRate) native "AudioContext_createBuffer_1_Callback";
 
-
-  /** @domName AudioContext.createBuffer_2 */
+  @DocsEditable
+  @DomName('AudioContext.createBuffer_2')
   AudioBuffer _createBuffer_2(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames) native "AudioContext_createBuffer_2_Callback";
 
-
-  /** @domName AudioContext.createBufferSource */
+  @DocsEditable
+  @DomName('AudioContext.createBufferSource')
   AudioBufferSourceNode createBufferSource() native "AudioContext_createBufferSource_Callback";
 
-  ChannelMergerNode createChannelMerger([/*unsigned long*/ numberOfInputs]) {
+  ChannelMergerNode createChannelMerger([int numberOfInputs]) {
     if (?numberOfInputs) {
       return _createChannelMerger_1(numberOfInputs);
     }
     return _createChannelMerger_2();
   }
 
-
-  /** @domName AudioContext.createChannelMerger_1 */
+  @DocsEditable
+  @DomName('AudioContext.createChannelMerger_1')
   ChannelMergerNode _createChannelMerger_1(numberOfInputs) native "AudioContext_createChannelMerger_1_Callback";
 
-
-  /** @domName AudioContext.createChannelMerger_2 */
+  @DocsEditable
+  @DomName('AudioContext.createChannelMerger_2')
   ChannelMergerNode _createChannelMerger_2() native "AudioContext_createChannelMerger_2_Callback";
 
-  ChannelSplitterNode createChannelSplitter([/*unsigned long*/ numberOfOutputs]) {
+  ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) {
     if (?numberOfOutputs) {
       return _createChannelSplitter_1(numberOfOutputs);
     }
     return _createChannelSplitter_2();
   }
 
-
-  /** @domName AudioContext.createChannelSplitter_1 */
+  @DocsEditable
+  @DomName('AudioContext.createChannelSplitter_1')
   ChannelSplitterNode _createChannelSplitter_1(numberOfOutputs) native "AudioContext_createChannelSplitter_1_Callback";
 
-
-  /** @domName AudioContext.createChannelSplitter_2 */
+  @DocsEditable
+  @DomName('AudioContext.createChannelSplitter_2')
   ChannelSplitterNode _createChannelSplitter_2() native "AudioContext_createChannelSplitter_2_Callback";
 
-
-  /** @domName AudioContext.createConvolver */
+  @DocsEditable
+  @DomName('AudioContext.createConvolver')
   ConvolverNode createConvolver() native "AudioContext_createConvolver_Callback";
 
-  DelayNode createDelay([/*double*/ maxDelayTime]) {
+  DelayNode createDelay([num maxDelayTime]) {
     if (?maxDelayTime) {
       return _createDelay_1(maxDelayTime);
     }
     return _createDelay_2();
   }
 
-
-  /** @domName AudioContext.createDelay_1 */
+  @DocsEditable
+  @DomName('AudioContext.createDelay_1')
   DelayNode _createDelay_1(maxDelayTime) native "AudioContext_createDelay_1_Callback";
 
-
-  /** @domName AudioContext.createDelay_2 */
+  @DocsEditable
+  @DomName('AudioContext.createDelay_2')
   DelayNode _createDelay_2() native "AudioContext_createDelay_2_Callback";
 
-
-  /** @domName AudioContext.createDynamicsCompressor */
+  @DocsEditable
+  @DomName('AudioContext.createDynamicsCompressor')
   DynamicsCompressorNode createDynamicsCompressor() native "AudioContext_createDynamicsCompressor_Callback";
 
-
-  /** @domName AudioContext.createGain */
+  @DocsEditable
+  @DomName('AudioContext.createGain')
   GainNode createGain() native "AudioContext_createGain_Callback";
 
-
-  /** @domName AudioContext.createMediaElementSource */
+  @DocsEditable
+  @DomName('AudioContext.createMediaElementSource')
   MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) native "AudioContext_createMediaElementSource_Callback";
 
-
-  /** @domName AudioContext.createMediaStreamDestination */
+  @DocsEditable
+  @DomName('AudioContext.createMediaStreamDestination')
   MediaStreamAudioDestinationNode createMediaStreamDestination() native "AudioContext_createMediaStreamDestination_Callback";
 
-
-  /** @domName AudioContext.createMediaStreamSource */
+  @DocsEditable
+  @DomName('AudioContext.createMediaStreamSource')
   MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) native "AudioContext_createMediaStreamSource_Callback";
 
-
-  /** @domName AudioContext.createOscillator */
+  @DocsEditable
+  @DomName('AudioContext.createOscillator')
   OscillatorNode createOscillator() native "AudioContext_createOscillator_Callback";
 
-
-  /** @domName AudioContext.createPanner */
+  @DocsEditable
+  @DomName('AudioContext.createPanner')
   PannerNode createPanner() native "AudioContext_createPanner_Callback";
 
-  ScriptProcessorNode createScriptProcessor(/*unsigned long*/ bufferSize, [/*unsigned long*/ numberOfInputChannels, /*unsigned long*/ numberOfOutputChannels]) {
+  ScriptProcessorNode createScriptProcessor(int bufferSize, [int numberOfInputChannels, int numberOfOutputChannels]) {
     if (?numberOfOutputChannels) {
       return _createScriptProcessor_1(bufferSize, numberOfInputChannels, numberOfOutputChannels);
     }
@@ -369,44 +374,44 @@
     return _createScriptProcessor_3(bufferSize);
   }
 
-
-  /** @domName AudioContext.createScriptProcessor_1 */
+  @DocsEditable
+  @DomName('AudioContext.createScriptProcessor_1')
   ScriptProcessorNode _createScriptProcessor_1(bufferSize, numberOfInputChannels, numberOfOutputChannels) native "AudioContext_createScriptProcessor_1_Callback";
 
-
-  /** @domName AudioContext.createScriptProcessor_2 */
+  @DocsEditable
+  @DomName('AudioContext.createScriptProcessor_2')
   ScriptProcessorNode _createScriptProcessor_2(bufferSize, numberOfInputChannels) native "AudioContext_createScriptProcessor_2_Callback";
 
-
-  /** @domName AudioContext.createScriptProcessor_3 */
+  @DocsEditable
+  @DomName('AudioContext.createScriptProcessor_3')
   ScriptProcessorNode _createScriptProcessor_3(bufferSize) native "AudioContext_createScriptProcessor_3_Callback";
 
-
-  /** @domName AudioContext.createWaveShaper */
+  @DocsEditable
+  @DomName('AudioContext.createWaveShaper')
   WaveShaperNode createWaveShaper() native "AudioContext_createWaveShaper_Callback";
 
-
-  /** @domName AudioContext.createWaveTable */
+  @DocsEditable
+  @DomName('AudioContext.createWaveTable')
   WaveTable createWaveTable(Float32Array real, Float32Array imag) native "AudioContext_createWaveTable_Callback";
 
-
-  /** @domName AudioContext.decodeAudioData */
+  @DocsEditable
+  @DomName('AudioContext.decodeAudioData')
   void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) native "AudioContext_decodeAudioData_Callback";
 
-
-  /** @domName AudioContext.startRendering */
+  @DocsEditable
+  @DomName('AudioContext.startRendering')
   void startRendering() native "AudioContext_startRendering_Callback";
 
   Stream<Event> get onComplete => completeEvent.forTarget(this);
 
 }
 
-/// @docsEditable true
+@DocsEditable
 class AudioContextEvents extends Events {
-  /// @docsEditable true
+  @DocsEditable
   AudioContextEvents(EventTarget _ptr) : super(_ptr);
 
-  /// @docsEditable true
+  @DocsEditable
   EventListenerList get complete => this['complete'];
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -416,12 +421,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioDestinationNode
+@DocsEditable
+@DomName('AudioDestinationNode')
 class AudioDestinationNode extends AudioNode {
   AudioDestinationNode.internal() : super.internal();
 
-
-  /** @domName AudioDestinationNode.numberOfChannels */
+  @DocsEditable
+  @DomName('AudioDestinationNode.numberOfChannels')
   int get numberOfChannels native "AudioDestinationNode_numberOfChannels_Getter";
 
 }
@@ -432,7 +438,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioGain
+@DocsEditable
+@DomName('AudioGain')
 class AudioGain extends AudioParam {
   AudioGain.internal() : super.internal();
 
@@ -444,36 +451,37 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioListener
+@DocsEditable
+@DomName('AudioListener')
 class AudioListener extends NativeFieldWrapperClass1 {
   AudioListener.internal();
 
-
-  /** @domName AudioListener.dopplerFactor */
+  @DocsEditable
+  @DomName('AudioListener.dopplerFactor')
   num get dopplerFactor native "AudioListener_dopplerFactor_Getter";
 
-
-  /** @domName AudioListener.dopplerFactor */
+  @DocsEditable
+  @DomName('AudioListener.dopplerFactor')
   void set dopplerFactor(num value) native "AudioListener_dopplerFactor_Setter";
 
-
-  /** @domName AudioListener.speedOfSound */
+  @DocsEditable
+  @DomName('AudioListener.speedOfSound')
   num get speedOfSound native "AudioListener_speedOfSound_Getter";
 
-
-  /** @domName AudioListener.speedOfSound */
+  @DocsEditable
+  @DomName('AudioListener.speedOfSound')
   void set speedOfSound(num value) native "AudioListener_speedOfSound_Setter";
 
-
-  /** @domName AudioListener.setOrientation */
+  @DocsEditable
+  @DomName('AudioListener.setOrientation')
   void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native "AudioListener_setOrientation_Callback";
 
-
-  /** @domName AudioListener.setPosition */
+  @DocsEditable
+  @DomName('AudioListener.setPosition')
   void setPosition(num x, num y, num z) native "AudioListener_setPosition_Callback";
 
-
-  /** @domName AudioListener.setVelocity */
+  @DocsEditable
+  @DomName('AudioListener.setVelocity')
   void setVelocity(num x, num y, num z) native "AudioListener_setVelocity_Callback";
 
 }
@@ -484,23 +492,24 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioNode
+@DocsEditable
+@DomName('AudioNode')
 class AudioNode extends NativeFieldWrapperClass1 {
   AudioNode.internal();
 
-
-  /** @domName AudioNode.context */
+  @DocsEditable
+  @DomName('AudioNode.context')
   AudioContext get context native "AudioNode_context_Getter";
 
-
-  /** @domName AudioNode.numberOfInputs */
+  @DocsEditable
+  @DomName('AudioNode.numberOfInputs')
   int get numberOfInputs native "AudioNode_numberOfInputs_Getter";
 
-
-  /** @domName AudioNode.numberOfOutputs */
+  @DocsEditable
+  @DomName('AudioNode.numberOfOutputs')
   int get numberOfOutputs native "AudioNode_numberOfOutputs_Getter";
 
-  void connect(destination, /*unsigned long*/ output, [/*unsigned long*/ input]) {
+  void connect(destination, int output, [int input]) {
     if ((destination is AudioNode || destination == null) && (output is int || output == null) && (input is int || input == null)) {
       _connect_1(destination, output, input);
       return;
@@ -512,16 +521,16 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-
-  /** @domName AudioNode.connect_1 */
+  @DocsEditable
+  @DomName('AudioNode.connect_1')
   void _connect_1(destination, output, input) native "AudioNode_connect_1_Callback";
 
-
-  /** @domName AudioNode.connect_2 */
+  @DocsEditable
+  @DomName('AudioNode.connect_2')
   void _connect_2(destination, output) native "AudioNode_connect_2_Callback";
 
-
-  /** @domName AudioNode.disconnect */
+  @DocsEditable
+  @DomName('AudioNode.disconnect')
   void disconnect(int output) native "AudioNode_disconnect_Callback";
 
 }
@@ -532,60 +541,61 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioParam
+@DocsEditable
+@DomName('AudioParam')
 class AudioParam extends NativeFieldWrapperClass1 {
   AudioParam.internal();
 
-
-  /** @domName AudioParam.defaultValue */
+  @DocsEditable
+  @DomName('AudioParam.defaultValue')
   num get defaultValue native "AudioParam_defaultValue_Getter";
 
-
-  /** @domName AudioParam.maxValue */
+  @DocsEditable
+  @DomName('AudioParam.maxValue')
   num get maxValue native "AudioParam_maxValue_Getter";
 
-
-  /** @domName AudioParam.minValue */
+  @DocsEditable
+  @DomName('AudioParam.minValue')
   num get minValue native "AudioParam_minValue_Getter";
 
-
-  /** @domName AudioParam.name */
+  @DocsEditable
+  @DomName('AudioParam.name')
   String get name native "AudioParam_name_Getter";
 
-
-  /** @domName AudioParam.units */
+  @DocsEditable
+  @DomName('AudioParam.units')
   int get units native "AudioParam_units_Getter";
 
-
-  /** @domName AudioParam.value */
+  @DocsEditable
+  @DomName('AudioParam.value')
   num get value native "AudioParam_value_Getter";
 
-
-  /** @domName AudioParam.value */
+  @DocsEditable
+  @DomName('AudioParam.value')
   void set value(num value) native "AudioParam_value_Setter";
 
-
-  /** @domName AudioParam.cancelScheduledValues */
+  @DocsEditable
+  @DomName('AudioParam.cancelScheduledValues')
   void cancelScheduledValues(num startTime) native "AudioParam_cancelScheduledValues_Callback";
 
-
-  /** @domName AudioParam.exponentialRampToValueAtTime */
+  @DocsEditable
+  @DomName('AudioParam.exponentialRampToValueAtTime')
   void exponentialRampToValueAtTime(num value, num time) native "AudioParam_exponentialRampToValueAtTime_Callback";
 
-
-  /** @domName AudioParam.linearRampToValueAtTime */
+  @DocsEditable
+  @DomName('AudioParam.linearRampToValueAtTime')
   void linearRampToValueAtTime(num value, num time) native "AudioParam_linearRampToValueAtTime_Callback";
 
-
-  /** @domName AudioParam.setTargetAtTime */
+  @DocsEditable
+  @DomName('AudioParam.setTargetAtTime')
   void setTargetAtTime(num target, num time, num timeConstant) native "AudioParam_setTargetAtTime_Callback";
 
-
-  /** @domName AudioParam.setValueAtTime */
+  @DocsEditable
+  @DomName('AudioParam.setValueAtTime')
   void setValueAtTime(num value, num time) native "AudioParam_setValueAtTime_Callback";
 
-
-  /** @domName AudioParam.setValueCurveAtTime */
+  @DocsEditable
+  @DomName('AudioParam.setValueCurveAtTime')
   void setValueCurveAtTime(Float32Array values, num time, num duration) native "AudioParam_setValueCurveAtTime_Callback";
 
 }
@@ -596,16 +606,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioProcessingEvent
+@DocsEditable
+@DomName('AudioProcessingEvent')
 class AudioProcessingEvent extends Event {
   AudioProcessingEvent.internal() : super.internal();
 
-
-  /** @domName AudioProcessingEvent.inputBuffer */
+  @DocsEditable
+  @DomName('AudioProcessingEvent.inputBuffer')
   AudioBuffer get inputBuffer native "AudioProcessingEvent_inputBuffer_Getter";
 
-
-  /** @domName AudioProcessingEvent.outputBuffer */
+  @DocsEditable
+  @DomName('AudioProcessingEvent.outputBuffer')
   AudioBuffer get outputBuffer native "AudioProcessingEvent_outputBuffer_Getter";
 
 }
@@ -616,7 +627,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName AudioSourceNode
+@DocsEditable
+@DomName('AudioSourceNode')
 class AudioSourceNode extends AudioNode {
   AudioSourceNode.internal() : super.internal();
 
@@ -628,7 +640,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName BiquadFilterNode
+@DocsEditable
+@DomName('BiquadFilterNode')
 class BiquadFilterNode extends AudioNode {
   BiquadFilterNode.internal() : super.internal();
 
@@ -648,32 +661,32 @@
 
   static const int PEAKING = 5;
 
-
-  /** @domName BiquadFilterNode.Q */
+  @DocsEditable
+  @DomName('BiquadFilterNode.Q')
   AudioParam get Q native "BiquadFilterNode_Q_Getter";
 
-
-  /** @domName BiquadFilterNode.detune */
+  @DocsEditable
+  @DomName('BiquadFilterNode.detune')
   AudioParam get detune native "BiquadFilterNode_detune_Getter";
 
-
-  /** @domName BiquadFilterNode.frequency */
+  @DocsEditable
+  @DomName('BiquadFilterNode.frequency')
   AudioParam get frequency native "BiquadFilterNode_frequency_Getter";
 
-
-  /** @domName BiquadFilterNode.gain */
+  @DocsEditable
+  @DomName('BiquadFilterNode.gain')
   AudioParam get gain native "BiquadFilterNode_gain_Getter";
 
+  @DocsEditable
+  @DomName('BiquadFilterNode.type')
+  String get type native "BiquadFilterNode_type_Getter";
 
-  /** @domName BiquadFilterNode.type */
-  int get type native "BiquadFilterNode_type_Getter";
+  @DocsEditable
+  @DomName('BiquadFilterNode.type')
+  void set type(String value) native "BiquadFilterNode_type_Setter";
 
-
-  /** @domName BiquadFilterNode.type */
-  void set type(int value) native "BiquadFilterNode_type_Setter";
-
-
-  /** @domName BiquadFilterNode.getFrequencyResponse */
+  @DocsEditable
+  @DomName('BiquadFilterNode.getFrequencyResponse')
   void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse) native "BiquadFilterNode_getFrequencyResponse_Callback";
 
 }
@@ -684,7 +697,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ChannelMergerNode
+@DocsEditable
+@DomName('ChannelMergerNode')
 class ChannelMergerNode extends AudioNode {
   ChannelMergerNode.internal() : super.internal();
 
@@ -696,7 +710,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ChannelSplitterNode
+@DocsEditable
+@DomName('ChannelSplitterNode')
 class ChannelSplitterNode extends AudioNode {
   ChannelSplitterNode.internal() : super.internal();
 
@@ -708,24 +723,25 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ConvolverNode
+@DocsEditable
+@DomName('ConvolverNode')
 class ConvolverNode extends AudioNode {
   ConvolverNode.internal() : super.internal();
 
-
-  /** @domName ConvolverNode.buffer */
+  @DocsEditable
+  @DomName('ConvolverNode.buffer')
   AudioBuffer get buffer native "ConvolverNode_buffer_Getter";
 
-
-  /** @domName ConvolverNode.buffer */
+  @DocsEditable
+  @DomName('ConvolverNode.buffer')
   void set buffer(AudioBuffer value) native "ConvolverNode_buffer_Setter";
 
-
-  /** @domName ConvolverNode.normalize */
+  @DocsEditable
+  @DomName('ConvolverNode.normalize')
   bool get normalize native "ConvolverNode_normalize_Getter";
 
-
-  /** @domName ConvolverNode.normalize */
+  @DocsEditable
+  @DomName('ConvolverNode.normalize')
   void set normalize(bool value) native "ConvolverNode_normalize_Setter";
 
 }
@@ -736,12 +752,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DelayNode
+@DocsEditable
+@DomName('DelayNode')
 class DelayNode extends AudioNode {
   DelayNode.internal() : super.internal();
 
-
-  /** @domName DelayNode.delayTime */
+  @DocsEditable
+  @DomName('DelayNode.delayTime')
   AudioParam get delayTime native "DelayNode_delayTime_Getter";
 
 }
@@ -752,32 +769,33 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName DynamicsCompressorNode
+@DocsEditable
+@DomName('DynamicsCompressorNode')
 class DynamicsCompressorNode extends AudioNode {
   DynamicsCompressorNode.internal() : super.internal();
 
-
-  /** @domName DynamicsCompressorNode.attack */
+  @DocsEditable
+  @DomName('DynamicsCompressorNode.attack')
   AudioParam get attack native "DynamicsCompressorNode_attack_Getter";
 
-
-  /** @domName DynamicsCompressorNode.knee */
+  @DocsEditable
+  @DomName('DynamicsCompressorNode.knee')
   AudioParam get knee native "DynamicsCompressorNode_knee_Getter";
 
-
-  /** @domName DynamicsCompressorNode.ratio */
+  @DocsEditable
+  @DomName('DynamicsCompressorNode.ratio')
   AudioParam get ratio native "DynamicsCompressorNode_ratio_Getter";
 
-
-  /** @domName DynamicsCompressorNode.reduction */
+  @DocsEditable
+  @DomName('DynamicsCompressorNode.reduction')
   AudioParam get reduction native "DynamicsCompressorNode_reduction_Getter";
 
-
-  /** @domName DynamicsCompressorNode.release */
+  @DocsEditable
+  @DomName('DynamicsCompressorNode.release')
   AudioParam get release native "DynamicsCompressorNode_release_Getter";
 
-
-  /** @domName DynamicsCompressorNode.threshold */
+  @DocsEditable
+  @DomName('DynamicsCompressorNode.threshold')
   AudioParam get threshold native "DynamicsCompressorNode_threshold_Getter";
 
 }
@@ -788,12 +806,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName GainNode
+@DocsEditable
+@DomName('GainNode')
 class GainNode extends AudioNode {
   GainNode.internal() : super.internal();
 
-
-  /** @domName GainNode.gain */
+  @DocsEditable
+  @DomName('GainNode.gain')
   AudioGain get gain native "GainNode_gain_Getter";
 
 }
@@ -804,12 +823,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaElementAudioSourceNode
+@DocsEditable
+@DomName('MediaElementAudioSourceNode')
 class MediaElementAudioSourceNode extends AudioSourceNode {
   MediaElementAudioSourceNode.internal() : super.internal();
 
-
-  /** @domName MediaElementAudioSourceNode.mediaElement */
+  @DocsEditable
+  @DomName('MediaElementAudioSourceNode.mediaElement')
   MediaElement get mediaElement native "MediaElementAudioSourceNode_mediaElement_Getter";
 
 }
@@ -820,12 +840,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaStreamAudioDestinationNode
+@DocsEditable
+@DomName('MediaStreamAudioDestinationNode')
 class MediaStreamAudioDestinationNode extends AudioSourceNode {
   MediaStreamAudioDestinationNode.internal() : super.internal();
 
-
-  /** @domName MediaStreamAudioDestinationNode.stream */
+  @DocsEditable
+  @DomName('MediaStreamAudioDestinationNode.stream')
   MediaStream get stream native "MediaStreamAudioDestinationNode_stream_Getter";
 
 }
@@ -836,12 +857,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName MediaStreamAudioSourceNode
+@DocsEditable
+@DomName('MediaStreamAudioSourceNode')
 class MediaStreamAudioSourceNode extends AudioSourceNode {
   MediaStreamAudioSourceNode.internal() : super.internal();
 
-
-  /** @domName MediaStreamAudioSourceNode.mediaStream */
+  @DocsEditable
+  @DomName('MediaStreamAudioSourceNode.mediaStream')
   MediaStream get mediaStream native "MediaStreamAudioSourceNode_mediaStream_Getter";
 
 }
@@ -852,12 +874,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OfflineAudioCompletionEvent
+@DocsEditable
+@DomName('OfflineAudioCompletionEvent')
 class OfflineAudioCompletionEvent extends Event {
   OfflineAudioCompletionEvent.internal() : super.internal();
 
-
-  /** @domName OfflineAudioCompletionEvent.renderedBuffer */
+  @DocsEditable
+  @DomName('OfflineAudioCompletionEvent.renderedBuffer')
   AudioBuffer get renderedBuffer native "OfflineAudioCompletionEvent_renderedBuffer_Getter";
 
 }
@@ -868,11 +891,12 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OfflineAudioContext
+@DocsEditable
+@DomName('OfflineAudioContext')
 class OfflineAudioContext extends AudioContext implements EventTarget {
   OfflineAudioContext.internal() : super.internal();
 
-  ///@docsEditable true
+  @DocsEditable
   factory OfflineAudioContext(int numberOfChannels, int numberOfFrames, num sampleRate) => OfflineAudioContext._create(numberOfChannels, numberOfFrames, sampleRate);
   static OfflineAudioContext _create(int numberOfChannels, int numberOfFrames, num sampleRate) native "OfflineAudioContext_constructor_Callback";
 
@@ -884,7 +908,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName OscillatorNode
+@DocsEditable
+@DomName('OscillatorNode')
 class OscillatorNode extends AudioSourceNode {
   OscillatorNode.internal() : super.internal();
 
@@ -906,36 +931,36 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
-
-  /** @domName OscillatorNode.detune */
+  @DocsEditable
+  @DomName('OscillatorNode.detune')
   AudioParam get detune native "OscillatorNode_detune_Getter";
 
-
-  /** @domName OscillatorNode.frequency */
+  @DocsEditable
+  @DomName('OscillatorNode.frequency')
   AudioParam get frequency native "OscillatorNode_frequency_Getter";
 
-
-  /** @domName OscillatorNode.playbackState */
+  @DocsEditable
+  @DomName('OscillatorNode.playbackState')
   int get playbackState native "OscillatorNode_playbackState_Getter";
 
+  @DocsEditable
+  @DomName('OscillatorNode.type')
+  String get type native "OscillatorNode_type_Getter";
 
-  /** @domName OscillatorNode.type */
-  int get type native "OscillatorNode_type_Getter";
+  @DocsEditable
+  @DomName('OscillatorNode.type')
+  void set type(String value) native "OscillatorNode_type_Setter";
 
-
-  /** @domName OscillatorNode.type */
-  void set type(int value) native "OscillatorNode_type_Setter";
-
-
-  /** @domName OscillatorNode.setWaveTable */
+  @DocsEditable
+  @DomName('OscillatorNode.setWaveTable')
   void setWaveTable(WaveTable waveTable) native "OscillatorNode_setWaveTable_Callback";
 
-
-  /** @domName OscillatorNode.start */
+  @DocsEditable
+  @DomName('OscillatorNode.start')
   void start(num when) native "OscillatorNode_start_Callback";
 
-
-  /** @domName OscillatorNode.stop */
+  @DocsEditable
+  @DomName('OscillatorNode.stop')
   void stop(num when) native "OscillatorNode_stop_Callback";
 
 }
@@ -946,7 +971,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName PannerNode
+@DocsEditable
+@DomName('PannerNode')
 class PannerNode extends AudioNode {
   PannerNode.internal() : super.internal();
 
@@ -962,80 +988,80 @@
 
   static const int SOUNDFIELD = 2;
 
-
-  /** @domName PannerNode.coneInnerAngle */
+  @DocsEditable
+  @DomName('PannerNode.coneInnerAngle')
   num get coneInnerAngle native "PannerNode_coneInnerAngle_Getter";
 
-
-  /** @domName PannerNode.coneInnerAngle */
+  @DocsEditable
+  @DomName('PannerNode.coneInnerAngle')
   void set coneInnerAngle(num value) native "PannerNode_coneInnerAngle_Setter";
 
-
-  /** @domName PannerNode.coneOuterAngle */
+  @DocsEditable
+  @DomName('PannerNode.coneOuterAngle')
   num get coneOuterAngle native "PannerNode_coneOuterAngle_Getter";
 
-
-  /** @domName PannerNode.coneOuterAngle */
+  @DocsEditable
+  @DomName('PannerNode.coneOuterAngle')
   void set coneOuterAngle(num value) native "PannerNode_coneOuterAngle_Setter";
 
-
-  /** @domName PannerNode.coneOuterGain */
+  @DocsEditable
+  @DomName('PannerNode.coneOuterGain')
   num get coneOuterGain native "PannerNode_coneOuterGain_Getter";
 
-
-  /** @domName PannerNode.coneOuterGain */
+  @DocsEditable
+  @DomName('PannerNode.coneOuterGain')
   void set coneOuterGain(num value) native "PannerNode_coneOuterGain_Setter";
 
+  @DocsEditable
+  @DomName('PannerNode.distanceModel')
+  String get distanceModel native "PannerNode_distanceModel_Getter";
 
-  /** @domName PannerNode.distanceModel */
-  int get distanceModel native "PannerNode_distanceModel_Getter";
+  @DocsEditable
+  @DomName('PannerNode.distanceModel')
+  void set distanceModel(String value) native "PannerNode_distanceModel_Setter";
 
-
-  /** @domName PannerNode.distanceModel */
-  void set distanceModel(int value) native "PannerNode_distanceModel_Setter";
-
-
-  /** @domName PannerNode.maxDistance */
+  @DocsEditable
+  @DomName('PannerNode.maxDistance')
   num get maxDistance native "PannerNode_maxDistance_Getter";
 
-
-  /** @domName PannerNode.maxDistance */
+  @DocsEditable
+  @DomName('PannerNode.maxDistance')
   void set maxDistance(num value) native "PannerNode_maxDistance_Setter";
 
+  @DocsEditable
+  @DomName('PannerNode.panningModel')
+  String get panningModel native "PannerNode_panningModel_Getter";
 
-  /** @domName PannerNode.panningModel */
-  int get panningModel native "PannerNode_panningModel_Getter";
+  @DocsEditable
+  @DomName('PannerNode.panningModel')
+  void set panningModel(String value) native "PannerNode_panningModel_Setter";
 
-
-  /** @domName PannerNode.panningModel */
-  void set panningModel(int value) native "PannerNode_panningModel_Setter";
-
-
-  /** @domName PannerNode.refDistance */
+  @DocsEditable
+  @DomName('PannerNode.refDistance')
   num get refDistance native "PannerNode_refDistance_Getter";
 
-
-  /** @domName PannerNode.refDistance */
+  @DocsEditable
+  @DomName('PannerNode.refDistance')
   void set refDistance(num value) native "PannerNode_refDistance_Setter";
 
-
-  /** @domName PannerNode.rolloffFactor */
+  @DocsEditable
+  @DomName('PannerNode.rolloffFactor')
   num get rolloffFactor native "PannerNode_rolloffFactor_Getter";
 
-
-  /** @domName PannerNode.rolloffFactor */
+  @DocsEditable
+  @DomName('PannerNode.rolloffFactor')
   void set rolloffFactor(num value) native "PannerNode_rolloffFactor_Setter";
 
-
-  /** @domName PannerNode.setOrientation */
+  @DocsEditable
+  @DomName('PannerNode.setOrientation')
   void setOrientation(num x, num y, num z) native "PannerNode_setOrientation_Callback";
 
-
-  /** @domName PannerNode.setPosition */
+  @DocsEditable
+  @DomName('PannerNode.setPosition')
   void setPosition(num x, num y, num z) native "PannerNode_setPosition_Callback";
 
-
-  /** @domName PannerNode.setVelocity */
+  @DocsEditable
+  @DomName('PannerNode.setVelocity')
   void setVelocity(num x, num y, num z) native "PannerNode_setVelocity_Callback";
 
 }
@@ -1046,12 +1072,13 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName ScriptProcessorNode
+@DocsEditable
+@DomName('ScriptProcessorNode')
 class ScriptProcessorNode extends AudioNode implements EventTarget {
   ScriptProcessorNode.internal() : super.internal();
 
-
-  /** @domName ScriptProcessorNode.bufferSize */
+  @DocsEditable
+  @DomName('ScriptProcessorNode.bufferSize')
   int get bufferSize native "ScriptProcessorNode_bufferSize_Getter";
 
 }
@@ -1062,16 +1089,17 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WaveShaperNode
+@DocsEditable
+@DomName('WaveShaperNode')
 class WaveShaperNode extends AudioNode {
   WaveShaperNode.internal() : super.internal();
 
-
-  /** @domName WaveShaperNode.curve */
+  @DocsEditable
+  @DomName('WaveShaperNode.curve')
   Float32Array get curve native "WaveShaperNode_curve_Getter";
 
-
-  /** @domName WaveShaperNode.curve */
+  @DocsEditable
+  @DomName('WaveShaperNode.curve')
   void set curve(Float32Array value) native "WaveShaperNode_curve_Setter";
 
 }
@@ -1082,7 +1110,8 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName WaveTable
+@DocsEditable
+@DomName('WaveTable')
 class WaveTable extends NativeFieldWrapperClass1 {
   WaveTable.internal();
 
diff --git a/tests/chrome/chrome.status b/tests/chrome/chrome.status
new file mode 100644
index 0000000..077c8b2
--- /dev/null
+++ b/tests/chrome/chrome.status
@@ -0,0 +1,11 @@
+# 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.
+
+[ $runtime == vm ]
+# Not supported on the VM
+*: Skip
+
+[ $compiler == none]
+# Not supported on Dartium right now
+*: Skip
diff --git a/tests/chrome/sample_test.dart b/tests/chrome/sample_test.dart
new file mode 100644
index 0000000..219a600
--- /dev/null
+++ b/tests/chrome/sample_test.dart
@@ -0,0 +1,23 @@
+// 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 sample_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:chrome' as chrome;
+
+main() {
+  useHtmlConfiguration();
+  test('access', () {
+    var window = chrome.app.window;
+    expect(window is chrome.WindowModule, true);
+  });
+
+  test('fails from browser', () {
+    // APIs should not work in standard browser apps.
+    expect(() {
+      chrome.app.window.create('foo.html');
+    }, throws);
+  });
+}
diff --git a/tests/co19/co19-compiler.status b/tests/co19/co19-compiler.status
index 553417a..9ab3b3c 100644
--- a/tests/co19/co19-compiler.status
+++ b/tests/co19/co19-compiler.status
@@ -27,9 +27,6 @@
 Language/06_Functions/2_Formal_Parameters/1_Required_Formals_A02_t05: Fail
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t06: Fail
 
-# issue 7095
-Language/12_Statements/02_Expression_Statements_A01_t12: Fail
-
 # co19 issue 344 ('null' is constant, so can be used in 'case')
 Language/12_Statements/09_Switch_A02_t03: Fail
 
@@ -127,7 +124,6 @@
 
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail, OK # deprecated parameter syntax
 
-Language/03_Overview/1_Scoping_A02_t28: Fail # language change 1031
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # Issue 3323
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # Issue 2477
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail # Issue 2477
@@ -148,5 +144,294 @@
 LibTest/math/parseInt_A02_t01: Fail, OK # co19 issue 317
 
 
+Language/03_Overview/1_Scoping_A02_t30: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/03_Overview/2_Privacy_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/05_Variables/05_Variables_A11_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/07_Classes_A01_t20: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/07_Classes_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/07_Classes_A02_t34: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/07_Classes_A03_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/07_Classes_A03_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/07_Classes_A03_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/07_Classes_A03_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/1_Instance_Methods/2_Operators_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/3_Setters_A04_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/3_Setters_A04_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/3_Setters_A04_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/3_Setters_A04_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/4_Abstract_Instance_Members_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/4_Abstract_Instance_Members_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/4_Abstract_Instance_Members_A04_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/4_Abstract_Instance_Members_A07_t07: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/4_Abstract_Instance_Members_A07_t09: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A18_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A02_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t13: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A06_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A06_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A06_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A06_t07: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A06_t08: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A06_t09: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A11_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/11_Instance_Creation/1_New_A12_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t19: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/18_Assignment_A08_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/18_Assignment_A08_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/19_Conditional_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/19_Conditional_A01_t10: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/19_Conditional_A01_t12: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/19_Conditional_A01_t14: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t10: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t11: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t15: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/21_Bitwise_Expressions_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/21_Bitwise_Expressions_A01_t12: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/21_Bitwise_Expressions_A01_t13: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/21_Bitwise_Expressions_A01_t14: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/21_Bitwise_Expressions_A01_t15: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/21_Bitwise_Expressions_A01_t16: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/21_Bitwise_Expressions_A01_t17: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/22_Equality_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/23_Relational_Expressions_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/23_Relational_Expressions_A01_t18: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/23_Relational_Expressions_A01_t19: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/23_Relational_Expressions_A01_t20: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/23_Relational_Expressions_A01_t21: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/23_Relational_Expressions_A01_t22: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/23_Relational_Expressions_A01_t23: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/24_Shift_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/24_Shift_A01_t09: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/24_Shift_A01_t10: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/24_Shift_A01_t11: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/24_Shift_A01_t12: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/24_Shift_A01_t13: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/24_Shift_A01_t14: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/25_Additive_Expressions_A01_t07: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/25_Additive_Expressions_A01_t08: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/25_Additive_Expressions_A01_t11: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/25_Additive_Expressions_A01_t12: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/25_Additive_Expressions_A01_t13: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/25_Additive_Expressions_A01_t14: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/26_Multiplicative_Expressions_A01_t10: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/26_Multiplicative_Expressions_A01_t11: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/26_Multiplicative_Expressions_A01_t14: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/26_Multiplicative_Expressions_A01_t15: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/26_Multiplicative_Expressions_A01_t16: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/26_Multiplicative_Expressions_A01_t17: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t11: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t12: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t13: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t17: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t18: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t19: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t20: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t21: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t22: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/27_Unary_Expressions_A01_t27: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/28_Postfix_Expressions_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/28_Postfix_Expressions_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/28_Postfix_Expressions_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/29_Assignable_Expressions_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/29_Assignable_Expressions_A01_t08: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/29_Assignable_Expressions_A01_t09: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/29_Assignable_Expressions_A01_t26: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/30_Identifier_Reference_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/30_Identifier_Reference_A07_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/11_Expressions/30_Identifier_Reference_A08_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/12_Statements/04_Local_Function_Declaration_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/12_Statements/06_For/1_For_Loop_A01_t07: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/12_Statements/06_For/2_For_in_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/12_Statements/07_While_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/12_Statements/08_Do_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/12_Statements/09_Switch_A02_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t51: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A01_t52: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t11: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t13: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t14: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t20: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/2_Exports_A01_t17: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/2_Exports_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/2_Exports_A03_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/13_Libraries_and_Scripts/3_Parts_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/14_Types/1_Static_Types_A02_t09: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/14_Types/4_Interface_Types_A08_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+Language/14_Types/5_Function_Types_A06_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/AssertionError/column_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/AssertionError/failedAssertion_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/AssertionError/line_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/AssertionError/url_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/Completer_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/completeException_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/completeException_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/completeException_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/completeException_A03_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/complete_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/complete_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/complete_A02_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Completer/future_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Date/subtract_A06_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/Future.immediate_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t07: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t08: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A01_t09: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A02_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A02_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/chain_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/exception_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/exception_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/exception_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/handleException_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/handleException_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/handleException_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/handleException_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/handleException_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/handleException_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/handleException_A01_t07: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/hasValue_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/isComplete_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/then_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/then_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/then_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/then_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/then_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A01_t07: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A02_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/transform_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/value_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/value_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Future/value_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A02_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Futures/wait_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/every_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/filter_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/filter_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/filter_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/filter_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/iterator_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/iterator_hasNext_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/iterator_next_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/iterator_next_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/setRange_A05_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/some_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/some_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/some_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/List/some_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Map/getKeys_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Map/getKeys_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Map/getValues_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Map/getValues_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/end_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/groupCount_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/group_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/group_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/groups_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/groups_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/pattern_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/start_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Match/str_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/filter_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/filter_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/filter_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/filter_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/filter_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/iterator_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/iterator_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/iterator_hasNext_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/iterator_hasNext_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/iterator_next_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/iterator_next_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/some_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/some_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/some_A01_t04: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/some_A01_t05: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Queue/some_A01_t06: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Assertion_A04_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A06_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Disjunction_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/RegExp_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/RegExp_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/allMatches_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/allMatches_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/firstMatch_A03_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/hasMatch_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/hasMatch_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/ignoreCase_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/multiLine_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/pattern_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/stringMatch_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/RegExp/stringMatch_A02_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Set/filter_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Set/filter_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Set/filter_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Set/some_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Set/some_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/Set/some_A01_t03: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/String/contains_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/String/contains_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/String/replaceAll_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/String/replaceFirst_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/String/split_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/String/split_A01_t02: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/core/StringBuffer/isEmpty_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/isolate/SendPort/call_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+LibTest/math/Random/nextDouble_A01_t01: Fail, OK # TODO(ahe): This test is failing after correctly implementing static warning checks in co19 test suite. The co19 authors have informed me that some of these failures are due to bugs in the test suite.
+
+
 [ $runtime == drt && ($compiler == none || $compiler == frog) ]
 *: Skip
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 2025cb9..a23d5db 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -129,10 +129,7 @@
 Language/07_Classes/1_Instance_Methods_A06_t01: Fail # Inherited from dart2js
 Language/07_Classes/1_Instance_Methods_A06_t02: Fail # Inherited from dart2js
 Language/07_Classes/2_Getters_A01_t03: Fail # inherited from VM
-Language/07_Classes/2_Getters_A01_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/2_Getters_A01_t05: Fail # inherited from VM
-Language/07_Classes/2_Getters_A01_t06: Fail # http://dartbug.com/5519
-Language/07_Classes/2_Getters_A01_t07: Fail # http://dartbug.com/5519
 Language/07_Classes/3_Setters_A04_t01: Fail # inherited from VM
 Language/07_Classes/3_Setters_A04_t02: Fail # inherited from VM
 Language/07_Classes/3_Setters_A04_t03: Fail # inherited from VM
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index b044efcd..4671c53 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -235,7 +235,6 @@
 LibTest/core/AssertionError/failedAssertion_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/AssertionError/line_A01_t02: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/AssertionError/url_A01_t01: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/List/operator_subscripted_assignment_A03_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/Map/putIfAbsent_A01_t04: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/Queue/iterator_hasNext_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/String/contains_A01_t01: Fail # TODO(ahe): Please triage this failure.
@@ -662,10 +661,7 @@
 Language/07_Classes/1_Instance_Methods_A02_t02: Fail # Checks that a compile-time error is produced if m1 has fewer named parameters than m2 (1 vs. 0) and neither have any required parameters.
 Language/07_Classes/1_Instance_Methods_A02_t05: Fail # Checks that a compile-time error is produced if m1 has almost the same set of named  parameters as m2 except for one of them having a different name.
 Language/07_Classes/2_Getters_A01_t03: Fail # Checks that a compile-time error is produced if empty formal parameter list is present.
-Language/07_Classes/2_Getters_A01_t04: Fail # Checks that a compile-time error is produced if non-empty formal parameter list is present.
 Language/07_Classes/2_Getters_A01_t05: Fail # Checks that a compile-time error is produced if an static getter has empty formal parameter list.
-Language/07_Classes/2_Getters_A01_t06: Fail # Checks that a compile-time error is produced if an arbitrary static getter specifies a single formal parameter.
-Language/07_Classes/2_Getters_A01_t07: Fail # Checks that a compile-time error is produced if an arbitrary instance getter specifies a single formal parameter.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t01: Fail # Checks that a compile-time error is produced when the overriding abstract method has fewer named parameters than the instance method being overridden (2 vs 3) and neither  have any required parameters.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # Checks that a compile-time error is produced when the overriding non-abstract  instance method has the same set of named parameters as the abstract method being overriden,  but in a different order.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # Checks that a compile-time error is produced when the overriding non-abstract  instance method has almost the same set of named parameters as the abstract method being overriden,  except for one that has a different name.
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index 99558b7..5d4ffff 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -511,22 +511,158 @@
                             result.double]);  // dynamic.y = double
 }
 
-testNamedParameters() {
+testOptionalNamedParameters() {
   final String source = r"""
       class A {
         var x, y, z, w;
         A(this.x, {this.y, this.z, this.w});
       }
+      class B {
+        var x, y;
+        B(this.x, {this.y});
+      }
+      class C {
+        var x, y;
+        C(this.x, {this.y});
+      }
+      class Test {
+        var a, b, c, d;
+        var e, f;
+        var g, h;
+
+        Test(this.a, this.b, this.c, this.d,
+             this.e, this.f,
+             this.g, this.h);
+
+        f1(x, {y, z, w}) {
+          a = x;
+          b = y;
+          c = z;
+          d = w;
+        }
+        f2(x, {y}) {
+          e = x;
+          f = y;
+        }
+        f3(x, {y}) {
+          g = x;
+          h = y;
+        }
+      }
+      class Foo {
+      }
       main() {
+        // We want to test expiclitely for null later so we initialize all the
+        // fields of Test with a placeholder type: Foo.
+        var foo = new Foo();
+        var test = new Test(foo, foo, foo, foo, foo, foo, foo, foo);
+
         new A(42);
         new A('abc', w: true, z: 42.0);
+        test.f1(42);
+        test.f1('abc', w: true, z: 42.0);
+
+        new B('abc', y: true);
+        new B(1, 2);  // too many positional arguments
+        test.f2('abc', y: true);
+        test.f2(1, 2);  // too many positional arguments
+
+        new C('abc', y: true);
+        new C(1, z: 2);  // non-existing named parameter
+        test.f3('abc', y: true);
+        test.f3(1, z: 2);  // non-existing named parameter
       }
       """;
   AnalysisResult result = analyze(source);
+
+  final foo = result.base('Foo');
+  final nil = new NullBaseType();
+
   result.checkFieldHasType('A', 'x', [result.int, result.string]);
-  result.checkFieldHasType('A', 'y', [new NullBaseType()]);
-  result.checkFieldHasType('A', 'z', [new NullBaseType(), result.double]);
-  result.checkFieldHasType('A', 'w', [new NullBaseType(), result.bool]);
+  result.checkFieldHasType('A', 'y', [nil]);
+  result.checkFieldHasType('A', 'z', [nil, result.double]);
+  result.checkFieldHasType('A', 'w', [nil, result.bool]);
+  result.checkFieldHasType('Test', 'a', [foo, result.int, result.string]);
+  result.checkFieldHasType('Test', 'b', [foo, nil]);
+  result.checkFieldHasType('Test', 'c', [foo, nil, result.double]);
+  result.checkFieldHasType('Test', 'd', [foo, nil, result.bool]);
+
+  result.checkFieldHasType('B', 'x', [result.string]);
+  result.checkFieldHasType('B', 'y', [result.bool]);
+  result.checkFieldHasType('Test', 'e', [foo, result.string]);
+  result.checkFieldHasType('Test', 'f', [foo, result.bool]);
+
+  result.checkFieldHasType('C', 'x', [result.string]);
+  result.checkFieldHasType('C', 'y', [result.bool]);
+  result.checkFieldHasType('Test', 'g', [foo, result.string]);
+  result.checkFieldHasType('Test', 'h', [foo, result.bool]);
+}
+
+testOptionalPositionalParameters() {
+  final String source = r"""
+    class A {
+      var x, y, z, w;
+      A(this.x, [this.y, this.z, this.w]);
+    }
+    class B {
+      var x, y;
+      B(this.x, [this.y]);
+    }
+    class Test {
+      var a, b, c, d;
+      var e, f;
+
+      Test(this.a, this.b, this.c, this.d,
+           this.e, this.f);
+
+      f1(x, [y, z, w]) {
+        a = x;
+        b = y;
+        c = z;
+        d = w;
+      }
+      f2(x, [y]) {
+        e = x;
+        f = y;
+      }
+    }
+    class Foo {
+    }
+    main() {
+      // We want to test expiclitely for null later so we initialize all the
+      // fields of Test with a placeholder type: Foo.
+      var foo = new Foo();
+      var test = new Test(foo, foo, foo, foo, foo, foo);
+
+      new A(42);
+      new A('abc', true, 42.0);
+      test.f1(42);
+      test.f1('abc', true, 42.0);
+
+      new B('a', true);
+      new B(1, 2, 3);  // too many arguments
+      test.f2('a', true);
+      test.f2(1, 2, 3);  // too many arguments
+    }
+  """;
+  AnalysisResult result = analyze(source);
+
+  final foo = result.base('Foo');
+  final nil = new NullBaseType();
+
+  result.checkFieldHasType('A', 'x', [result.int, result.string]);
+  result.checkFieldHasType('A', 'y', [nil, result.bool]);
+  result.checkFieldHasType('A', 'z', [nil, result.double]);
+  result.checkFieldHasType('A', 'w', [nil]);
+  result.checkFieldHasType('Test', 'a', [foo, result.int, result.string]);
+  result.checkFieldHasType('Test', 'b', [foo, nil, result.bool]);
+  result.checkFieldHasType('Test', 'c', [foo, nil, result.double]);
+  result.checkFieldHasType('Test', 'd', [foo, nil]);
+
+  result.checkFieldHasType('B', 'x', [result.string]);
+  result.checkFieldHasType('B', 'y', [result.bool]);
+  result.checkFieldHasType('Test', 'e', [foo, result.string]);
+  result.checkFieldHasType('Test', 'f', [foo, result.bool]);
 }
 
 testListLiterals() {
@@ -861,7 +997,8 @@
   testConstructor();
   testGetters();
   testSetters();
-  testNamedParameters();
+  testOptionalNamedParameters();
+  testOptionalPositionalParameters();
   testListLiterals();
   testMapLiterals();
   testReturn();
diff --git a/tests/compiler/dart2js/dead_bailout_target_test.dart b/tests/compiler/dart2js/dead_bailout_target_test.dart
new file mode 100644
index 0000000..aa3c865
--- /dev/null
+++ b/tests/compiler/dart2js/dead_bailout_target_test.dart
@@ -0,0 +1,57 @@
+// 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.
+
+// This unit test of dart2js checks that a SSA bailout target
+// instruction gets removed from the graph when it's not used.
+
+import 'compiler_helper.dart';
+
+String TEST = r'''
+main() {
+  foo(1);
+  foo([]);
+}
+
+foo(a) {
+  // Make the method recursive to always enable bailouts
+  // and force a list instantiation.
+  foo([]);
+  // Force bailout on [a].
+  for (int i = 0; i < 100; i++) a[0] = 42;
+  // Force bailout on [:a.length:].
+  for (int i = 0; i < 200; i++) a[0] = -a.length;
+}
+''';
+
+main() {
+  String generated = compile(TEST, entry: 'foo');
+
+  // Check that we only have one bailout call. The second bailout call
+  // is dead code because we know [:a.length:] is an int.
+  checkNumberOfMatches(new RegExp('bailout').allMatches(generated).iterator, 1);
+
+  // Check that the foo method does not have any call to
+  // 'getInterceptor'. The environment for the second bailout contains
+  // the interceptor of [:a.length:], but since the bailout is
+  // removed, the interceptor is removed too.
+  Expect.isTrue(!generated.contains('getInterceptor'));
+
+  generated = compileAll(TEST);
+  
+  // Check that the foo bailout method is generated.
+  checkNumberOfMatches(
+      new RegExp('foo\\\$bailout').allMatches(generated).iterator, 2);
+
+  // Check that it's the only bailout method.
+  checkNumberOfMatches(new RegExp('bailout').allMatches(generated).iterator, 2);
+
+  // Check that the bailout method has a case 2 for the state, which
+  // is the second bailout in foo.
+  RegExp state = new RegExp('case 2:[ \n]+state0 = 0;');
+  checkNumberOfMatches(state.allMatches(generated).iterator, 1);
+
+  // Finally, make sure that the reason foo does not contain
+  // 'getInterceptor' is not because the compiler renamed it.
+  Expect.isTrue(generated.contains('getInterceptor'));
+}
diff --git a/tests/compiler/dart2js/minify_many_locals_test.dart b/tests/compiler/dart2js/minify_many_locals_test.dart
index 98260b9..510d46f 100644
--- a/tests/compiler/dart2js/minify_many_locals_test.dart
+++ b/tests/compiler/dart2js/minify_many_locals_test.dart
@@ -20,7 +20,8 @@
   RegExp re = new RegExp(r"\(a,b,c");
   Expect.isTrue(re.hasMatch(generated));
 
-  re = new RegExp(r"x,y,z,A,B,C");
+  // 'z' will be used as a local.
+  re = new RegExp(r"x,y,A,B,C");
   Expect.isTrue(re.hasMatch(generated));
   
   re = new RegExp(r"Y,Z,a0,a1,a2,a3,a4,a5,a6");
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 88a9206..bb71b40 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -58,6 +58,7 @@
   class JSArray {
     var length;
     operator[](index) {}
+    operator[]=(index, value) {}
     var add;
   }
   class JSString {
@@ -65,6 +66,17 @@
     operator[](index) {}
   }
   class JSNumber {
+    operator-() {}
+    operator +(other) {}
+    operator -(other) {}
+    operator ~/(other) {}
+    operator /(other) {}
+    operator *(other) {}
+    operator <<(other) {}
+    operator >>(other) {}
+    operator |(other) {}
+    operator &(other) {}
+    operator ^(other) {}
   }
   class JSInt {
   }
@@ -140,6 +152,18 @@
     // the interfaces of the Object class which would be 'null' if the class
     // wasn't resolved.
     objectClass.ensureResolved(this);
+
+    // Our unit tests check code generation output that is affected by
+    // inlining support.
+    disableInlining = true;
+  }
+
+  /**
+   * Registers the [source] with [uri] making it possible load [source] as a
+   * library.
+   */
+  void registerSource(Uri uri, String source) {
+    sourceFiles[uri.toString()] = new MockFile(source);
   }
 
   /**
diff --git a/tests/compiler/dart2js/reexport_handled_test.dart b/tests/compiler/dart2js/reexport_handled_test.dart
new file mode 100644
index 0000000..766d1a7
--- /dev/null
+++ b/tests/compiler/dart2js/reexport_handled_test.dart
@@ -0,0 +1,53 @@
+// 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 reexport_handled_test;
+
+import 'dart:uri';
+import 'mock_compiler.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart'
+    show Element,
+         LibraryElement;
+
+final exportingLibraryUri = new Uri('exporting.dart');
+const String EXPORTING_LIBRARY_SOURCE = '''
+library exporting;
+var foo;
+''';
+
+final reexportingLibraryUri = new Uri('reexporting.dart');
+const String REEXPORTING_LIBRARY_SOURCE = '''
+library reexporting;
+export 'exporting.dart';
+''';
+
+void main() {
+  var compiler = new MockCompiler();
+  compiler.registerSource(exportingLibraryUri, EXPORTING_LIBRARY_SOURCE);
+  compiler.registerSource(reexportingLibraryUri, REEXPORTING_LIBRARY_SOURCE);
+
+  // Load exporting library before the reexporting library.
+  var exportingLibrary = compiler.libraryLoader.loadLibrary(
+      exportingLibraryUri, null, exportingLibraryUri);
+  Expect.isTrue(exportingLibrary.exportsHandled);
+  var foo = findInExports(exportingLibrary, 'foo');
+  Expect.isNotNull(foo);
+  Expect.isTrue(foo.isField());
+
+  // Load reexporting library when exports are handled on the exporting library.
+  var reexportingLibrary = compiler.libraryLoader.loadLibrary(
+      reexportingLibraryUri, null, reexportingLibraryUri);
+  foo = findInExports(reexportingLibrary, 'foo');
+  Expect.isNotNull(foo);
+  Expect.isTrue(foo.isField());
+}
+
+Element findInExports(LibraryElement library, String name) {
+  for (var export in library.exports) {
+    if (export.name.slowToString() == name) {
+      return export;
+    }
+  }
+  return null;
+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js/unparser_test.dart b/tests/compiler/dart2js/unparser_test.dart
index 441269e..cecb766 100644
--- a/tests/compiler/dart2js/unparser_test.dart
+++ b/tests/compiler/dart2js/unparser_test.dart
@@ -287,6 +287,23 @@
   testUnparseTopLevelWithMetadata('class Fisk{operator-(x){}}');
 }
 
+testMixinApplications() {
+  testUnparseTopLevelWithMetadata('typedef C = S with M;');
+  testUnparseTopLevelWithMetadata('typedef C = S with M1,M2;');
+  testUnparseTopLevelWithMetadata('typedef C = S with M1,M2,M3;');
+
+  testUnparseTopLevelWithMetadata('typedef C<A> = S with M;');
+  testUnparseTopLevelWithMetadata('typedef C<A,B> = S with M;');
+
+  testUnparseTopLevelWithMetadata('typedef C = S<A> with M;');
+  testUnparseTopLevelWithMetadata('typedef C = S<A,B> with M;');
+
+  testUnparseTopLevelWithMetadata('typedef C = S with M<A>;');
+  testUnparseTopLevelWithMetadata('typedef C = S with M<A,B>;');
+  testUnparseTopLevelWithMetadata('typedef C = S with M1<A>,M2;');
+  testUnparseTopLevelWithMetadata('typedef C = S with M1,M2<A,B>;');
+}
+
 main() {
   testSignedConstants();
   testGenericTypes();
@@ -306,4 +323,5 @@
   testCombinators();
   testRedirectingFactoryConstructors();
   testClassDeclarations();
+  testMixinApplications();
 }
diff --git a/tests/compiler/dart2js/value_range_test.dart b/tests/compiler/dart2js/value_range_test.dart
index d23e933..03f91f7 100644
--- a/tests/compiler/dart2js/value_range_test.dart
+++ b/tests/compiler/dart2js/value_range_test.dart
@@ -231,6 +231,16 @@
     var length;
   }
   class JSNumber {
+    operator +(other) {}
+    operator -(other) {}
+    operator ~/(other) {}
+    operator /(other) {}
+    operator *(other) {}
+    operator <<(other) {}
+    operator >>(other) {}
+    operator |(other) {}
+    operator &(other) {}
+    operator ^(other) {}
   }
   class JSInt {
   }
diff --git a/tests/corelib/iterable_min_max_test.dart b/tests/corelib/iterable_min_max_test.dart
index 9d7ca90..1a8c4fd 100644
--- a/tests/corelib/iterable_min_max_test.dart
+++ b/tests/corelib/iterable_min_max_test.dart
@@ -26,14 +26,14 @@
 testMinMax(iterable, min, max) {
   Expect.equals(min, iterable.min());
   Expect.equals(min, iterable.min(Comparable.compare));
-  Expect.equals(min, Collections.min(iterable));
-  Expect.equals(min, Collections.min(iterable, Comparable.compare));
+  Expect.equals(min, IterableMixinWorkaround.min(iterable));
+  Expect.equals(min, IterableMixinWorkaround.min(iterable, Comparable.compare));
   Expect.equals(max, iterable.min((a, b) => Comparable.compare(b, a)));
 
   Expect.equals(max, iterable.max());
   Expect.equals(max, iterable.max(Comparable.compare));
-  Expect.equals(max, Collections.max(iterable));
-  Expect.equals(max, Collections.max(iterable, Comparable.compare));
+  Expect.equals(max, IterableMixinWorkaround.max(iterable));
+  Expect.equals(max, IterableMixinWorkaround.max(iterable, Comparable.compare));
   Expect.equals(min, iterable.max((a, b) => Comparable.compare(b, a)));
 }
 
@@ -57,18 +57,18 @@
 
   // Objects that are not Comparable.
   Expect.equals(const C(0), cList.min(compareC));
-  Expect.equals(const C(0), Collections.min(cList, compareC));
+  Expect.equals(const C(0), IterableMixinWorkaround.min(cList, compareC));
   Expect.equals(const C(0), new List.from(cList).min(compareC));
-  Expect.equals(const C(0), Collections.min(new List.from(cList), compareC));
+  Expect.equals(const C(0), IterableMixinWorkaround.min(new List.from(cList), compareC));
   Expect.equals(const C(0), new Set.from(cList).min(compareC));
-  Expect.equals(const C(0), Collections.min(new Set.from(cList), compareC));
+  Expect.equals(const C(0), IterableMixinWorkaround.min(new Set.from(cList), compareC));
 
   Expect.equals(const C(10), cList.max(compareC));
-  Expect.equals(const C(10), Collections.max(cList, compareC));
+  Expect.equals(const C(10), IterableMixinWorkaround.max(cList, compareC));
   Expect.equals(const C(10), new List.from(cList).max(compareC));
-  Expect.equals(const C(10), Collections.max(new List.from(cList), compareC));
+  Expect.equals(const C(10), IterableMixinWorkaround.max(new List.from(cList), compareC));
   Expect.equals(const C(10), new Set.from(cList).max(compareC));
-  Expect.equals(const C(10), Collections.max(new Set.from(cList), compareC));
+  Expect.equals(const C(10), IterableMixinWorkaround.max(new Set.from(cList), compareC));
 
   bool checkedMode = false;
   assert(checkedMode = true);
diff --git a/tests/corelib/maps_test.dart b/tests/corelib/maps_test.dart
index dd521e6..6d51939 100644
--- a/tests/corelib/maps_test.dart
+++ b/tests/corelib/maps_test.dart
@@ -110,7 +110,7 @@
   void testForEachCollection(value) {
     other_map[value] = value;
   }
-  Collection values = Maps.getValues(map);
+  Iterable values = Maps.getValues(map);
   other_map = new Map();
   values.forEach(testForEachCollection);
   Expect.equals(true, !other_map.containsKey(key1));
diff --git a/tests/html/audiocontext_test.dart b/tests/html/audiocontext_test.dart
index e2b471e..33a7907 100644
--- a/tests/html/audiocontext_test.dart
+++ b/tests/html/audiocontext_test.dart
@@ -21,10 +21,10 @@
       ArrayBufferView arrayBufferView = new Float32Array.fromList([]);
       try {
         // Test that native overload is chosen correctly. Native implementation
-        // should throw 'SYNTAX_ERR' DomException because the buffer is empty.
+        // should throw 'SyntaxError' DomException because the buffer is empty.
         AudioBuffer buffer = ctx.createBuffer(arrayBufferView.buffer, false);
       } catch (e) {
-        expect(e.code, equals(DomException.SYNTAX_ERR));
+        expect(e.name, DomException.SYNTAX);
       }
   });
 
diff --git a/tests/html/cache_test.dart b/tests/html/cache_test.dart
index d70a287..5f110b2 100644
--- a/tests/html/cache_test.dart
+++ b/tests/html/cache_test.dart
@@ -1,14 +1,28 @@
 library CacheTest;
 import '../../pkg/unittest/lib/unittest.dart';
-import '../../pkg/unittest/lib/html_config.dart';
+import '../../pkg/unittest/lib/html_individual_config.dart';
 import 'dart:html';
 
 main() {
-  useHtmlConfiguration();
-  test('ApplicationCache', () {
-    ApplicationCache appCache = window.applicationCache;
-    expect(cacheStatusToString(appCache.status), equals("UNCACHED"));
+  useHtmlIndividualConfiguration();
+
+  group('supported', () {
+    test('supported', () {
+      expect(ApplicationCache.supported, true);
+    });
   });
+
+  group('ApplicationCache', () {
+    test('ApplicationCache', () {
+      var expectation = ApplicationCache.supported ? returnsNormally : throws;
+      expect(() {
+        ApplicationCache appCache = window.applicationCache;
+        expect(cacheStatusToString(appCache.status), "UNCACHED");
+      }, expectation);
+
+    });
+  });
+
 }
 
 String cacheStatusToString(int status) {
diff --git a/tests/html/element_test.dart b/tests/html/element_test.dart
index bdcf12d..d849731 100644
--- a/tests/html/element_test.dart
+++ b/tests/html/element_test.dart
@@ -105,6 +105,129 @@
 
     test('.html has no parent', () =>
         expect(new Element.html('<br/>').parent, isNull));
+
+    test('.html table', () {
+      // http://developers.whatwg.org/tabular-data.html#tabular-data
+      var node = new Element.html('''
+<table>
+ <caption>Characteristics with positive and negative sides</caption>
+ <thead>
+  <tr>
+   <th id="n"> Negative
+   <th> Characteristic
+   <th> Positive
+ <tbody>
+  <tr>
+   <td headers="n r1"> Sad
+   <th id="r1"> Mood
+   <td> Happy
+  <tr>
+   <td headers="n r2"> Failing
+   <th id="r2"> Grade
+   <td> Passing
+</table>''');
+      expect(node, predicate((x) => x is TableElement, 'is a TableElement'));
+      expect(node.tagName, 'TABLE');
+      expect(node.parent, isNull);
+      expect(node.caption.innerHtml,
+          'Characteristics with positive and negative sides');
+      expect(node.tHead.rows.length, 1);
+      expect(node.tHead.rows[0].cells.length, 3);
+      expect(node.tBodies.length, 1);
+      expect(node.tBodies[0].rows.length, 2);
+      expect(node.tBodies[0].rows[1].cells.mappedBy((c) => c.innerHtml),
+          [' Failing\n   ', ' Grade\n   ', ' Passing\n']);
+    });
+
+    test('.html caption', () {
+      var node = new Element.html('<caption><p>Table 1.');
+      expect(node, predicate((x) => x is TableCaptionElement,
+          'is a TableCaptionElement'));
+      expect(node.tagName, 'CAPTION');
+      expect(node.parent, isNull);
+      expect(node.innerHtml, '<p>Table 1.</p>');
+    });
+
+    test('.html colgroup', () {
+      var node = new Element.html('<colgroup> <col> <col> <col>');
+      expect(node, predicate((x) => x is TableColElement,
+          'is a TableColElement'));
+      expect(node.tagName, 'COLGROUP');
+      expect(node.parent, isNull);
+      expect(node.innerHtml, ' <col> <col> <col>');
+    });
+
+    test('.html col', () {
+      var node = new Element.html('<col span="2">');
+      expect(node, predicate((x) => x is TableColElement,
+          'is a TableColElement'));
+      expect(node.tagName, 'COL');
+      expect(node.parent, isNull);
+      expect(node.outerHtml, '<col span="2">');
+    });
+
+    test('.html tbody', () {
+      var innerHtml = '<tr><td headers="n r1">Sad</td><td>Happy</td></tr>';
+      var node = new Element.html('<tbody>$innerHtml');
+      expect(node, predicate((x) => x is TableSectionElement,
+          'is a TableSectionElement'));
+      expect(node.tagName, 'TBODY');
+      expect(node.parent, isNull);
+      expect(node.rows.length, 1);
+      expect(node.rows[0].cells.length, 2);
+      expect(node.innerHtml, innerHtml);
+    });
+
+    test('.html thead', () {
+      var innerHtml = '<tr><th id="n">Negative</th><th>Positive</th></tr>';
+      var node = new Element.html('<thead>$innerHtml');
+      expect(node, predicate((x) => x is TableSectionElement,
+          'is a TableSectionElement'));
+      expect(node.tagName, 'THEAD');
+      expect(node.parent, isNull);
+      expect(node.rows.length, 1);
+      expect(node.rows[0].cells.length, 2);
+      expect(node.innerHtml, innerHtml);
+    });
+
+    test('.html tfoot', () {
+      var innerHtml = '<tr><th>percentage</th><td>34.3%</td></tr>';
+      var node = new Element.html('<tfoot>$innerHtml');
+      expect(node, predicate((x) => x is TableSectionElement,
+          'is a TableSectionElement'));
+      expect(node.tagName, 'TFOOT');
+      expect(node.parent, isNull);
+      expect(node.rows.length, 1);
+      expect(node.rows[0].cells.length, 2);
+      expect(node.innerHtml, innerHtml);
+    });
+
+    test('.html tr', () {
+      var node = new Element.html('<tr><td>foo<td>bar');
+      expect(node, predicate((x) => x is TableRowElement,
+          'is a TableRowElement'));
+      expect(node.tagName, 'TR');
+      expect(node.parent, isNull);
+      expect(node.cells.mappedBy((c) => c.innerHtml), ['foo', 'bar']);
+    });
+
+    test('.html td', () {
+      var node = new Element.html('<td>foobar');
+      expect(node, predicate((x) => x is TableCellElement,
+          'is a TableCellElement'));
+      expect(node.tagName, 'TD');
+      expect(node.parent, isNull);
+      expect(node.innerHtml, 'foobar');
+    });
+
+    test('.html th', () {
+      var node = new Element.html('<th>foobar');
+      expect(node, predicate((x) => x is TableCellElement,
+          'is a TableCellElement'));
+      expect(node.tagName, 'TH');
+      expect(node.parent, isNull);
+      expect(node.innerHtml, 'foobar');
+    });
   });
 
   group('eventListening', () {
diff --git a/tests/html/element_types_test.dart b/tests/html/element_types_test.dart
index acc20b1..9ef2449 100644
--- a/tests/html/element_types_test.dart
+++ b/tests/html/element_types_test.dart
@@ -128,18 +128,9 @@
     test('fieldset', () {
       expect((new FieldSetElement()) is FieldSetElement, true);
     });
-    test('font', () {
-      expect((new Element.tag('font')) is FontElement, true);
-    });
     test('form', () {
       expect((new FormElement()) is FormElement, true);
     });
-    test('frame', () {
-      expect((new Element.tag('frame')) is FrameElement, true);
-    });
-    test('frameset', () {
-      expect((new Element.tag('frameset')) is FrameSetElement, true);
-    });
     test('head', () {
       expect((new HeadElement()) is HeadElement, true);
     });
@@ -200,10 +191,6 @@
     test('map', () {
       expect((new MapElement()) is MapElement, true);
     });
-    test('marquee', () {
-      expect((new Element.tag('marquee')) is MarqueeElement,
-          MarqueeElement.supported);
-    });
     test('menu', () {
       expect((new MenuElement()) is MenuElement, true);
     });
diff --git a/tests/html/exceptions_test.dart b/tests/html/exceptions_test.dart
index 01fcd7c..e4bbe6b 100644
--- a/tests/html/exceptions_test.dart
+++ b/tests/html/exceptions_test.dart
@@ -5,24 +5,14 @@
 
 main() {
   useHtmlConfiguration();
-  test('DomException', () {
-    try {
-      window.webkitNotifications.createNotification('', '', '');
-    } on DomException catch (e) {
-      expect(e.code, DomException.SECURITY_ERR);
-      expect(e.name, 'SecurityError');
-      expect(e.message, 'SecurityError: DOM Exception 18');
-    }
-  });
+
   test('EventException', () {
     final event = new Event('Event');
     // Intentionally do not initialize it!
     try {
       document.$dom_dispatchEvent(event);
     } on EventException catch (e) {
-      expect(e.code, EventException.UNSPECIFIED_EVENT_TYPE_ERR);
-      expect(e.name, 'UNSPECIFIED_EVENT_TYPE_ERR');
-      expect(e.message, 'UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0');
+      expect(e.name, DomException.UNSPECIFIED_EVENT_TYPE);
     }
   });
 }
diff --git a/tests/html/html.status b/tests/html/html.status
index 6738764..150e3b4 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -20,10 +20,10 @@
 input_element_test/supported_month: Fail
 input_element_test/supported_week: Fail
 shadow_dom_test/supported: Fail
+css_test: Pass, Fail # Issue 7978
 
 [ $runtime == chrome || $runtime == drt]
 audiobuffersourcenode_test: Pass, Fail  # AudiobufferSourceNode is flaky on Chrome and Dartium.
-audiocontext_test: Skip # Need to adjust to new API.
 
 [ $compiler == none && ($runtime == drt || $runtime == dartium) ]
 request_animation_frame_test: Skip   # drt hangs; requestAnimationFrame not implemented
@@ -54,7 +54,6 @@
 element_types_test/supported_object: Fail
 element_types_test/supported_output: Fail
 element_types_test/supported_shadow: Fail
-exceptions_test: Fail
 form_data_test: Fail # TODO(efortuna): Issue 7875.
 fileapi_test/supported: Fail
 inner_frame_test: Skip
@@ -66,13 +65,14 @@
 input_element_test/supported_week: Fail
 isolates_test: Skip
 measurement_test: Fail, Pass
+media_stream_test/supported: Fail
 messageevent_test: Fail
 mutationobserver_test/supported: Fail
 native_gc_test: Fail, Pass # BUG(7774): Untriaged.
+notifications_test/supported: Fail
 serialized_script_value_test: Fail
 shadow_dom_test/supported: Fail
 storage_test: Fail, Pass
-streams_test: Fail # Bug 7888
 svgelement_test/additionalConstructors: Fail
 svgelement2_test: Fail
 svg_3_test: Fail
@@ -107,11 +107,10 @@
 audiobuffersourcenode_test: Fail
 audiocontext_test: Fail
 blob_constructor_test: Fail
-cache_test: fail              # IE9 does not support ApplicationCache, but IE 10 does (and should work).
+cache_test/supported: Fail
 css_test: Fail
 dom_constructors_test: Fail
 element_test/matches: Fail # IE9 does not support matches
-exceptions_test: Fail
 fileapi_test/supported: Fail
 history_test/supported_state: Fail
 indexeddb_1_test/supported: Fail
@@ -127,12 +126,13 @@
 input_element_test/supported_time: Fail
 input_element_test/supported_url: Fail
 input_element_test/supported_week: Fail
+media_stream_test/supported: Fail
 messageevent_test: Fail
 mutationobserver_test/supported: Fail
+notifications_test/supported: Fail
 postmessage_structured_test: Skip   # BUG(5685): times out.
 serialized_script_value_test: Fail
 shadow_dom_test/supported: Fail
-streams_test: Fail # Bug 7888
 svg_3_test: Fail
 svgelement_test/additionalConstructors: Fail
 svgelement2_test: Fail
@@ -162,6 +162,7 @@
 input_element_test/supported_time: Fail, Crash
 input_element_test/supported_week: Fail, Crash
 fileapi_test/supported: Fail
+media_stream_test/supported: Fail
 node_test: Skip # Issue 6457
 shadow_dom_test/supported: Fail
 
@@ -173,7 +174,6 @@
 element_test/eventListening: Fail # Issue: 7413
 element_test/children: Fail # Issue: 7413
 audiobuffersourcenode_test: Fail
-cache_test: Fail
 canvas_test: Pass,Fail
 audiocontext_test: Fail
 blob_constructor_test: Fail
@@ -188,10 +188,10 @@
 element_test/eventListening: Crash
 element_test/queryAll: Fail
 element_webkit_test: Fail
-exceptions_test: Fail
 htmlelement_test: Fail
 indexeddb_1_test/supported: Fail
 mutationobserver_test/supported: Fail
+notifications_test/supported: Fail
 performance_api_test/supported: Fail
 serialized_script_value_test: Fail
 svg_3_test: Fail
@@ -218,7 +218,6 @@
 element_types_test/supported_keygen: Fail
 element_types_test/supported_shadow: Fail
 element_types_test/supported_track: Fail
-exceptions_test: Fail      # Uses webkitotifications, no analogue in moz
 fileapi_test/supported: Fail
 # setup code fails. prepare. (DOM callback has errors) Caught [object Event]
 inner_frame_test: Skip
@@ -230,14 +229,15 @@
 input_element_test/supported_week: Fail
 input_element_test/supported_number: Fail
 input_element_test/supported_range: Fail
+notifications_test/supported: Fail
 shadow_dom_test/supported: Fail
-streams_test: Fail # Bug 7888
 # Interfaces not implemented: SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable
 svg_3_test: Fail
 svgelement_test/additionalConstructors: Fail
 svgelement2_test: Fail
 transferables_test: Fail   # Issue 3392.
 websql_test: Fail # FF does not support web SQL
+wheelevent_test: Skip # Times out on FF 16. Issue 7943
 
 [ $runtime == ie9 && ($system == linux || $system == macos) ]
 *: Skip
diff --git a/tests/html/media_stream_test.dart b/tests/html/media_stream_test.dart
new file mode 100644
index 0000000..1e97511
--- /dev/null
+++ b/tests/html/media_stream_test.dart
@@ -0,0 +1,21 @@
+// 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.
+
+library media_stream_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_individual_config.dart';
+import 'dart:html';
+
+main() {
+  useHtmlIndividualConfiguration();
+
+  group('supported', () {
+    test('supported', () {
+      expect(MediaStream.supported, true);
+    });
+  });
+
+  // No additional tests right now since this API prompts for user input to
+  // continue.
+}
diff --git a/tests/html/native_gc_test.dart b/tests/html/native_gc_test.dart
index 87251be..e85acfb 100644
--- a/tests/html/native_gc_test.dart
+++ b/tests/html/native_gc_test.dart
@@ -32,17 +32,21 @@
   });
 
   test('WindowEventListener', () {
+    String message = 'WindowEventListenerTestPingMessage';
+
     Element testDiv = new DivElement();
     testDiv.id = '#TestDiv';
     document.body.nodes.add(testDiv);
-    window.on.message.add((e) => testDiv.click());
+    window.on.message.add((e) {
+      if (e.data == message) testDiv.click();
+    });
 
     for (int i = 0; i < 100; ++i) {
       triggerMajorGC();
     }
 
     testDiv.on.click.add(expectAsync1((e) {}));
-    window.postMessage('test', '*');
+    window.postMessage(message, '*');
   });
 }
 
diff --git a/tests/html/notifications_test.dart b/tests/html/notifications_test.dart
new file mode 100644
index 0000000..8561257
--- /dev/null
+++ b/tests/html/notifications_test.dart
@@ -0,0 +1,34 @@
+library NotificationsTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_individual_config.dart';
+import 'dart:html';
+
+main() {
+  useHtmlIndividualConfiguration();
+
+  group('supported', () {
+    test('supported', () {
+      expect(NotificationCenter.supported, true);
+    });
+  });
+
+  group('unsupported throws', () {
+    test('createNotification', () {
+      var expectation = NotificationCenter.supported ? returnsNormally : throws;
+      expect(() { window.notifications.createNotification; }, expectation);
+    });
+  });
+
+  group('webkitNotifications', () {
+    if (NotificationCenter.supported) {
+      test('DomException', () {
+        try {
+          window.notifications.createNotification('', '', '');
+        } on DomException catch (e) {
+          expect(e.name, DomException.SECURITY);
+        }
+      });
+    }
+  });
+}
+
diff --git a/tests/html/streams_test.dart b/tests/html/streams_test.dart
index 8d76320..a0f3a71 100644
--- a/tests/html/streams_test.dart
+++ b/tests/html/streams_test.dart
@@ -6,20 +6,18 @@
 
 class StreamHelper {
   var _a;
-  var _b;
   StreamHelper() {
     _a = new TextInputElement();
     document.body.append(_a);
-    _b = new TextInputElement();
-    document.body.append(_b);
   }
 
+  Element get element => _a;
   Stream<Event> get stream => _a.onFocus;
 
   // Causes an event on a to be fired.
   void pulse() {
-    _b.focus();
-    _a.focus();
+    var event = new Event('focus');
+    _a.$dom_dispatchEvent(event);
   }
 }
 
@@ -27,15 +25,14 @@
   useHtmlConfiguration();
 
   test('simple', () {
-    var a = new TextInputElement();
-    document.body.append(a);
+    var helper = new StreamHelper();
 
     var callCount = 0;
-    a.onFocus.listen((Event e) {
+    helper.stream.listen((Event e) {
       ++callCount;
     });
 
-    a.focus();
+    helper.pulse();
     expect(callCount, 1);
   });
 
@@ -44,8 +41,8 @@
     var parent = new DivElement();
     document.body.append(parent);
 
-    var child = new TextInputElement();
-    parent.append(child);
+    var helper = new StreamHelper();
+    parent.append(helper.element);
 
     var childCallCount = 0;
     var parentCallCount = 0;
@@ -54,12 +51,13 @@
       expect(childCallCount, 0);
     });
 
-    Element.focusEvent.forTarget(child, useCapture: true).listen((Event e) {
-      ++childCallCount;
-      expect(parentCallCount, 1);
-    });
+    Element.focusEvent.forTarget(helper.element, useCapture: true).listen(
+        (Event e) {
+          ++childCallCount;
+          expect(parentCallCount, 1);
+        });
 
-    child.focus();
+    helper.pulse();
     expect(childCallCount, 1);
     expect(parentCallCount, 1);
   });
diff --git a/tests/html/wheelevent_test.dart b/tests/html/wheelevent_test.dart
new file mode 100644
index 0000000..fed10deb
--- /dev/null
+++ b/tests/html/wheelevent_test.dart
@@ -0,0 +1,70 @@
+// 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 wheel_event_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+
+
+main() {
+
+  useHtmlConfiguration();
+
+  var userAgent = window.navigator.userAgent;
+
+  // Lame platform-dependent check to validate that our assumptions about
+  // which event is being used is correct.
+  var wheelEvent = 'wheel';
+  if (userAgent.contains("Opera", 0)) {
+    wheelEvent = 'mousewheel';
+  } else if (userAgent.contains("MSIE", 0)) {
+    wheelEvent = 'mousewheel';
+  } else if (userAgent.contains('Firefox')) {
+    // FF appears to have recently added support for wheel.
+    wheelEvent = 'wheel';
+  } else if (userAgent.contains('WebKit', 0)) {
+    wheelEvent = 'mousewheel';
+  }
+
+  test('wheelEvent', () {
+    var element = new DivElement();
+    element.on.mouseWheel.add(expectAsync1((e) {
+      expect(e.screenX, 100);
+      expect(e.deltaX, 0);
+      expect(e.deltaY, 240);
+    }));
+    var event = new WheelEvent(wheelEvent,
+      window,
+      0,
+      240,
+      0,
+      100,
+      200,
+      10,
+      20,
+      0);
+    element.$dom_dispatchEvent(event);
+  });
+
+  test('wheelEvent Stream', () {
+    var element = new DivElement();
+    element.onMouseWheel.listen(expectAsync1((e) {
+      expect(e.screenX, 100);
+      expect(e.deltaX, 0);
+      expect(e.deltaY, 240);
+    }));
+    var event = new WheelEvent(wheelEvent,
+      window,
+      0,
+      240,
+      0,
+      100,
+      200,
+      10,
+      20,
+      0);
+    element.$dom_dispatchEvent(event);
+  });
+}
diff --git a/tests/isolate/count_test.dart b/tests/isolate/count_test.dart
index be1d65a..7ad82d6 100644
--- a/tests/isolate/count_test.dart
+++ b/tests/isolate/count_test.dart
@@ -30,6 +30,12 @@
 
     local.receive(expectAsync2((int message, SendPort replyTo) {
       if (message == -1) {
+        // [count] is '11' because when we sent '9' to [remote],
+        // the other isolate will send another message '18', that this
+        // isolate will receive. Then this isolate will send '10' to
+        // [remote] and increment [count]. Note that this last '10'
+        // message will not be received by the other isolate, since it
+        // received '-1' before.
         expect(count, 11);
         local.close();
         return;
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index edf1b8b..5d3f8f1 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -89,6 +89,7 @@
 spawn_uri_vm_negative_test: Skip # ditto above.
 timer_not_available_test: Fail, OK # only meant to test when there is no way to
                                    # implement timer (currently only in d8)
+isolate2_negative_test: Fail, Pass # Issue 7769
 
 [ $compiler == dart2js && $jscl ]
 multiple_timer_test: Fail,OK # Needs Timer to run.
@@ -113,3 +114,6 @@
 # TODO(ajohnsen): Fix this as part of library changes.
 [ $compiler == none ]
 isolate_negative_test: Skip # Bug 6890
+
+[ $compiler == dart2js && $runtime == ff && $system == windows ]
+mandel_isolate_test: Pass, Fail, Timeout # Issue 7952
diff --git a/tests/language/arithmetic_test.dart b/tests/language/arithmetic_test.dart
index c55409f..f230b3c 100644
--- a/tests/language/arithmetic_test.dart
+++ b/tests/language/arithmetic_test.dart
@@ -209,11 +209,14 @@
     Expect.equals(0.0, (0.0).ceil());
     Expect.equals(false, (0.0).ceil().isNegative);
     Expect.equals(1.0, (0.1).ceil());
+    Expect.equals(1.0, double.MIN_POSITIVE.ceil());
+    Expect.equals(1.0, (0.49999999999999994).ceil());
     Expect.equals(-0.0, (-0.0).ceil());
     Expect.equals(-0.0, (-0.3).ceil());
-    // TODO(srdjan): enable the following tests once isNegative works.
-    // Expect.equals(true, (-0.0).ceil().isNegative);
-    // Expect.equals(true, (-0.3).ceil().isNegative);
+    Expect.isTrue((-0.0).ceil().isNegative);
+    Expect.isTrue((-0.3).ceil().isNegative);
+    Expect.equals(-0.0, (-0.49999999999999994).ceil());
+    Expect.isTrue((-0.49999999999999994).ceil().isNegative);
     Expect.equals(3.0, (2.1).ceil());
     Expect.equals(-2.0, (-2.1).ceil());
 
@@ -228,14 +231,18 @@
     // Double.
     Expect.equals(0.0, (0.0).floor());
     Expect.equals(0.0, (0.1).floor());
+    Expect.equals(0.0, (0.49999999999999994).floor());
+    Expect.equals(0.0, double.MIN_POSITIVE.floor());
     Expect.equals(false, (0.0).floor().isNegative);
     Expect.equals(false, (0.1).floor().isNegative);
     Expect.equals(-0.0, (-0.0).floor());
-    // TODO(srdjan): enable the following tests once isNegative works.
-    // Expect.equals(true, (-0.0).floor().isNegative);
+    Expect.equals(true, (-0.0).floor().isNegative);
     Expect.equals(-1.0, (-0.1).floor());
+    Expect.equals(-1.0, (-0.49999999999999994).floor());
     Expect.equals(2.0, (2.1).floor());
     Expect.equals(-3.0, (-2.1).floor());
+    Expect.equals(-3.0, (-2.1).floor());
+
 
     // -- truncate --.
     // Smi.
@@ -252,9 +259,8 @@
     Expect.equals(false, (0.1).truncate().isNegative);
     Expect.equals(-0.0, (-0.0).truncate());
     Expect.equals(-0.0, (-0.3).truncate());
-    // TODO(srdjan): enable the following tests once isNegative works.
-    // Expect.equals(true, (-0.0).truncate().isNegative);
-    // Expect.equals(true, (-0.3).truncate().isNegative);
+    Expect.equals(true, (-0.0).truncate().isNegative);
+    Expect.equals(true, (-0.3).truncate().isNegative);
     Expect.equals(2.0, (2.1).truncate());
     Expect.equals(-2.0, (-2.1).truncate());
 
@@ -419,10 +425,19 @@
     for (var i = 0; i < 10; i++) Expect.equals(0x40000000, div(a, b));
   }
 
+  static mySqrt(var x) => sqrt(x);
+
+  static testSqrtDeopt() {
+    for (var i = 0; i < 10; i++) mySqrt(4.0);
+    Expect.equals(2.0, mySqrt(4.0));
+    Expect.throws(() => mySqrt("abc"));
+  }
+
   static testMain() {
     for (int i = 0; i < 1500; i++) {
       runOne();
       testSmiDivDeopt();
+      testSqrtDeopt();
     }
   }
 }
diff --git a/tests/language/closure_parameter_types_test.dart b/tests/language/closure_parameter_types_test.dart
new file mode 100644
index 0000000..a9fa956
--- /dev/null
+++ b/tests/language/closure_parameter_types_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test for dart2js, where the optimizer was too agressive
+// about parameter types of closures.
+
+class A {
+  Function f;
+  A(this.f);
+  _do() => f(1);
+}
+
+main() {
+  int invokeCount = 0;
+  closure(a) {
+    if (invokeCount++ == 1) {
+      Expect.isTrue(a is int);
+    }
+  }
+  closure('s');
+  new A(closure)._do();
+  Expect.equals(2, invokeCount);
+}
diff --git a/tests/language/fast_method_extraction_test.dart b/tests/language/fast_method_extraction_test.dart
new file mode 100644
index 0000000..22177c7
--- /dev/null
+++ b/tests/language/fast_method_extraction_test.dart
@@ -0,0 +1,104 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Test that fast method extraction returns correct closure.
+
+class A {
+  var f;
+  A(this.f);
+  foo() => 40 + f;
+}
+
+class B {
+  var f;
+  B(this.f);
+  foo() => -40 - f;
+}
+
+class X { }
+
+class C<T> {
+  foo(v) => v is T;
+}
+
+class ChaA {
+  final magic;
+  ChaA(magic) : this.magic = magic;
+
+  foo() {
+    Expect.isTrue(this is ChaA);
+    Expect.equals("magicA", magic);
+    return "A";
+  }
+
+  bar() => foo;
+}
+
+class ChaB extends ChaA {
+  ChaB(magic) : super(magic);
+
+  foo() {
+    Expect.isTrue(this is ChaB);
+    Expect.equals("magicB", magic);
+    return "B";
+  }
+}
+
+mono(a) {
+  var f = a.foo;
+  return f();
+}
+
+poly(a) {
+  var f = a.foo;
+  return f();
+}
+
+types(a, b) {
+  var f = a.foo;
+  Expect.isTrue(f(b));
+}
+
+cha(a) {
+  var f = a.bar();
+  return f();
+}
+
+extractFromNull() {
+  var f = (null).toString;
+  Expect.equals("null", f());
+}
+
+main() {
+  var a = new A(2);
+  var b = new B(2);
+  for (var i = 0; i < 10000; i++) {
+    Expect.equals(42, mono(a));
+  }
+
+  for (var i = 0; i < 10000; i++) {
+    Expect.equals(42, poly(a));
+    Expect.equals(-42, poly(b));
+  }
+
+  var c = new C<X>();
+  var x = new X();
+  for (var i = 0; i < 10000; i++) {
+    types(c, x);
+  }
+
+  var chaA = new ChaA("magicA");
+  for (var i = 0; i < 10000; i++) {
+    Expect.equals("A", cha(chaA));
+  }
+
+  var chaB = new ChaB("magicB");
+  for (var i = 0; i < 10000; i++) {
+    Expect.equals("B", cha(chaB));
+  }
+
+  for (var i = 0; i < 10000; i++) {
+    extractFromNull();
+  }
+}
+
diff --git a/tests/language/language.status b/tests/language/language.status
index f96dc1f..99653af 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -56,6 +56,15 @@
 
 type_parameter_literal_test: Fail # Issue 7551
 
+mixin_field_test: Fail
+mixin_is_test: Fail
+mixin_method_test: Fail
+mixin_naming_test: Fail
+
+mixin_extends_field_test: Fail
+mixin_extends_is_test: Fail
+mixin_extends_method_test: Fail
+
 [ $compiler == none && ($system == macos || $system == linux) && $arch == ia32 && $checked ]
 gc_test: Skip  # Issue 1487, flaky.
 
@@ -90,9 +99,6 @@
 list_literal1_negative_test: Fail
 map_literal1_negative_test: Fail
 
-# test issue XXXX
-naming_test: Fail
-
 library_juxtaposition_test: Fail # Issue 6881
 new_expression_type_args_test/0*: Fail # Wrongly reports compile-time error.
 redirecting_factory_infinite_steps_test/01: Fail # http://dartbug.com/6560
@@ -343,6 +349,16 @@
 many_overridden_no_such_method_test: Fail, Pass, OK # Fails in minified mode, test depends on method names.
 overridden_no_such_method_test: Fail, Pass, OK # Fails in minified mode, test depends on method names.
 
+# Mixins aren't unparsed the right way yet.
+mixin_field_test: Fail # http://dartbug.com/7972
+mixin_is_test: Fail # http://dartbug.com/7972
+mixin_method_test: Fail # http://dartbug.com/7972
+mixin_naming_test: Fail # http://dartbug.com/7972
+
+mixin_extends_field_test: Fail # http://dartbug.com/7972
+mixin_extends_is_test: Fail # http://dartbug.com/7972
+mixin_extends_method_test: Fail # http://dartbug.com/7972
+
 # Malformed types not handled as unresolved:
 import_core_prefix_test: Fail
 prefix16_test: Fail
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 78b3fd4..88e22f0 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -46,7 +46,6 @@
 type_variable_bounds2_test/03: Fail
 type_variable_bounds2_test/05: Fail
 type_variable_bounds2_test/06: Pass # For the wrong reasons.
-assign_top_method_test: Pass # For the wrong reasons.
 f_bounded_quantification_test/01: Fail
 f_bounded_quantification_test/02: Fail
 closure_type_test: Fail # does not detect type error in checked mode.
@@ -111,8 +110,6 @@
 final_variable_assignment_test/04: Fail
 bad_override_test/01: Fail
 bad_override_test/02: Fail
-const_locals_test: Fail
-const_nested_test: Fail
 bad_constructor_test/04: Fail # http://dartbug.com/5519
 bad_constructor_test/05: Fail # http://dartbug.com/5519
 bad_constructor_test/06: Fail # http://dartbug.com/5519
@@ -134,8 +131,6 @@
 infinity_test: Fail # Issue 4984
 positive_bit_operations_test: Fail # (floitsch): This will be fixed when dart2js uses unsigned input for >>.
 
-getter_declaration_negative_test: Fail # This will be fixed when dart2js reject old getter syntax.
-
 compile_time_constant8_test: Fail # We don't take the generic type into account yet.
 canonical_const_test: Fail # We don't take the generic type into account yet.
 type_parameter_literal_test: Fail # Type parameters aren't supported as literals yet.
@@ -328,7 +323,6 @@
 # of failing.
 const_factory_negative_test: Crash, Fail
 
-[ $compiler == dart2js && $mode == release ]
 assign_top_method_test: Fail
 
 
diff --git a/tests/language/mixin_extends_field_test.dart b/tests/language/mixin_extends_field_test.dart
new file mode 100644
index 0000000..eafc0e8
--- /dev/null
+++ b/tests/language/mixin_extends_field_test.dart
@@ -0,0 +1,118 @@
+// 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.
+
+class S {
+  var foo = "S-foo";
+}
+
+class M1 {
+  final bar = "M1-bar";
+}
+
+class M2 {
+  var baz = "M2-baz";
+}
+
+class C extends S with M1 { }
+class D extends S with M1, M2 { }
+class E extends S with M2, M1 { }
+
+class F extends E {
+  var fez = "F-fez";
+}
+
+main() {
+  var c = new C();
+  var d = new D();
+  var e = new E();
+  var f = new F();
+
+  Expect.equals("S-foo", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  Expect.throws(() => c.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.fez, (error) => error is NoSuchMethodError);
+  Expect.equals("F-fez", f.fez);
+
+  c.foo = "S-foo-c";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  d.foo = "S-foo-d";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  e.foo = "S-foo-e";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  f.foo = "S-foo-f";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo-f", f.foo);
+
+  Expect.throws(() => c.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => f.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throws(() => c.baz = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  d.baz = "M2-baz-d";
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  e.baz = "M2-baz-e";
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  f.baz = "M2-baz-f";
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz-f", f.baz);
+
+  Expect.throws(() => c.fez = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.fez = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.fez = 0, (error) => error is NoSuchMethodError);
+
+  f.fez = "F-fez-f";
+  Expect.throws(() => c.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.fez, (error) => error is NoSuchMethodError);
+  Expect.equals("F-fez-f", f.fez);
+}
diff --git a/tests/language/mixin_extends_is_test.dart b/tests/language/mixin_extends_is_test.dart
new file mode 100644
index 0000000..4f08849
--- /dev/null
+++ b/tests/language/mixin_extends_is_test.dart
@@ -0,0 +1,77 @@
+// 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.
+
+class S { }
+class M1 { }
+class M2 { }
+
+class C extends S with M1 { }
+class D extends S with M1, M2 { }
+class E extends S with M2, M1 { }
+class F extends E { }
+
+class C_ extends S with M1 { }
+class D_ extends S with M1, M2 { }
+class E_ extends S with M2, M1 { }
+class F_ extends E_ { }
+
+main() {
+  var c = new C();
+  Expect.isTrue(c is C);
+  Expect.isFalse(c is D);
+  Expect.isFalse(c is E);
+  Expect.isFalse(c is F);
+  Expect.isTrue(c is S);
+  Expect.isTrue(c is M1);
+  Expect.isFalse(c is M2);
+
+  var d = new D();
+  Expect.isFalse(d is C);
+  Expect.isTrue(d is D);
+  Expect.isFalse(d is E);
+  Expect.isFalse(d is F);
+  Expect.isTrue(d is S);
+  Expect.isTrue(d is M1);
+  Expect.isTrue(d is M2);
+
+  var e = new E();
+  Expect.isFalse(e is C);
+  Expect.isFalse(e is D);
+  Expect.isTrue(e is E);
+  Expect.isFalse(e is F);
+  Expect.isTrue(e is S);
+  Expect.isTrue(e is M1);
+  Expect.isTrue(e is M2);
+
+  var f = new F();
+  Expect.isFalse(f is C);
+  Expect.isFalse(f is D);
+  Expect.isTrue(f is E);
+  Expect.isTrue(f is F);
+  Expect.isTrue(f is S);
+  Expect.isTrue(f is M1);
+  Expect.isTrue(f is M2);
+
+  // Make sure we get a new class for each mixin
+  // application (at least the named ones).
+  Expect.isFalse(c is C_);
+  Expect.isFalse(c is D_);
+  Expect.isFalse(c is E_);
+  Expect.isFalse(c is F_);
+
+  Expect.isFalse(d is C_);
+  Expect.isFalse(d is D_);
+  Expect.isFalse(d is E_);
+  Expect.isFalse(d is F_);
+
+  Expect.isFalse(e is C_);
+  Expect.isFalse(e is D_);
+  Expect.isFalse(e is E_);
+  Expect.isFalse(e is F_);
+
+  Expect.isFalse(f is C_);
+  Expect.isFalse(f is D_);
+  Expect.isFalse(f is E_);
+  Expect.isFalse(f is F_);
+}
diff --git a/tests/language/mixin_extends_method_test.dart b/tests/language/mixin_extends_method_test.dart
new file mode 100644
index 0000000..9465ff0
--- /dev/null
+++ b/tests/language/mixin_extends_method_test.dart
@@ -0,0 +1,52 @@
+// 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.
+
+class S {
+  foo() => "S-foo";
+  baz() => "S-baz";
+}
+
+class M1 {
+  bar() => "M1-bar";
+}
+
+class M2 {
+  bar() => "M2-bar";
+  baz() => "M2-baz";
+  fez() => "M2-fez";
+}
+
+class C extends S with M1 { }
+class D extends S with M1, M2 { }
+class E extends S with M2, M1 { }
+
+class F extends E {
+  fez() => "F-fez";
+}
+
+main() {
+  var c = new C();
+  Expect.equals("S-foo", c.foo());
+  Expect.equals("M1-bar", c.bar());
+  Expect.equals("S-baz", c.baz());
+  Expect.throws(() => c.fez(), (error) => error is NoSuchMethodError);
+
+  var d = new D();
+  Expect.equals("S-foo", d.foo());
+  Expect.equals("M2-bar", d.bar());
+  Expect.equals("M2-baz", d.baz());
+  Expect.equals("M2-fez", d.fez());
+
+  var e = new E();
+  Expect.equals("S-foo", e.foo());
+  Expect.equals("M1-bar", e.bar());
+  Expect.equals("M2-baz", e.baz());
+  Expect.equals("M2-fez", e.fez());
+
+  var f = new F();
+  Expect.equals("S-foo", f.foo());
+  Expect.equals("M1-bar", f.bar());
+  Expect.equals("M2-baz", f.baz());
+  Expect.equals("F-fez", f.fez());
+}
diff --git a/tests/language/mixin_field_test.dart b/tests/language/mixin_field_test.dart
new file mode 100644
index 0000000..251aa50
--- /dev/null
+++ b/tests/language/mixin_field_test.dart
@@ -0,0 +1,118 @@
+// 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.
+
+class S {
+  var foo = "S-foo";
+}
+
+class M1 {
+  final bar = "M1-bar";
+}
+
+class M2 {
+  var baz = "M2-baz";
+}
+
+typedef C = S with M1;
+typedef D = S with M1, M2;
+typedef E = S with M2, M1;
+
+class F extends E {
+  var fez = "F-fez";
+}
+
+main() {
+  var c = new C();
+  var d = new D();
+  var e = new E();
+  var f = new F();
+
+  Expect.equals("S-foo", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  Expect.throws(() => c.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.fez, (error) => error is NoSuchMethodError);
+  Expect.equals("F-fez", f.fez);
+
+  c.foo = "S-foo-c";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  d.foo = "S-foo-d";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  e.foo = "S-foo-e";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo", f.foo);
+
+  f.foo = "S-foo-f";
+  Expect.equals("S-foo-c", c.foo);
+  Expect.equals("S-foo-d", d.foo);
+  Expect.equals("S-foo-e", e.foo);
+  Expect.equals("S-foo-f", f.foo);
+
+  Expect.throws(() => c.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => f.bar = 0, (error) => error is NoSuchMethodError);
+  Expect.equals("M1-bar", c.bar);
+  Expect.equals("M1-bar", d.bar);
+  Expect.equals("M1-bar", e.bar);
+  Expect.equals("M1-bar", f.bar);
+
+  Expect.throws(() => c.baz = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  d.baz = "M2-baz-d";
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz", e.baz);
+  Expect.equals("M2-baz", f.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  e.baz = "M2-baz-e";
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz", f.baz);
+
+  f.baz = "M2-baz-f";
+  Expect.throws(() => c.baz, (error) => error is NoSuchMethodError);
+  Expect.equals("M2-baz-d", d.baz);
+  Expect.equals("M2-baz-e", e.baz);
+  Expect.equals("M2-baz-f", f.baz);
+
+  Expect.throws(() => c.fez = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.fez = 0, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.fez = 0, (error) => error is NoSuchMethodError);
+
+  f.fez = "F-fez-f";
+  Expect.throws(() => c.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => d.fez, (error) => error is NoSuchMethodError);
+  Expect.throws(() => e.fez, (error) => error is NoSuchMethodError);
+  Expect.equals("F-fez-f", f.fez);
+}
diff --git a/tests/language/mixin_is_test.dart b/tests/language/mixin_is_test.dart
new file mode 100644
index 0000000..2d61ab9
--- /dev/null
+++ b/tests/language/mixin_is_test.dart
@@ -0,0 +1,77 @@
+// 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.
+
+class S { }
+class M1 { }
+class M2 { }
+
+typedef C = S with M1;
+typedef D = S with M1, M2;
+typedef E = S with M2, M1;
+class F extends E { }
+
+typedef C_ = S with M1;
+typedef D_ = S with M1, M2;
+typedef E_ = S with M2, M1;
+class F_ extends E_ { }
+
+main() {
+  var c = new C();
+  Expect.isTrue(c is C);
+  Expect.isFalse(c is D);
+  Expect.isFalse(c is E);
+  Expect.isFalse(c is F);
+  Expect.isTrue(c is S);
+  Expect.isTrue(c is M1);
+  Expect.isFalse(c is M2);
+
+  var d = new D();
+  Expect.isFalse(d is C);
+  Expect.isTrue(d is D);
+  Expect.isFalse(d is E);
+  Expect.isFalse(d is F);
+  Expect.isTrue(d is S);
+  Expect.isTrue(d is M1);
+  Expect.isTrue(d is M2);
+
+  var e = new E();
+  Expect.isFalse(e is C);
+  Expect.isFalse(e is D);
+  Expect.isTrue(e is E);
+  Expect.isFalse(e is F);
+  Expect.isTrue(e is S);
+  Expect.isTrue(e is M1);
+  Expect.isTrue(e is M2);
+
+  var f = new F();
+  Expect.isFalse(f is C);
+  Expect.isFalse(f is D);
+  Expect.isTrue(f is E);
+  Expect.isTrue(f is F);
+  Expect.isTrue(f is S);
+  Expect.isTrue(f is M1);
+  Expect.isTrue(f is M2);
+
+  // Make sure we get a new class for each mixin
+  // application (at least the named ones).
+  Expect.isFalse(c is C_);
+  Expect.isFalse(c is D_);
+  Expect.isFalse(c is E_);
+  Expect.isFalse(c is F_);
+
+  Expect.isFalse(d is C_);
+  Expect.isFalse(d is D_);
+  Expect.isFalse(d is E_);
+  Expect.isFalse(d is F_);
+
+  Expect.isFalse(e is C_);
+  Expect.isFalse(e is D_);
+  Expect.isFalse(e is E_);
+  Expect.isFalse(e is F_);
+
+  Expect.isFalse(f is C_);
+  Expect.isFalse(f is D_);
+  Expect.isFalse(f is E_);
+  Expect.isFalse(f is F_);
+}
diff --git a/tests/language/mixin_method_test.dart b/tests/language/mixin_method_test.dart
new file mode 100644
index 0000000..d5643f7
--- /dev/null
+++ b/tests/language/mixin_method_test.dart
@@ -0,0 +1,52 @@
+// 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.
+
+class S {
+  foo() => "S-foo";
+  baz() => "S-baz";
+}
+
+class M1 {
+  bar() => "M1-bar";
+}
+
+class M2 {
+  bar() => "M2-bar";
+  baz() => "M2-baz";
+  fez() => "M2-fez";
+}
+
+typedef C = S with M1;
+typedef D = S with M1, M2;
+typedef E = S with M2, M1;
+
+class F extends E {
+  fez() => "F-fez";
+}
+
+main() {
+  var c = new C();
+  Expect.equals("S-foo", c.foo());
+  Expect.equals("M1-bar", c.bar());
+  Expect.equals("S-baz", c.baz());
+  Expect.throws(() => c.fez(), (error) => error is NoSuchMethodError);
+
+  var d = new D();
+  Expect.equals("S-foo", d.foo());
+  Expect.equals("M2-bar", d.bar());
+  Expect.equals("M2-baz", d.baz());
+  Expect.equals("M2-fez", d.fez());
+
+  var e = new E();
+  Expect.equals("S-foo", e.foo());
+  Expect.equals("M1-bar", e.bar());
+  Expect.equals("M2-baz", e.baz());
+  Expect.equals("M2-fez", e.fez());
+
+  var f = new F();
+  Expect.equals("S-foo", f.foo());
+  Expect.equals("M1-bar", f.bar());
+  Expect.equals("M2-baz", f.baz());
+  Expect.equals("F-fez", f.fez());
+}
diff --git a/tests/language/mixin_naming_test.dart b/tests/language/mixin_naming_test.dart
new file mode 100644
index 0000000..b3b4a9c
--- /dev/null
+++ b/tests/language/mixin_naming_test.dart
@@ -0,0 +1,44 @@
+// 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.
+
+class S { }
+class M1 { }
+class M2 { }
+class M3 { }
+
+typedef C = S with M1, M2, M3;
+class D extends S with M1, M2, M3 { }
+
+class S_M1 { }
+class S_M1_M2 { }
+
+main() {
+  var c = new C();
+  Expect.isTrue(c is C);
+  Expect.isFalse(c is D);
+  Expect.isTrue(c is S);
+  Expect.isFalse(c is S_M1);
+  Expect.isFalse(c is S_M1_M2);
+
+  var d = new D();
+  Expect.isFalse(d is C);
+  Expect.isTrue(d is D);
+  Expect.isTrue(d is S);
+  Expect.isFalse(d is S_M1);
+  Expect.isFalse(d is S_M1_M2);
+
+  var sm = new S_M1();
+  Expect.isFalse(sm is C);
+  Expect.isFalse(sm is D);
+  Expect.isFalse(sm is S);
+  Expect.isTrue(sm is S_M1);
+  Expect.isFalse(sm is S_M1_M2);
+
+  var smm = new S_M1_M2();
+  Expect.isFalse(smm is C);
+  Expect.isFalse(smm is D);
+  Expect.isFalse(smm is S);
+  Expect.isFalse(smm is S_M1);
+  Expect.isTrue(smm is S_M1_M2);
+}
diff --git a/tests/language/naming_test.dart b/tests/language/naming_test.dart
index 6198f1d..1edfb9d 100644
--- a/tests/language/naming_test.dart
+++ b/tests/language/naming_test.dart
@@ -52,24 +52,6 @@
   debugger$C$C.C$I(x) : this.x = x + 12 { }
 }
 
-class with extends debugger$C {
-  int y;
-
-  factory with.F() {
-    return new with(1, 2);
-  }
-  with(x, y) : super(x), this.y = y + 1 { }
-  with.I(x, y) : super.C(x), this.y = y + 2 { }
-  with.C(x, y) : super.C$C(x), this.y = y + 3 { }
-  with.I$C(x, y) : super.C$I(x), this.y = y + 4 { }
-  with.C$C(x, y) : super(x), this.y = y + 5 { }
-  with.C$C$C(x, y) : super.C(x), this.y = y + 6 { }
-  with.$C$I(x, y) : super.C$C(x), this.y = y + 7 { }
-  with.$$I$C(x, y) : super.C$I(x), this.y = y + 8 { }
-  with.$(x, y) : super(x), this.y = y + 9 { }
-  with.$$(x, y) : super.C(x), this.y = y + 10 { }
-}
-
 class with$I extends debugger$C {
   int y;
 
@@ -267,36 +249,6 @@
     Expect.equals(11, x.x);
     x = new debugger$C$C.C$I(0);
     Expect.equals(12, x.x);
-    x = new with(0, 0);
-    Expect.equals(5, x.x);
-    Expect.equals(1, x.y);
-    x = new with.I(0, 0);
-    Expect.equals(6, x.x);
-    Expect.equals(2, x.y);
-    x = new with.C(0, 0);
-    Expect.equals(7, x.x);
-    Expect.equals(3, x.y);
-    x = new with.I$C(0, 0);
-    Expect.equals(8, x.x);
-    Expect.equals(4, x.y);
-    x = new with.C$C(0, 0);
-    Expect.equals(5, x.x);
-    Expect.equals(5, x.y);
-    x = new with.C$C$C(0, 0);
-    Expect.equals(6, x.x);
-    Expect.equals(6, x.y);
-    x = new with.$C$I(0, 0);
-    Expect.equals(7, x.x);
-    Expect.equals(7, x.y);
-    x = new with.$$I$C(0, 0);
-    Expect.equals(8, x.x);
-    Expect.equals(8, x.y);
-    x = new with.$(0, 0);
-    Expect.equals(5, x.x);
-    Expect.equals(9, x.y);
-    x = new with.$$(0, 0);
-    Expect.equals(6, x.x);
-    Expect.equals(10, x.y);
     x = new with$I(0, 0);
     Expect.equals(5, x.x);
     Expect.equals(11, x.y);
@@ -387,14 +339,6 @@
     x = new with$I$C.$$(0, 0);
     Expect.equals(10, x.x);
     Expect.equals(40, x.y);
-    var wasCaught = false;
-    try {
-      throw new with(0, 0);
-    } on with catch (e) {
-      wasCaught = true;
-      Expect.equals(5, e.x);
-    }
-    Expect.equals(true, wasCaught);
   }
 
   static void testMemberMangling() {
@@ -409,9 +353,6 @@
     Expect.equals(6, o.x);
     o = new debugger$C$C.F();
     Expect.equals(10, o.x);
-    o = new with.F();
-    Expect.equals(6, o.x);
-    Expect.equals(3, o.y);
     o = new with$I.F();
     Expect.equals(6, o.x);
     Expect.equals(13, o.y);
@@ -424,21 +365,16 @@
   }
 
   static testFunctionParameters() {
-    a(with) {
-      return with;
-    }
-
-    b(eval) {
+    a(eval) {
       return eval;
     }
 
-    c(arguments) {
+    b(arguments) {
       return arguments;
     }
 
     Expect.equals(10, a(10));
     Expect.equals(10, b(10));
-    Expect.equals(10, c(10));
   }
 
   static testPseudoTokens() {
diff --git a/tests/language/other_library.dart b/tests/language/other_library.dart
new file mode 100644
index 0000000..f831462
--- /dev/null
+++ b/tests/language/other_library.dart
@@ -0,0 +1,15 @@
+// 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.
+
+// Test that inlining in the compiler works with privacy.
+
+library other_library;
+
+// Make [foo] small enough that is can be inlined. Make it call a
+// private method.
+foo(a) => a._bar();
+
+class A {
+  _bar() => 42;
+}
diff --git a/tests/language/private4_test.dart b/tests/language/private4_test.dart
new file mode 100644
index 0000000..226eba3
--- /dev/null
+++ b/tests/language/private4_test.dart
@@ -0,0 +1,18 @@
+// 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.
+
+// Test that inlining in the compiler works with privacy.
+
+library private4_test;
+
+import 'other_library.dart';
+
+main() {
+  Expect.equals(42, foo(new A()));
+  Expect.throws(() => foo(new B()), (e) => e is NoSuchMethodError);
+}
+
+class B {
+  _bar() => 42;
+}
diff --git a/tests/language/reexport_core_helper.dart b/tests/language/reexport_core_helper.dart
new file mode 100644
index 0000000..49798aa4
--- /dev/null
+++ b/tests/language/reexport_core_helper.dart
@@ -0,0 +1,8 @@
+// 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 reexport_core_helper;
+
+export 'dart:core';
+
diff --git a/tests/language/reexport_core_test.dart b/tests/language/reexport_core_test.dart
new file mode 100644
index 0000000..cbdc15b
--- /dev/null
+++ b/tests/language/reexport_core_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+// Tests that exports are handled for libraries loaded prior to the entry point
+// library.
+//
+// This test uses the fact that dart2js loads dart:core before the
+// reexport_core_helper and reexport_core_test libraries and the exports of
+// dart:core is therefore computed before the exports of reexport_core_helper.
+
+library reexport_core_test;
+
+import 'reexport_core_helper.dart' as core;
+
+void main() {
+  var o = new Object();
+  Expect.isTrue(o is core.Object);
+}
+
diff --git a/tests/lib/async/merge_stream_test.dart b/tests/lib/async/merge_stream_test.dart
index 2eceae5..c454dca 100644
--- a/tests/lib/async/merge_stream_test.dart
+++ b/tests/lib/async/merge_stream_test.dart
@@ -11,9 +11,9 @@
 
 testSupercedeStream() {
   { // Simple case of superceding lower priority streams.
-    StreamController s1 = new StreamController();
-    StreamController s2 = new StreamController();
-    StreamController s3 = new StreamController();
+    StreamController s1 = new StreamController.multiSubscription();
+    StreamController s2 = new StreamController.multiSubscription();
+    StreamController s3 = new StreamController.multiSubscription();
     Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
     Events expected = new Events()..add(1)..add(2)..add(3)..add(4)..close();
     Events actual = new Events.capture(merge);
@@ -28,9 +28,9 @@
   }
 
   { // Superceding more than one stream at a time.
-    StreamController s1 = new StreamController();
-    StreamController s2 = new StreamController();
-    StreamController s3 = new StreamController();
+    StreamController s1 = new StreamController.multiSubscription();
+    StreamController s2 = new StreamController.multiSubscription();
+    StreamController s3 = new StreamController.multiSubscription();
     Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
     Events expected = new Events()..add(1)..add(2)..close();
     Events actual = new Events.capture(merge);
@@ -43,9 +43,9 @@
   }
 
   { // Closing a stream before superceding it.
-    StreamController s1 = new StreamController();
-    StreamController s2 = new StreamController();
-    StreamController s3 = new StreamController();
+    StreamController s1 = new StreamController.multiSubscription();
+    StreamController s2 = new StreamController.multiSubscription();
+    StreamController s3 = new StreamController.multiSubscription();
     Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
     Events expected = new Events()..add(1)..add(2)..add(3)..close();
     Events actual = new Events.capture(merge);
@@ -59,9 +59,9 @@
   }
 
   { // Errors from all non-superceded streams are forwarded.
-    StreamController s1 = new StreamController();
-    StreamController s2 = new StreamController();
-    StreamController s3 = new StreamController();
+    StreamController s1 = new StreamController.multiSubscription();
+    StreamController s2 = new StreamController.multiSubscription();
+    StreamController s3 = new StreamController.multiSubscription();
     Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
     Events expected =
         new Events()..add(1)..error("1")..error("2")..error("3")
@@ -83,9 +83,9 @@
   }
 
   test("Pausing on a superceding stream", () {
-    StreamController s1 = new StreamController();
-    StreamController s2 = new StreamController();
-    StreamController s3 = new StreamController();
+    StreamController s1 = new StreamController.multiSubscription();
+    StreamController s2 = new StreamController.multiSubscription();
+    StreamController s3 = new StreamController.multiSubscription();
     Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
     Events expected = new Events()..add(1)..add(2)..add(3);
     Events actual = new Events.capture(merge);
@@ -114,9 +114,9 @@
 
 void testCyclicStream() {
   test("Simple case of superceding lower priority streams", () {
-    StreamController s1 = new StreamController();
-    StreamController s2 = new StreamController();
-    StreamController s3 = new StreamController();
+    StreamController s1 = new StreamController.multiSubscription();
+    StreamController s2 = new StreamController.multiSubscription();
+    StreamController s3 = new StreamController.multiSubscription();
     Stream merge = new Stream.cyclic([s1.stream, s2.stream, s3.stream]);
     Events expected =
         new Events()..add(1)..add(2)..add(3)..add(4)..add(5)..add(6)..close();
@@ -139,9 +139,9 @@
   });
 
   test("Cyclic merge with errors", () {
-    StreamController s1 = new StreamController();
-    StreamController s2 = new StreamController();
-    StreamController s3 = new StreamController();
+    StreamController s1 = new StreamController.multiSubscription();
+    StreamController s2 = new StreamController.multiSubscription();
+    StreamController s3 = new StreamController.multiSubscription();
     Stream merge = new Stream.cyclic([s1.stream, s2.stream, s3.stream]);
     Events expected =
         new Events()..add(1)..error("1")..add(2)..add(3)..error("2")
diff --git a/tests/lib/async/stream_controller_async_test.dart b/tests/lib/async/stream_controller_async_test.dart
index 7abd911..2ce7557 100644
--- a/tests/lib/async/stream_controller_async_test.dart
+++ b/tests/lib/async/stream_controller_async_test.dart
@@ -13,7 +13,7 @@
 testController() {
   // Test reduce
   test("StreamController.reduce", () {
-    StreamController c = new StreamController();
+    StreamController c = new StreamController.multiSubscription();
     c.reduce(0, (a,b) => a + b)
      .then(expectAsync1((int v) {
         Expect.equals(42, v);
@@ -24,14 +24,14 @@
   });
 
   test("StreamController.reduce throws", () {
-    StreamController c = new StreamController();
+    StreamController c = new StreamController.multiSubscription();
     c.reduce(0, (a,b) { throw "Fnyf!"; })
      .catchError(expectAsync1((e) { Expect.equals("Fnyf!", e.error); }));
     c.add(42);
   });
 
   test("StreamController.pipeInto", () {
-    StreamController c = new StreamController();
+    StreamController c = new StreamController.multiSubscription();
     var list = <int>[];
     c.pipeInto(new CollectionSink<int>(list))
      .whenComplete(expectAsync0(() {
@@ -48,7 +48,7 @@
 
 testSingleController() {
   test("Single-subscription StreamController.reduce", () {
-    StreamController c = new StreamController.singleSubscription();
+    StreamController c = new StreamController();
     c.reduce(0, (a,b) => a + b)
     .then(expectAsync1((int v) { Expect.equals(42, v); }));
     c.add(10);
@@ -57,14 +57,14 @@
   });
 
   test("Single-subscription StreamController.reduce throws", () {
-    StreamController c = new StreamController.singleSubscription();
+    StreamController c = new StreamController();
     c.reduce(0, (a,b) { throw "Fnyf!"; })
             .catchError(expectAsync1((e) { Expect.equals("Fnyf!", e.error); }));
     c.add(42);
   });
 
   test("Single-subscription StreamController.pipeInto", () {
-    StreamController c = new StreamController.singleSubscription();
+    StreamController c = new StreamController();
     var list = <int>[];
     c.pipeInto(new CollectionSink<int>(list))
      .whenComplete(expectAsync0(() {
@@ -79,7 +79,7 @@
   });
 
   test("Single-subscription StreamController subscription changes", () {
-    StreamController c = new StreamController.singleSubscription();
+    StreamController c = new StreamController();
     StreamSink sink = c.sink;
     Stream stream = c.stream;
     int counter = 0;
@@ -103,7 +103,7 @@
   test("Single-subscription StreamController events are buffered when"
        " there is no subscriber",
        () {
-    StreamController c = new StreamController.singleSubscription();
+    StreamController c = new StreamController();
     StreamSink sink = c.sink;
     Stream stream = c.stream;
     int counter = 0;
@@ -122,7 +122,7 @@
   // Test subscription changes while firing.
   test("Single-subscription StreamController subscription changes while firing",
        () {
-    StreamController c = new StreamController.singleSubscription();
+    StreamController c = new StreamController();
     StreamSink sink = c.sink;
     Stream stream = c.stream;
     int counter = 0;
diff --git a/tests/lib/async/stream_controller_test.dart b/tests/lib/async/stream_controller_test.dart
index 37c1bf9..313ccef 100644
--- a/tests/lib/async/stream_controller_test.dart
+++ b/tests/lib/async/stream_controller_test.dart
@@ -8,7 +8,147 @@
 import 'dart:async';
 import 'event_helper.dart';
 
-testController() {
+testMultiController() {
+  // Test normal flow.
+  var c = new StreamController.multiSubscription();
+  Events expectedEvents = new Events()
+      ..add(42)
+      ..add("dibs")
+      ..error("error!")
+      ..error("error too!")
+      ..close();
+  Events actualEvents = new Events.capture(c);
+  expectedEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test automatic unsubscription on error.
+  c = new StreamController.multiSubscription();
+  expectedEvents = new Events()..add(42)..error("error");
+  actualEvents = new Events.capture(c, unsubscribeOnError: true);
+  Events sentEvents =
+      new Events()..add(42)..error("error")..add("Are you there?");
+  sentEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test manual unsubscription.
+  c = new StreamController.multiSubscription();
+  expectedEvents = new Events()..add(42)..error("error")..add(37);
+  actualEvents = new Events.capture(c, unsubscribeOnError: false);
+  expectedEvents.replay(c);
+  actualEvents.subscription.cancel();
+  c.add("Are you there");  // Not sent to actualEvents.
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test filter.
+  c = new StreamController.multiSubscription();
+  expectedEvents = new Events()
+    ..add("a string")..add("another string")..close();
+  sentEvents = new Events()
+    ..add("a string")..add(42)..add("another string")..close();
+  actualEvents = new Events.capture(c.where((v) => v is String));
+  sentEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test map.
+  c = new StreamController.multiSubscription();
+  expectedEvents = new Events()..add("abab")..error("error")..close();
+  sentEvents = new Events()..add("ab")..error("error")..close();
+  actualEvents = new Events.capture(c.mappedBy((v) => "$v$v"));
+  sentEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test handleError.
+  c = new StreamController.multiSubscription();
+  expectedEvents = new Events()..add("ab")..error("[foo]");
+  sentEvents = new Events()..add("ab")..error("foo")..add("ab")..close();
+  actualEvents = new Events.capture(c.handleError((v) {
+        if (v.error is String) {
+          throw new AsyncError("[${v.error}]",
+                                "other stack");
+        }
+      }), unsubscribeOnError: true);
+  sentEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // reduce is tested asynchronously and therefore not in this file.
+
+  // Test expand
+  c = new StreamController.multiSubscription();
+  sentEvents = new Events()..add(3)..add(2)..add(4)..close();
+  expectedEvents = new Events()..add(1)..add(2)..add(3)
+                               ..add(1)..add(2)
+                               ..add(1)..add(2)..add(3)..add(4)
+                               ..close();
+  actualEvents = new Events.capture(c.expand((v) {
+    var l = [];
+    for (int i = 0; i < v; i++) l.add(i + 1);
+    return l;
+  }));
+  sentEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test transform.
+  c = new StreamController.multiSubscription();
+  sentEvents = new Events()..add("a")..error(42)..add("b")..close();
+  expectedEvents =
+      new Events()..error("a")..add(42)..error("b")..add("foo")..close();
+  actualEvents = new Events.capture(c.transform(new StreamTransformer.from(
+      onData: (v, s) { s.signalError(new AsyncError(v)); },
+      onError: (e, s) { s.add(e.error); },
+      onDone: (s) {
+        s.add("foo");
+        s.close();
+      })));
+  sentEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test multiple filters.
+  c = new StreamController.multiSubscription();
+  sentEvents = new Events()..add(42)
+                           ..add("snugglefluffy")
+                           ..add(7)
+                           ..add("42")
+                           ..error("not FormatException")  // Unsubscribes.
+                           ..close();
+  expectedEvents = new Events()..add(42)..error("not FormatException");
+  actualEvents = new Events.capture(
+      c.where((v) => v is String)
+       .mappedBy((v) => int.parse(v))
+       .handleError((v) {
+          if (v.error is! FormatException) throw v;
+        })
+       .where((v) => v > 10),
+      unsubscribeOnError: true);
+  sentEvents.replay(c);
+  Expect.listEquals(expectedEvents.events, actualEvents.events);
+
+  // Test subscription changes while firing.
+  c = new StreamController.multiSubscription();
+  var sink = c.sink;
+  var stream = c.stream;
+  var counter = 0;
+  var subscription = stream.listen(null);
+  subscription.onData((data) {
+    counter += data;
+    subscription.cancel();
+    stream.listen((data) {
+      counter += 10 * data;
+    });
+    var subscription2 = stream.listen(null);
+    subscription2.onData((data) {
+      counter += 100 * data;
+      if (data == 4) subscription2.cancel();
+    });
+  });
+  sink.add(1); // seen by stream 1
+  sink.add(2); // seen by stream 10 and 100
+  sink.add(3); // -"-
+  sink.add(4); // -"-
+  sink.add(5); // seen by stream 10
+  Expect.equals(1 + 20 + 200 + 30 + 300 + 40 + 400 + 50, counter);
+}
+
+testSingleController() {
   // Test normal flow.
   var c = new StreamController();
   Events expectedEvents = new Events()
@@ -87,148 +227,8 @@
   sentEvents.replay(c);
   Expect.listEquals(expectedEvents.events, actualEvents.events);
 
-  // Test transform.
-  c = new StreamController();
-  sentEvents = new Events()..add("a")..error(42)..add("b")..close();
-  expectedEvents =
-      new Events()..error("a")..add(42)..error("b")..add("foo")..close();
-  actualEvents = new Events.capture(c.transform(new StreamTransformer.from(
-      onData: (v, s) { s.signalError(new AsyncError(v)); },
-      onError: (e, s) { s.add(e.error); },
-      onDone: (s) {
-        s.add("foo");
-        s.close();
-      })));
-  sentEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // Test multiple filters.
-  c = new StreamController();
-  sentEvents = new Events()..add(42)
-                           ..add("snugglefluffy")
-                           ..add(7)
-                           ..add("42")
-                           ..error("not FormatException")  // Unsubscribes.
-                           ..close();
-  expectedEvents = new Events()..add(42)..error("not FormatException");
-  actualEvents = new Events.capture(
-      c.where((v) => v is String)
-       .mappedBy((v) => int.parse(v))
-       .handleError((v) {
-          if (v.error is! FormatException) throw v;
-        })
-       .where((v) => v > 10),
-      unsubscribeOnError: true);
-  sentEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // Test subscription changes while firing.
-  c = new StreamController();
-  var sink = c.sink;
-  var stream = c.stream;
-  var counter = 0;
-  var subscription = stream.listen(null);
-  subscription.onData((data) {
-    counter += data;
-    subscription.cancel();
-    stream.listen((data) {
-      counter += 10 * data;
-    });
-    var subscription2 = stream.listen(null);
-    subscription2.onData((data) {
-      counter += 100 * data;
-      if (data == 4) subscription2.cancel();
-    });
-  });
-  sink.add(1); // seen by stream 1
-  sink.add(2); // seen by stream 10 and 100
-  sink.add(3); // -"-
-  sink.add(4); // -"-
-  sink.add(5); // seen by stream 10
-  Expect.equals(1 + 20 + 200 + 30 + 300 + 40 + 400 + 50, counter);
-}
-
-testSingleController() {
-  // Test normal flow.
-  var c = new StreamController.singleSubscription();
-  Events expectedEvents = new Events()
-      ..add(42)
-      ..add("dibs")
-      ..error("error!")
-      ..error("error too!")
-      ..close();
-  Events actualEvents = new Events.capture(c);
-  expectedEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // Test automatic unsubscription on error.
-  c = new StreamController.singleSubscription();
-  expectedEvents = new Events()..add(42)..error("error");
-  actualEvents = new Events.capture(c, unsubscribeOnError: true);
-  Events sentEvents =
-      new Events()..add(42)..error("error")..add("Are you there?");
-  sentEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // Test manual unsubscription.
-  c = new StreamController.singleSubscription();
-  expectedEvents = new Events()..add(42)..error("error")..add(37);
-  actualEvents = new Events.capture(c, unsubscribeOnError: false);
-  expectedEvents.replay(c);
-  actualEvents.subscription.cancel();
-  c.add("Are you there");  // Not sent to actualEvents.
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // Test filter.
-  c = new StreamController.singleSubscription();
-  expectedEvents = new Events()
-    ..add("a string")..add("another string")..close();
-  sentEvents = new Events()
-    ..add("a string")..add(42)..add("another string")..close();
-  actualEvents = new Events.capture(c.where((v) => v is String));
-  sentEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // Test map.
-  c = new StreamController.singleSubscription();
-  expectedEvents = new Events()..add("abab")..error("error")..close();
-  sentEvents = new Events()..add("ab")..error("error")..close();
-  actualEvents = new Events.capture(c.mappedBy((v) => "$v$v"));
-  sentEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // Test handleError.
-  c = new StreamController.singleSubscription();
-  expectedEvents = new Events()..add("ab")..error("[foo]");
-  sentEvents = new Events()..add("ab")..error("foo")..add("ab")..close();
-  actualEvents = new Events.capture(c.handleError((v) {
-        if (v.error is String) {
-          throw new AsyncError("[${v.error}]",
-                                "other stack");
-        }
-      }), unsubscribeOnError: true);
-  sentEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
-  // reduce is tested asynchronously and therefore not in this file.
-
-  // Test expand
-  c = new StreamController.singleSubscription();
-  sentEvents = new Events()..add(3)..add(2)..add(4)..close();
-  expectedEvents = new Events()..add(1)..add(2)..add(3)
-                               ..add(1)..add(2)
-                               ..add(1)..add(2)..add(3)..add(4)
-                               ..close();
-  actualEvents = new Events.capture(c.expand((v) {
-    var l = [];
-    for (int i = 0; i < v; i++) l.add(i + 1);
-    return l;
-  }));
-  sentEvents.replay(c);
-  Expect.listEquals(expectedEvents.events, actualEvents.events);
-
   // pipe is tested asynchronously and therefore not in this file.
-  c = new StreamController.singleSubscription();
+  c = new StreamController();
   var list = <int>[];
   c.pipeInto(new CollectionSink<int>(list))
    .whenComplete(() { Expect.listEquals(<int>[1,2,9,3,9], list); });
@@ -240,7 +240,7 @@
   c.close();
 
   // Test transform.
-  c = new StreamController.singleSubscription();
+  c = new StreamController();
   sentEvents = new Events()..add("a")..error(42)..add("b")..close();
   expectedEvents =
       new Events()..error("a")..add(42)..error("b")..add("foo")..close();
@@ -255,7 +255,7 @@
   Expect.listEquals(expectedEvents.events, actualEvents.events);
 
   // Test multiple filters.
-  c = new StreamController.singleSubscription();
+  c = new StreamController();
   sentEvents = new Events()..add(42)
                            ..add("snugglefluffy")
                            ..add(7)
@@ -275,7 +275,7 @@
   Expect.listEquals(expectedEvents.events, actualEvents.events);
 
   // Test that only one subscription is allowed.
-  c = new StreamController.singleSubscription();
+  c = new StreamController();
   var sink = c.sink;
   var stream = c.stream;
   var counter = 0;
@@ -355,7 +355,7 @@
 }
 
 main() {
-  testController();
+  testMultiController();
   testSingleController();
   testExtraMethods();
 }
diff --git a/tests/lib/async/stream_from_iterable_test.dart b/tests/lib/async/stream_from_iterable_test.dart
index 4afd889..f724bf4 100644
--- a/tests/lib/async/stream_from_iterable_test.dart
+++ b/tests/lib/async/stream_from_iterable_test.dart
@@ -36,21 +36,26 @@
                                             .mappedBy((i) => "$i")).run();
 
   Iterable<int> iter = new Iterable.generate(25, (i) => i * 2);
-  new Stream.fromIterable(iter).toList().then(expectAsync1((actual) {
-    List expected = iter.toList();
-    Expect.equals(25, expected.length);
-    Expect.listEquals(expected, actual);
-  }));
 
-  new Stream.fromIterable(iter)
-    .mappedBy((i) => i * 3)
-    .toList()
-    .then(expectAsync1((actual) {
-       List expected = iter.mappedBy((i) => i * 3).toList();
-       Expect.listEquals(expected, actual);
+  test("iterable-toList", () {
+    new Stream.fromIterable(iter).toList().then(expectAsync1((actual) {
+      List expected = iter.toList();
+      Expect.equals(25, expected.length);
+      Expect.listEquals(expected, actual);
     }));
+  });
 
-  {  // Test pause.
+  test("iterable-mapped-toList", () {
+    new Stream.fromIterable(iter)
+      .mappedBy((i) => i * 3)
+      .toList()
+      .then(expectAsync1((actual) {
+         List expected = iter.mappedBy((i) => i * 3).toList();
+         Expect.listEquals(expected, actual);
+      }));
+  });
+
+  test("iterable-paused", () {
     Stream stream = new Stream.fromIterable(iter);
     Events actual = new Events();
     StreamSubscription subscription;
@@ -63,5 +68,5 @@
       Events expected = new Events.fromIterable(iter);
       Expect.listEquals(expected.events, actual.events);
     }));
-  }
+  });
 }
diff --git a/tests/lib/async/stream_single_test.dart b/tests/lib/async/stream_single_test.dart
index 4844f8d..eadce7f 100644
--- a/tests/lib/async/stream_single_test.dart
+++ b/tests/lib/async/stream_single_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// Test the basic StreamController and StreamController.singleSubscription.
+// Test the Stream.single method.
 library stream_single_test;
 
 import 'dart:async';
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 0ef7a26..3feb049 100644
--- a/tests/lib/async/stream_single_to_multi_subscriber_test.dart
+++ b/tests/lib/async/stream_single_to_multi_subscriber_test.dart
@@ -12,7 +12,7 @@
 
 main() {
   test("tomulti 1", () {
-    StreamController c = new StreamController<int>.singleSubscription();
+    StreamController c = new StreamController<int>();
     Stream<int> multi = c.stream.asMultiSubscriberStream();
     // Listen twice.
     multi.listen(expectAsync1((v) => Expect.equals(42, v)));
@@ -21,7 +21,7 @@
   });
 
   test("tomulti 2", () {
-    StreamController c = new StreamController<int>.singleSubscription();
+    StreamController c = new StreamController<int>();
     Stream<int> multi = c.stream.asMultiSubscriberStream();
     Events expected = new Events.fromIterable([1, 2, 3, 4, 5]);
     Events actual1 = new Events.capture(multi);
@@ -36,7 +36,7 @@
   });
 
   test("tomulti no-op", () {
-    StreamController c = new StreamController<int>();
+    StreamController c = new StreamController<int>.multiSubscription();
     Stream<int> multi = c.stream.asMultiSubscriberStream();
     Events expected = new Events.fromIterable([1, 2, 3, 4, 5]);
     Events actual1 = new Events.capture(multi);
diff --git a/tests/standalone/int_array_load_elimination_test.dart b/tests/standalone/int_array_load_elimination_test.dart
new file mode 100644
index 0000000..9dc3523
--- /dev/null
+++ b/tests/standalone/int_array_load_elimination_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Test correct load elimination for scalar lists.
+
+// TODO: remove once bug 2264 fixed.
+library int_array_load_elimination;
+
+import 'dart:scalarlist';
+
+void testUint16() {
+  Uint16List intArray = new Uint16List(1);
+  intArray[0] = -1;
+  var x = intArray[0];
+  Expect.equals(65535, x);
+}
+
+main() {
+  for (int i = 0; i < 2000; i++) {
+    testUint16();
+  }
+}
diff --git a/tests/standalone/int_array_test.dart b/tests/standalone/int_array_test.dart
index e3dfed5..f02fdf7 100644
--- a/tests/standalone/int_array_test.dart
+++ b/tests/standalone/int_array_test.dart
@@ -9,6 +9,50 @@
 
 import 'dart:scalarlist';
 
+void testInt16() {
+  Int16List intArray = new Int16List(4);
+  intArray[0] = 0;
+  intArray[1] = -1;
+  intArray[2] = -2;
+  intArray[3] = -3;
+  for (int i = 0; i < intArray.length; i++) {
+    intArray[i]++;
+  }
+  var x = intArray[0];
+  var y = intArray[1];
+  var z = intArray[2];
+  var w = intArray[3];
+  Expect.equals(1, x);
+  Expect.equals(0, y);
+  Expect.equals(-1, z);
+  Expect.equals(-2, w);
+  var t = y + 1;
+  intArray[0] = t;
+  Expect.equals(t, intArray[0]);
+}
+
+void testUint16() {
+  Uint16List intArray = new Uint16List(4);
+  intArray[0] = 0;
+  intArray[1] = 1;
+  intArray[2] = 2;
+  intArray[3] = 3;
+  for (int i = 0; i < intArray.length; i++) {
+    intArray[i]--;
+  }
+  var x = intArray[0];
+  var y = intArray[1];
+  var z = intArray[2];
+  var w = intArray[3];
+  Expect.equals(65535, x);
+  Expect.equals(0, y);
+  Expect.equals(1, z);
+  Expect.equals(2, w); 
+  var t = y + 1;
+  intArray[0] = t;
+  Expect.equals(t, intArray[0]);
+}
+
 void testInt32ToSmi() {
   Int32List intArray;
 
@@ -75,7 +119,6 @@
   var y = intArray[1];
   var z = intArray[2];
   var w = intArray[3];
-  print(w);
   Expect.equals(4611686018427387903, x);
   Expect.equals(18446744073709551615, y);
   Expect.equals(4611686018427387904, z);
@@ -85,8 +128,9 @@
 
 main() {
   testUint64ToSmi();
-  return;
   for (int i = 0; i < 2000; i++) {
+    testInt16();
+    testUint16();
     testInt32ToSmi();
     testUint32ToSmi();
     testInt64ToSmi();
diff --git a/tests/standalone/io/http_connection_close_test.dart b/tests/standalone/io/http_connection_close_test.dart
index b6116d2..67106e6 100644
--- a/tests/standalone/io/http_connection_close_test.dart
+++ b/tests/standalone/io/http_connection_close_test.dart
@@ -43,16 +43,21 @@
 }
 
 void testStreamResponse() {
+  Timer timer;
   var server = new HttpServer();
+  server.onError = (e) {
+    server.close();
+    timer.cancel();
+  };
   server.listen("127.0.0.1", 0, backlog: 5);
   server.defaultRequestHandler = (var request, var response) {
-    new Timer.repeating(10, (x) {
+    timer = new Timer.repeating(10, (_) {
       Date now = new Date.now();
       try {
         response.outputStream.writeString(
             'data:${now.millisecondsSinceEpoch}\n\n');
       } catch (e) {
-        x.cancel();
+        timer.cancel();
         server.close();
       }
     });
diff --git a/tests/standalone/io/http_server_early_client_close_test.dart b/tests/standalone/io/http_server_early_client_close_test.dart
index a6b19ce..624442f 100644
--- a/tests/standalone/io/http_server_early_client_close_test.dart
+++ b/tests/standalone/io/http_server_early_client_close_test.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -60,7 +60,7 @@
   final bool expectRequest;
 }
 
-void testEarlyClose() {
+void testEarlyClose1() {
   List<EarlyCloseTest> tests = new List<EarlyCloseTest>();
   void add(Object data, String exception, {bool expectRequest: false}) {
     tests.add(new EarlyCloseTest(data, exception, expectRequest));
@@ -95,6 +95,35 @@
   runTest(tests.iterator);
 }
 
+testEarlyClose2() {
+  var server = new HttpServer();
+  server.listen("127.0.0.1", 0);
+  server.onError = (e) { /* ignore */ };
+  server.defaultRequestHandler = (request, response) {
+    String name = new Options().script;
+    new File(name).openInputStream().pipe(response.outputStream);
+  };
+
+  var count = 0;
+  var makeRequest;
+  makeRequest = () {
+    Socket socket = new Socket("127.0.0.1", server.port);
+    socket.onConnect = () {
+      var data = "GET / HTTP/1.1\r\nContent-Length: 0\r\n\r\n".charCodes;
+      socket.writeList(data, 0, data.length);
+      socket.close();
+      if (++count < 10) {
+        makeRequest();
+      } else {
+        server.close();
+      }
+    };
+  };
+
+  makeRequest();
+}
+
 void main() {
-  testEarlyClose();
+  testEarlyClose1();
+  testEarlyClose2();
 }
diff --git a/tests/standalone/io/http_server_socket_test.dart b/tests/standalone/io/http_server_socket_test.dart
index 6a71fd8..13b92d8 100644
--- a/tests/standalone/io/http_server_socket_test.dart
+++ b/tests/standalone/io/http_server_socket_test.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -16,6 +16,10 @@
     _onNoPendingWrites = callback;
   }
 
+  void set onClosed(void callback()) {
+    // Not used in test.
+  }
+
   void set onError(void callback(e)) {
     _onError = callback;
   }
diff --git a/tests/standalone/io/path_test.dart b/tests/standalone/io/path_test.dart
index b6d1b99..55c5031 100644
--- a/tests/standalone/io/path_test.dart
+++ b/tests/standalone/io/path_test.dart
@@ -183,6 +183,7 @@
 }
 
 void testRelativeTo() {
+  // Cases where the arguments are absolute paths.
   Expect.equals('c/d',
                 new Path('/a/b/c/d').relativeTo(new Path('/a/b')).toString());
   Expect.equals('c/d',
@@ -190,28 +191,85 @@
   Expect.equals('.',
                 new Path('/a').relativeTo(new Path('/a')).toString());
 
-  // Trailing / in base path represents directory
+  // Trailing slash in the base path has no effect.  This matches Path.join
+  // semantics, but not URL join semantics.
   Expect.equals('../../z/x/y',
       new Path('/a/b/z/x/y').relativeTo(new Path('/a/b/c/d/')).toString());
-  Expect.equals('../z/x/y',
+  Expect.equals('../../z/x/y',
       new Path('/a/b/z/x/y').relativeTo(new Path('/a/b/c/d')).toString());
-  Expect.equals('../z/x/y/',
+  Expect.equals('../../z/x/y/',
       new Path('/a/b/z/x/y/').relativeTo(new Path('/a/b/c/d')).toString());
 
-  Expect.equals('../../z/x/y',
+  Expect.equals('../../../z/x/y',
       new Path('/z/x/y').relativeTo(new Path('/a/b/c')).toString());
   Expect.equals('../../../z/x/y',
       new Path('/z/x/y').relativeTo(new Path('/a/b/c/')).toString());
 
-  // Not implemented yet.  Should return new Path('../b/c/d/').
-  Expect.throws(() =>
-                new Path('b/c/d/').relativeTo(new Path('a/')));
+  // Cases where the arguments are relative paths.
+  Expect.equals('c/d',
+      new Path('a/b/c/d').relativeTo(new Path('a/b')).toString());
+  Expect.equals('c/d',
+      new Path('/a/b/c/d').relativeTo(new Path('/a/b/')).toString());
+  Expect.equals('.',
+      new Path('a/b/c').relativeTo(new Path('a/b/c')).toString());
+  Expect.equals('.',
+      new Path('').relativeTo(new Path('')).toString());
+  Expect.equals('.',
+      new Path('.').relativeTo(new Path('.')).toString());
+  Expect.equals('a',
+      new Path('a').relativeTo(new Path('.')).toString());
+  Expect.equals('..',
+      new Path('..').relativeTo(new Path('.')).toString());
+  Expect.equals('..',
+      new Path('.').relativeTo(new Path('a')).toString());
+  Expect.equals('.',
+      new Path('..').relativeTo(new Path('..')).toString());
+  Expect.equals('./',
+      new Path('a/b/f/../c/').relativeTo(new Path('a/e/../b/c')).toString());
+  Expect.equals('d',
+      new Path('a/b/f/../c/d').relativeTo(new Path('a/e/../b/c')).toString());
+  Expect.equals('..',
+      new Path('a/b/f/../c').relativeTo(new Path('a/e/../b/c/e/')).toString());
+  Expect.equals('../..',
+      new Path('').relativeTo(new Path('a/b/')).toString());
+  Expect.equals('../../..',
+      new Path('..').relativeTo(new Path('a/b')).toString());
+  Expect.equals('../b/c/d/',
+      new Path('b/c/d/').relativeTo(new Path('a/')).toString());
+  Expect.equals('../a/b/c',
+      new Path('x/y/a//b/./f/../c').relativeTo(new Path('x//y/z')).toString());
+
+  // Case where base is a substring of relative:
+  Expect.equals('a/b',
+      new Path('/x/y//a/b').relativeTo(new Path('/x/y/')).toString());
+  Expect.equals('a/b',
+      new Path('x/y//a/b').relativeTo(new Path('x/y/')).toString());
+  Expect.equals('../ya/b',
+      new Path('/x/ya/b').relativeTo(new Path('/x/y')).toString());
+  Expect.equals('../ya/b',
+      new Path('x/ya/b').relativeTo(new Path('x/y')).toString());
+  Expect.equals('../b',
+      new Path('x/y/../b').relativeTo(new Path('x/y/.')).toString());
+  Expect.equals('a/b/c',
+      new Path('x/y/a//b/./f/../c').relativeTo(new Path('x/y')).toString());
+  Expect.equals('.',
+      new Path('/x/y//').relativeTo(new Path('/x/y/')).toString());
+  Expect.equals('.',
+      new Path('/x/y/').relativeTo(new Path('/x/y')).toString());
+
   // Should always throw - no relative path can be constructed.
   Expect.throws(() =>
                 new Path('a/b').relativeTo(new Path('../../d')));
+  // Should always throw - relative and absolute paths are compared.
+  Expect.throws(() =>
+                new Path('/a/b').relativeTo(new Path('c/d')));
+
+  Expect.throws(() =>
+                new Path('a/b').relativeTo(new Path('/a/b')));
+
 }
 
-// Test that Windows share information is maintain through
+// Test that Windows share information is maintained through
 // Path operations.
 void testWindowsShare() {
   // Windows share information only makes sense on Windows.
diff --git a/tests/standalone/io/test_runner_test.dart b/tests/standalone/io/test_runner_test.dart
index b679dc5..c492161 100644
--- a/tests/standalone/io/test_runner_test.dart
+++ b/tests/standalone/io/test_runner_test.dart
@@ -5,6 +5,7 @@
 import "dart:io";
 import "dart:isolate";
 import "dart:async";
+import "dart:utf";
 import "../../../tools/testing/dart/test_runner.dart";
 import "../../../tools/testing/dart/status_file_parser.dart";
 import "../../../tools/testing/dart/test_options.dart";
@@ -22,9 +23,9 @@
       throw "Unexpected output: ${output.result}";
     }
     print("stdout: ");
-    print(new String.fromCharCodes(output.stdout));
+    print(decodeUtf8(output.stdout));
     print("stderr: ");
-    print(new String.fromCharCodes(output.stderr));
+    print(decodeUtf8(output.stderr));
 
     print("Time: ${output.time}");
     print("Exit code: ${output.exitCode}");
diff --git a/tests/standalone/io/web_socket_no_secure_test.dart b/tests/standalone/io/web_socket_no_secure_test.dart
new file mode 100644
index 0000000..1edf224
--- /dev/null
+++ b/tests/standalone/io/web_socket_no_secure_test.dart
@@ -0,0 +1,380 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+
+// TODO(7157): Remove this test once the bug is fixed.
+// This is a copy of web_socket_test.dart with the secure connection
+// tests disabled, so it does not crash on Windows.
+import "dart:async";
+import "dart:io";
+import "dart:isolate";
+import "dart:scalarlist";
+import "dart:uri";
+
+const SERVER_ADDRESS = "127.0.0.1";
+const HOST_NAME = "localhost";
+
+
+class WebSocketInfo {
+  int messageCount = 0;
+}
+
+
+/**
+ * A SecurityConfiguration lets us run the tests over HTTP or HTTPS.
+ */
+class SecurityConfiguration {
+  final bool secure;
+  HttpClient client;
+
+  SecurityConfiguration({bool this.secure}) : client = new HttpClient();
+
+  HttpServer createServer({int backlog}) {
+    HttpServer server = secure ? new HttpsServer() : new HttpServer();
+    server.listen(SERVER_ADDRESS,
+                  0,
+                  backlog: backlog,
+                  certificate_name: "CN=$HOST_NAME");
+    return server;
+  }
+
+  WebSocketClientConnection createClient(int port,
+                                         {bool followRedirects,
+                                          String method: "GET"}) {
+    HttpClientConnection conn = client.openUrl(method, new Uri.fromString(
+        '${secure ? "https" : "http"}://$HOST_NAME:$port/'));
+    if (followRedirects != null) {
+      conn.followRedirects = followRedirects;
+    }
+    return new WebSocketClientConnection(conn);
+  }
+
+  void testRequestResponseClientCloses(
+      int totalConnections, int closeStatus, String closeReason) {
+    HttpServer server = createServer(backlog: totalConnections);
+    HttpClient client = new HttpClient();
+
+    // Make a web socket handler and set it as the HTTP server default handler.
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      var count = 0;
+      conn.onMessage = (Object message) => conn.send(message);
+      conn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals(closeReason == null ? "" : closeReason, reason);
+      };
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    int closeCount = 0;
+    String messageText = "Hello, world!";
+    for (int i = 0; i < totalConnections; i++) {
+      int messageCount = 0;
+      WebSocketClientConnection wsconn = createClient(server.port);
+      wsconn.onOpen = () => wsconn.send(messageText);
+      wsconn.onMessage = (message) {
+        messageCount++;
+        if (messageCount < 10) {
+          Expect.equals(messageText, message);
+          wsconn.send(message);
+        } else {
+          wsconn.close(closeStatus, closeReason);
+        }
+      };
+      wsconn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals("", reason);
+        closeCount++;
+        if (closeCount == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
+    }
+  }
+
+
+  void testRequestResponseServerCloses(
+      int totalConnections, int closeStatus, String closeReason) {
+    ReceivePort keepAlive = new ReceivePort();
+    HttpServer server = createServer(backlog: totalConnections);
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      String messageText = "Hello, world!";
+      int messageCount = 0;
+      conn.onMessage = (Object message) {
+        messageCount++;
+        if (messageCount < 10) {
+          Expect.equals(messageText, message);
+          conn.send(message);
+        } else {
+        conn.close(closeStatus, closeReason);
+        }
+      };
+      conn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals("", reason);
+        closeCount++;
+        if (closeCount == totalConnections) {
+          client.shutdown();
+          server.close();
+          keepAlive.close();
+      }
+      };
+      conn.send(messageText);
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    for (int i = 0; i < totalConnections; i++) {
+      WebSocketClientConnection wsconn = createClient(server.port);
+      wsconn.onMessage = (message) => wsconn.send(message);
+      wsconn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals(closeReason == null ? "" : closeReason, reason);
+      };
+    }
+  }
+
+
+  void testMessageLength(int messageLength) {
+    HttpServer server = createServer(backlog: 1);
+    bool serverReceivedMessage = false;
+    bool clientReceivedMessage = false;
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    Uint8List originalMessage = new Uint8List(messageLength);
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      conn.onMessage = (Object message) {
+        serverReceivedMessage = true;
+        Expect.listEquals(originalMessage, message);
+        conn.send(message);
+      };
+      conn.onClosed = (status, reason) {
+      };
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    WebSocketClientConnection wsconn = createClient(server.port);
+    wsconn.onMessage = (message) {
+      clientReceivedMessage = true;
+      Expect.listEquals(originalMessage, message);
+      wsconn.close();
+    };
+    wsconn.onClosed = (status, reason) {
+      Expect.isTrue(serverReceivedMessage);
+      Expect.isTrue(clientReceivedMessage);
+      client.shutdown();
+      server.close();
+    };
+    wsconn.onOpen = () {
+      wsconn.send(originalMessage);
+    };
+  }
+
+
+  void testNoUpgrade() {
+    HttpServer server = createServer(backlog: 5);
+
+    // Create a server which always responds with a redirect.
+    server.defaultRequestHandler = (request, response) {
+      response.statusCode = HttpStatus.MOVED_PERMANENTLY;
+      response.outputStream.close();
+    };
+
+    WebSocketClientConnection wsconn = createClient(server.port,
+                                                    followRedirects: false);
+    wsconn.onNoUpgrade = (response) {
+      Expect.equals(HttpStatus.MOVED_PERMANENTLY, response.statusCode);
+      client.shutdown();
+      server.close();
+    };
+  }
+
+
+  void testUsePOST() {
+    HttpServer server = createServer(backlog: 5);
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      Expect.fail("No connection expected");
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    WebSocketClientConnection wsconn = createClient(server.port,
+                                                    method: "POST");
+    wsconn.onNoUpgrade = (response) {
+      Expect.equals(HttpStatus.BAD_REQUEST, response.statusCode);
+      client.shutdown();
+      server.close();
+    };
+  }
+
+
+  void testHashCode(int totalConnections) {
+    ReceivePort keepAlive = new ReceivePort();
+    HttpServer server = createServer(backlog: totalConnections);
+    Map connections = new Map();
+
+    void handleMessage(conn, message) {
+      var info = connections[conn];
+      Expect.isNotNull(info);
+      info.messageCount++;
+      if (info.messageCount < 10) {
+        conn.send(message);
+      } else {
+        conn.close();
+      }
+    }
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      connections[conn] = new WebSocketInfo();
+      String messageText = "Hello, world!";
+      conn.onMessage = (Object message) {
+        handleMessage(conn, message);
+      };
+      conn.onClosed = (status, reason) {
+        closeCount++;
+        var info = connections[conn];
+        Expect.equals(10, info.messageCount);
+        if (closeCount == totalConnections) {
+          client.shutdown();
+          server.close();
+          keepAlive.close();
+        }
+      };
+      conn.send(messageText);
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    for (int i = 0; i < totalConnections; i++) {
+      WebSocketClientConnection wsconn = createClient(server.port);
+      wsconn.onMessage = (message) => wsconn.send(message);
+    }
+  }
+
+
+  void testW3CInterface(
+      int totalConnections, int closeStatus, String closeReason) {
+    HttpServer server = createServer(backlog: totalConnections);
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      String messageText = "Hello, world!";
+      int messageCount = 0;
+      conn.onMessage = (Object message) {
+        messageCount++;
+        if (messageCount < 10) {
+          Expect.equals(messageText, message);
+          conn.send(message);
+        } else {
+          conn.close(closeStatus, closeReason);
+        }
+      };
+      conn.onClosed = (status, reason) {
+        Expect.equals(closeStatus, status);
+        Expect.equals("", reason);
+        closeCount++;
+        if (closeCount == totalConnections) {
+          server.close();
+        }
+      };
+      conn.send(messageText);
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    void webSocketConnection() {
+      bool onopenCalled = false;
+      int onmessageCalled = 0;
+      bool oncloseCalled = false;
+
+      var websocket =
+          new WebSocket('${secure ? "wss" : "ws"}://$HOST_NAME:${server.port}');
+      Expect.equals(WebSocket.CONNECTING, websocket.readyState);
+      websocket.onopen = () {
+        Expect.isFalse(onopenCalled);
+        Expect.equals(0, onmessageCalled);
+        Expect.isFalse(oncloseCalled);
+        onopenCalled = true;
+        Expect.equals(WebSocket.OPEN, websocket.readyState);
+      };
+      websocket.onmessage = (event) {
+        onmessageCalled++;
+        Expect.isTrue(onopenCalled);
+        Expect.isFalse(oncloseCalled);
+        Expect.equals(WebSocket.OPEN, websocket.readyState);
+        websocket.send(event.data);
+      };
+      websocket.onclose = (event) {
+        Expect.isTrue(onopenCalled);
+        Expect.equals(10, onmessageCalled);
+        Expect.isFalse(oncloseCalled);
+        oncloseCalled = true;
+        Expect.isTrue(event.wasClean);
+        Expect.equals(3002, event.code);
+        Expect.equals("Got tired", event.reason);
+        Expect.equals(WebSocket.CLOSED, websocket.readyState);
+      };
+    }
+
+    for (int i = 0; i < totalConnections; i++) {
+      webSocketConnection();
+    }
+  }
+
+
+  runTests() {
+    testRequestResponseClientCloses(2, null, null);
+    testRequestResponseClientCloses(2, 3001, null);
+    testRequestResponseClientCloses(2, 3002, "Got tired");
+    testRequestResponseServerCloses(2, null, null);
+    testRequestResponseServerCloses(2, 3001, null);
+    testRequestResponseServerCloses(2, 3002, "Got tired");
+    testMessageLength(125);
+    testMessageLength(126);
+    testMessageLength(127);
+    testMessageLength(65535);
+    testMessageLength(65536);
+    testNoUpgrade();
+    testUsePOST();
+    testHashCode(2);
+    testW3CInterface(2, 3002, "Got tired");
+  }
+}
+
+
+void initializeSSL() {
+  var testPkcertDatabase =
+      new Path(new Options().script).directoryPath.append("pkcert/");
+  SecureSocket.initialize(database: testPkcertDatabase.toNativePath(),
+                          password: "dartdart");
+}
+
+
+main() {
+  new SecurityConfiguration(secure: false).runTests();
+}
diff --git a/tests/standalone/io/web_socket_secure_test.dart b/tests/standalone/io/web_socket_secure_test.dart
index 6a749ce..707e469 100644
--- a/tests/standalone/io/web_socket_secure_test.dart
+++ b/tests/standalone/io/web_socket_secure_test.dart
@@ -13,7 +13,7 @@
   HttpsServer server = new HttpsServer();
   var client = new HttpClient();
 
-  // Create a web socket handler and set is as the HTTP server default
+  // Create a web socket handler and set it as the HTTP server default
   // handler.
   WebSocketHandler wsHandler = new WebSocketHandler();
   wsHandler.onOpen = (WebSocketConnection conn) {
diff --git a/tests/standalone/io/web_socket_test.dart b/tests/standalone/io/web_socket_test.dart
index 87a3223..95d56c9 100644
--- a/tests/standalone/io/web_socket_test.dart
+++ b/tests/standalone/io/web_socket_test.dart
@@ -3,195 +3,14 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 
+import "dart:async";
 import "dart:io";
+import "dart:isolate";
 import "dart:scalarlist";
+import "dart:uri";
 
-void testRequestResponseClientCloses(
-    int totalConnections, int closeStatus, String closeReason) {
-  HttpServer server = new HttpServer();
-  HttpClient client = new HttpClient();
-
-  server.listen("127.0.0.1", 0, backlog: totalConnections);
-
-  // Create a web socket handler and set is as the HTTP server default
-  // handler.
-  WebSocketHandler wsHandler = new WebSocketHandler();
-  wsHandler.onOpen = (WebSocketConnection conn) {
-    var count = 0;
-    conn.onMessage = (Object message) => conn.send(message);
-    conn.onClosed = (status, reason) {
-      Expect.equals(closeStatus == null
-                    ? WebSocketStatus.NO_STATUS_RECEIVED
-                    : closeStatus, status);
-      Expect.equals(closeReason == null ? "" : closeReason, reason);
-    };
-  };
-  server.defaultRequestHandler = wsHandler.onRequest;
-
-  int closeCount = 0;
-  String messageText = "Hello, world!";
-  for (int i = 0; i < totalConnections; i++) {
-    int messageCount = 0;
-    HttpClientConnection conn = client.get("127.0.0.1", server.port, "/");
-    WebSocketClientConnection wsconn = new WebSocketClientConnection(conn);
-    wsconn.onOpen = () => wsconn.send(messageText);
-    wsconn.onMessage = (message) {
-      messageCount++;
-      if (messageCount < 10) {
-        Expect.equals(messageText, message);
-        wsconn.send(message);
-      } else {
-        wsconn.close(closeStatus, closeReason);
-      }
-    };
-    wsconn.onClosed = (status, reason) {
-      Expect.equals(closeStatus == null
-                    ? WebSocketStatus.NO_STATUS_RECEIVED
-                    : closeStatus, status);
-      Expect.equals("", reason);
-      closeCount++;
-      if (closeCount == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
-    };
-  }
-}
-
-
-void testRequestResponseServerCloses(
-    int totalConnections, int closeStatus, String closeReason) {
-  HttpServer server = new HttpServer();
-  HttpClient client = new HttpClient();
-
-  server.listen("127.0.0.1", 0, backlog: totalConnections);
-
-  // Create a web socket handler and set is as the HTTP server default
-  // handler.
-  int closeCount = 0;
-  WebSocketHandler wsHandler = new WebSocketHandler();
-  wsHandler.onOpen = (WebSocketConnection conn) {
-    String messageText = "Hello, world!";
-    int messageCount = 0;
-    conn.onMessage = (Object message) {
-      messageCount++;
-      if (messageCount < 10) {
-        Expect.equals(messageText, message);
-        conn.send(message);
-      } else {
-        conn.close(closeStatus, closeReason);
-      }
-    };
-    conn.onClosed = (status, reason) {
-      Expect.equals(closeStatus == null
-                    ? WebSocketStatus.NO_STATUS_RECEIVED
-                    : closeStatus, status);
-      Expect.equals("", reason);
-      closeCount++;
-      if (closeCount == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
-    };
-    conn.send(messageText);
-  };
-  server.defaultRequestHandler = wsHandler.onRequest;
-
-  for (int i = 0; i < totalConnections; i++) {
-    HttpClientConnection conn = client.get("127.0.0.1", server.port, "/");
-    WebSocketClientConnection wsconn = new WebSocketClientConnection(conn);
-    wsconn.onMessage = (message) => wsconn.send(message);
-    wsconn.onClosed = (status, reason) {
-      Expect.equals(closeStatus == null
-                    ? WebSocketStatus.NO_STATUS_RECEIVED
-                    : closeStatus, status);
-      Expect.equals(closeReason == null ? "" : closeReason, reason);
-    };
-  }
-}
-
-
-void testMessageLength(int messageLength) {
-  HttpServer server = new HttpServer();
-  HttpClient client = new HttpClient();
-
-  server.listen("127.0.0.1", 0, backlog: 1);
-
-  // Create a web socket handler and set is as the HTTP server default
-  // handler.
-  Uint8List originalMessage = new Uint8List(messageLength);
-  WebSocketHandler wsHandler = new WebSocketHandler();
-  wsHandler.onOpen = (WebSocketConnection conn) {
-    conn.onMessage = (Object message) {
-      Expect.listEquals(originalMessage, message);
-      conn.send(message);
-    };
-    conn.onClosed = (status, reason) {
-    };
-  };
-  server.defaultRequestHandler = wsHandler.onRequest;
-
-  HttpClientConnection conn = client.get("127.0.0.1", server.port, "/");
-  WebSocketClientConnection wsconn = new WebSocketClientConnection(conn);
-  wsconn.onMessage = (message) {
-    Expect.listEquals(originalMessage, message);
-    wsconn.close();
-  };
-  wsconn.onClosed = (status, reason) {
-    server.close();
-  };
-  wsconn.onOpen = () {
-    wsconn.send(originalMessage);
-  };
-}
-
-
-void testNoUpgrade() {
-  HttpServer server = new HttpServer();
-  HttpClient client = new HttpClient();
-
-  server.listen("127.0.0.1", 0, backlog: 5);
-
-  // Create a server which always responds with a redirect.
-  server.defaultRequestHandler = (request, response) {
-    response.statusCode = HttpStatus.MOVED_PERMANENTLY;
-    response.outputStream.close();
-  };
-
-  HttpClientConnection conn = client.get("127.0.0.1", server.port, "/");
-  conn.followRedirects = false;
-  WebSocketClientConnection wsconn = new WebSocketClientConnection(conn);
-  wsconn.onNoUpgrade = (response) {
-    Expect.equals(HttpStatus.MOVED_PERMANENTLY, response.statusCode);
-    client.shutdown();
-    server.close();
-  };
-}
-
-
-void testUsePOST() {
-  HttpServer server = new HttpServer();
-  HttpClient client = new HttpClient();
-
-  server.listen("127.0.0.1", 0, backlog: 5);
-
-  // Create a web socket handler and set is as the HTTP server default
-  // handler.
-  int closeCount = 0;
-  WebSocketHandler wsHandler = new WebSocketHandler();
-  wsHandler.onOpen = (WebSocketConnection conn) {
-    Expect.fail("No connection expected");
-  };
-  server.defaultRequestHandler = wsHandler.onRequest;
-
-  HttpClientConnection conn = client.post("127.0.0.1", server.port, "/");
-  WebSocketClientConnection wsconn = new WebSocketClientConnection(conn);
-  wsconn.onNoUpgrade = (response) {
-    Expect.equals(HttpStatus.BAD_REQUEST, response.statusCode);
-    client.shutdown();
-    server.close();
-  };
-}
+const SERVER_ADDRESS = "127.0.0.1";
+const HOST_NAME = "localhost";
 
 
 class WebSocketInfo {
@@ -199,143 +18,362 @@
 }
 
 
-void testHashCode(int totalConnections) {
-  HttpServer server = new HttpServer();
-  HttpClient client = new HttpClient();
-  Map connections = new Map();
+/**
+ * A SecurityConfiguration lets us run the tests over HTTP or HTTPS.
+ */
+class SecurityConfiguration {
+  final bool secure;
+  HttpClient client;
 
-  server.listen("127.0.0.1", 0, backlog: totalConnections);
+  SecurityConfiguration({bool this.secure}) : client = new HttpClient();
 
-  void handleMessage(conn, message) {
-    var info = connections[conn];
-    Expect.isNotNull(info);
-    info.messageCount++;
-    if (info.messageCount < 10) {
-      conn.send(message);
-    } else {
-      conn.close();
+  HttpServer createServer({int backlog}) {
+    HttpServer server = secure ? new HttpsServer() : new HttpServer();
+    server.listen(SERVER_ADDRESS,
+                  0,
+                  backlog: backlog,
+                  certificate_name: "CN=$HOST_NAME");
+    return server;
+  }
+
+  WebSocketClientConnection createClient(int port,
+                                         {bool followRedirects,
+                                          String method: "GET"}) {
+    HttpClientConnection conn = client.openUrl(method, new Uri.fromString(
+        '${secure ? "https" : "http"}://$HOST_NAME:$port/'));
+    if (followRedirects != null) {
+      conn.followRedirects = followRedirects;
+    }
+    return new WebSocketClientConnection(conn);
+  }
+
+  void testRequestResponseClientCloses(
+      int totalConnections, int closeStatus, String closeReason) {
+    HttpServer server = createServer(backlog: totalConnections);
+    HttpClient client = new HttpClient();
+
+    // Make a web socket handler and set it as the HTTP server default handler.
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      var count = 0;
+      conn.onMessage = (Object message) => conn.send(message);
+      conn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals(closeReason == null ? "" : closeReason, reason);
+      };
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    int closeCount = 0;
+    String messageText = "Hello, world!";
+    for (int i = 0; i < totalConnections; i++) {
+      int messageCount = 0;
+      WebSocketClientConnection wsconn = createClient(server.port);
+      wsconn.onOpen = () => wsconn.send(messageText);
+      wsconn.onMessage = (message) {
+        messageCount++;
+        if (messageCount < 10) {
+          Expect.equals(messageText, message);
+          wsconn.send(message);
+        } else {
+          wsconn.close(closeStatus, closeReason);
+        }
+      };
+      wsconn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals("", reason);
+        closeCount++;
+        if (closeCount == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
     }
   }
 
-  // Create a web socket handler and set is as the HTTP server default
-  // handler.
-  int closeCount = 0;
-  WebSocketHandler wsHandler = new WebSocketHandler();
-  wsHandler.onOpen = (WebSocketConnection conn) {
-    connections[conn] = new WebSocketInfo();
-    String messageText = "Hello, world!";
-    conn.onMessage = (Object message) {
-      handleMessage(conn, message);
-    };
-    conn.onClosed = (status, reason) {
-      closeCount++;
-      var info = connections[conn];
-      Expect.equals(10, info.messageCount);
-      if (closeCount == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
-    };
-    conn.send(messageText);
-  };
-  server.defaultRequestHandler = wsHandler.onRequest;
 
-  for (int i = 0; i < totalConnections; i++) {
-    HttpClientConnection conn = client.get("127.0.0.1", server.port, "/");
-    WebSocketClientConnection wsconn = new WebSocketClientConnection(conn);
-    wsconn.onMessage = (message) => wsconn.send(message);
+  void testRequestResponseServerCloses(
+      int totalConnections, int closeStatus, String closeReason) {
+    ReceivePort keepAlive = new ReceivePort();
+    HttpServer server = createServer(backlog: totalConnections);
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      String messageText = "Hello, world!";
+      int messageCount = 0;
+      conn.onMessage = (Object message) {
+        messageCount++;
+        if (messageCount < 10) {
+          Expect.equals(messageText, message);
+          conn.send(message);
+        } else {
+        conn.close(closeStatus, closeReason);
+        }
+      };
+      conn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals("", reason);
+        closeCount++;
+        if (closeCount == totalConnections) {
+          client.shutdown();
+          server.close();
+          keepAlive.close();
+      }
+      };
+      conn.send(messageText);
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    for (int i = 0; i < totalConnections; i++) {
+      WebSocketClientConnection wsconn = createClient(server.port);
+      wsconn.onMessage = (message) => wsconn.send(message);
+      wsconn.onClosed = (status, reason) {
+        Expect.equals(closeStatus == null
+                      ? WebSocketStatus.NO_STATUS_RECEIVED
+                      : closeStatus, status);
+        Expect.equals(closeReason == null ? "" : closeReason, reason);
+      };
+    }
+  }
+
+
+  void testMessageLength(int messageLength) {
+    HttpServer server = createServer(backlog: 1);
+    bool serverReceivedMessage = false;
+    bool clientReceivedMessage = false;
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    Uint8List originalMessage = new Uint8List(messageLength);
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      conn.onMessage = (Object message) {
+        serverReceivedMessage = true;
+        Expect.listEquals(originalMessage, message);
+        conn.send(message);
+      };
+      conn.onClosed = (status, reason) {
+      };
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    WebSocketClientConnection wsconn = createClient(server.port);
+    wsconn.onMessage = (message) {
+      clientReceivedMessage = true;
+      Expect.listEquals(originalMessage, message);
+      wsconn.close();
+    };
+    wsconn.onClosed = (status, reason) {
+      Expect.isTrue(serverReceivedMessage);
+      Expect.isTrue(clientReceivedMessage);
+      client.shutdown();
+      server.close();
+    };
+    wsconn.onOpen = () {
+      wsconn.send(originalMessage);
+    };
+  }
+
+
+  void testNoUpgrade() {
+    HttpServer server = createServer(backlog: 5);
+
+    // Create a server which always responds with a redirect.
+    server.defaultRequestHandler = (request, response) {
+      response.statusCode = HttpStatus.MOVED_PERMANENTLY;
+      response.outputStream.close();
+    };
+
+    WebSocketClientConnection wsconn = createClient(server.port,
+                                                    followRedirects: false);
+    wsconn.onNoUpgrade = (response) {
+      Expect.equals(HttpStatus.MOVED_PERMANENTLY, response.statusCode);
+      client.shutdown();
+      server.close();
+    };
+  }
+
+
+  void testUsePOST() {
+    HttpServer server = createServer(backlog: 5);
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      Expect.fail("No connection expected");
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    WebSocketClientConnection wsconn = createClient(server.port,
+                                                    method: "POST");
+    wsconn.onNoUpgrade = (response) {
+      Expect.equals(HttpStatus.BAD_REQUEST, response.statusCode);
+      client.shutdown();
+      server.close();
+    };
+  }
+
+
+  void testHashCode(int totalConnections) {
+    ReceivePort keepAlive = new ReceivePort();
+    HttpServer server = createServer(backlog: totalConnections);
+    Map connections = new Map();
+
+    void handleMessage(conn, message) {
+      var info = connections[conn];
+      Expect.isNotNull(info);
+      info.messageCount++;
+      if (info.messageCount < 10) {
+        conn.send(message);
+      } else {
+        conn.close();
+      }
+    }
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      connections[conn] = new WebSocketInfo();
+      String messageText = "Hello, world!";
+      conn.onMessage = (Object message) {
+        handleMessage(conn, message);
+      };
+      conn.onClosed = (status, reason) {
+        closeCount++;
+        var info = connections[conn];
+        Expect.equals(10, info.messageCount);
+        if (closeCount == totalConnections) {
+          client.shutdown();
+          server.close();
+          keepAlive.close();
+        }
+      };
+      conn.send(messageText);
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    for (int i = 0; i < totalConnections; i++) {
+      WebSocketClientConnection wsconn = createClient(server.port);
+      wsconn.onMessage = (message) => wsconn.send(message);
+    }
+  }
+
+
+  void testW3CInterface(
+      int totalConnections, int closeStatus, String closeReason) {
+    HttpServer server = createServer(backlog: totalConnections);
+
+    // Create a web socket handler and set is as the HTTP server default
+    // handler.
+    int closeCount = 0;
+    WebSocketHandler wsHandler = new WebSocketHandler();
+    wsHandler.onOpen = (WebSocketConnection conn) {
+      String messageText = "Hello, world!";
+      int messageCount = 0;
+      conn.onMessage = (Object message) {
+        messageCount++;
+        if (messageCount < 10) {
+          Expect.equals(messageText, message);
+          conn.send(message);
+        } else {
+          conn.close(closeStatus, closeReason);
+        }
+      };
+      conn.onClosed = (status, reason) {
+        Expect.equals(closeStatus, status);
+        Expect.equals("", reason);
+        closeCount++;
+        if (closeCount == totalConnections) {
+          server.close();
+        }
+      };
+      conn.send(messageText);
+    };
+    server.defaultRequestHandler = wsHandler.onRequest;
+
+    void webSocketConnection() {
+      bool onopenCalled = false;
+      int onmessageCalled = 0;
+      bool oncloseCalled = false;
+
+      var websocket =
+          new WebSocket('${secure ? "wss" : "ws"}://$HOST_NAME:${server.port}');
+      Expect.equals(WebSocket.CONNECTING, websocket.readyState);
+      websocket.onopen = () {
+        Expect.isFalse(onopenCalled);
+        Expect.equals(0, onmessageCalled);
+        Expect.isFalse(oncloseCalled);
+        onopenCalled = true;
+        Expect.equals(WebSocket.OPEN, websocket.readyState);
+      };
+      websocket.onmessage = (event) {
+        onmessageCalled++;
+        Expect.isTrue(onopenCalled);
+        Expect.isFalse(oncloseCalled);
+        Expect.equals(WebSocket.OPEN, websocket.readyState);
+        websocket.send(event.data);
+      };
+      websocket.onclose = (event) {
+        Expect.isTrue(onopenCalled);
+        Expect.equals(10, onmessageCalled);
+        Expect.isFalse(oncloseCalled);
+        oncloseCalled = true;
+        Expect.isTrue(event.wasClean);
+        Expect.equals(3002, event.code);
+        Expect.equals("Got tired", event.reason);
+        Expect.equals(WebSocket.CLOSED, websocket.readyState);
+      };
+    }
+
+    for (int i = 0; i < totalConnections; i++) {
+      webSocketConnection();
+    }
+  }
+
+
+  runTests() {
+    testRequestResponseClientCloses(2, null, null);
+    testRequestResponseClientCloses(2, 3001, null);
+    testRequestResponseClientCloses(2, 3002, "Got tired");
+    testRequestResponseServerCloses(2, null, null);
+    testRequestResponseServerCloses(2, 3001, null);
+    testRequestResponseServerCloses(2, 3002, "Got tired");
+    testMessageLength(125);
+    testMessageLength(126);
+    testMessageLength(127);
+    testMessageLength(65535);
+    testMessageLength(65536);
+    testNoUpgrade();
+    testUsePOST();
+    testHashCode(2);
+    testW3CInterface(2, 3002, "Got tired");
   }
 }
 
 
-void testW3CInterface(
-    int totalConnections, int closeStatus, String closeReason) {
-  HttpServer server = new HttpServer();
-
-  server.listen("127.0.0.1", 0, backlog: totalConnections);
-
-  // Create a web socket handler and set is as the HTTP server default
-  // handler.
-  int closeCount = 0;
-  WebSocketHandler wsHandler = new WebSocketHandler();
-  wsHandler.onOpen = (WebSocketConnection conn) {
-    String messageText = "Hello, world!";
-    int messageCount = 0;
-    conn.onMessage = (Object message) {
-      messageCount++;
-      if (messageCount < 10) {
-        Expect.equals(messageText, message);
-        conn.send(message);
-      } else {
-        conn.close(closeStatus, closeReason);
-      }
-    };
-    conn.onClosed = (status, reason) {
-      Expect.equals(closeStatus, status);
-      Expect.equals("", reason);
-      closeCount++;
-      if (closeCount == totalConnections) {
-        server.close();
-      }
-    };
-    conn.send(messageText);
-  };
-  server.defaultRequestHandler = wsHandler.onRequest;
-
-  void webSocketConnection() {
-    bool onopenCalled = false;
-    int onmessageCalled = 0;
-    bool oncloseCalled = false;
-
-    var websocket = new WebSocket("ws://127.0.0.1:${server.port}");
-    Expect.equals(WebSocket.CONNECTING, websocket.readyState);
-    websocket.onopen = () {
-      Expect.isFalse(onopenCalled);
-      Expect.equals(0, onmessageCalled);
-      Expect.isFalse(oncloseCalled);
-      onopenCalled = true;
-      Expect.equals(WebSocket.OPEN, websocket.readyState);
-    };
-    websocket.onmessage = (event) {
-      onmessageCalled++;
-      Expect.isTrue(onopenCalled);
-      Expect.isFalse(oncloseCalled);
-      Expect.equals(WebSocket.OPEN, websocket.readyState);
-      websocket.send(event.data);
-    };
-    websocket.onclose = (event) {
-      Expect.isTrue(onopenCalled);
-      Expect.equals(10, onmessageCalled);
-      Expect.isFalse(oncloseCalled);
-      oncloseCalled = true;
-      Expect.isTrue(event.wasClean);
-      Expect.equals(3002, event.code);
-      Expect.equals("Got tired", event.reason);
-      Expect.equals(WebSocket.CLOSED, websocket.readyState);
-    };
-  }
-
-  for (int i = 0; i < totalConnections; i++) {
-    webSocketConnection();
-  }
+void initializeSSL() {
+  var testPkcertDatabase =
+      new Path(new Options().script).directoryPath.append("pkcert/");
+  SecureSocket.initialize(database: testPkcertDatabase.toNativePath(),
+                          password: "dartdart");
 }
 
 
 main() {
-  testRequestResponseClientCloses(2, null, null);
-  testRequestResponseClientCloses(2, 3001, null);
-  testRequestResponseClientCloses(2, 3002, "Got tired");
-  testRequestResponseServerCloses(2, null, null);
-  testRequestResponseServerCloses(2, 3001, null);
-  testRequestResponseServerCloses(2, 3002, "Got tired");
-  testMessageLength(125);
-  testMessageLength(126);
-  testMessageLength(127);
-  testMessageLength(65535);
-  testMessageLength(65536);
-  testNoUpgrade();
-  testUsePOST();
-  testHashCode(2);
-
-  testW3CInterface(2, 3002, "Got tired");
+  new SecurityConfiguration(secure: false).runTests();
+  initializeSSL();
+  new SecurityConfiguration(secure: true).runTests();
 }
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index ef5332c..83fe0a1 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -42,6 +42,8 @@
 io/secure_no_builtin_roots_test: Pass, Crash  # Issue 7157
 io/secure_socket_bad_certificate_test: Pass, Crash, Fail, Timeout  # Issue 7157
 io/directory_list_nonexistent_test: Skip # Issue 7157
+io/web_socket_test: Skip # Issue 7157
+io/web_socket_no_secure_test: Pass # Issue 7157 - Remove test when fixed.
 
 [ $compiler == none && $runtime == drt ]
 io/*: Skip # Don't run tests using dart:io in the browser
@@ -86,6 +88,7 @@
 typed_array_test: Skip # This is a VM test
 float_array_test: Skip # This is a VM test
 int_array_test: Skip  # This is a VM test
+int_array_load_elimination_test: Skip  # This is a VM test
 medium_integer_test: Fail, OK # Test fails with JS number semantics: issue 1533.
 io/process_exit_negative_test: Fail, OK # relies on a static error that is a warning now.
 package/package_isolate_test: Skip # spawnUri does not work in dart2js. See issue 3051
diff --git a/tools/VERSION b/tools/VERSION
index bfd7fdf..4d038a5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 3
-BUILD 0
-PATCH 1
+BUILD 1
+PATCH 0
diff --git a/tools/bots/compiler.py b/tools/bots/compiler.py
index f51520a..02d6ecb 100644
--- a/tools/bots/compiler.py
+++ b/tools/bots/compiler.py
@@ -22,7 +22,7 @@
 DART2JS_BUILDER = (
     r'dart2js-(linux|mac|windows)(-(jsshell))?-(debug|release)(-(checked|host-checked))?(-(host-checked))?(-(minified))?-?(\d*)-?(\d*)')
 WEB_BUILDER = (
-    r'dart2js-(ie9|ie10|ff|safari|chrome|opera)-(win7|win8|mac|linux)(-(all|html))?')
+    r'dart2js-(ie9|ie10|ff|safari|chrome|opera)-(win7|win8|mac|linux)(-(all|html))?(-(\d+)-(\d+))?')
 
 
 def GetBuildInfo(builder_name, is_buildbot):
@@ -49,6 +49,8 @@
     system = web_pattern.group(2)
     mode = 'release'
     test_set = web_pattern.group(4)
+    shard_index = web_pattern.group(6)
+    total_shards = web_pattern.group(7)
   elif dart2js_pattern:
     compiler = 'dart2js'
     system = dart2js_pattern.group(1)
@@ -119,7 +121,8 @@
                 '--runtime=' + runtime,
                 '--time',
                 '--use-sdk',
-                '--report'])
+                '--report',
+                '--write-debug-log'])
 
     # TODO(ricow/kustermann): Issue 7339
     if runtime == "safari":
@@ -134,7 +137,7 @@
     if IsFirstTestStepCall:
       IsFirstTestStepCall = False
     else:
-      cmd.append('--append_flaky_log')
+      cmd.append('--append_logs')
 
     if flags:
       cmd.extend(flags)
diff --git a/tools/build.py b/tools/build.py
index a1a6c54..84aa62b 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -30,7 +30,7 @@
       default=False, action="store_true")
   result.add_option("-a", "--arch",
       help='Target architectures (comma-separated).',
-      metavar='[all,ia32,x64,simarm,arm]',
+      metavar='[all,ia32,x64,simarm,arm,simmips,mips]',
       default=utils.GuessArchitecture())
   result.add_option("--os",
     help='Target OSs (comma-separated).',
@@ -71,7 +71,7 @@
       print "Unknown mode %s" % mode
       return False
   for arch in options.arch:
-    if not arch in ['ia32', 'x64', 'simarm', 'arm']:
+    if not arch in ['ia32', 'x64', 'simarm', 'arm', 'simmips', 'mips']:
       print "Unknown arch %s" % arch
       return False
   options.os = [ProcessOsOption(os) for os in options.os]
diff --git a/tools/create_editor.py b/tools/create_editor.py
index f2ccd8f..379bd6d 100644
--- a/tools/create_editor.py
+++ b/tools/create_editor.py
@@ -36,7 +36,7 @@
 }
 
 def AntPath():
-  parent = join('third_party', 'apache_ant', 'v1_7_1', 'bin')
+  parent = join('third_party', 'apache_ant', '1.8.4', 'bin')
   if utils.IsWindows():
     return join(parent, 'ant.bat')
   else:
@@ -85,7 +85,7 @@
 
 
 def BuildOptions():
-  options = optparse.OptionParser()
+  options = optparse.OptionParser(usage='usage: %prog [options] <output>')
   options.add_option("-m", "--mode",
       help='Build variant',
       metavar='[debug,release]')
@@ -102,9 +102,8 @@
   (options, args) = parser.parse_args()
   
   if len(args) > 1:
-    print 'usage: tools/create_editor.py [options] <output>'
     parser.print_help()
-    return 0
+    return 1
   
   osName = utils.GuessOS()
   mode = 'debug'
@@ -123,7 +122,7 @@
   if options.mode:
     mode = options.mode
   if options.arch:
-    mode = options.arch
+    arch = options.arch
 
   # If an output dir was not given, create one from os, mode, and arch.
   if not OUTPUT:
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 825d2fa..1cb8fa8 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -25,6 +25,7 @@
 # ......_internal/
 # ......async/
 # ......collection/
+# ......collection_dev/
 # ......core/
 # ......crypto/
 # ......html/
@@ -198,13 +199,16 @@
   #
 
   os.makedirs(join(LIB, 'html'))
-  for library in ['_internal', 'async', 'collection', 'core', 'crypto', 'io',
-                  'isolate', join('html', 'dart2js'), join('html', 'dartium'),
-                  join('html', 'html_common'), join('indexed_db', 'dart2js'),
-                  join('indexed_db', 'dartium'), 'json', 'math', 'mirrors',
-                  'scalarlist', join('svg', 'dart2js'), join('svg', 'dartium'),
-                  'uri', 'utf', join('web_audio', 'dart2js'),
-                  join('web_audio', 'dartium')]:
+  for library in ['_internal', 'async', 'collection', 'collection_dev', 'core',
+                  'crypto', 'io', 'isolate',
+                  join('chrome', 'dart2js'), join('chrome', 'dartium'),
+                  join('html', 'dart2js'), join('html', 'dartium'),
+                  join('html', 'html_common'),
+                  join('indexed_db', 'dart2js'), join('indexed_db', 'dartium'),
+                  'json', 'math', 'mirrors', 'scalarlist',
+                  join('svg', 'dart2js'), join('svg', 'dartium'),
+                  'uri', 'utf',
+                  join('web_audio', 'dart2js'), join('web_audio', 'dartium')]:
     copytree(join(HOME, 'sdk', 'lib', library), join(LIB, library),
              ignore=ignore_patterns('*.svn', 'doc', '*.py', '*.gypi', '*.sh'))
 
diff --git a/tools/ddbg.dart b/tools/ddbg.dart
index c7febad..de21364 100644
--- a/tools/ddbg.dart
+++ b/tools/ddbg.dart
@@ -6,8 +6,9 @@
 // connection port.
 
 import "dart:io";
-import "dart:json";
+import "dart:json" as json;
 import "dart:utf";
+import "dart:async";
 
 
 Map<int, Completer> outstandingCommands;
@@ -66,9 +67,9 @@
   int id = cmd["id"];
   outstandingCommands[id] = completer;
   if (verbose) {
-    print("sending: '${jsonStringify(cmd)}'");
+    print("sending: '${json.stringify(cmd)}'");
   }
-  vmStream.writeString(jsonStringify(cmd));
+  vmStream.writeString(json.stringify(cmd));
   return completer.future;
 }
 
@@ -410,8 +411,8 @@
 }
 
 
-void processVmMessage(String json) {
-  var msg = parseJson(json);
+void processVmMessage(String jsonString) {
+  var msg = json.parse(jsonString);
   if (msg == null) {
     return;
   }
diff --git a/tools/dom/doc/html.dartdoc b/tools/dom/doc/html.dartdoc
deleted file mode 100644
index 069ed46..0000000
--- a/tools/dom/doc/html.dartdoc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Fake dart:html library for documentation.
-
-/// The Dart HTML5 Library.
-library dart.html;
-
-part 'interface/AbstractWorker.dartdoc';
-part 'interface/Element.dartdoc';
-part 'interface/Event.dartdoc';
-part 'interface/EventTarget.dartdoc';
-part 'interface/HttpRequest.dartdoc';
-part 'interface/MouseEvent.dartdoc';
-part 'interface/Storage.dartdoc';
-part 'interface/Node.dartdoc';
-part 'interface/UIEvent.dartdoc';
-part 'interface/WebSocket.dartdoc';
-
-// Implementation files that appear to be necessary to load the sources.
-
-//part 'nodoc-src/SomeFile.dart';
-
-// Global definitions.
-
-/**
- * The top-level Window object.
- */
-Window get window() => null;
-
-/**
- * The top-level Document object.
- */
-Document get document() => null;
-
-typedef void EventListener(Event event);
diff --git a/tools/dom/doc/interface/AbstractWorker.dartdoc b/tools/dom/doc/interface/AbstractWorker.dartdoc
deleted file mode 100644
index 010a3f8..0000000
--- a/tools/dom/doc/interface/AbstractWorker.dartdoc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING:
-//   This file contains documentation that is merged into the real source.
-//   Do not make code changes here.
-
-/// An HTML5 Abstract Worker.
-abstract class AbstractWorker implements EventTarget {
-
-  /**
-   * The valid events associated with an AbstractWorker.
-   */
-  AbstractWorkerEvents get on;
-
-  /** @domName AbstractWorker.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName AbstractWorker.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName AbstractWorker.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class AbstractWorkerEvents implements Events {
-
-  EventListenerList get error;
-}
diff --git a/tools/dom/doc/interface/Element.dartdoc b/tools/dom/doc/interface/Element.dartdoc
deleted file mode 100644
index eb183e9..0000000
--- a/tools/dom/doc/interface/Element.dartdoc
+++ /dev/null
@@ -1,405 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-/**
- * All your attribute manipulation needs in one place.
- * Extends the regular Map interface by automatically coercing non-string
- * values to strings.
- */
-abstract class AttributeMap implements Map<String, String> {
-  void operator []=(String key, value);
-}
-
-/**
- * All your element measurement needs in one place
- */
-abstract class ElementRect {
-  // Relative to offsetParent
-  ClientRect get client;
-  ClientRect get offset;
-  ClientRect get scroll;
-  // In global coords
-  ClientRect get bounding;
-  // In global coords
-  List<ClientRect> get clientRects;
-}
-
-abstract class NodeSelector {
-  Element query(String selectors);
-  List<Element> queryAll(String selectors);
-}
-
-abstract class CSSClassSet implements Set<String> {
-  /**
-   * Adds the class [token] to the element if it is not on it, removes it if it
-   * is.
-   */
-  bool toggle(String token);
-
-  /**
-   * Returns [:true:] classes cannot be added or removed from this
-   * [:CSSClassSet:].
-   */
-  bool get frozen;
-}
-
-/// @domName Element
-abstract class Element implements Node, NodeSelector {
-  factory Element.html(String html) =>
-      _ElementFactoryProvider.createElement_html(html);
-  factory Element.tag(String tag) =>
-      _ElementFactoryProvider.createElement_tag(tag);
-
-  AttributeMap get attributes;
-  void set attributes(Map<String, String> value);
-
-  /**
-   * @domName childElementCount, firstElementChild, lastElementChild,
-   *   children, Node.nodes.add
-   */
-  List<Element> get elements;
-
-  void set elements(Collection<Element> value);
-
-  /** @domName className, classList */
-  CSSClassSet get classes;
-
-  void set classes(Collection<String> value);
-
-  AttributeMap get dataAttributes;
-  void set dataAttributes(Map<String, String> value);
-
-  /**
-   * Adds the specified text as a text node after the last child of this.
-   */
-  void addText(String text);
-
-  /**
-   * Parses the specified text as HTML and adds the resulting node after the
-   * last child of this.
-   */
-  void addHTML(String html);
-
-  /**
-   * @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
-   * clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
-   * scrollHeight, scrollWidth, scrollTop, scrollLeft
-   */
-  Future<ElementRect> get rect;
-
-  /** @domName Window.getComputedStyle */
-  Future<CSSStyleDeclaration> get computedStyle;
-
-  /** @domName Window.getComputedStyle */
-  Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement);
-
-  Element clone(bool deep);
-
-  Element get parent;
-
-  /**
-   * Experimental support for [web components][wc]. This field stores a
-   * reference to the component implementation. It was inspired by Mozilla's
-   * [x-tags][] project. Please note: in the future it may be possible to
-   * `extend Element` from your class, in which case this field will be
-   * deprecated and will simply return this [Element] object.
-   *
-   * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
-   * [x-tags]: http://x-tags.org/
-   */
-  var xtag;
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  ElementEvents get on;
-
-  /** @domName HTMLElement.children */
-  abstract HTMLCollection get $dom_children;
-
-  /** @domName HTMLElement.contentEditable */
-  String contentEditable;
-
-  /** @domName HTMLElement.dir */
-  String dir;
-
-  /** @domName HTMLElement.draggable */
-  bool draggable;
-
-  /** @domName HTMLElement.hidden */
-  bool hidden;
-
-  /** @domName HTMLElement.id */
-  String id;
-
-  /** @domName HTMLElement.innerHTML */
-  String innerHTML;
-
-  /** @domName HTMLElement.isContentEditable */
-  abstract bool get isContentEditable;
-
-  /** @domName HTMLElement.lang */
-  String lang;
-
-  /** @domName HTMLElement.outerHTML */
-  abstract String get outerHTML;
-
-  /** @domName HTMLElement.spellcheck */
-  bool spellcheck;
-
-  /** @domName HTMLElement.tabIndex */
-  int tabIndex;
-
-  /** @domName HTMLElement.title */
-  String title;
-
-  /** @domName HTMLElement.translate */
-  bool translate;
-
-  /** @domName HTMLElement.webkitdropzone */
-  String webkitdropzone;
-
-  /** @domName HTMLElement.click */
-  void click();
-
-  /** @domName HTMLElement.insertAdjacentElement */
-  Element insertAdjacentElement(String where, Element element);
-
-  /** @domName HTMLElement.insertAdjacentHTML */
-  void insertAdjacentHTML(String where, String html);
-
-  /** @domName HTMLElement.insertAdjacentText */
-  void insertAdjacentText(String where, String text);
-
-  static const int ALLOW_KEYBOARD_INPUT = 1;
-
-  /** @domName Element.childElementCount */
-  abstract int get $dom_childElementCount;
-
-  /** @domName Element.className */
-  String $dom_className;
-
-  /** @domName Element.clientHeight */
-  abstract int get $dom_clientHeight;
-
-  /** @domName Element.clientLeft */
-  abstract int get $dom_clientLeft;
-
-  /** @domName Element.clientTop */
-  abstract int get $dom_clientTop;
-
-  /** @domName Element.clientWidth */
-  abstract int get $dom_clientWidth;
-
-  /** @domName Element.dataset */
-  abstract Map<String, String> get dataset;
-
-  /** @domName Element.firstElementChild */
-  abstract Element get $dom_firstElementChild;
-
-  /** @domName Element.lastElementChild */
-  abstract Element get $dom_lastElementChild;
-
-  /** @domName Element.nextElementSibling */
-  abstract Element get nextElementSibling;
-
-  /** @domName Element.offsetHeight */
-  abstract int get $dom_offsetHeight;
-
-  /** @domName Element.offsetLeft */
-  abstract int get $dom_offsetLeft;
-
-  /** @domName Element.offsetParent */
-  abstract Element get offsetParent;
-
-  /** @domName Element.offsetTop */
-  abstract int get $dom_offsetTop;
-
-  /** @domName Element.offsetWidth */
-  abstract int get $dom_offsetWidth;
-
-  /** @domName Element.previousElementSibling */
-  abstract Element get previousElementSibling;
-
-  /** @domName Element.scrollHeight */
-  abstract int get $dom_scrollHeight;
-
-  /** @domName Element.scrollLeft */
-  int $dom_scrollLeft;
-
-  /** @domName Element.scrollTop */
-  int $dom_scrollTop;
-
-  /** @domName Element.scrollWidth */
-  abstract int get $dom_scrollWidth;
-
-  /** @domName Element.style */
-  abstract CSSStyleDeclaration get style;
-
-  /** @domName Element.tagName */
-  abstract String get tagName;
-
-  /** @domName Element.blur */
-  void blur();
-
-  /** @domName Element.focus */
-  void focus();
-
-  /** @domName Element.getAttribute */
-  String $dom_getAttribute(String name);
-
-  /** @domName Element.getBoundingClientRect */
-  ClientRect $dom_getBoundingClientRect();
-
-  /** @domName Element.getClientRects */
-  List<ClientRect> $dom_getClientRects();
-
-  /** @domName Element.getElementsByClassName */
-  List<Node> $dom_getElementsByClassName(String name);
-
-  /** @domName Element.getElementsByTagName */
-  List<Node> $dom_getElementsByTagName(String name);
-
-  /** @domName Element.hasAttribute */
-  bool $dom_hasAttribute(String name);
-
-  /** @domName Element.querySelector */
-  Element $dom_querySelector(String selectors);
-
-  /** @domName Element.querySelectorAll */
-  List<Node> $dom_querySelectorAll(String selectors);
-
-  /** @domName Element.remove */
-  void remove();
-
-  /** @domName Element.removeAttribute */
-  void $dom_removeAttribute(String name);
-
-  /** @domName Element.scrollByLines */
-  void scrollByLines(int lines);
-
-  /** @domName Element.scrollByPages */
-  void scrollByPages(int pages);
-
-  /** @domName Element.scrollIntoViewIfNeeded */
-  void scrollIntoView([bool centerIfNeeded]);
-
-  /** @domName Element.setAttribute */
-  void $dom_setAttribute(String name, String value);
-
-  /** @domName Element.webkitMatchesSelector */
-  bool matchesSelector(String selectors);
-
-  /** @domName Element.webkitRequestFullScreen */
-  void webkitRequestFullScreen(int flags);
-
-  /** @domName Element.webkitRequestFullscreen */
-  void webkitRequestFullscreen();
-
-  /** @domName Element.webkitRequestPointerLock */
-  void webkitRequestPointerLock();
-
-}
-
-abstract class ElementEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeCopy;
-
-  EventListenerList get beforeCut;
-
-  EventListenerList get beforePaste;
-
-  EventListenerList get blur;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get copy;
-
-  EventListenerList get cut;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get input;
-
-  EventListenerList get invalid;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get paste;
-
-  EventListenerList get reset;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get select;
-
-  EventListenerList get selectStart;
-
-  EventListenerList get submit;
-
-  EventListenerList get touchCancel;
-
-  EventListenerList get touchEnd;
-
-  EventListenerList get touchEnter;
-
-  EventListenerList get touchLeave;
-
-  EventListenerList get touchMove;
-
-  EventListenerList get touchStart;
-
-  EventListenerList get transitionEnd;
-
-  EventListenerList get fullscreenChange;
-
-  EventListenerList get fullscreenError;
-}
diff --git a/tools/dom/doc/interface/Event.dartdoc b/tools/dom/doc/interface/Event.dartdoc
deleted file mode 100644
index eee2da6..0000000
--- a/tools/dom/doc/interface/Event.dartdoc
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Event
-abstract class Event {
-
-  // In JS, canBubble and cancelable are technically required parameters to
-  // init*Event. In practice, though, if they aren't provided they simply
-  // default to false (since that's Boolean(undefined)).
-  //
-  // Contrary to JS, we default canBubble and cancelable to true, since that's
-  // what people want most of the time anyway.
-  factory Event(String type, [bool canBubble = true, bool cancelable = true]) =>
-      _EventFactoryProvider.createEvent(type, canBubble, cancelable);
-
-  static const int AT_TARGET = 2;
-
-  static const int BLUR = 8192;
-
-  static const int BUBBLING_PHASE = 3;
-
-  static const int CAPTURING_PHASE = 1;
-
-  static const int CHANGE = 32768;
-
-  static const int CLICK = 64;
-
-  static const int DBLCLICK = 128;
-
-  static const int DRAGDROP = 2048;
-
-  static const int FOCUS = 4096;
-
-  static const int KEYDOWN = 256;
-
-  static const int KEYPRESS = 1024;
-
-  static const int KEYUP = 512;
-
-  static const int MOUSEDOWN = 1;
-
-  static const int MOUSEDRAG = 32;
-
-  static const int MOUSEMOVE = 16;
-
-  static const int MOUSEOUT = 8;
-
-  static const int MOUSEOVER = 4;
-
-  static const int MOUSEUP = 2;
-
-  static const int NONE = 0;
-
-  static const int SELECT = 16384;
-
-  /** @domName Event.bubbles */
-  abstract bool get bubbles;
-
-  /** @domName Event.cancelBubble */
-  bool cancelBubble;
-
-  /** @domName Event.cancelable */
-  abstract bool get cancelable;
-
-  /** @domName Event.clipboardData */
-  abstract Clipboard get clipboardData;
-
-  /** @domName Event.currentTarget */
-  abstract EventTarget get currentTarget;
-
-  /** @domName Event.defaultPrevented */
-  abstract bool get defaultPrevented;
-
-  /** @domName Event.eventPhase */
-  abstract int get eventPhase;
-
-  /** @domName Event.returnValue */
-  bool returnValue;
-
-  /** @domName Event.srcElement */
-  abstract EventTarget get srcElement;
-
-  /** @domName Event.target */
-  abstract EventTarget get target;
-
-  /** @domName Event.timeStamp */
-  abstract int get timeStamp;
-
-  /** @domName Event.type */
-  abstract String get type;
-
-  /** @domName Event.initEvent */
-  void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg);
-
-  /** @domName Event.preventDefault */
-  void preventDefault();
-
-  /** @domName Event.stopImmediatePropagation */
-  void stopImmediatePropagation();
-
-  /** @domName Event.stopPropagation */
-  void stopPropagation();
-}
diff --git a/tools/dom/doc/interface/EventTarget.dartdoc b/tools/dom/doc/interface/EventTarget.dartdoc
deleted file mode 100644
index c5bf532..0000000
--- a/tools/dom/doc/interface/EventTarget.dartdoc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-abstract class EventListenerList {
-  EventListenerList add(EventListener handler, [bool useCapture]);
-
-  EventListenerList remove(EventListener handler, [bool useCapture]);
-
-  bool dispatch(Event evt);
-}
-
-abstract class Events {
-  EventListenerList operator [](String type);
-}
-
-/// @domName EventTarget
-abstract class EventTarget {
-
-  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
-  abstract Events get on;
-
-  /** @domName EventTarget.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName EventTarget.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName EventTarget.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-}
diff --git a/tools/dom/doc/interface/HttpRequest.dartdoc b/tools/dom/doc/interface/HttpRequest.dartdoc
deleted file mode 100644
index 70fe830..0000000
--- a/tools/dom/doc/interface/HttpRequest.dartdoc
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING:
-//   This file contains documentation that is merged into the real source.
-//   Do not make code changes here.
-
-/**
- * HttpRequest is Dart's name for the XMLHttpRequest object, as described below.
- */
-
-/// @domName XMLHttpRequest
-abstract class HttpRequest implements EventTarget {
-  factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequest_get(url, onSuccess);
-
-  factory HttpRequest.getWithCredentials(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequestgetWithCredentials(url, onSuccess);
-
-  factory HttpRequest() => _HttpRequestFactoryProvider.createHttpRequest();
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  HttpRequestEvents get on;
-
-  static const int DONE = 4;
-
-  static const int HEADERS_RECEIVED = 2;
-
-  static const int LOADING = 3;
-
-  static const int OPENED = 1;
-
-  static const int UNSENT = 0;
-
-  /** @domName XMLHttpRequest.readyState */
-  abstract int get readyState;
-
-  /** @domName XMLHttpRequest.response */
-  abstract Object get response;
-
-  /** @domName XMLHttpRequest.responseText */
-  abstract String get responseText;
-
-  /** @domName XMLHttpRequest.responseType */
-  String responseType;
-
-  /** @domName XMLHttpRequest.responseXML */
-  abstract Document get responseXML;
-
-  /** @domName XMLHttpRequest.status */
-  abstract int get status;
-
-  /** @domName XMLHttpRequest.statusText */
-  abstract String get statusText;
-
-  /** @domName XMLHttpRequest.upload */
-  abstract HttpRequestUpload get upload;
-
-  /** @domName XMLHttpRequest.withCredentials */
-  bool withCredentials;
-
-  /** @domName XMLHttpRequest.abort */
-  void abort();
-
-  /** @domName XMLHttpRequest.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequest.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName XMLHttpRequest.getAllResponseHeaders */
-  String getAllResponseHeaders();
-
-  /** @domName XMLHttpRequest.getResponseHeader */
-  String getResponseHeader(String header);
-
-  /** @domName XMLHttpRequest.open */
-  void open(String method, String url, [bool async, String user, String password]);
-
-  /** @domName XMLHttpRequest.overrideMimeType */
-  void overrideMimeType(String override);
-
-  /** @domName XMLHttpRequest.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequest.send */
-  void send([data]);
-
-  /** @domName XMLHttpRequest.setRequestHeader */
-  void setRequestHeader(String header, String value);
-}
-
-abstract class HttpRequestEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get load;
-
-  EventListenerList get loadEnd;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get progress;
-
-  EventListenerList get readyStateChange;
-}
diff --git a/tools/dom/doc/interface/MouseEvent.dartdoc b/tools/dom/doc/interface/MouseEvent.dartdoc
deleted file mode 100644
index f2e82cd..0000000
--- a/tools/dom/doc/interface/MouseEvent.dartdoc
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING:
-//   This file contains documentation that is merged into the real source.
-//   Do not make code changes here.
-
-/// @domName MouseEvent
-abstract class MouseEvent implements UIEvent {
-
-  factory MouseEvent(String type, Window view, int detail, int screenX, int screenY,
-      int clientX, int clientY, int button, [bool canBubble = true,
-      bool cancelable = true, bool ctrlKey = false, bool altKey = false,
-      bool shiftKey = false, bool metaKey = false,
-      EventTarget relatedTarget = null]) =>
-      _MouseEventFactoryProvider.createMouseEvent(
-          type, view, detail, screenX, screenY,
-          clientX, clientY, button, canBubble, cancelable,
-          ctrlKey, altKey, shiftKey, metaKey,
-          relatedTarget);
-
-
-  /** @domName MouseEvent.altKey */
-  abstract bool get altKey;
-
-  /** @domName MouseEvent.button */
-  abstract int get button;
-
-  /** @domName MouseEvent.clientX */
-  abstract int get clientX;
-
-  /** @domName MouseEvent.clientY */
-  abstract int get clientY;
-
-  /** @domName MouseEvent.ctrlKey */
-  abstract bool get ctrlKey;
-
-  /** @domName MouseEvent.dataTransfer */
-  abstract Clipboard get dataTransfer;
-
-  /** @domName MouseEvent.fromElement */
-  abstract Node get fromElement;
-
-  /** @domName MouseEvent.metaKey */
-  abstract bool get metaKey;
-
-  /**
-   * The X coordinate of the mouse pointer in target node coordinates.
-   * This value may vary between platforms if the target node moves
-   * after the event has fired or if the element has CSS transforms affecting
-   * it.
-   */
-  abstract int get offsetX;
-
-  /**
-   * The Y coordinate of the mouse pointer in target node coordinates.
-   * This value may vary between platforms if the target node moves
-   * after the event has fired or if the element has CSS transforms affecting
-   * it.
-   */
-  abstract int get offsetY;
-
-  /** @domName MouseEvent.relatedTarget */
-  abstract EventTarget get relatedTarget;
-
-  /** @domName MouseEvent.screenX */
-  abstract int get screenX;
-
-  /** @domName MouseEvent.screenY */
-  abstract int get screenY;
-
-  /** @domName MouseEvent.shiftKey */
-  abstract bool get shiftKey;
-
-  /** @domName MouseEvent.toElement */
-  abstract Node get toElement;
-
-  /** @domName MouseEvent.webkitMovementX */
-  abstract int get webkitMovementX;
-
-  /** @domName MouseEvent.webkitMovementY */
-  abstract int get webkitMovementY;
-
-  /** @domName MouseEvent.x */
-  abstract int get x;
-
-  /** @domName MouseEvent.y */
-  abstract int get y;
-
-  /** @domName MouseEvent.initMouseEvent */
-  void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget);
-}
diff --git a/tools/dom/doc/interface/Node.dartdoc b/tools/dom/doc/interface/Node.dartdoc
deleted file mode 100644
index 44c1db2..0000000
--- a/tools/dom/doc/interface/Node.dartdoc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Node
-abstract class Node implements EventTarget {
-  List<Node> get nodes;
-
-  void set nodes(Collection<Node> value);
-
-  /**
-   * Replaces this node with another node.
-   * @domName Node.replaceChild
-   */
-  Node replaceWith(Node otherNode);
-
-  /**
-   * Removes this node from the DOM.
-   * @domName Node.removeChild
-   */
-  void remove();
-
-
-  static const int ATTRIBUTE_NODE = 2;
-
-  static const int CDATA_SECTION_NODE = 4;
-
-  static const int COMMENT_NODE = 8;
-
-  static const int DOCUMENT_FRAGMENT_NODE = 11;
-
-  static const int DOCUMENT_NODE = 9;
-
-  static const int DOCUMENT_POSITION_CONTAINED_BY = 0x10;
-
-  static const int DOCUMENT_POSITION_CONTAINS = 0x08;
-
-  static const int DOCUMENT_POSITION_DISCONNECTED = 0x01;
-
-  static const int DOCUMENT_POSITION_FOLLOWING = 0x04;
-
-  static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
-
-  static const int DOCUMENT_POSITION_PRECEDING = 0x02;
-
-  static const int DOCUMENT_TYPE_NODE = 10;
-
-  static const int ELEMENT_NODE = 1;
-
-  static const int ENTITY_NODE = 6;
-
-  static const int ENTITY_REFERENCE_NODE = 5;
-
-  static const int NOTATION_NODE = 12;
-
-  static const int PROCESSING_INSTRUCTION_NODE = 7;
-
-  static const int TEXT_NODE = 3;
-
-  /** @domName Node.attributes */
-  abstract NamedNodeMap get $dom_attributes;
-
-  /** @domName Node.childNodes */
-  abstract List<Node> get $dom_childNodes;
-
-  /** @domName Node.firstChild */
-  abstract Node get $dom_firstChild;
-
-  /** @domName Node.lastChild */
-  abstract Node get $dom_lastChild;
-
-  /** @domName Node.nextSibling */
-  abstract Node get nextNode;
-
-  /** @domName Node.nodeType */
-  abstract int get $dom_nodeType;
-
-  /** @domName Node.ownerDocument */
-  abstract Document get document;
-
-  /** @domName Node.parentNode */
-  abstract Node get parent;
-
-  /** @domName Node.previousSibling */
-  abstract Node get previousNode;
-
-  /** @domName Node.textContent */
-  String text;
-
-  /** @domName Node.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Node.appendChild */
-  Node $dom_appendChild(Node newChild);
-
-  /** @domName Node.cloneNode */
-  Node clone(bool deep);
-
-  /** @domName Node.contains */
-  bool contains(Node other);
-
-  /** @domName Node.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName Node.hasChildNodes */
-  bool hasChildNodes();
-
-  /** @domName Node.insertBefore */
-  Node insertBefore(Node newChild, Node refChild);
-
-  /** @domName Node.removeChild */
-  Node $dom_removeChild(Node oldChild);
-
-  /** @domName Node.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Node.replaceChild */
-  Node $dom_replaceChild(Node newChild, Node oldChild);
-
-}
diff --git a/tools/dom/doc/interface/Storage.dartdoc b/tools/dom/doc/interface/Storage.dartdoc
deleted file mode 100644
index a72fd52..0000000
--- a/tools/dom/doc/interface/Storage.dartdoc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// @domName Storage
-/**
- * The type used by the
- * [Window.localStorage] and [Window.sessionStorage] properties.
- * Storage is implemented as a Map&lt;String, String>.
- *
- * To store and get values, use Dart's built-in map syntax:
- *
- *     window.localStorage['key1'] = 'val1';
- *     window.localStorage['key2'] = 'val2';
- *     window.localStorage['key3'] = 'val3';
- *     assert(window.localStorage['key3'] == 'val3');
- * 
- * You can use [Map](http://api.dartlang.org/dart_core/Map.html) APIs
- * such as containsValue(), clear(), and length:
- *
- *     assert(window.localStorage.containsValue('does not exist') == false);
- *     window.localStorage.clear();
- *     assert(window.localStorage.length == 0);
- *
- * For more examples of using this API, see
- * [localstorage_test.dart](http://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/tests/html/localstorage_test.dart).
- * For details on using the Map API, see the
- * [Maps](http://www.dartlang.org/docs/library-tour/#maps-aka-dictionaries-or-hashes)
- * section of the library tour.
- *
- */
-abstract class Storage implements Map<String, String> {
-
-  /** @domName Storage.length */
-  abstract int get $dom_length;
-
-  /** @domName Storage.clear */
-  void $dom_clear();
-
-  /** @domName Storage.getItem */
-  String $dom_getItem(String key);
-
-  /** @domName Storage.key */
-  String $dom_key(int index);
-
-  /** @domName Storage.removeItem */
-  void $dom_removeItem(String key);
-
-  /** @domName Storage.setItem */
-  void $dom_setItem(String key, String data);
-
-}
diff --git a/tools/dom/doc/interface/UIEvent.dartdoc b/tools/dom/doc/interface/UIEvent.dartdoc
deleted file mode 100644
index 9a0754b..0000000
--- a/tools/dom/doc/interface/UIEvent.dartdoc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName UIEvent
-abstract class UIEvent implements Event {
-
-  /** @domName UIEvent.charCode */
-  abstract int get charCode;
-
-  /** @domName UIEvent.detail */
-  abstract int get detail;
-
-  /** @domName UIEvent.keyCode */
-  abstract int get keyCode;
-
-  /** @domName UIEvent.layerX */
-  abstract int get layerX;
-
-  /** @domName UIEvent.layerY */
-  abstract int get layerY;
-
-  /** @domName UIEvent.pageX */
-  abstract int get pageX;
-
-  /** @domName UIEvent.pageY */
-  abstract int get pageY;
-
-  /** @domName UIEvent.view */
-  abstract Window get view;
-
-  /** @domName UIEvent.which */
-  abstract int get which;
-
-  /** @domName UIEvent.initUIEvent */
-  void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail);
-}
diff --git a/tools/dom/doc/interface/WebSocket.dartdoc b/tools/dom/doc/interface/WebSocket.dartdoc
deleted file mode 100644
index 1938552..0000000
--- a/tools/dom/doc/interface/WebSocket.dartdoc
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// @domName WebSocket
-/**
- * Use the WebSocket interface to connect to a WebSocket,
- * and to send and receive data on that WebSocket.
- *
- * To use a WebSocket in your web app, first create a WebSocket object,
- * passing the WebSocket URL as an argument to the constructor.
- *
- *     var webSocket = new WebSocket('ws://127.0.0.1:1337/ws');
- *
- * To send data on the WebSocket, use the [send] method.
- *
- *     if (webSocket != null && webSocket.readyState == WebSocket.OPEN) {
- *       webSocket.send(data);
- *     } else {
- *       print('WebSocket not connected, message $data not sent');
- *     }
- *
- * To receive data on the WebSocket, register a listener for message events.
- *
- *     webSocket.on.message.add((MessageEvent e) {
- *       receivedData(e.data);
- *     });
- *
- * The message event handler receives a [MessageEvent] object
- * as its sole argument.
- * You can also define open, close, and error handlers,
- * as specified by [WebSocketEvents].
- *
- * For more information, see the
- * [WebSockets](http://www.dartlang.org/docs/library-tour/#html-websockets)
- * section of the library tour and
- * [Introducing WebSockets](http://www.html5rocks.com/en/tutorials/websockets/basics/),
- * an HTML5Rocks.com tutorial.
- */
-abstract class WebSocket implements EventTarget {
-
-  factory WebSocket(String url) => _WebSocketFactoryProvider.createWebSocket(url);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  WebSocketEvents get on;
-
-  static const int CLOSED = 3;
-
-  static const int CLOSING = 2;
-
-  static const int CONNECTING = 0;
-
-  static const int OPEN = 1;
-
-  /** @domName WebSocket.URL */
-  abstract String get URL;
-
-  /** @domName WebSocket.binaryType */
-  String binaryType;
-
-  /** @domName WebSocket.bufferedAmount */
-  abstract int get bufferedAmount;
-
-  /** @domName WebSocket.extensions */
-  abstract String get extensions;
-
-  /** @domName WebSocket.protocol */
-  abstract String get protocol;
-
-  /** @domName WebSocket.readyState */
-  abstract int get readyState;
-
-  /** @domName WebSocket.url */
-  abstract String get url;
-
-  /** @domName WebSocket.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebSocket.close */
-  void close([int code, String reason]);
-
-  /** @domName WebSocket.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName WebSocket.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebSocket.send */
-  void send(data);
-}
-
-abstract class WebSocketEvents implements Events {
-
-  EventListenerList get close;
-
-  EventListenerList get error;
-
-  EventListenerList get message;
-
-  EventListenerList get open;
-}
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index 1fab40f..c73a508 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -26,6 +26,10 @@
 };
 Element implements ElementTraversal;
 
+// TODO(antonm): fix it
+[Supplemental, Constructor]
+interface MediaStream {};
+
 [Callback]
 interface TimeoutHandler {
   void handleEvent();
@@ -287,6 +291,13 @@
   [StrictTypeChecking, Custom] attribute float value;
 };
 
+// Keep it in to generate Dart code, C++ implementation is filterd out in generator.
+[
+  Callback
+] interface MutationCallback {
+  [Custom] boolean handleEvent(in MutationRecordArray mutations, in MutationObserver observer);
+};
+
 [Supplemental,
   CustomConstructor,
   // Provide missing constructor signature.
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index 24ef49e..9007790 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -9,6 +9,7 @@
 import database
 import fremontcutbuilder
 import logging.config
+import monitored
 import multiemitter
 import optparse
 import os
@@ -28,7 +29,7 @@
 
 _logger = logging.getLogger('dartdomgenerator')
 
-_libraries = ['html', 'indexed_db', 'svg', 'web_audio']
+_libraries = ['chrome', 'html', 'indexed_db', 'svg', 'web_audio']
 
 class GeneratorOptions(object):
   def __init__(self, templates, database, type_registry, renamer):
@@ -37,12 +38,6 @@
     self.type_registry = type_registry
     self.renamer = renamer
 
-# TODO(vsm): Remove once we fix Dartium to pass in the database directly.
-def Generate(database_dir, use_database_cache, dart2js_output_dir=None,
-             dartium_output_dir=None):
-  database = LoadDatabase(database_dir, use_database_cache)
-  GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir)
-
 def LoadDatabase(database_dir, use_database_cache):
   common_database = database.Database(database_dir)
   if use_database_cache:
@@ -138,6 +133,8 @@
   _logger.info('Flush...')
   emitters.Flush()
 
+  monitored.FinishMonitoring()
+
 def GenerateSingleFile(library_path, output_dir, generated_output_dir=None):
   library_dir = os.path.dirname(library_path)
   library_filename = os.path.basename(library_path)
@@ -195,24 +192,6 @@
     database = LoadDatabase(database_dir, options.use_database_cache)
   GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir)
 
-  _logger.info('Add documentation to generated classes.')
-  html_to_json_script = os.path.relpath(
-      '../../html_json_doc/bin/html_json_doc.dart',
-      current_dir)
-  html_output_dir = os.path.join(output_dir, 'dart2js/dart/html/')
-  svg_output_dir = os.path.join(output_dir, 'dart2js/dart/svg/')
-  html_json_path = os.path.relpath('../docs/html_docs.json')
-  svg_json_path = os.path.relpath('../docs/svg_docs.json')
-
-  path_to_dart = utils.DartSdkBinary()
-  html_command = ' '.join([path_to_dart, html_to_json_script,
-                           '--mode=json-to-html', html_output_dir,
-                           html_json_path])
-  svg_command = ' '.join([path_to_dart, html_to_json_script,
-                          '--mode=json-to-html', svg_output_dir, svg_json_path])
-  subprocess.call([html_command], shell=True)
-  subprocess.call([svg_command], shell=True)
-
   if 'htmldart2js' in systems:
     _logger.info('Generating dart2js single files.')
     for library_name in _libraries:
diff --git a/tools/dom/scripts/dartgenerator.py b/tools/dom/scripts/dartgenerator.py
index ac399eb..5fb409c 100755
--- a/tools/dom/scripts/dartgenerator.py
+++ b/tools/dom/scripts/dartgenerator.py
@@ -148,16 +148,16 @@
       else:
         database.DeleteInterface(interface.id)
 
-      # Ugly temporary hack
-      websocket_interface = database.GetInterface('WebSocket')
-      def make_object(**fields):
-        o = type('Anon', (object,), {})()
-        for k, v in fields.items(): setattr(o, k, v)
-        o.ext_attrs = {}
-        return o
-      arg = make_object(id = 'url', type = make_object(id = 'DOMString'))
-      websocket_interface.ext_attrs['Constructor'] = make_object(arguments = [arg])
-      websocket_interface.ext_attrs['CustomConstructor'] = True
+    # Ugly temporary hack
+    websocket_interface = database.GetInterface('WebSocket')
+    def make_object(**fields):
+      o = type('Anon', (object,), {})()
+      for k, v in fields.items(): setattr(o, k, v)
+      o.ext_attrs = {}
+      return o
+    arg = make_object(id = 'url', type = make_object(id = 'DOMString'))
+    websocket_interface.ext_attrs['Constructor'] = make_object(arguments = [arg])
+    websocket_interface.ext_attrs['CustomConstructor'] = True
 
     self.FilterMembersWithUnidentifiedTypes(database)
 
diff --git a/tools/dom/scripts/fremontcutbuilder.py b/tools/dom/scripts/fremontcutbuilder.py
index 220f565..c0919fb 100755
--- a/tools/dom/scripts/fremontcutbuilder.py
+++ b/tools/dom/scripts/fremontcutbuilder.py
@@ -53,7 +53,6 @@
     'ENABLE_METER_ELEMENT',
     'ENABLE_METER_TAG',
     'ENABLE_MHTML',
-    'ENABLE_MUTATION_OBSERVERS',
     'ENABLE_NOTIFICATIONS',
     'ENABLE_OVERFLOW_SCROLLING',
     'ENABLE_PAGE_POPUP',
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index ad36286..265eab9 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -17,6 +17,7 @@
     'ElementTraversal',
     'EventListener',
     'MediaQueryListListener',
+    'MutationCallback',
     'NodeSelector',
     'SVGExternalResourcesRequired',
     'SVGFilterPrimitiveStandardAttributes',
@@ -74,9 +75,9 @@
     'Int16Array': '_TypedArrayFactoryProvider',
     'Int32Array': '_TypedArrayFactoryProvider',
     'Uint8Array': '_TypedArrayFactoryProvider',
+    'Uint8ClampedArray': '_TypedArrayFactoryProvider',
     'Uint16Array': '_TypedArrayFactoryProvider',
     'Uint32Array': '_TypedArrayFactoryProvider',
-    'Uint8ClampedArray': '_TypedArrayFactoryProvider',
 }
 
 #
@@ -640,6 +641,12 @@
   "@SupportedBrowser(SupportedBrowser.SAFARI)",
 ]
 
+_webkit_experimental_annotations = [
+  "@SupportedBrowser(SupportedBrowser.CHROME)",
+  "@SupportedBrowser(SupportedBrowser.SAFARI)",
+  "@Experimental()",
+]
+
 _history_annotations = _all_but_ie9_annotations
 
 _performance_annotations = [
@@ -655,8 +662,16 @@
 dart_annotations = {
   'ArrayBuffer': _all_but_ie9_annotations,
   'ArrayBufferView': _all_but_ie9_annotations,
+  'DOMApplicationCache': [
+    "@SupportedBrowser(SupportedBrowser.CHROME)",
+    "@SupportedBrowser(SupportedBrowser.FIREFOX)",
+    "@SupportedBrowser(SupportedBrowser.IE, '10')",
+    "@SupportedBrowser(SupportedBrowser.OPERA)",
+    "@SupportedBrowser(SupportedBrowser.SAFARI)",
+  ],
   'DOMWindow.indexedDB': _indexed_db_annotations,
   'DOMWindow.performance': _performance_annotations,
+  'DOMWindow.webkitNotifications': _webkit_experimental_annotations,
   'DOMWindow.webkitRequestFileSystem': _file_system_annotations,
   'DOMWindow.webkitResolveLocalFileSystemURL': _file_system_annotations,
   'Element.webkitCreateShadowRoot': [
@@ -672,21 +687,13 @@
     "@Experimental()",
   ],
   'HTMLDataListElement': _all_but_ie9_annotations,
-  'HTMLDetailsElement': [
-    "@SupportedBrowser(SupportedBrowser.CHROME)",
-    "@SupportedBrowser(SupportedBrowser.SAFARI)",
-    "@Experimental()",
-  ],
+  'HTMLDetailsElement': _webkit_experimental_annotations,
   'HTMLEmbedElement': [
     "@SupportedBrowser(SupportedBrowser.CHROME)",
     "@SupportedBrowser(SupportedBrowser.IE)",
     "@SupportedBrowser(SupportedBrowser.SAFARI)",
   ],
-  'HTMLKeygenElement': [
-    "@SupportedBrowser(SupportedBrowser.CHROME)",
-    "@SupportedBrowser(SupportedBrowser.SAFARI)",
-    "@Experimental()",
-  ],
+  'HTMLKeygenElement': _webkit_experimental_annotations,
   'HTMLMeterElement': [
     "@SupportedBrowser(SupportedBrowser.CHROME)",
     "@SupportedBrowser(SupportedBrowser.FIREFOX)",
@@ -714,6 +721,7 @@
   ],
   'IDBFactory': _indexed_db_annotations,
   'IDBDatabase': _indexed_db_annotations,
+  'NotificationCenter': _webkit_experimental_annotations,
   'Performance': _performance_annotations,
   'ShadowRoot': [
     "@SupportedBrowser(SupportedBrowser.CHROME, '25')",
@@ -731,9 +739,16 @@
   """ Finds annotations common between dart2js and dartium.
   """
   if member_name:
-    return dart_annotations.get('%s.%s' % (interface_name, member_name))
+    key = '%s.%s' % (interface_name, member_name)
   else:
-    return dart_annotations.get(interface_name)
+    key = interface_name
+
+  annotations = ["@DocsEditable",
+                 "@DomName('" + key + "')",]
+  if (dart_annotations.get(key) != None):
+    annotations.extend(dart_annotations.get(key))
+
+  return annotations
 
 def FindDart2JSAnnotations(idl_type, interface_name, member_name):
   """ Finds all annotations for Dart2JS members- including annotations for
@@ -751,6 +766,13 @@
       annotations = ann2
   return annotations
 
+def AnyConversionAnnotations(idl_type, interface_name, member_name):
+  if (dart_annotations.get('%s.%s' % (interface_name, member_name)) or
+      _FindDart2JSSpecificAnnotations(idl_type, interface_name, member_name)):
+    return True
+  else:
+    return False
+
 def _FindDart2JSSpecificAnnotations(idl_type, interface_name, member_name):
   """ Finds dart2js-specific annotations. This does not include ones shared with
   dartium.
@@ -852,9 +874,9 @@
         'Int16Array',
         'Int32Array',
         'Uint8Array',
+        'Uint8ClampedArray',
         'Uint16Array',
         'Uint32Array',
-        'Uint8ClampedArray',
     ]
 
     if self._idl_type in WTF_INCLUDES:
@@ -1081,7 +1103,7 @@
 class TypeData(object):
   def __init__(self, clazz, dart_type=None, native_type=None,
                merged_interface=None, merged_into=None,
-               custom_to_dart=None, custom_to_native=None,
+               custom_to_dart=False, custom_to_native=False,
                conversion_includes=None,
                webcore_getter_name='getAttribute',
                webcore_setter_name='setAttribute',
@@ -1221,6 +1243,7 @@
     'Int16Array': TypedArrayTypeData('int'),
     'Int32Array': TypedArrayTypeData('int'),
     'Uint8Array': TypedArrayTypeData('int'),
+    'Uint8ClampedArray': TypedArrayTypeData('int'),
     'Uint16Array': TypedArrayTypeData('int'),
     'Uint32Array': TypedArrayTypeData('int'),
 
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 26bda0c..b813f7f 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -8,7 +8,7 @@
 
 from generator import AnalyzeOperation, ConstantOutputOrder, \
     DartDomNameOfAttribute, FindMatchingAttribute, IsDartCollectionType, \
-    IsPureInterface, TypeOrNothing
+    IsPureInterface, TypeOrNothing, FindCommonAnnotations
 
 # Types that are accessible cross-frame in a limited fashion.
 # In these cases, the base type (e.g., WindowBase) provides restricted access
@@ -37,29 +37,12 @@
           '  static bool get supported => $SUPPORT_CHECK;\n',
           SUPPORT_CHECK=support_check)
 
-  def EmitAttributeDocumentation(self, attribute):
-    """ Emits the MDN dartdoc comment for an attribute.
-    """
-    dom_name = DartDomNameOfAttribute(attribute)
-    self._members_emitter.Emit('\n  /// @domName $DOMINTERFACE.$DOMNAME;'
-                               ' @docsEditable true',
-        DOMINTERFACE=attribute.doc_js_interface_name,
-        DOMNAME=dom_name)
-
-  def EmitOperationDocumentation(self, operation):
-    """ Emits the MDN dartdoc comment for an operation.
-    """
-    self._members_emitter.Emit('\n  /// @domName $DOMINTERFACE.$DOMNAME;'
-                               ' @docsEditable true',
-        DOMINTERFACE=operation.overloads[0].doc_js_interface_name,
-        DOMNAME=operation.name)
-
   def EmitEventGetter(self, events_class_name):
     self._members_emitter.Emit(
-        '\n  /// @domName EventTarget.addEventListener, '
-        'EventTarget.removeEventListener, EventTarget.dispatchEvent;'
-        ' @docsEditable true'
-        '\n  $TYPE get on =>\n    new $TYPE(this);\n',
+        "\n  @DocsEditable"
+        "\n  @DomName('EventTarget.addEventListener, "
+        "EventTarget.removeEventListener, EventTarget.dispatchEvent')"
+        "\n  $TYPE get on =>\n    new $TYPE(this);\n",
         TYPE=events_class_name)
 
   def AddMembers(self, interface, declare_only=False):
@@ -129,7 +112,7 @@
 
   def AddConstant(self, constant):
     const_name = self._renamer.RenameMember(
-        self._interface.id, constant, constant.id, dartify_name=False)
+        self._interface.id, constant, constant.id, 'get:', dartify_name=False)
     if not const_name:
       return
     type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id)
@@ -178,7 +161,8 @@
     # merging the relevant data into info itself.
     method_name = self._renamer.RenameMember(self._interface.id,
                                              info.operations[0],
-                                             info.name)
+                                             info.name,
+                                             'call:')
     if not method_name:
       if info.name == 'item':
         # FIXME: item should be renamed to operator[], not removed.
@@ -293,7 +277,7 @@
 
   def _AddConstructor(self,
       constructor_info, factory_name, factory_constructor_name):
-    self._members_emitter.Emit('\n  ///@docsEditable true');
+    self._members_emitter.Emit('\n  @DocsEditable');
 
     if not factory_constructor_name:
       factory_constructor_name = '_create'
@@ -365,7 +349,6 @@
   def DeclareAttribute(self, attribute, type_name, attr_name, read_only):
     """ Declares an attribute but does not include the code to invoke it.
     """
-    self.EmitAttributeDocumentation(attribute)
     if read_only:
       template = '\n  $TYPE get $NAME;\n'
     else:
@@ -382,7 +365,6 @@
       return_type_name - The name of the return type.
       method_name - The name of the method.
     """
-    self.EmitOperationDocumentation(operation)
     self._members_emitter.Emit(
              '\n'
              '  $TYPE $NAME($PARAMS);\n',
diff --git a/tools/dom/scripts/htmleventgenerator.py b/tools/dom/scripts/htmleventgenerator.py
index 4c6966c..10aaca0 100644
--- a/tools/dom/scripts/htmleventgenerator.py
+++ b/tools/dom/scripts/htmleventgenerator.py
@@ -380,14 +380,19 @@
     self._renamer = renamer
     self._template_loader = template_loader
 
-  def EmitStreamProviders(self, interface, html_interface_name, custom_events,
+  def EmitStreamProviders(self, interface, custom_events,
       members_emitter):
-    events = self._GetEvents(interface, html_interface_name, custom_events)
+    events = self._GetEvents(interface, custom_events)
     if not events:
       return
 
     for event_info in events:
       (dom_name, html_name, event_type) = event_info
+
+      # If we're using a different provider, then don't declare one.
+      if self._GetEventRedirection(interface, html_name, event_type):
+        continue
+
       members_emitter.Emit(
           "\n"
           "  static const EventStreamProvider<$TYPE> $(NAME)Event = "
@@ -396,9 +401,9 @@
           DOM_NAME=dom_name,
           TYPE=event_type)
 
-  def EmitStreamGetters(self, interface, html_interface_name, custom_events,
+  def EmitStreamGetters(self, interface, custom_events,
       members_emitter):
-    events = self._GetEvents(interface, html_interface_name, custom_events)
+    events = self._GetEvents(interface, custom_events)
     if not events:
       return
 
@@ -406,19 +411,30 @@
       (dom_name, html_name, event_type) = event_info
       getter_name = 'on%s%s' % (html_name[:1].upper(), html_name[1:])
 
+      # If the provider is declared elsewhere, point to that.
+      redirection = self._GetEventRedirection(interface, html_name, event_type)
+      if redirection:
+        provider = '%s.%sEvent' % (redirection, html_name)
+      else:
+        provider = html_name + 'Event'
+
       members_emitter.Emit(
           "\n"
           "  Stream<$TYPE> get $(NAME) => $PROVIDER.forTarget(this);\n",
           NAME=getter_name,
-          PROVIDER=html_name + 'Event',
+          PROVIDER=provider,
           TYPE=event_type)
 
-  def _GetEvents(self, interface, html_interface_name, custom_events):
+  def _GetEvents(self, interface, custom_events):
+    """ Gets a list of all of the events for the specified interface.
+    """
     events = set([attr for attr in interface.attributes
                   if attr.type.id == 'EventListener'])
     if not events and interface.id not in _html_explicit_event_classes:
       return None
 
+    html_interface_name = interface.doc_js_name
+
     dom_event_names = set()
     for event in events:
       dom_name = event.id[2:]
@@ -434,12 +450,49 @@
         continue
 
       (html_name, event_type) = event_info
+      if self._IsEventSuppressed(interface, html_name, event_type):
+        continue
+
       full_event_name = '%sEvents.%s' % (html_interface_name, html_name)
       if not full_event_name in custom_events:
         events.append((dom_name, html_name, event_type))
     return events
 
+  def _HasEvent(self, events, event_name, event_type):
+    """ Checks if the event is declared in the list of events (from _GetEvents),
+    with the same event type.
+    """
+    for (dom_name, html_name, found_type) in events:
+      if html_name == event_name and event_type == found_type:
+        return True
+    return False
+
+  def _IsEventSuppressed(self, interface, event_name, event_type):
+    """ Checks if the event should not be emitted.
+    """
+    if self._renamer.ShouldSuppressMember(interface, event_name, 'on:'):
+      return True
+
+    if interface.doc_js_name == 'Window':
+      media_interface = self._database.GetInterface('HTMLMediaElement')
+      media_events = self._GetEvents(media_interface, [])
+      if self._HasEvent(media_events, event_name, event_type):
+        return True
+
+  def _GetEventRedirection(self, interface, event_name, event_type):
+    """ For events which are declared in one place, but exposed elsewhere,
+    this gets the source of the event (where the provider is declared)
+    """
+    if interface.doc_js_name == 'Window' or interface.doc_js_name == 'Document':
+      element_interface = self._database.GetInterface('Element')
+      element_events = self._GetEvents(element_interface, [])
+      if self._HasEvent(element_events, event_name, event_type):
+        return 'Element'
+    return None
+
   def _FindEventInfo(self, html_interface_name, dom_event_name):
+    """ Finds the event info (event name and type).
+    """
     key = '%s.%s' % (html_interface_name, dom_event_name)
     if key in _html_event_types:
       return _html_event_types[key]
@@ -476,9 +529,9 @@
     template_file = 'impl_%s.darttemplate' % events_class_name
     template = (self._template_loader.TryLoad(template_file) or
         '\n'
-        '/// @docsEditable true\n'
+        '@DocsEditable\n'
         'class $CLASSNAME extends $SUPER {\n'
-        '  /// @docsEditable true\n'
+        '  @DocsEditable\n'
         '  $CLASSNAME(EventTarget _ptr) : super(_ptr);\n'
         '$!MEMBERS}\n')
 
@@ -505,7 +558,7 @@
       if not full_event_name in custom_events:
         implementation_events_members.Emit(
             "\n"
-            "  /// @docsEditable true\n"
+            "  @DocsEditable\n"
             "  EventListenerList get $NAME => this['$DOM_NAME'];\n",
           NAME=html_name,
             DOM_NAME=dom_name)
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 287a4e4..53488dd 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -2,9 +2,11 @@
 # Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
+import logging
+import monitored
 import re
 
-html_interface_renames = {
+html_interface_renames = monitored.Dict('htmlrenamer.html_interface_renames', {
     'CDATASection': 'CDataSection',
     'DOMApplicationCache': 'ApplicationCache',
     'DOMCoreException': 'DomException',
@@ -13,35 +15,40 @@
     'DOMFormData': 'FormData',
     'DOMURL': 'Url',
     'DOMWindow': 'Window',
+    'HTMLAppletElement' : '_AppletElement',
+    'HTMLBaseFontElement' : '_BaseFontElement',
+    'HTMLDirectoryElement' : '_DirectoryElement',
     'HTMLDocument' : 'HtmlDocument',
+    'HTMLFontElement' : '_FontElement',
+    'HTMLFrameElement' : '_FrameElement',
+    'HTMLFrameSetElement' : '_FrameSetElement',
+    'HTMLMarqueeElement' : '_MarqueeElement',
     'IDBAny': '_Any', # Suppressed, but needs to exist for Dartium.
     'IDBFactory': 'IdbFactory', # Manual to avoid name conflicts.
+    'NavigatorUserMediaErrorCallback': '_NavigatorUserMediaErrorCallback',
+    'NavigatorUserMediaSuccessCallback': '_NavigatorUserMediaSuccessCallback',
     'SVGDocument': 'SvgDocument', # Manual to avoid name conflicts.
     'SVGElement': 'SvgElement', # Manual to avoid name conflicts.
     'SVGException': 'SvgException', # Manual of avoid conflict with Exception.
     'SVGSVGElement': 'SvgSvgElement', # Manual to avoid name conflicts.
     'WebGLVertexArrayObjectOES': 'WebGLVertexArrayObject',
-    'WebKitAnimation': 'Animation',
     'WebKitAnimationEvent': 'AnimationEvent',
-    'WebKitBlobBuilder': 'BlobBuilder',
     'WebKitCSSKeyframeRule': 'CssKeyframeRule',
     'WebKitCSSKeyframesRule': 'CssKeyframesRule',
     'WebKitCSSMatrix': 'CssMatrix',
     'WebKitCSSTransformValue': 'CssTransformValue',
-    'WebKitFlags': 'Flags',
-    'WebKitLoseContext': 'LoseContext',
     'WebKitPoint': 'Point',
     'WebKitTransitionEvent': 'TransitionEvent',
     'XMLHttpRequest': 'HttpRequest',
     'XMLHttpRequestException': 'HttpRequestException',
     'XMLHttpRequestProgressEvent': 'HttpRequestProgressEvent',
     'XMLHttpRequestUpload': 'HttpRequestUpload',
-}
+})
 
 # Members from the standard dom that should not be exposed publicly in dart:html
 # but need to be exposed internally to implement dart:html on top of a standard
 # browser.
-_private_html_members = set([
+_private_html_members = monitored.Set('htmlrenamer._private_html_members', [
   'CustomEvent.initCustomEvent',
   'Document.createElement',
   'Document.createElementNS',
@@ -131,62 +138,51 @@
   'UIEvent.keyCode',
   'WheelEvent.wheelDeltaX',
   'WheelEvent.wheelDeltaY',
-  'Window.getComputedStyle',
+  'WheelEvent.initWebKitWheelEvent',
+  'DOMWindow.getComputedStyle',
 ])
 
 # Members from the standard dom that exist in the dart:html library with
 # identical functionality but with cleaner names.
-_renamed_html_members = {
-    'AnimatedString.className': '$dom_svgClassName',
+_renamed_html_members = monitored.Dict('htmlrenamer._renamed_html_members', {
+    'DOMURL.createObjectURL': 'createObjectUrl',
+    'DOMURL.revokeObjectURL': 'revokeObjectUrl',
+    'DOMWindow.webkitNotifications': 'notifications',
+    'DOMWindow.webkitRequestFileSystem': 'requestFileSystem',
+    'DOMWindow.webkitResolveLocalFileSystemURL': 'resolveLocalFileSystemUrl',
+    'DOMWindow.webkitRequestFileSystem': 'requestFileSystem',
+    'DOMWindow.webkitResolveLocalFileSystemURL': 'resolveLocalFileSystemUrl',
     'Document.createCDATASection': 'createCDataSection',
     'Document.defaultView': 'window',
     'Element.scrollIntoViewIfNeeded': 'scrollIntoView',
     'Element.webkitCreateShadowRoot': 'createShadowRoot',
     'Element.webkitMatchesSelector' : 'matches',
+    'Navigator.webkitGetUserMedia': '_getUserMedia',
     'Node.cloneNode': 'clone',
     'Node.nextSibling': 'nextNode',
     'Node.ownerDocument': 'document',
     'Node.parentElement': 'parent',
     'Node.previousSibling': 'previousNode',
     'Node.textContent': 'text',
-    'Stylable.className': '$dom_svgClassName',
-    'SvgElement.className': '$dom_svgClassName',
-    'Url.createObjectURL': 'createObjectUrl',
-    'Url.revokeObjectURL': 'revokeObjectUrl',
-    'Window.webkitRequestFileSystem': 'requestFileSystem',
-    'Window.webkitResolveLocalFileSystemURL': 'resolveLocalFileSystemUrl',
+    'SVGElement.className': '$dom_svgClassName',
+    'SVGStylable.className': '$dom_svgClassName',
     'WorkerContext.webkitRequestFileSystem': 'requestFileSystem',
     'WorkerContext.webkitRequestFileSystemSync': 'requestFileSystemSync',
     'WorkerContext.webkitResolveLocalFileSystemSyncURL':
         'resolveLocalFileSystemSyncUrl',
     'WorkerContext.webkitResolveLocalFileSystemURL':
         'resolveLocalFileSystemUrl',
-}
+})
 
 # Members and classes from the dom that should be removed completely from
 # dart:html.  These could be expressed in the IDL instead but expressing this
 # as a simple table instead is more concise.
-# Syntax is: ClassName.(get\.|set\.)?MemberName
+# Syntax is: ClassName.(get\:|set\:|call\:|on\:)?MemberName
 # Using get: and set: is optional and should only be used when a getter needs
 # to be suppressed but not the setter, etc.
 # TODO(jacobr): cleanup and augment this list.
-_removed_html_members = set([
-    'AnchorElement.charset',
-    'AnchorElement.coords',
-    'AnchorElement.rev',
-    'AnchorElement.shape',
-    'AnchorElement.text',
-    'AreaElement.noHref',
+_removed_html_members = monitored.Set('htmlrenamer._removed_html_members', [
     'Attr.*',
-    'BRElement.clear',
-    'BodyElement.aLink',
-    'BodyElement.background',
-    'BodyElement.bgColor',
-    'BodyElement.bgColor',
-    'BodyElement.link',
-    'BodyElement.text',
-    'BodyElement.text',
-    'BodyElement.vlink',
     'CanvasRenderingContext2D.clearShadow',
     'CanvasRenderingContext2D.drawImageFromRect',
     'CanvasRenderingContext2D.setAlpha',
@@ -198,12 +194,14 @@
     'CanvasRenderingContext2D.setMiterLimit',
     'CanvasRenderingContext2D.setShadow',
     'CanvasRenderingContext2D.setStrokeColor',
-    'Cursor.NEXT',
-    'Cursor.NEXT_NO_DUPLICATE',
-    'Cursor.PREV',
-    'Cursor.PREV_NO_DUPLICATE',
-    'DListElement.compact',
-    'DivElement.align',
+    'DOMWindow.call:blur',
+    'DOMWindow.clientInformation',
+    'DOMWindow.call:focus',
+    'DOMWindow.get:frames',
+    'DOMWindow.get:length',
+    'DOMWindow.prompt',
+    'DOMWindow.webkitCancelRequestAnimationFrame',
+    'DOMWindow.webkitIndexedDB',
     'Document.adoptNode',
     'Document.alinkColor',
     'Document.all',
@@ -226,17 +224,14 @@
     'Document.fgColor',
     'Document.get:URL',
     'Document.get:anchors',
-    'Document.get:applets',
     'Document.get:characterSet',
     'Document.get:compatMode',
-    'Document.get:compatMode',
     'Document.get:defaultCharset',
     'Document.get:doctype',
     'Document.get:documentURI',
     'Document.get:embeds',
     'Document.get:forms',
     'Document.get:height',
-    'Document.get:images',
     'Document.get:inputEncoding',
     'Document.get:links',
     'Document.get:plugins',
@@ -250,12 +245,9 @@
     'Document.importNode',
     'Document.linkColor',
     'Document.location',
-    'Document.manifest',
     'Document.open',
     'Document.releaseEvents',
-    'Document.set:documentURI',
     'Document.set:domain',
-    'Document.version',
     'Document.vlinkColor',
     'Document.webkitCurrentFullScreenElement',
     'Document.webkitFullScreenKeyboardInputAllowed',
@@ -264,18 +256,38 @@
     'Document.xmlStandalone',
     'Document.xmlVersion',
     'DocumentType.*',
+    'DOMCoreException.code',
+    'DOMCoreException.ABORT_ERR',
+    'DOMCoreException.DATA_CLONE_ERR',
+    'DOMCoreException.DOMSTRING_SIZE_ERR',
+    'DOMCoreException.HIERARCHY_REQUEST_ERR',
+    'DOMCoreException.INDEX_SIZE_ERR',
+    'DOMCoreException.INUSE_ATTRIBUTE_ERR',
+    'DOMCoreException.INVALID_ACCESS_ERR',
+    'DOMCoreException.INVALID_CHARACTER_ERR',
+    'DOMCoreException.INVALID_MODIFICATION_ERR',
+    'DOMCoreException.INVALID_NODE_TYPE_ERR',
+    'DOMCoreException.INVALID_STATE_ERR',
+    'DOMCoreException.NAMESPACE_ERR',
+    'DOMCoreException.NETWORK_ERR',
+    'DOMCoreException.NOT_FOUND_ERR',
+    'DOMCoreException.NOT_SUPPORTED_ERR',
+    'DOMCoreException.NO_DATA_ALLOWED_ERR',
+    'DOMCoreException.NO_MODIFICATION_ALLOWED_ERR',
+    'DOMCoreException.QUOTA_EXCEEDED_ERR',
+    'DOMCoreException.SECURITY_ERR',
+    'DOMCoreException.SYNTAX_ERR',
+    'DOMCoreException.TIMEOUT_ERR',
+    'DOMCoreException.TYPE_MISMATCH_ERR',
+    'DOMCoreException.URL_MISMATCH_ERR',
+    'DOMCoreException.VALIDATION_ERR',
+    'DOMCoreException.WRONG_DOCUMENT_ERR',
     'Element.accessKey',
     'Element.get:classList',
-    'Element.get:itemProp',
-    'Element.get:itemRef',
-    'Element.get:itemType',
     'Element.getAttributeNode',
     'Element.getAttributeNodeNS',
     'Element.getElementsByTagNameNS',
     'Element.innerText',
-    'Element.itemId',
-    'Element.itemScope',
-    'Element.itemValue',
     'Element.outerText',
     'Element.removeAttributeNode',
     'Element.scrollIntoView',
@@ -284,41 +296,112 @@
     'Element.setAttributeNodeNS',
     'Event.srcElement',
     'EventSource.URL',
-    'FormElement.get:elements',
-    'HRElement.align',
-    'HRElement.noShade',
-    'HRElement.size',
-    'HRElement.width',
+    'HTMLAnchorElement.charset',
+    'HTMLAnchorElement.coords',
+    'HTMLAnchorElement.rev',
+    'HTMLAnchorElement.shape',
+    'HTMLAnchorElement.text',
+    'HTMLAppletElement.*',
+    'HTMLAreaElement.noHref',
+    'HTMLBRElement.clear',
+    'HTMLBaseFontElement.*',
+    'HTMLBodyElement.aLink',
+    'HTMLBodyElement.background',
+    'HTMLBodyElement.bgColor',
+    'HTMLBodyElement.link',
+    'HTMLBodyElement.text',
+    'HTMLBodyElement.vLink',
+    'HTMLDListElement.compact',
+    'HTMLDirectoryElement.*',
+    'HTMLDivElement.align',
+    'HTMLFontElement.*',
+    'HTMLFormElement.get:elements',
     'HTMLFrameElement.*',
     'HTMLFrameSetElement.*',
-    'HTMLIsIndexElement.*',
+    'HTMLHRElement.align',
+    'HTMLHRElement.noShade',
+    'HTMLHRElement.size',
+    'HTMLHRElement.width',
+    'HTMLHeadElement.profile',
+    'HTMLHeadingElement.align',
+    'HTMLHtmlElement.manifest',
+    'HTMLHtmlElement.version',
+    'HTMLIFrameElement.align',
+    'HTMLIFrameElement.frameBorder',
+    'HTMLIFrameElement.longDesc',
+    'HTMLIFrameElement.marginHeight',
+    'HTMLIFrameElement.marginWidth',
+    'HTMLIFrameElement.scrolling',
+    'HTMLImageElement.align',
+    'HTMLImageElement.hspace',
+    'HTMLImageElement.longDesc',
+    'HTMLImageElement.name',
+    'HTMLImageElement.vspace',
+    'HTMLInputElement.align',
+    'HTMLLegendElement.align',
+    'HTMLLinkElement.charset',
+    'HTMLLinkElement.rev',
+    'HTMLLinkElement.target',
+    'HTMLMarqueeElement.*',
+    'HTMLMenuElement.compact',
+    'HTMLMetaElement.scheme',
+    'HTMLOListElement.compact',
+    'HTMLObjectElement.align',
+    'HTMLObjectElement.archive',
+    'HTMLObjectElement.border',
+    'HTMLObjectElement.codeBase',
+    'HTMLObjectElement.codeType',
+    'HTMLObjectElement.declare',
+    'HTMLObjectElement.hspace',
+    'HTMLObjectElement.standby',
+    'HTMLObjectElement.vspace',
+    'HTMLOptionElement.text',
     'HTMLOptionsCollection.*',
-    'HTMLPropertiesCollection.*',
-    'HeadElement.profile',
-    'HeadingElement.align',
-    'HtmlElement.manifest',
-    'HtmlElement.version',
-    'HtmlElement.version',
-    'IFrameElement.align',
-    'IFrameElement.frameBorder',
-    'IFrameElement.longDesc',
-    'IFrameElement.marginHeight',
-    'IFrameElement.marginWidth',
-    'IFrameElement.scrolling',
-    'ImageElement.align',
-    'ImageElement.hspace',
-    'ImageElement.longDesc',
-    'ImageElement.name',
-    'ImageElement.vspace',
-    'InputElement.align',
-    'Legend.align',
-    'LinkElement.charset',
-    'LinkElement.rev',
-    'LinkElement.target',
-    'Menu.compact',
-    'MenuElement.compact',
-    'MetaElement.scheme',
-    'NamedNodeMap.*',
+    'HTMLParagraphElement.align',
+    'HTMLParamElement.type',
+    'HTMLParamElement.valueType',
+    'HTMLPreElement.width',
+    'HTMLScriptElement.text',
+    'HTMLSelectElement.options',
+    'HTMLSelectElement.remove',
+    'HTMLSelectElement.selectedOptions',
+    'HTMLTableCaptionElement.align',
+    'HTMLTableCellElement.abbr',
+    'HTMLTableCellElement.align',
+    'HTMLTableCellElement.axis',
+    'HTMLTableCellElement.bgColor',
+    'HTMLTableCellElement.ch',
+    'HTMLTableCellElement.chOff',
+    'HTMLTableCellElement.height',
+    'HTMLTableCellElement.noWrap',
+    'HTMLTableCellElement.scope',
+    'HTMLTableCellElement.vAlign',
+    'HTMLTableCellElement.width',
+    'HTMLTableColElement.align',
+    'HTMLTableColElement.ch',
+    'HTMLTableColElement.chOff',
+    'HTMLTableColElement.vAlign',
+    'HTMLTableColElement.width',
+    'HTMLTableElement.align',
+    'HTMLTableElement.bgColor',
+    'HTMLTableElement.cellPadding',
+    'HTMLTableElement.cellSpacing',
+    'HTMLTableElement.frame',
+    'HTMLTableElement.rules',
+    'HTMLTableElement.summary',
+    'HTMLTableElement.width',
+    'HTMLTableRowElement.align',
+    'HTMLTableRowElement.bgColor',
+    'HTMLTableRowElement.ch',
+    'HTMLTableRowElement.chOff',
+    'HTMLTableRowElement.vAlign',
+    'HTMLTableSectionElement.align',
+    'HTMLTableSectionElement.ch',
+    'HTMLTableSectionElement.chOff',
+    'HTMLTableSectionElement.vAlign',
+    'HTMLTitleElement.text',
+    'HTMLUListElement.compact',
+    'HTMLUListElement.type',
     'Node.compareDocumentPosition',
     'Node.get:ATTRIBUTE_NODE',
     'Node.get:CDATA_SECTION_NODE',
@@ -340,7 +423,6 @@
     'Node.get:TEXT_NODE',
     'Node.get:baseURI',
     'Node.get:nodeName',
-    'Node.get:nodeValue',
     'Node.get:prefix',
     'Node.hasAttributes',
     'Node.isDefaultNamespace',
@@ -351,76 +433,9 @@
     'Node.lookupPrefix',
     'Node.normalize',
     'Node.set:nodeValue',
-    'Node.set:prefix',
     'NodeList.item',
-    'OListElement.compact',
-    'ObjectElement.align',
-    'ObjectElement.archive',
-    'ObjectElement.border',
-    'ObjectElement.codeBase',
-    'ObjectElement.codeType',
-    'ObjectElement.declare',
-    'ObjectElement.hspace',
-    'ObjectElement.standby',
-    'ObjectElement.vspace',
-    'OptionElement.text',
-    'ParagraphElement.align',
-    'ParamElement.type',
-    'ParamElement.valueType',
-    'PreElement.width',
-    'ScriptElement.text',
-    'SelectElement.options',
-    'SelectElement.remove',
-    'SelectElement.selectedOptions',
     'ShadowRoot.getElementsByTagNameNS',
-    'TableCaptionElement.align',
-    'TableCellElement.abbr',
-    'TableCellElement.align',
-    'TableCellElement.axis',
-    'TableCellElement.bgColor',
-    'TableCellElement.ch',
-    'TableCellElement.chOff',
-    'TableCellElement.height',
-    'TableCellElement.noWrap',
-    'TableCellElement.scope',
-    'TableCellElement.vAlign',
-    'TableCellElement.width',
-    'TableColElement.align',
-    'TableColElement.ch',
-    'TableColElement.chOff',
-    'TableColElement.vAlign',
-    'TableColElement.width',
-    'TableElement.align',
-    'TableElement.bgColor',
-    'TableElement.cellPadding',
-    'TableElement.cellSpacing',
-    'TableElement.frame',
-    'TableElement.rules',
-    'TableElement.summary',
-    'TableElement.width',
-    'TableRowElement.align',
-    'TableRowElement.bgColor',
-    'TableRowElement.ch',
-    'TableRowElement.chOff',
-    'TableRowElement.vAlign',
-    'TableSectionElement.align',
-    'TableSectionElement.ch',
-    'TableSectionElement.choff',
-    'TableSectionElement.vAlign',
-    'TitleElement.text',
-    'Transaction.READ_ONLY',
-    'Transaction.READ_WRITE',
-    'UListElement.compact',
-    'UListElement.type',
     'WheelEvent.wheelDelta',
-    'Window.blur',
-    'Window.clientInformation',
-    'Window.focus',
-    'Window.get:frames',
-    'Window.get:length',
-    'Window.prompt',
-    'Window.webkitCancelRequestAnimationFrame',
-    'Window.webkitIndexedDB',
     'WorkerContext.webkitIndexedDB',
 # TODO(jacobr): should these be removed?
     'Document.close',
@@ -449,14 +464,14 @@
     """
     interface = self._database.GetInterface(interface_name)
 
-    if self._FindMatch(interface, member, member_prefix, _removed_html_members):
+    if self.ShouldSuppressMember(interface, member, member_prefix):
       return None
 
     if 'CheckSecurityForNode' in member_node.ext_attrs:
       return None
 
     name = self._FindMatch(interface, member, member_prefix,
-                           _renamed_html_members)
+        _renamed_html_members)
 
     target_name = _renamed_html_members[name] if name else member
     if self._FindMatch(interface, member, member_prefix, _private_html_members):
@@ -467,13 +482,22 @@
       target_name = self._DartifyMemberName(target_name)
     return target_name
 
+  def ShouldSuppressMember(self, interface, member, member_prefix=''):
+    """ Returns true if the member should be suppressed."""
+    if self._FindMatch(interface, member, member_prefix,
+        _removed_html_members):
+      return True
+    return False
+
   def _FindMatch(self, interface, member, member_prefix, candidates):
     for interface in self._database.Hierarchy(interface):
-      html_interface_name = self.RenameInterface(interface)
-      member_name = html_interface_name + '.' + member
+      member_name = interface.id + '.' + member
       if member_name in candidates:
         return member_name
-      member_name = html_interface_name + '.' + member_prefix + member
+      member_name = interface.id + '.' + member_prefix + member
+      if member_name in candidates:
+        return member_name
+      member_name = interface.id + '.*'
       if member_name in candidates:
         return member_name
 
@@ -491,6 +515,9 @@
   def DartifyTypeName(self, type_name):
     """Converts a DOM name to a Dart-friendly class name. """
 
+    if type_name in html_interface_renames:
+      return html_interface_renames[type_name]
+
     # Strip off any standard prefixes.
     name = re.sub(r'^SVG', '', type_name)
     name = re.sub(r'^IDB', '', name)
diff --git a/tools/dom/scripts/idlsync.py b/tools/dom/scripts/idlsync.py
index ba4c4ee..7307845 100755
--- a/tools/dom/scripts/idlsync.py
+++ b/tools/dom/scripts/idlsync.py
@@ -12,7 +12,7 @@
 import sys
 
 SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__))
-DART_PATH = os.path.abspath(os.path.join(SCRIPT_PATH, '..', '..', '..', '..'))
+DART_PATH = os.path.abspath(os.path.join(SCRIPT_PATH, '..', '..', '..'))
 
 # Path to install latest IDL.
 IDL_PATH = os.path.join(DART_PATH, 'third_party', 'WebCore')
diff --git a/tools/dom/scripts/logging.conf b/tools/dom/scripts/logging.conf
index 3b7af74..b9d3e98 100644
--- a/tools/dom/scripts/logging.conf
+++ b/tools/dom/scripts/logging.conf
@@ -1,5 +1,5 @@
 [loggers]
-keys=root,pegparser,database,databasebuilder,dartgenerator,snippet_manager
+keys=root,pegparser,database,databasebuilder,dartgenerator,snippet_manager,htmlrenamer
 
 [handlers]
 keys=consoleHandler
@@ -47,6 +47,12 @@
 formatter=simpleFormatter
 args=(sys.stdout,)
 
+[logger_htmlrenamer]
+level=INFO
+propagate=0
+handlers=consoleHandler
+qualname=htmlrenamer
+
 [formatter_simpleFormatter]
 format=%(name)s - %(levelname)s - %(message)s
 datefmt=
diff --git a/tools/dom/scripts/monitored.py b/tools/dom/scripts/monitored.py
new file mode 100644
index 0000000..aa26502
--- /dev/null
+++ b/tools/dom/scripts/monitored.py
@@ -0,0 +1,63 @@
+#!/usr/bin/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.
+
+"""This module provides maps and sets that report unused elements."""
+
+_monitored_values = []
+
+
+def FinishMonitoring():
+  for value in _monitored_values:
+    value.CheckUsage()
+
+class MonitoredCollection(object):
+  def __init__(self, name):
+    self.name = name
+    self._used_keys = set()
+    _monitored_values.append(self)
+
+class Dict(MonitoredCollection):
+  """Wrapper for a read-only dict that reports unused keys."""
+
+  def __init__(self, name, map):
+    super(Dict, self).__init__(name)
+    self._map = map
+
+  def __getitem__(self, key):
+    self._used_keys.add(key)
+    return self._map[key]
+
+  def __contains__(self, key):
+    self._used_keys.add(key)
+    return key in self._map
+
+  def __iter__(self):
+    return self._map.__iter__()
+
+  def get(self, key, default=None):
+    self._used_keys.add(key)
+    return self._map.get(key, default)
+
+  def CheckUsage(self):
+    for v in sorted(self._map.keys()):
+      if v not in self._used_keys:
+        print "dict '%s' has unused key '%s'" % (self.name, v)
+
+
+class Set(MonitoredCollection):
+  """Wrapper for a read-only set that reports unused keys."""
+
+  def __init__(self, name, a_set):
+    super(Set, self).__init__(name)
+    self._set = a_set
+
+  def __contains__(self, key):
+    self._used_keys.add(key)
+    return key in self._set
+
+  def CheckUsage(self):
+    for v in sorted(self._set):
+      if v not in self._used_keys:
+        print "set '%s' has unused key '%s'" % (self.name, v)
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 5789c58..465645d 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -45,6 +45,7 @@
     'Element.webkitMatchesSelector',
     'Element.remove',
     'ElementEvents.mouseWheel',
+    'DOMException.name',
     'HTMLCanvasElement.getContext',
     'HTMLTableElement.createTBody',
     'IDBDatabase.transaction',
@@ -52,6 +53,7 @@
     'MouseEvent.offsetX',
     'MouseEvent.offsetY',
     'Navigator.language',
+    'Navigator.webkitGetUserMedia',
     'URL.createObjectURL',
     'URL.revokeObjectURL',
     'WheelEvent.wheelDeltaX',
@@ -70,6 +72,7 @@
 
 js_support_checks = {
   'ArrayBuffer': "JS('bool', 'typeof window.ArrayBuffer != \"undefined\"')",
+  'DOMApplicationCache': "JS('bool', '!!(window.applicationCache)')",
   'DOMFileSystem': "JS('bool', '!!(window.webkitRequestFileSystem)')",
   'HTMLContentElement': "Element.isTagSupported('content')",
   'HTMLDataListElement': "Element.isTagSupported('datalist')",
@@ -78,14 +81,13 @@
   # IE creates keygen as Block elements
   'HTMLKeygenElement': "Element.isTagSupported('keygen') "
       "&& (new Element.tag('keygen') is KeygenElement)",
-  'HTMLMarqueeElement': "Element.isTagSupported('marquee')"
-      "&& (new Element.tag('marquee') is MarqueeElement)",
   'HTMLMeterElement': "Element.isTagSupported('meter')",
   'HTMLObjectElement': "Element.isTagSupported('object')",
   'HTMLOutputElement': "Element.isTagSupported('output')",
   'HTMLProgressElement': "Element.isTagSupported('progress')",
   'HTMLShadowElement': "Element.isTagSupported('shadow')",
   'HTMLTrackElement': "Element.isTagSupported('track')",
+  'NotificationCenter': "JS('bool', '!!(window.webkitNotifications)')",
   'Performance': "JS('bool', '!!(window.performance)')",
   'WebSocket': "JS('bool', 'typeof window.WebSocket != \"undefined\"')",
 }
@@ -411,7 +413,6 @@
     self._backend.EmitHelpers(base_class)
     self._event_generator.EmitStreamProviders(
         self._interface,
-        self._interface.doc_js_name,
         self._backend.CustomJSMembers(),
         self._implementation_members_emitter)
     self._backend.AddConstructors(
@@ -435,8 +436,7 @@
     self._backend.AddSecondaryMembers(self._interface)
     self._event_generator.EmitStreamGetters(
         self._interface,
-        self._interface.doc_js_name,
-        self._backend.CustomJSMembers(),
+        [],
         self._implementation_members_emitter)
     self._backend.FinishInterface()
 
@@ -648,7 +648,6 @@
     input_type = self._NarrowInputType(attribute.type.id)
     annotations = self._Annotations(attribute.type.id, attribute.id)
     rename = self._RenamingAnnotation(attribute.id, html_name)
-    self.EmitAttributeDocumentation(attribute)
     if not read_only:
       self._members_emitter.Emit(
           '\n  $RENAME$ANNOTATIONS$TYPE $NAME;'
@@ -684,7 +683,6 @@
         TYPE=self.SecureOutputType(attribute.type.id))
 
   def _AddRenamingGetter(self, attr, html_name):
-    self.EmitAttributeDocumentation(attr)
 
     conversion = self._OutputConversion(attr.type.id, attr.id)
     if conversion:
@@ -701,7 +699,6 @@
         NATIVE_TYPE=native_type)
 
   def _AddRenamingSetter(self, attr, html_name):
-    self.EmitAttributeDocumentation(attr)
 
     conversion = self._InputConversion(attr.type.id, attr.id)
     if conversion:
@@ -756,8 +753,6 @@
     if self._HasCustomImplementation(info.name):
       return
 
-    self.EmitOperationDocumentation(info)
-
     if IsPureInterface(self._interface.id):
       self._AddInterfaceOperation(info, html_name)
     elif any(self._OperationRequiresConversions(op) for op in info.overloads):
@@ -929,16 +924,18 @@
     return ''
 
   def _Annotations(self, idl_type, idl_member_name):
+    out = ''
     annotations = FindDart2JSAnnotations(idl_type, self._interface.id,
         idl_member_name)
     if annotations:
-      return '%s\n  ' % annotations
-    return_type = self.SecureOutputType(idl_type)
-    native_type = self._NarrowToImplementationType(idl_type)
-    if native_type != return_type:
-      return "@Returns('%s') @Creates('%s')\n  " % (native_type, native_type)
-    else:
-      return ''
+      out = '%s\n  ' % annotations
+    if not AnyConversionAnnotations(idl_type, self._interface.id,
+                                  idl_member_name):
+      return_type = self.SecureOutputType(idl_type)
+      native_type = self._NarrowToImplementationType(idl_type)
+      if native_type != return_type:
+        out += "@Returns('%s') @Creates('%s')\n  " % (native_type, native_type)
+    return out
 
   def CustomJSMembers(self):
     return _js_custom_members
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index ddade57..891b287 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -428,18 +428,16 @@
       info: An OperationInfo object.
     """
 
-    operation = info.operations[0]
-
-    is_custom = 'Custom' in operation.ext_attrs
-    has_optional_arguments = any(self._IsArgumentOptionalInWebCore(operation, argument) for argument in operation.arguments)
-    needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_optional_arguments)
-
     dart_declaration = '%s%s %s(%s)' % (
         'static ' if info.IsStatic() else '',
         self.SecureOutputType(info.type_name),
         html_name,
-        info.ParametersDeclaration(
-            (lambda x: 'dynamic') if needs_dispatcher else self._DartType))
+        info.ParametersDeclaration(self._DartType))
+
+    operation = info.operations[0]
+    is_custom = 'Custom' in operation.ext_attrs
+    has_optional_arguments = any(self._IsArgumentOptionalInWebCore(operation, argument) for argument in operation.arguments)
+    needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_optional_arguments)
 
     if not needs_dispatcher:
       # Bind directly to native implementation
@@ -759,12 +757,9 @@
 
     native_binding = '%s_%s_%s' % (self._interface.id, idl_name, native_suffix)
     self._members_emitter.Emit(
-        '\n'
-        '\n  /** @domName $DOMINTERFACE.$DOMNAME */'
         '$ANNOTATIONS'
         '\n  $DART_DECLARATION native "$NATIVE_BINDING";\n',
         DOMINTERFACE=self._interface.id,
-        DOMNAME=idl_name,
         ANNOTATIONS=annotation_str,
         DART_DECLARATION=dart_declaration,
         NATIVE_BINDING=native_binding)
diff --git a/tools/dom/src/CssClassSet.dart b/tools/dom/src/CssClassSet.dart
index b6cbb9a..2c875b0 100644
--- a/tools/dom/src/CssClassSet.dart
+++ b/tools/dom/src/CssClassSet.dart
@@ -67,11 +67,12 @@
 
   void add(String value) {
     // TODO - figure out if we need to do any validation here
-    // or if the browser natively does enough
+    // or if the browser natively does enough.
     _modify((s) => s.add(value));
   }
 
-  bool remove(String value) {
+  bool remove(Object value) {
+    if (value is! String) return false;
     Set<String> s = readClasses();
     bool result = s.remove(value);
     writeClasses(s);
@@ -79,7 +80,7 @@
   }
 
   void addAll(Iterable<String> iterable) {
-    // TODO - see comment above about validation
+    // TODO - see comment above about validation.
     _modify((s) => s.addAll(iterable));
   }
 
@@ -87,6 +88,18 @@
     _modify((s) => s.removeAll(iterable));
   }
 
+  void retainAll(Iterable<String> iterable) {
+    _modify((s) => s.retainAll(iterable));
+  }
+
+  void removeMatching(bool test(String name)) {
+    _modify((s) => s.removeMatching(test));
+  }
+
+  void retainMatching(bool test(String name)) {
+    _modify((s) => s.retainMatching(test));
+  }
+
   bool isSubsetOf(Collection<String> collection) =>
     readClasses().isSubsetOf(collection);
 
diff --git a/tools/dom/src/EventStreamProvider.dart b/tools/dom/src/EventStreamProvider.dart
index 9c52a5d..477359a 100644
--- a/tools/dom/src/EventStreamProvider.dart
+++ b/tools/dom/src/EventStreamProvider.dart
@@ -135,3 +135,18 @@
     return new _EventStream(e, _eventType, useCapture);
   }
 }
+
+/**
+ * A factory to expose DOM events as streams, where the DOM event name has to
+ * be determined on the fly (for example, mouse wheel events).
+ */
+class _CustomEventStreamProvider<T extends Event>
+    implements EventStreamProvider<T> {
+
+  final _eventTypeGetter;
+  const _CustomEventStreamProvider(this._eventTypeGetter);
+
+  Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
+    return new _EventStream(e, _eventTypeGetter(e), useCapture);
+  }
+}
diff --git a/tools/dom/src/chrome/sample.dart b/tools/dom/src/chrome/sample.dart
new file mode 100644
index 0000000..4578b44
--- /dev/null
+++ b/tools/dom/src/chrome/sample.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of chrome;
+
+// This is an example of exposing chrome APIs in Dart and will be replaced with
+// the proper implementation in the future.
+
+class AppModule {
+  AppModule._();
+
+  WindowModule get window => new WindowModule._();
+}
+
+class WindowModule {
+  WindowModule._();
+
+  void create(String url) {
+    var chrome = JS('', 'chrome');
+
+    if (chrome == null) {
+      throw new UnsupportedError('Not supported by current browser');
+    }
+    var app = JS('', '#.app', chrome);
+    if (app == null) {
+      throw new UnsupportedError('Not supported by current browser');
+    }
+    var window = JS('', '#.window', app);
+    if (app == null) {
+      throw new UnsupportedError('Not supported by current browser');
+    }
+    JS('void', '#.create(#)', window, url);
+  }
+}
+
+final app = new AppModule._();
diff --git a/tools/dom/src/shared_FactoryProviders.dart b/tools/dom/src/shared_FactoryProviders.dart
index a5d6909..dd4bb4a 100644
--- a/tools/dom/src/shared_FactoryProviders.dart
+++ b/tools/dom/src/shared_FactoryProviders.dart
@@ -49,7 +49,7 @@
 }
 
 class _DocumentFragmentFactoryProvider {
-  /** @domName Document.createDocumentFragment */
+  @DomName('Document.createDocumentFragment')
   static DocumentFragment createDocumentFragment() =>
       document.createDocumentFragment();
 
diff --git a/tools/dom/templates/dart2js_impl.darttemplate b/tools/dom/templates/dart2js_impl.darttemplate
index 35ea8d4..068aa00 100644
--- a/tools/dom/templates/dart2js_impl.darttemplate
+++ b/tools/dom/templates/dart2js_impl.darttemplate
@@ -4,6 +4,6 @@
 
 part of $LIBRARYNAME;
 
-/// @domName $DOMNAME; @docsEditable true$ANNOTATIONS
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS}
diff --git a/tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate b/tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate
new file mode 100644
index 0000000..0e2723a
--- /dev/null
+++ b/tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate
@@ -0,0 +1,10 @@
+// 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.
+
+// DO NOT EDIT
+// Auto-generated dart:chrome library.
+
+library chrome;
+
+part '$AUXILIARY_DIR/chrome/sample.dart';
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index 8174cb1..c9f3130 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -9,6 +9,7 @@
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:collection-dev';
 import 'dart:html_common';
 import 'dart:indexed_db';
 import 'dart:isolate';
diff --git a/tools/dom/templates/html/dart2js/impl_ArrayBuffer.darttemplate b/tools/dom/templates/html/dart2js/impl_ArrayBuffer.darttemplate
index ab440b0..fcc61ab 100644
--- a/tools/dom/templates/html/dart2js/impl_ArrayBuffer.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_ArrayBuffer.darttemplate
@@ -3,11 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of $LIBRARYNAME;
-
-/// @domName $DOMNAME$ANNOTATIONS
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
-  /// @domName ArrayBuffer.slice;
+  @DomName('ArrayBuffer.slice')
   ArrayBuffer slice(int begin, [int end]) {
     // IE10 supports ArrayBuffers but does not have the slice method.
     if (JS('bool', '!!#.slice', this)) {
diff --git a/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate b/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
index a8b4e65..a954da5 100644
--- a/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of web_audio;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   // TODO(efortuna): Remove these methods when Chrome stable also uses start
diff --git a/tools/dom/templates/html/dart2js/impl_Console.darttemplate b/tools/dom/templates/html/dart2js/impl_Console.darttemplate
index fd3c96c..1753495 100644
--- a/tools/dom/templates/html/dart2js/impl_Console.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_Console.darttemplate
@@ -3,95 +3,94 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class Console {
 
   static Console safeConsole = new Console();
 
   bool get _isConsoleDefined => JS('bool', "typeof console != 'undefined'");
 
-  /// @domName Console.memory; @docsEditable true
+  @DomName('Console.memory')
   MemoryInfo get memory => _isConsoleDefined ?
       JS('MemoryInfo', 'console.memory') : null;
 
-  /// @domName Console.profiles; @docsEditable true
+  @DomName('Console.profiles')
   List<ScriptProfile> get profiles => _isConsoleDefined ?
       JS('List<ScriptProfile>', 'console.profiles') : null;
 
-  /// @domName Console.assertCondition; @docsEditable true
+  @DomName('Console.assertCondition')
   void assertCondition(bool condition, Object arg) => _isConsoleDefined ?
       JS('void', 'console.assertCondition(#, #)', condition, arg) : null;
 
-  /// @domName Console.count; @docsEditable true
+  @DomName('Console.count')
   void count(Object arg) => _isConsoleDefined ?
       JS('void', 'console.count(#)', arg) : null;
 
-  /// @domName Console.debug; @docsEditable true
+  @DomName('Console.debug')
   void debug(Object arg) => _isConsoleDefined ?
       JS('void', 'console.debug(#)', arg) : null;
 
-  /// @domName Console.dir; @docsEditable true
+  @DomName('Console.dir')
   void dir(Object arg) => _isConsoleDefined ?
       JS('void', 'console.debug(#)', arg) : null;
 
-  /// @domName Console.dirxml; @docsEditable true
+  @DomName('Console.dirxml')
   void dirxml(Object arg) => _isConsoleDefined ?
       JS('void', 'console.dirxml(#)', arg) : null;
 
-  /// @domName Console.error; @docsEditable true
+  @DomName('Console.error')
   void error(Object arg) => _isConsoleDefined ?
       JS('void', 'console.error(#)', arg) : null;
 
-  /// @domName Console.group; @docsEditable true
+  @DomName('Console.group')
   void group(Object arg) => _isConsoleDefined ?
       JS('void', 'console.group(#)', arg) : null;
 
-  /// @domName Console.groupCollapsed; @docsEditable true
+  @DomName('Console.groupCollapsed')
   void groupCollapsed(Object arg) => _isConsoleDefined ?
       JS('void', 'console.groupCollapsed(#)', arg) : null;
 
-  /// @domName Console.groupEnd; @docsEditable true
+  @DomName('Console.groupEnd')
   void groupEnd() => _isConsoleDefined ?
       JS('void', 'console.groupEnd()') : null;
 
-  /// @domName Console.info; @docsEditable true
+  @DomName('Console.info')
   void info(Object arg) => _isConsoleDefined ?
       JS('void', 'console.info(#)', arg) : null;
 
-  /// @domName Console.log; @docsEditable true
+  @DomName('Console.log')
   void log(Object arg) => _isConsoleDefined ?
       JS('void', 'console.log(#)', arg) : null;
 
-  /// @domName Console.markTimeline; @docsEditable true
+  @DomName('Console.markTimeline')
   void markTimeline(Object arg) => _isConsoleDefined ?
       JS('void', 'console.markTimeline(#)', arg) : null;
 
-  /// @domName Console.profile; @docsEditable true
+  @DomName('Console.profile')
   void profile(String title) => _isConsoleDefined ?
       JS('void', 'console.profile(#)', title) : null;
 
-  /// @domName Console.profileEnd; @docsEditable true
+  @DomName('Console.profileEnd')
   void profileEnd(String title) => _isConsoleDefined ?
       JS('void', 'console.profileEnd(#)', title) : null;
 
-  /// @domName Console.time; @docsEditable true
+  @DomName('Console.time')
   void time(String title) => _isConsoleDefined ?
       JS('void', 'console.time(#)', title) : null;
 
-  /// @domName Console.timeEnd; @docsEditable true
+  @DomName('Console.timeEnd')
   void timeEnd(String title, Object arg) => _isConsoleDefined ?
       JS('void', 'console.timeEnd(#, #)', title, arg) : null;
 
-  /// @domName Console.timeStamp; @docsEditable true
+  @DomName('Console.timeStamp')
   void timeStamp(Object arg) => _isConsoleDefined ?
       JS('void', 'console.timeStamp(#)', arg) : null;
 
-  /// @domName Console.trace; @docsEditable true
+  @DomName('Console.trace')
   void trace(Object arg) => _isConsoleDefined ?
       JS('void', 'console.trace(#)', arg) : null;
 
-  /// @domName Console.warn; @docsEditable true
+  @DomName('Console.warn')
   void warn(Object arg) => _isConsoleDefined ?
       JS('void', 'console.warn(#)', arg) : null;
 $!MEMBERS
diff --git a/tools/dom/templates/html/dart2js/impl_HTMLTableElement.darttemplate b/tools/dom/templates/html/dart2js/impl_HTMLTableElement.darttemplate
index 5f8153c..653914c 100644
--- a/tools/dom/templates/html/dart2js/impl_HTMLTableElement.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_HTMLTableElement.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/dart2js/impl_IDBDatabase.darttemplate b/tools/dom/templates/html/dart2js/impl_IDBDatabase.darttemplate
index 5629a9f..7af98dc 100644
--- a/tools/dom/templates/html/dart2js/impl_IDBDatabase.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_IDBDatabase.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of indexed_db;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   Transaction transaction(storeName_OR_storeNames, String mode) {
diff --git a/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate b/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
index d6213e4..3ba329c 100644
--- a/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName KeyboardEvent; @docsEditable true
+@DomName('KeyboardEvent')
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   factory $CLASSNAME(String type, Window view,
@@ -17,7 +17,7 @@
     return e;
   }
 
-  /** @domName KeyboardEvent.initKeyboardEvent */
+  @DomName('KeyboardEvent.initKeyboardEvent')
   void $dom_initKeyboardEvent(String type, bool canBubble, bool cancelable,
       Window view, String keyIdentifier, int keyLocation, bool ctrlKey,
       bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) {
@@ -37,10 +37,10 @@
     }
   }
 
-  /** @domName KeyboardEvent.keyCode */
+  @DomName('KeyboardEvent.keyCode')
   int get keyCode => $dom_keyCode;
 
-  /** @domName KeyboardEvent.charCode */
+  @DomName('KeyboardEvent.charCode')
   int get charCode => $dom_charCode;
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate b/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
index 32ad37d..cc18046 100644
--- a/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type, Window view, int detail, int screenX,
       int screenY, int clientX, int clientY, int button, [bool canBubble = true,
diff --git a/tools/dom/templates/html/dart2js/impl_Navigator.darttemplate b/tools/dom/templates/html/dart2js/impl_Navigator.darttemplate
deleted file mode 100644
index 9b7117f..0000000
--- a/tools/dom/templates/html/dart2js/impl_Navigator.darttemplate
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of $LIBRARYNAME;
-
-/// @domName $DOMNAME; @docsEditable true
-class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-
-  /// @domName Navigator.language; @docsEditable true
-  String get language => JS('String', '#.language || #.userLanguage', this,
-      this);
-  $!MEMBERS
-}
diff --git a/tools/dom/templates/html/dart2js/impl_URL.darttemplate b/tools/dom/templates/html/dart2js/impl_URL.darttemplate
index beb55ec..c7b29c8 100644
--- a/tools/dom/templates/html/dart2js/impl_URL.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_URL.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   static String createObjectUrl(blob_OR_source_OR_stream) =>
diff --git a/tools/dom/templates/html/dart2js/impl_Window.darttemplate b/tools/dom/templates/html/dart2js/impl_Window.darttemplate
index 93f9884..e353769 100644
--- a/tools/dom/templates/html/dart2js/impl_Window.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_Window.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS native "@*DOMWindow" {
 
   Document get document => JS('Document', '#.document', this);
@@ -80,7 +79,7 @@
     _addMeasurementFrameCallback(callback);
   }
 
-  /** @domName DOMWindow.requestAnimationFrame */
+  @DomName('DOMWindow.requestAnimationFrame')
   int requestAnimationFrame(RequestAnimationFrameCallback callback) {
     _ensureRequestAnimationFrame();
     return _requestAnimationFrame(callback);
@@ -157,7 +156,7 @@
     document.documentElement.attributes['dart-port:$name'] = json.stringify(serialized);
   }
 
-  /// @domName Window.console; @docsEditable true
+  @DomName('Window.console')
   Console get console => Console.safeConsole;
 
 $!MEMBERS
diff --git a/tools/dom/templates/html/dart2js/impl_WorkerContext.darttemplate b/tools/dom/templates/html/dart2js/impl_WorkerContext.darttemplate
index 62b1693..1bba286 100644
--- a/tools/dom/templates/html/dart2js/impl_WorkerContext.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_WorkerContext.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
index 42a949b..e7863d1 100644
--- a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
@@ -5,5 +5,6 @@
 
 import 'dart:async';
 import 'dart:html';
+import 'dart:html_common';
 
 $!GENERATED_DART_FILES
diff --git a/tools/dom/templates/html/dartium/chrome_dartium.darttemplate b/tools/dom/templates/html/dartium/chrome_dartium.darttemplate
new file mode 100644
index 0000000..38db7cd
--- /dev/null
+++ b/tools/dom/templates/html/dartium/chrome_dartium.darttemplate
@@ -0,0 +1,8 @@
+// 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.
+
+// DO NOT EDIT
+// Auto-generated dart:chrome library.
+
+library chrome;
diff --git a/tools/dom/templates/html/dartium/dart_implementation.darttemplate b/tools/dom/templates/html/dartium/dart_implementation.darttemplate
index 8377e83..9da79a1 100644
--- a/tools/dom/templates/html/dartium/dart_implementation.darttemplate
+++ b/tools/dom/templates/html/dartium/dart_implementation.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of $LIBRARYNAME;
-
-/// @domName $DOMNAME$ANNOTATIONS
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/dartium/html_dartium.darttemplate b/tools/dom/templates/html/dartium/html_dartium.darttemplate
index 348f17f..a10a44a 100644
--- a/tools/dom/templates/html/dartium/html_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/html_dartium.darttemplate
@@ -9,6 +9,7 @@
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:collection-dev';
 import 'dart:html_common';
 import 'dart:indexed_db';
 import 'dart:isolate';
diff --git a/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate b/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate
index fe26600..d438f09 100644
--- a/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate
+++ b/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName KeyboardEvent; @docsEditable true
+@DomName('KeyboardEvent')
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   factory $CLASSNAME(String type, Window view,
@@ -17,10 +17,10 @@
     return e;
   }
 
-  /** @domName KeyboardEvent.keyCode */
+  @DomName('KeyboardEvent.keyCode')
   int get keyCode => $dom_keyCode;
   
-  /** @domName KeyboardEvent.charCode */
+  @DomName('KeyboardEvent.charCode')
   int get charCode => $dom_charCode;
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate b/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate
index bc4e47e..428e3cf 100644
--- a/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate
+++ b/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type, Window view, int detail, int screenX,
       int screenY, int clientX, int clientY, int button, [bool canBubble = true,
diff --git a/tools/dom/templates/html/dartium/impl_Window.darttemplate b/tools/dom/templates/html/dartium/impl_Window.darttemplate
index 286114d..6eb575e 100644
--- a/tools/dom/templates/html/dartium/impl_Window.darttemplate
+++ b/tools/dom/templates/html/dartium/impl_Window.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /**
diff --git a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
index 1f5569b..dbddaae 100644
--- a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of web_audio;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 $if DART2JS
diff --git a/tools/dom/templates/html/impl/impl_Blob.darttemplate b/tools/dom/templates/html/impl/impl_Blob.darttemplate
index a14667a..5cf4673 100644
--- a/tools/dom/templates/html/impl/impl_Blob.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Blob.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 $if DART2JS
diff --git a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index 2bd9338..37a1905 100644
--- a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -20,8 +20,7 @@
   }
   return _cachedBrowserPrefix;
 }
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.create$CLASSNAME();
   factory $CLASSNAME.css(String css) =>
diff --git a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
index eb5ad08..8014159 100644
--- a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate b/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
index e302fb0..e44d430 100644
--- a/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type, [bool canBubble = true, bool cancelable = true,
       Object detail]) => _$(CLASSNAME)FactoryProvider.create$CLASSNAME(
diff --git a/tools/dom/templates/html/impl/impl_DOMException.darttemplate b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
new file mode 100644
index 0000000..07aacbb
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
@@ -0,0 +1,45 @@
+// 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.
+
+part of html;
+
+/// @domName $DOMNAME
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+
+  static const String INDEX_SIZE = 'IndexSizeError';
+  static const String HIERARCHY_REQUEST = 'HierarchyRequestError';
+  static const String WRONG_DOCUMENT = 'WrongDocumentError';
+  static const String INVALID_CHARACTER = 'InvalidCharacterError';
+  static const String NO_MODIFICATION_ALLOWED = 'NoModificationAllowedError';
+  static const String NOT_FOUND = 'NotFoundError';
+  static const String NOT_SUPPORTED = 'NotSupportedError';
+  static const String INVALID_STATE = 'InvalidStateError';
+  static const String SYNTAX = 'SyntaxError';
+  static const String INVALID_MODIFICATION = 'InvalidModificationError';
+  static const String NAMESPACE = 'NamespaceError';
+  static const String INVALID_ACCESS = 'InvalidAccessError';
+  static const String TYPE_MISMATCH = 'TypeMismatchError';
+  static const String SECURITY = 'SecurityError';
+  static const String NETWORK = 'NetworkError';
+  static const String ABORT = 'AbortError';
+  static const String URL_MISMATCH = 'URLMismatchError';
+  static const String QUOTA_EXCEEDED = 'QuotaExceededError';
+  static const String TIMEOUT = 'TimeoutError';
+  static const String INVALID_NODE_TYPE = 'InvalidNodeTypeError';
+  static const String DATA_CLONE = 'DataCloneError';
+
+$if DART2JS
+  String get name {
+    var errorName = JS('String', '#.name', this);
+    // Although Safari nightly has updated the name to SecurityError, Safari 5
+    // and 6 still return SECURITY_ERR.
+    if (_Device.isWebKit && errorName == 'SECURITY_ERR') return 'SecurityError';
+    // Chrome release still uses old string, remove this line when Chrome stable
+    // also prints out SyntaxError.
+    if (_Device.isWebKit && errorName == 'SYNTAX_ERR') return 'SyntaxError';
+    return errorName;
+  }
+$endif
+$!MEMBERS
+}
diff --git a/tools/dom/templates/html/impl/impl_Document.darttemplate b/tools/dom/templates/html/impl/impl_Document.darttemplate
index 72e2f12..1f8c502 100644
--- a/tools/dom/templates/html/impl/impl_Document.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Document.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 /**
  * The base class for all documents.
  *
diff --git a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
index a3e8cb5..6c56346 100644
--- a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -18,8 +18,7 @@
 
   bool get frozen => true;
 }
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.createDocumentFragment();
 
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 24ff43e..3cc72d0 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -58,46 +58,47 @@
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   List mappedBy(f(Element element)) {
-    return new MappedList<Element, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
-  Iterable<Element> where(bool f(Element element))
-      => new WhereIterable(this, f);
+  Iterable<Element> where(bool f(Element element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
   bool get isEmpty {
     return _element.$dom_firstElementChild == null;
   }
 
   List<Element> take(int n) {
-    return new ListView<Element>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Element> takeWhile(bool test(Element value)) {
-    return new TakeWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Element> skip(int n) {
-    return new ListView<Element>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Element> skipWhile(bool test(Element value)) {
-    return new SkipWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Element firstMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Element lastMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Element singleMatching(bool test(Element value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Element elementAt(int index) {
@@ -116,10 +117,10 @@
     _element.$dom_replaceChild(value, _childElements[index]);
   }
 
-   void set length(int newLength) {
-     // TODO(jacobr): remove children when length is reduced.
-     throw new UnsupportedError('');
-   }
+  void set length(int newLength) {
+    // TODO(jacobr): remove children when length is reduced.
+    throw new UnsupportedError('');
+  }
 
   Element add(Element value) {
     _element.$dom_appendChild(value);
@@ -142,13 +143,38 @@
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Element element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
     throw new UnimplementedError();
   }
 
+  void remove(Object object) {
+    if (object is Element) {
+      Element element = object;
+      if (identical(element.parentNode, this)) {
+        _element.$dom_removeChild(element);
+      }
+    }
+  }
+
+  void removeAll(Iterable elements) {
+    Collections.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    Collections.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(Element element)) {
+    Collections.removeMatching(this, test);
+  }
+
+  void retainMatching(bool test(Element element)) {
+    Collections.retainMatching(this, test);
+  }
+
   void removeRange(int start, int rangeLength) {
     throw new UnimplementedError();
   }
@@ -210,11 +236,11 @@
   }
 
   Element min([int compare(Element a, Element b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Element max([int compare(Element a, Element b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 }
 
@@ -241,15 +267,16 @@
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
   List mappedBy(f(Element element)) {
-    return new MappedList<Element, dynamic>(this, f);
+    return IterableMixinWorkaround.mappedByList(this, f);
   }
 
-  Iterable<Element> where(bool f(Element element))
-      => new WhereIterable(this, f);
+  Iterable<Element> where(bool f(Element element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
   bool every(bool f(Element element)) {
     for(Element element in this) {
@@ -273,31 +300,31 @@
   Set<Element> toSet() => new Set<Element>.from(this);
 
   List<Element> take(int n) {
-    return new ListView<Element>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Element> takeWhile(bool test(Element value)) {
-    return new TakeWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Element> skip(int n) {
-    return new ListView<Element>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Element> skipWhile(bool test(Element value)) {
-    return new SkipWhileIterable<Element>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Element firstMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Element lastMatching(bool test(Element value), {Element orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Element singleMatching(bool test(Element value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Element elementAt(int index) {
@@ -338,7 +365,7 @@
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Element element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
@@ -374,6 +401,26 @@
     throw new UnsupportedError('');
   }
 
+  void remove(Object element) {
+    throw new UnsupportedError('');
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError('');
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError('');
+  }
+
+  void removeMatching(bool test(Element element)) {
+    throw new UnsupportedError('');
+  }
+
+  void retainMatching(bool test(Element element)) {
+    throw new UnsupportedError('');
+  }
+
   Element get first => _nodeList.first;
 
   Element get last => _nodeList.last;
@@ -381,11 +428,11 @@
   Element get single => _nodeList.single;
 
   Element min([int compare(Element a, Element b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Element max([int compare(Element a, Element b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 }
 
@@ -727,6 +774,23 @@
   var xtag;
 
 $if DART2JS
+  static const EventStreamProvider<WheelEvent> mouseWheelEvent =
+      const _CustomEventStreamProvider<WheelEvent>(
+        Element._determineMouseWheelEventType);
+
+  static String _determineMouseWheelEventType(EventTarget e) {
+    if (JS('bool', '#.onwheel !== undefined', e)) {
+      // W3C spec, and should be IE9+, but IE has a bug exposing onwheel.
+      return 'wheel';
+    } else if (JS('bool', '#.onmousewheel !== undefined', e)) {
+      // Chrome & IE
+      return 'mousewheel';
+    } else {
+      // Firefox
+      return 'DOMMouseScroll';
+    }
+  }
+
   /**
    * Creates a text node and inserts it into the DOM at the specified location.
    *
@@ -846,11 +910,12 @@
 
 final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 class _ElementFactoryProvider {
-  static final _CUSTOM_PARENT_TAG_MAP = const {
+  static const _CUSTOM_PARENT_TAG_MAP = const {
     'body' : 'html',
     'head' : 'html',
     'caption' : 'table',
     'td': 'tr',
+    'th': 'tr',
     'colgroup': 'table',
     'col' : 'colgroup',
     'tr' : 'tbody',
@@ -860,7 +925,20 @@
     'track' : 'audio',
   };
 
-  /** @domName Document.createElement */
+  // TODO(jmesserly): const set would be better
+  static const _TABLE_TAGS = const {
+    'caption': null,
+    'col': null,
+    'colgroup': null,
+    'tbody': null,
+    'td': null,
+    'tfoot': null,
+    'th': null,
+    'thead': null,
+    'tr': null,
+  };
+
+  @DomName('Document.createElement')
   static Element createElement_html(String html) {
     // TODO(jacobr): this method can be made more robust and performant.
     // 1) Cache the dummy parent elements required to use innerHTML rather than
@@ -873,30 +951,90 @@
     final match = _START_TAG_REGEXP.firstMatch(html);
     if (match != null) {
       tag = match.group(1).toLowerCase();
-      if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
-        parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
+      if (_Device.isIE && _TABLE_TAGS.containsKey(tag)) {
+        return _createTableForIE(html, tag);
       }
+      parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
+      if (parentTag == null) parentTag = 'div';
     }
-    final Element temp = new Element.tag(parentTag);
+
+    final temp = new Element.tag(parentTag);
     temp.innerHtml = html;
 
     Element element;
     if (temp.children.length == 1) {
       element = temp.children[0];
     } else if (parentTag == 'html' && temp.children.length == 2) {
-      // Work around for edge case in WebKit and possibly other browsers where
-      // both body and head elements are created even though the inner html
-      // only contains a head or body element.
+      // In html5 the root <html> tag will always have a <body> and a <head>,
+      // even though the inner html only contains one of them.
       element = temp.children[tag == 'head' ? 0 : 1];
     } else {
-      throw new ArgumentError('HTML had ${temp.children.length} '
-          'top level elements but 1 expected');
+      _singleNode(temp.children);
     }
     element.remove();
     return element;
   }
 
-  /** @domName Document.createElement */
+  /**
+   * IE table elements don't support innerHTML (even in standards mode).
+   * Instead we use a div and inject the table element in the innerHtml string.
+   * This technique works on other browsers too, but it's probably slower,
+   * so we only use it when running on IE.
+   *
+   * See also innerHTML:
+   * <http://msdn.microsoft.com/en-us/library/ie/ms533897(v=vs.85).aspx>
+   * and Building Tables Dynamically:
+   * <http://msdn.microsoft.com/en-us/library/ie/ms532998(v=vs.85).aspx>.
+   */
+  static Element _createTableForIE(String html, String tag) {
+    var div = new Element.tag('div');
+    div.innerHtml = '<table>$html</table>';
+    var table = _singleNode(div.children);
+    Element element;
+    switch (tag) {
+      case 'td':
+      case 'th':
+        element = _singleNode(_singleNode(table.rows).cells);
+        break;
+      case 'tr':
+        element = _singleNode(table.rows);
+        break;
+      case 'tbody':
+        element = _singleNode(table.tBodies);
+        break;
+      case 'thead':
+        element = table.tHead;
+        break;
+      case 'tfoot':
+        element = table.tFoot;
+        break;
+      case 'caption':
+        element = table.caption;
+        break;
+      case 'colgroup':
+        element = _getColgroup(table);
+        break;
+      case 'col':
+        element = _singleNode(_getColgroup(table).children);
+        break;
+    }
+    element.remove();
+    return element;
+  }
+
+  static TableColElement _getColgroup(TableElement table) {
+    // TODO(jmesserly): is there a better way to do this?
+    return _singleNode(table.children.where((n) => n.tagName == 'COLGROUP')
+        .toList());
+  }
+
+  static Node _singleNode(List<Node> list) {
+    if (list.length == 1) return list[0];
+    throw new ArgumentError('HTML had ${list.length} '
+        'top level elements but 1 expected');
+  }
+
+  @DomName('Document.createElement')
 $if DART2JS
   // Optimization to improve performance until the dart2js compiler inlines this
   // method.
diff --git a/tools/dom/templates/html/impl/impl_Event.darttemplate b/tools/dom/templates/html/impl/impl_Event.darttemplate
index c1cf096..8e0adcd 100644
--- a/tools/dom/templates/html/impl/impl_Event.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Event.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
diff --git a/tools/dom/templates/html/impl/impl_EventTarget.darttemplate b/tools/dom/templates/html/impl/impl_EventTarget.darttemplate
index 9094644..a6c4383 100644
--- a/tools/dom/templates/html/impl/impl_EventTarget.darttemplate
+++ b/tools/dom/templates/html/impl/impl_EventTarget.darttemplate
@@ -64,8 +64,7 @@
     _ptr.$dom_removeEventListener(_type, listener, useCapture);
   }
 }
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 /**
  * Base class for all browser objects that support events.
  *
@@ -76,7 +75,7 @@
  */ 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
-  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
+  @DomName('EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent')
   Events get on => new Events(this);
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
index cb5aa2a..d0de325 100644
--- a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
index 06afcb2..95644ff 100644
--- a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
@@ -5,24 +5,23 @@
 // WARNING: Do not edit - generated code.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
-  /** @domName Document.body */
+  @DomName('Document.body')
   BodyElement get body => document.$dom_body;
 
-  /** @domName Document.body */
+  @DomName('Document.body')
   void set body(BodyElement value) {
     document.$dom_body = value;
   }
 
-  /** @domName Document.caretRangeFromPoint */
+  @DomName('Document.caretRangeFromPoint')
   Range caretRangeFromPoint(int x, int y) {
     return document.$dom_caretRangeFromPoint(x, y);
   }
 
-  /** @domName Document.elementFromPoint */
+  @DomName('Document.elementFromPoint')
   Element elementFromPoint(int x, int y) {
     return document.$dom_elementFromPoint(x, y);
   }
@@ -65,71 +64,72 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
+  @DomName('Document.getCSSCanvasContext')
   CanvasRenderingContext getCssCanvasContext(String contextId, String name,
       int width, int height) {
     return document.$dom_getCssCanvasContext(contextId, name, width, height);
   }
 
-  /** @domName Document.head */
+  @DomName('Document.head')
   HeadElement get head => document.$dom_head;
 
-  /** @domName Document.lastModified */
+  @DomName('Document.lastModified')
   String get lastModified => document.$dom_lastModified;
 
-  /** @domName Document.preferredStylesheetSet */
+  @DomName('Document.preferredStylesheetSet')
   String get preferredStylesheetSet => document.$dom_preferredStylesheetSet;
 
-  /** @domName Document.referrer */
+  @DomName('Document.referrer')
   String get referrer => document.$dom_referrer;
 
-  /** @domName Document.selectedStylesheetSet */
+  @DomName('Document.selectedStylesheetSet')
   String get selectedStylesheetSet => document.$dom_selectedStylesheetSet;
   void set selectedStylesheetSet(String value) {
     document.$dom_selectedStylesheetSet = value;
   }
 
-  /** @domName Document.styleSheets */
+  @DomName('Document.styleSheets')
   List<StyleSheet> get styleSheets => document.$dom_styleSheets;
 
-  /** @domName Document.title */
+  @DomName('Document.title')
   String get title => document.$dom_title;
 
-  /** @domName Document.title */
+  @DomName('Document.title')
   void set title(String value) {
     document.$dom_title = value;
   }
 
-  /** @domName Document.webkitCancelFullScreen */
+  @DomName('Document.webkitCancelFullScreen')
   void webkitCancelFullScreen() {
     document.$dom_webkitCancelFullScreen();
   }
 
-  /** @domName Document.webkitExitFullscreen */
+  @DomName('Document.webkitExitFullscreen')
   void webkitExitFullscreen() {
     document.$dom_webkitExitFullscreen();
   }
 
-  /** @domName Document.webkitExitPointerLock */
+  @DomName('Document.webkitExitPointerLock')
   void webkitExitPointerLock() {
     document.$dom_webkitExitPointerLock();
   }
 
-  /** @domName Document.webkitFullscreenElement */
+  @DomName('Document.webkitFullscreenElement')
   Element get webkitFullscreenElement => document.$dom_webkitFullscreenElement;
 
-  /** @domName Document.webkitFullscreenEnabled */
+  @DomName('Document.webkitFullscreenEnabled')
   bool get webkitFullscreenEnabled => document.$dom_webkitFullscreenEnabled;
 
-  /** @domName Document.webkitHidden */
+  @DomName('Document.webkitHidden')
   bool get webkitHidden => document.$dom_webkitHidden;
 
-  /** @domName Document.webkitIsFullScreen */
+  @DomName('Document.webkitIsFullScreen')
   bool get webkitIsFullScreen => document.$dom_webkitIsFullScreen;
 
-  /** @domName Document.webkitPointerLockElement */
+  @DomName('Document.webkitPointerLockElement')
   Element get webkitPointerLockElement =>
       document.$dom_webkitPointerLockElement;
 
-  /** @domName Document.webkitVisibilityState */
+  @DomName('Document.webkitVisibilityState')
   String get webkitVisibilityState => document.$dom_webkitVisibilityState;
 }
diff --git a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
index 45da9bc..8b49685 100644
--- a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of $LIBRARYNAME;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS implements
     HiddenInputElement,
     SearchInputElement,
@@ -30,7 +29,6 @@
     ButtonInputElement
     $NATIVESPEC {
 
-  ///@docsEditable true
   factory InputElement({String type}) {
     var e = document.$dom_createElement("input");
     if (type != null) {
@@ -53,40 +51,40 @@
  * Exposes the functionality common between all InputElement types.
  */
 abstract class InputElementBase implements Element {
-  /// @domName HTMLInputElement.autofocus
+  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLInputElement.disabled
+  @DomName('HTMLInputElement.disabled')
   bool disabled;
 
-  /// @domName HTMLInputElement.incremental
+  @DomName('HTMLInputElement.incremental')
   bool incremental;
 
-  /// @domName HTMLInputElement.indeterminate
+  @DomName('HTMLInputElement.indeterminate')
   bool indeterminate;
 
-  /// @domName HTMLInputElement.labels
+  @DomName('HTMLInputElement.labels')
   List<Node> get labels;
 
-  /// @domName HTMLInputElement.name
+  @DomName('HTMLInputElement.name')
   String name;
 
-  /// @domName HTMLInputElement.validationMessage
+  @DomName('HTMLInputElement.validationMessage')
   String get validationMessage;
 
-  /// @domName HTMLInputElement.validity
+  @DomName('HTMLInputElement.validity')
   ValidityState get validity;
 
-  /// @domName HTMLInputElement.value
+  @DomName('HTMLInputElement.value')
   String value;
 
-  /// @domName HTMLInputElement.willValidate
+  @DomName('HTMLInputElement.willValidate')
   bool get willValidate;
 
-  /// @domName HTMLInputElement.checkValidity
+  @DomName('HTMLInputElement.checkValidity')
   bool checkValidity();
 
-  /// @domName HTMLInputElement.setCustomValidity
+  @DomName('HTMLInputElement.setCustomValidity')
   void setCustomValidity(String error);
 }
 
@@ -102,40 +100,40 @@
  * Base interface for all inputs which involve text editing.
  */
 abstract class TextInputElementBase implements InputElementBase {
-  /// @domName HTMLInputElement.autocomplete
+  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLInputElement.maxLength
+  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLInputElement.pattern
+  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.size
+  @DomName('HTMLInputElement.size')
   int size;
 
-  /// @domName HTMLInputElement.select
+  @DomName('HTMLInputElement.select')
   void select();
 
-  /// @domName HTMLInputElement.selectionDirection
+  @DomName('HTMLInputElement.selectionDirection')
   String selectionDirection;
 
-  /// @domName HTMLInputElement.selectionEnd
+  @DomName('HTMLInputElement.selectionEnd')
   int selectionEnd;
 
-  /// @domName HTMLInputElement.selectionStart
+  @DomName('HTMLInputElement.selectionStart')
   int selectionStart;
 
-  /// @domName HTMLInputElement.setSelectionRange
+  @DomName('HTMLInputElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]);
 }
 
@@ -152,10 +150,10 @@
 abstract class SearchInputElement implements TextInputElementBase {
   factory SearchInputElement() => new InputElement(type: 'search');
 
-  /// @domName HTMLInputElement.dirName;
+  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -170,10 +168,10 @@
 abstract class TextInputElement implements TextInputElementBase {
   factory TextInputElement() => new InputElement(type: 'text');
 
-  /// @domName HTMLInputElement.dirName;
+  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 }
 
@@ -189,7 +187,7 @@
 abstract class UrlInputElement implements TextInputElementBase {
   factory UrlInputElement() => new InputElement(type: 'url');
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -213,7 +211,7 @@
 abstract class TelephoneInputElement implements TextInputElementBase {
   factory TelephoneInputElement() => new InputElement(type: 'tel');
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -234,34 +232,34 @@
 abstract class EmailInputElement implements TextInputElementBase {
   factory EmailInputElement() => new InputElement(type: 'email');
 
-  /// @domName HTMLInputElement.autocomplete
+  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  /// @domName HTMLInputElement.autofocus
+  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  /// @domName HTMLInputElement.list;
+  @DomName('HTMLInputElement.list')
   Element get list;
 
-  /// @domName HTMLInputElement.maxLength
+  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  /// @domName HTMLInputElement.multiple;
+  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  /// @domName HTMLInputElement.pattern
+  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.size
+  @DomName('HTMLInputElement.size')
   int size;
 
   /// Returns true if this input type is supported on the current platform.
@@ -282,25 +280,25 @@
  */
 abstract class RangeInputElementBase implements InputElementBase {
 
-  /// @domName HTMLInputElement.list
+  @DomName('HTMLInputElement.list')
   Element get list;
 
-  /// @domName HTMLInputElement.max
+  @DomName('HTMLInputElement.max')
   String max;
 
-  /// @domName HTMLInputElement.min
+  @DomName('HTMLInputElement.min')
   String min;
 
-  /// @domName HTMLInputElement.step
+  @DomName('HTMLInputElement.step')
   String step;
 
-  /// @domName HTMLInputElement.valueAsNumber
+  @DomName('HTMLInputElement.valueAsNumber')
   num valueAsNumber;
 
-  /// @domName HTMLInputElement.stepDown
+  @DomName('HTMLInputElement.stepDown')
   void stepDown([int n]);
 
-  /// @domName HTMLInputElement.stepUp
+  @DomName('HTMLInputElement.stepUp')
   void stepUp([int n]);
 }
 
@@ -315,13 +313,13 @@
 abstract class DateTimeInputElement implements RangeInputElementBase {
   factory DateTimeInputElement() => new InputElement(type: 'datetime');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -340,13 +338,13 @@
 abstract class DateInputElement implements RangeInputElementBase {
   factory DateInputElement() => new InputElement(type: 'date');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -365,13 +363,13 @@
 abstract class MonthInputElement implements RangeInputElementBase {
   factory MonthInputElement() => new InputElement(type: 'month');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -390,13 +388,13 @@
 abstract class WeekInputElement implements RangeInputElementBase {
   factory WeekInputElement() => new InputElement(type: 'week');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -415,13 +413,13 @@
 abstract class TimeInputElement implements RangeInputElementBase {
   factory TimeInputElement() => new InputElement(type: 'time');
 
-  /// @domName HTMLInputElement.valueAsDate
+  @DomName('HTMLInputElement.valueAsDate')
   Date valueAsDate;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -442,10 +440,10 @@
   factory LocalDateTimeInputElement() =>
       new InputElement(type: 'datetime-local');
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -464,13 +462,13 @@
 abstract class NumberInputElement implements RangeInputElementBase {
   factory NumberInputElement() => new InputElement(type: 'number');
 
-  /// @domName HTMLInputElement.placeholder
+  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  /// @domName HTMLInputElement.readOnly
+  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -506,10 +504,10 @@
 abstract class CheckboxInputElement implements InputElementBase {
   factory CheckboxInputElement() => new InputElement(type: 'checkbox');
 
-  /// @domName HTMLInputElement.checked
+  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -528,10 +526,10 @@
 abstract class RadioButtonInputElement implements InputElementBase {
   factory RadioButtonInputElement() => new InputElement(type: 'radio');
 
-  /// @domName HTMLInputElement.checked
+  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -541,16 +539,16 @@
 abstract class FileUploadInputElement implements InputElementBase {
   factory FileUploadInputElement() => new InputElement(type: 'file');
 
-  /// @domName HTMLInputElement.accept
+  @DomName('HTMLInputElement.accept')
   String accept;
 
-  /// @domName HTMLInputElement.multiple
+  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  /// @domName HTMLInputElement.required
+  @DomName('HTMLInputElement.required')
   bool required;
 
-  /// @domName HTMLInputElement.files
+  @DomName('HTMLInputElement.files')
   List<File> files;
 }
 
@@ -560,19 +558,19 @@
 abstract class SubmitButtonInputElement implements InputElementBase {
   factory SubmitButtonInputElement() => new InputElement(type: 'submit');
 
-  /// @domName HTMLInputElement.formAction
+  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  /// @domName HTMLInputElement.formEnctype
+  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLInputElement.formMethod
+  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLInputElement.formNoValidate
+  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLInputElement.formTarget
+  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 }
 
@@ -583,31 +581,31 @@
 abstract class ImageButtonInputElement implements InputElementBase {
   factory ImageButtonInputElement() => new InputElement(type: 'image');
 
-  /// @domName HTMLInputElement.alt
+  @DomName('HTMLInputElement.alt')
   String alt;
 
-  /// @domName HTMLInputElement.formAction
+  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  /// @domName HTMLInputElement.formEnctype
+  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  /// @domName HTMLInputElement.formMethod
+  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  /// @domName HTMLInputElement.formNoValidate
+  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  /// @domName HTMLInputElement.formTarget
+  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 
-  /// @domName HTMLInputElement.height
+  @DomName('HTMLInputElement.height')
   int height;
 
-  /// @domName HTMLInputElement.src
+  @DomName('HTMLInputElement.src')
   String src;
 
-  /// @domName HTMLInputElement.width
+  @DomName('HTMLInputElement.width')
   int width;
 }
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
index b10c4fe..de3a920 100644
--- a/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/impl/impl_History.darttemplate b/tools/dom/templates/html/impl/impl_History.darttemplate
index 943d831..103f206 100644
--- a/tools/dom/templates/html/impl/impl_History.darttemplate
+++ b/tools/dom/templates/html/impl/impl_History.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-/// @domName $DOMNAME; @docsEditable true$ANNOTATIONS
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /**
diff --git a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
index ce1b889..3b2c04f 100644
--- a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of $LIBRARYNAME;
-
-/// @domName $DOMNAME$ANNOTATIONS
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   /**
    * Checks to see if Indexed DB is supported on the current platform.
diff --git a/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate b/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
index 1ff999c..5f493ff 100644
--- a/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
@@ -3,30 +3,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of indexed_db;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-  /**
-   * @domName IDBKeyRange.only
-   */
+  @DomName('IDBKeyRange.only')
   factory KeyRange.only(/*Key*/ value) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_only(value);
 
-  /**
-   * @domName IDBKeyRange.lowerBound
-   */
+  @DomName('IDBKeyRange.lowerBound')
   factory KeyRange.lowerBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_lowerBound(bound, open);
 
-  /**
-   * @domName IDBKeyRange.upperBound
-   */
+  @DomName('IDBKeyRange.upperBound')
   factory KeyRange.upperBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_upperBound(bound, open);
 
-  /**
-   * @domName KeyRange.bound
-   */
+  @DomName('KeyRange.bound')
   factory KeyRange.bound(/*Key*/ lower, /*Key*/ upper,
                             [bool lowerOpen = false, bool upperOpen = false]) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_bound(
diff --git a/tools/dom/templates/html/impl/impl_MediaStream.darttemplate b/tools/dom/templates/html/impl/impl_MediaStream.darttemplate
new file mode 100644
index 0000000..9691338
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_MediaStream.darttemplate
@@ -0,0 +1,29 @@
+// 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.
+
+part of $LIBRARYNAME;
+
+/// @domName $DOMNAME; @docsEditable true$ANNOTATIONS
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+$!MEMBERS
+
+  /**
+   * Checks if the MediaStream APIs are supported on the current platform.
+   *
+   * See also:
+   *
+   * * [Navigator.getUserMedia]
+   */
+$if DART2JS
+  static bool get supported =>
+    JS('bool', '''!!(#.getUserMedia || #.webkitGetUserMedia ||
+        #.mozGetUserMedia || #.msGetUserMedia)''',
+        window.navigator,
+        window.navigator,
+        window.navigator,
+        window.navigator);
+$else
+  static bool get supported => true;
+$endif
+}
diff --git a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
index ceffb54..d3dfa5c 100644
--- a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
diff --git a/tools/dom/templates/html/impl/impl_Navigator.darttemplate b/tools/dom/templates/html/impl/impl_Navigator.darttemplate
new file mode 100644
index 0000000..f6d7b91
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_Navigator.darttemplate
@@ -0,0 +1,79 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of $LIBRARYNAME;
+$ANNOTATIONS
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+
+$if DART2JS
+  @DomName('Navigator.language')
+  String get language => JS('String', '#.language || #.userLanguage', this,
+      this);
+$endif
+
+  /**
+   * Gets a stream (video and or audio) from the local computer.
+   *
+   * Use [MediaStream.supported] to check if this is supported by the current
+   * platform.
+   *
+   * Example use:
+   *
+   *     window.navigator.getUserMedia(audio:true, video: true).then((stream) {
+   *       var video = new VideoElement()
+   *         ..autoplay = true
+   *         ..src = Url.createObjectUrl(stream);
+   *       document.body.append(video);
+   *     });
+   *
+   * See also:
+   * * [MediaStream.supported]
+   */
+  @DomName('Navigator.webkitGetUserMedia')
+  @SupportedBrowser(SupportedBrowser.CHROME)
+  @Experimental()
+  Future<LocalMediaStream> getUserMedia({bool audio: false,
+      bool video: false}) {
+    var completer = new Completer<LocalMediaStream>();
+    var options = {
+      'audio': audio,
+      'video': video
+    };
+$if DART2JS
+    _ensureGetUserMedia();
+    this._getUserMedia(convertDartToNative_Dictionary(options),
+      (stream) {
+        completer.complete(stream);
+      },
+      (error) {
+        completer.completeError(error);
+      });
+$else
+    this._getUserMedia(options,
+      (stream) {
+        completer.complete(stream);
+      },
+      (error) {
+        completer.completeError(error);
+      });
+$endif
+    return completer.future;
+  }
+
+$if DART2JS
+  _ensureGetUserMedia() {
+    if (JS('bool', '!(#.getUserMedia)', this)) {
+      JS('void', '#.getUserMedia = '
+          '(#.getUserMedia || #.webkitGetUserMedia || #.mozGetUserMedia ||'
+          '#.msGetUserMedia)', this, this, this, this, this);
+    }
+  }
+
+  @JSName('getUserMedia')
+  void _getUserMedia(options, _NavigatorUserMediaSuccessCallback success,
+      _NavigatorUserMediaErrorCallback error) native;
+$endif
+
+$!MEMBERS
+}
diff --git a/tools/dom/templates/html/impl/impl_Node.darttemplate b/tools/dom/templates/html/impl/impl_Node.darttemplate
index d5749c6..21069d6 100644
--- a/tools/dom/templates/html/impl/impl_Node.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Node.darttemplate
@@ -52,11 +52,11 @@
 $endif
 
   Node min([int compare(Node a, Node b)]) {
-    return Collections.min(this, compare);
+    return IterableMixinWorkaround.min(this, compare);
   }
 
   Node max([int compare(Node a, Node b)]) {
-    return Collections.max(this, compare);
+    return IterableMixinWorkaround.max(this, compare);
   }
 
   void add(Node value) {
@@ -90,6 +90,29 @@
     return result;
   }
 
+  void remove(Object object) {
+    if (object is! Node) return;
+    Node node = object;
+    if (!identical(this, node.parentNode)) return;
+    _this.$dom_removeChild(node);
+  }
+
+  void removeAll(Iterable elements) {
+    IterableMixinWorkaround.removeAll(this, elements);
+  }
+
+  void retainAll(Iterable elements) {
+    IterableMixinWorkaround.retainAll(this, elements);
+  }
+
+  void removeMatching(bool test(Node node)) {
+    IterableMixinWorkaround.removeMatching(this, test);
+  }
+
+  void retainMatching(bool test(Node node)) {
+    IterableMixinWorkaround.retainMatching(this, test);
+  }
+
   void clear() {
     _this.text = '';
   }
@@ -102,28 +125,30 @@
 
   // TODO(jacobr): We can implement these methods much more efficiently by
   // looking up the nodeList only once instead of once per iteration.
-  bool contains(Node element) => Collections.contains(this, element);
+  bool contains(Node element) => IterableMixinWorkaround.contains(this, element);
 
-  void forEach(void f(Node element)) => Collections.forEach(this, f);
+  void forEach(void f(Node element)) => IterableMixinWorkaround.forEach(this, f);
 
   dynamic reduce(dynamic initialValue,
       dynamic combine(dynamic previousValue, Node element)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
   String join([String separator]) {
-    return Collections.joinList(this, separator);
+    return IterableMixinWorkaround.joinList(this, separator);
   }
 
-  List mappedBy(f(Node element)) =>
-      new MappedList<Node, dynamic>(this, f);
+  List mappedBy(f(Node element)) {
+    return IterableMixinWorkaround.mappedByList(this, f);
+  }
 
-  Iterable<Node> where(bool f(Node element)) =>
-     new WhereIterable<Node>(this, f);
+  Iterable<Node> where(bool f(Node element)) {
+    return IterableMixinWorkaround.where(this, f);
+  }
 
-  bool every(bool f(Node element)) => Collections.every(this, f);
+  bool every(bool f(Node element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f(Node element)) => Collections.any(this, f);
+  bool any(bool f(Node element)) => IterableMixinWorkaround.any(this, f);
 
   List<Node> toList() => new List<Node>.from(this);
   Set<Node> toSet() => new Set<Node>.from(this);
@@ -133,31 +158,31 @@
   // From List<Node>:
 
   List<Node> take(int n) {
-    return new ListView<Node>(this, 0, n);
+    return IterableMixinWorkaround.takeList(this, n);
   }
 
   Iterable<Node> takeWhile(bool test(Node value)) {
-    return new TakeWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
   List<Node> skip(int n) {
-    return new ListView<Node>(this, n, null);
+    return IterableMixinWorkaround.skipList(this, n);
   }
 
   Iterable<Node> skipWhile(bool test(Node value)) {
-    return new SkipWhileIterable<Node>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   Node firstMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   Node lastMatching(bool test(Node value), {Node orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   Node singleMatching(bool test(Node value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   Node elementAt(int index) {
@@ -205,8 +230,7 @@
 
   Node operator[](int index) => _this.$dom_childNodes[index];
 }
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   List<Node> get nodes {
     return new _ChildNodeListLazy(this);
@@ -224,8 +248,8 @@
 
   /**
    * Removes this node from the DOM.
-   * @domName Node.removeChild
    */
+  @DomName('Node.removeChild')
   void remove() {
     // TODO(jacobr): should we throw an exception if parent is already null?
     // TODO(vsm): Use the native remove when available.
@@ -237,8 +261,8 @@
 
   /**
    * Replaces this node with another node.
-   * @domName Node.replaceChild
    */
+  @DomName('Node.replaceChild')
   Node replaceWith(Node otherNode) {
     try {
       final Node parent = this.parentNode;
diff --git a/tools/dom/templates/html/impl/impl_Range.darttemplate b/tools/dom/templates/html/impl/impl_Range.darttemplate
index 3bf4767..e94acda 100644
--- a/tools/dom/templates/html/impl/impl_Range.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Range.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of $LIBRARYNAME;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() => document.$dom_createRange();
 
diff --git a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
index ef3305d..cf03ecf 100644
--- a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
@@ -30,8 +30,7 @@
     _element.attributes['class'] = Strings.join(list, ' ');
   }
 }
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME.tag(String tag) =>
       _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_tag(tag);
@@ -88,17 +87,17 @@
 
   // Unsupported methods inherited from Element.
 
-  /** @domName Element.insertAdjacentText */
+  @DomName('Element.insertAdjacentText')
   void insertAdjacentText(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentText on SVG.");
   }
 
-  /** @domName Element.insertAdjacentHTML */
+  @DomName('Element.insertAdjacentHTML')
   void insertAdjacentHtml(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentHtml on SVG.");
   }
 
-  /** @domName Element.insertAdjacentHTML */
+  @DomName('Element.insertAdjacentHTML')
   Element insertAdjacentElement(String where, Element element) {
     throw new UnsupportedError("Cannot invoke insertAdjacentElement on SVG.");
   }
diff --git a/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate
index cc7ba42..fbfefe7 100644
--- a/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of svg;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.createSvgSvgElement();
 
diff --git a/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate b/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
index 2f87efe..7fac06a 100644
--- a/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
+++ b/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of html;
-
-/// @domName $DOMNAME$ANNOTATIONS
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 $if DART2JS
diff --git a/tools/dom/templates/html/impl/impl_Storage.darttemplate b/tools/dom/templates/html/impl/impl_Storage.darttemplate
index d200bb8..d285685 100644
--- a/tools/dom/templates/html/impl/impl_Storage.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Storage.darttemplate
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS implements Map<String, String> $NATIVESPEC {
 
   // TODO(nweiz): update this when maps support lazy iteration
diff --git a/tools/dom/templates/html/impl/impl_Text.darttemplate b/tools/dom/templates/html/impl/impl_Text.darttemplate
index 74e385c..47d7bb7 100644
--- a/tools/dom/templates/html/impl/impl_Text.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Text.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String data) => _$(CLASSNAME)FactoryProvider.create$CLASSNAME(data);
 $!MEMBERS
diff --git a/tools/dom/templates/html/impl/impl_UIEvent.darttemplate b/tools/dom/templates/html/impl/impl_UIEvent.darttemplate
index ce957c8..9aa0221 100644
--- a/tools/dom/templates/html/impl/impl_UIEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_UIEvent.darttemplate
@@ -5,8 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of html;
-
-/// @domName $DOMNAME; @docsEditable true
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
diff --git a/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate b/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
index d660a21..215a149 100644
--- a/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
@@ -3,13 +3,77 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of html;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+
+  factory WheelEvent(String type, Window view, int wheelDeltaX, int wheelDeltaY,
+      int detail, int screenX, int screenY, int clientX, int clientY,
+      int button,
+      [bool canBubble = true, bool cancelable = true, bool ctrlKey = false,
+      bool altKey = false, bool shiftKey = false, bool metaKey = false,
+      EventTarget relatedTarget = null]) {
+
+    var eventType = 'WheelEvent';
+    if (_Device.isFirefox) {
+      eventType = 'MouseScrollEvents';
+    }
+    final event = document.$dom_createEvent(eventType);
+$if DART2JS
+    if (event._hasInitWheelEvent) {
+      var modifiers = [];
+      if (ctrlKey) {
+        modifiers.push('Control');
+      }
+      if (altKey) {
+        modifiers.push('Alt');
+      }
+      if (shiftKey) {
+        modifiers.push('Shift');
+      }
+      if (metaKey) {
+        modifiers.push('Meta');
+      }
+      event._initWheelEvent(type, canBubble, cancelable, view, detail, screenX,
+          screenY, clientX, clientY, button, relatedTarget, modifiers.join(' '),
+          wheelDeltaX, wheelDeltaY, 0, 0);
+    } else if (event._hasInitMouseScrollEvent) {
+      var axis = 0;
+      var detail = 0;
+      if (wheelDeltaX != 0 && wheelDeltaY != 0) {
+        throw UnsupportedError(
+            'Cannot modify wheelDeltaX and wheelDeltaY simultaneously');
+      }
+      if (wheelDeltaY != 0) {
+        detail = wheelDeltaY;
+        axis = JS('int', 'MouseScrollEvent.VERTICAL_AXIS');
+      } else if (wheelDeltaX != 0) {
+        detail = wheelDeltaX;
+        axis = JS('int', 'MouseScrollEvent.HORIZONTAL_AXIS');
+      }
+      event._initMouseScrollEvent(type, canBubble, cancelable, view, detail,
+          screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey, button, relatedTarget, axis);
+    } else {
+$endif
+      // Fallthrough for Dartium.
+      event.$dom_initMouseEvent(type, canBubble, cancelable, view, detail,
+          screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey, button, relatedTarget);
+      event.$dom_initWebKitWheelEvent(wheelDeltaX,
+          wheelDeltaY ~/ 120, // Chrome does an auto-convert to pixels.
+          view, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,
+          metaKey);
+$if DART2JS
+    }
+$endif
+
+    return event;
+  }
+
 $!MEMBERS
 
 $if DART2JS
-  /** @domName WheelEvent.deltaY */
+  @DomName('WheelEvent.deltaY')
   num get deltaY {
     if (JS('bool', '#.deltaY !== undefined', this)) {
       // W3C WheelEvent
@@ -37,7 +101,7 @@
         'deltaY is not supported');
   }
 
-  /** @domName WheelEvent.deltaX */
+  @DomName('WheelEvent.deltaX')
   num get deltaX {
     if (JS('bool', '#.deltaX !== undefined', this)) {
       // W3C WheelEvent
@@ -51,7 +115,8 @@
 
       // Handle DOMMouseScroll case where it uses detail and the axis to
       // differentiate.
-      if (JS('bool', '#.axis !== undefined && #.axis == MouseScrollEvent.HORIZONTAL_AXIS', this, this)) {
+      if (JS('bool', '#.axis !== undefined && '
+        '#.axis == MouseScrollEvent.HORIZONTAL_AXIS', this, this)) {
         var detail = this._detail;
         // Firefox is normally the number of lines to scale (normally 3)
         // so multiply it by 40 to get pixels to move, matching IE & WebKit.
@@ -81,12 +146,55 @@
   num get _detail => JS('num', '#.detail', this);
   int get _deltaMode => JS('int', '#.deltaMode', this);
 
+  bool get _hasInitMouseScrollEvent =>
+      JS('bool', '!!(#.initMouseScrollEvent)', this);
+
+  @JSName('initMouseScrollEvent')
+  void _initMouseScrollEvent(
+      String type,
+      bool canBubble,
+      bool cancelable,
+      Window view,
+      int detail,
+      int screenX,
+      int screenY,
+      int clientX,
+      int clientY,
+      bool ctrlKey,
+      bool altKey,
+      bool shiftKey,
+      bool metaKey,
+      int button,
+      EventTarget relatedTarget,
+      int axis) native;
+
+  bool get _hasInitWheelEvent =>
+      JS('bool', '!!(#.initWheelEvent)', this);
+  @JSName('initWheelEvent')
+  void _initWheelEvent(
+      String eventType,
+      bool canBubble,
+      bool cancelable,
+      Window view,
+      int detail,
+      int screenX,
+      int screenY,
+      int clientX,
+      int clientY,
+      int button,
+      EventTarget relatedTarget,
+      String modifiersList,
+      int deltaX,
+      int deltaY,
+      int deltaZ,
+      int deltaMode) native;
+
 $else
-  /** @domName WheelEvent.deltaX */
+  @DomName('WheelEvent.deltaX')
   num get deltaX => $dom_wheelDeltaX;
-  /** @domName WheelEvent.deltaY */
+  @DomName('WheelEvent.deltaY')
   num get deltaY => $dom_wheelDeltaY;
-  /** @domName WheelEvent.deltaMode */
+  @DomName('WheelEvent.deltaMode')
   int get deltaMode => 0;
 
 $endif
diff --git a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
index ea113b6..ab55590 100644
--- a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
+++ b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
@@ -29,7 +29,7 @@
  * * [JS XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest)
  * * [Using XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest)
  */
-/// @domName XMLHttpRequest
+@DomName('XMLHttpRequest')
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   /**
    * Creates a URL get request for the specified `url`.
diff --git a/tools/dom/templates/html/impl/pure_interface.darttemplate b/tools/dom/templates/html/impl/pure_interface.darttemplate
index 139e82f..869eff2 100644
--- a/tools/dom/templates/html/impl/pure_interface.darttemplate
+++ b/tools/dom/templates/html/impl/pure_interface.darttemplate
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of $LIBRARYNAME;
-
-/// @domName $DOMNAME
+$ANNOTATIONS
 abstract class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS}
diff --git a/tools/dom/templates/immutable_list_mixin.darttemplate b/tools/dom/templates/immutable_list_mixin.darttemplate
index bf2bf4c..b7c8507 100644
--- a/tools/dom/templates/immutable_list_mixin.darttemplate
+++ b/tools/dom/templates/immutable_list_mixin.darttemplate
@@ -15,54 +15,54 @@
   int get length => numberOfItems;
 $endif
   dynamic reduce(dynamic initialValue, dynamic combine(dynamic, $E)) {
-    return Collections.reduce(this, initialValue, combine);
+    return IterableMixinWorkaround.reduce(this, initialValue, combine);
   }
 
 $if DEFINE_CONTAINS
-  bool contains($E element) => Collections.contains(this, element);
+  bool contains($E element) => IterableMixinWorkaround.contains(this, element);
 $else
   // contains() defined by IDL.
 $endif
 
-  void forEach(void f($E element)) => Collections.forEach(this, f);
+  void forEach(void f($E element)) => IterableMixinWorkaround.forEach(this, f);
 
-  String join([String separator]) => Collections.joinList(this, separator);
+  String join([String separator]) => IterableMixinWorkaround.joinList(this, separator);
 
-  List mappedBy(f($E element)) => new MappedList<$E, dynamic>(this, f);
+  List mappedBy(f($E element)) => IterableMixinWorkaround.mappedByList(this, f);
 
-  Iterable<$E> where(bool f($E element)) => new WhereIterable<$E>(this, f);
+  Iterable<$E> where(bool f($E element)) => IterableMixinWorkaround.where(this, f);
 
-  bool every(bool f($E element)) => Collections.every(this, f);
+  bool every(bool f($E element)) => IterableMixinWorkaround.every(this, f);
 
-  bool any(bool f($E element)) => Collections.any(this, f);
+  bool any(bool f($E element)) => IterableMixinWorkaround.any(this, f);
 
   List<$E> toList() => new List<$E>.from(this);
   Set<$E> toSet() => new Set<$E>.from(this);
 
   bool get isEmpty => this.length == 0;
 
-  List<$E> take(int n) => new ListView<$E>(this, 0, n);
+  List<$E> take(int n) => IterableMixinWorkaround.takeList(this, n);
 
   Iterable<$E> takeWhile(bool test($E value)) {
-    return new TakeWhileIterable<$E>(this, test);
+    return IterableMixinWorkaround.takeWhile(this, test);
   }
 
-  List<$E> skip(int n) => new ListView<$E>(this, n, null);
+  List<$E> skip(int n) => IterableMixinWorkaround.skipList(this, n);
 
   Iterable<$E> skipWhile(bool test($E value)) {
-    return new SkipWhileIterable<$E>(this, test);
+    return IterableMixinWorkaround.skipWhile(this, test);
   }
 
   $E firstMatching(bool test($E value), { $E orElse() }) {
-    return Collections.firstMatching(this, test, orElse);
+    return IterableMixinWorkaround.firstMatching(this, test, orElse);
   }
 
   $E lastMatching(bool test($E value), {$E orElse()}) {
-    return Collections.lastMatchingInList(this, test, orElse);
+    return IterableMixinWorkaround.lastMatchingInList(this, test, orElse);
   }
 
   $E singleMatching(bool test($E value)) {
-    return Collections.singleMatching(this, test);
+    return IterableMixinWorkaround.singleMatching(this, test);
   }
 
   $E elementAt(int index) {
@@ -95,7 +95,7 @@
     throw new UnsupportedError("Cannot clear immutable List.");
   }
 $else
-  // contains() defined by IDL.
+  // clear() defined by IDL.
 $endif
 
   void sort([int compare($E a, $E b)]) {
@@ -126,16 +126,36 @@
     throw new StateError("More than one element");
   }
 
-  $E min([int compare($E a, $E b)]) => Collections.min(this, compare);
+  $E min([int compare($E a, $E b)]) => IterableMixinWorkaround.min(this, compare);
 
-  $E max([int compare($E a, $E b)]) => Collections.max(this, compare);
+  $E max([int compare($E a, $E b)]) => IterableMixinWorkaround.max(this, compare);
 
   $E removeAt(int pos) {
-    throw new UnsupportedError("Cannot removeAt on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   $E removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void remove(Object object) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainAll(Iterable elements) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void removeMatching(bool test($E element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
+  }
+
+  void retainMatching(bool test($E element)) {
+    throw new UnsupportedError("Cannot remove from immutable List.");
   }
 
   void setRange(int start, int rangeLength, List<$E> from, [int startFrom]) {
diff --git a/tools/gyp/configurations.gypi b/tools/gyp/configurations.gypi
index 0641a19..0a3574f 100644
--- a/tools/gyp/configurations.gypi
+++ b/tools/gyp/configurations.gypi
@@ -23,6 +23,8 @@
     ['"<(target_arch)"=="x64"', { 'dart_target_arch': 'X64', }],
     ['"<(target_arch)"=="arm"', { 'dart_target_arch': 'ARM', }],
     ['"<(target_arch)"=="simarm"', { 'dart_target_arch': 'SIMARM', }],
+    ['"<(target_arch)"=="mips"', { 'dart_target_arch': 'MIPS', }],
+    ['"<(target_arch)"=="simmips"', { 'dart_target_arch': 'SIMMIPS', }],
   ],
   },
   'conditions': [
@@ -60,6 +62,20 @@
         ],
       },
 
+      'Dart_simmips_Base': {
+        'abstract': 1,
+        'defines': [
+          'TARGET_ARCH_MIPS',
+        ]
+      },
+
+      'Dart_mips_Base': {
+        'abstract': 1,
+        'defines': [
+          'TARGET_ARCH_MIPS',
+        ],
+      },
+
       'Dart_Debug': {
         'abstract': 1,
       },
@@ -98,11 +114,7 @@
       },
 
       'ReleaseSIMARM': {
-        # Should not inherit from Dart_Release (see DebugSIMARM).
-        'inherit_from': ['Dart_Base', 'Dart_simarm_Base'],
-        'defines': [
-          'NDEBUG',
-        ],
+        'inherit_from': ['Dart_Base', 'Dart_simarm_Base', 'Dart_Release'],
       },
 
       'DebugARM': {
@@ -113,6 +125,28 @@
         'inherit_from': ['Dart_Base', 'Dart_arm_Base', 'Dart_Release'],
       },
 
+      'DebugSIMMIPS': {
+        # Should not inherit from Dart_Debug because Dart_simmips_Base defines
+        # the optimization level to be -O3, as the simulator runs too slow
+        # otherwise.
+        'inherit_from': ['Dart_Base', 'Dart_simmips_Base'],
+        'defines': [
+          'DEBUG',
+        ],
+      },
+
+      'ReleaseSIMMIPS': {
+        'inherit_from': ['Dart_Base', 'Dart_simmips_Base', 'Dart_Release'],
+      },
+
+      'DebugMIPS': {
+        'inherit_from': ['Dart_Base', 'Dart_mips_Base', 'Dart_Debug'],
+      },
+
+      'ReleaseMIPS': {
+        'inherit_from': ['Dart_Base', 'Dart_mips_Base', 'Dart_Release'],
+      },
+
       # These targets assume that target_arch is passed in explicitly
       # by the containing project (e.g., chromium).
       'Debug': {
diff --git a/tools/gyp/configurations_make.gypi b/tools/gyp/configurations_make.gypi
index b4679b5..efe19cb 100644
--- a/tools/gyp/configurations_make.gypi
+++ b/tools/gyp/configurations_make.gypi
@@ -55,6 +55,19 @@
         ],
       },
 
+      'Dart_simmips_Base': {
+        'cflags': [ '-O3', '-m32', ],
+        'ldflags': [ '-m32', ],
+      },
+
+      'Dart_mips_Base': {
+        'cflags': [
+          '-march=mips32r2',
+          '-mhard-float',
+          '-fno-strict-overflow',
+        ],
+      },
+
       'Dart_Debug': {
         'cflags': [ '-O<(dart_debug_optimization_level)' ],
       },
diff --git a/tools/test-runtime.dart b/tools/test-runtime.dart
index 95c24d4..a959f23 100755
--- a/tools/test-runtime.dart
+++ b/tools/test-runtime.dart
@@ -50,8 +50,8 @@
   var verbose = firstConf['verbose'];
   var printTiming = firstConf['time'];
   var listTests = firstConf['list'];
-  
-  if (!firstConf['append_flaky_log'])  {
+
+  if (!firstConf['append_logs'])  {
     var file = new File(TestUtils.flakyFileName());
     if (file.existsSync()) {
       file.deleteSync();
@@ -72,25 +72,21 @@
     print(Strings.join(output_words, ' '));
   }
 
-  var configurationIterator = configurations.iterator;
-  void enqueueConfiguration(ProcessQueue queue) {
-    if (!configurationIterator.moveNext()) return;
-
-    var conf = configurationIterator.current;
+  var testSuites = new List<TestSuite>();
+  for (var conf in configurations) {
     if (selectors.containsKey('co19')) {
-      queue.addTestSuite(new Co19TestSuite(conf));
+      testSuites.add(new Co19TestSuite(conf));
     }
     if (conf['runtime'] == 'vm' && selectors.containsKey('vm')) {
       // vm tests contain both cc tests (added here) and dart tests (added in
       // [TEST_SUITE_DIRECTORIES]).
-      queue.addTestSuite(new VMTestSuite(conf));
+      testSuites.add(new VMTestSuite(conf));
     }
 
     for (final testSuiteDir in TEST_SUITE_DIRECTORIES) {
       final name = testSuiteDir.filename;
       if (selectors.containsKey(name)) {
-        queue.addTestSuite(
-            new StandardTestSuite.forDirectory(conf, testSuiteDir));
+        testSuites.add(new StandardTestSuite.forDirectory(conf, testSuiteDir));
       }
     }
   }
@@ -112,8 +108,8 @@
       progressIndicator,
       startTime,
       printTiming,
-      enqueueConfiguration,
-      () => terminateHttpServer(),
+      testSuites,
+      () => TestingServerRunner.terminateHttpServers(),
       verbose,
       listTests);
 }
diff --git a/tools/test.dart b/tools/test.dart
index 984e57d..3077ac6 100755
--- a/tools/test.dart
+++ b/tools/test.dart
@@ -30,6 +30,7 @@
 import "testing/dart/test_suite.dart";
 import "testing/dart/test_progress.dart";
 import "testing/dart/http_server.dart";
+import "testing/dart/utils.dart";
 
 import "../compiler/tests/dartc/test_config.dart";
 import "../runtime/tests/vm/test_config.dart";
@@ -48,6 +49,7 @@
     new Path('runtime/tests/vm'),
     new Path('samples/tests/samples'),
     new Path('tests/benchmark_smoke'),
+    new Path('tests/chrome'),
     new Path('tests/compiler/dart2js'),
     new Path('tests/compiler/dart2js_extra'),
     new Path('tests/compiler/dart2js_foreign'),
@@ -82,13 +84,16 @@
   var printTiming = firstConf['time'];
   var listTests = firstConf['list'];
 
-  if (!firstConf['append_flaky_log'])  {
+  if (!firstConf['append_logs'])  {
     var file = new File(TestUtils.flakyFileName());
     if (file.existsSync()) {
       file.deleteSync();
     }
   }
 
+  DebugLogger.init(firstConf['write_debug_log'] ?
+      TestUtils.debugLogfile() : null, append: firstConf['append_logs']);
+
   // Print the configurations being run by this execution of
   // test.dart. However, don't do it if the silent progress indicator
   // is used. This is only needed because of the junit tests.
@@ -120,43 +125,44 @@
     }
   }
 
-  var configurationIterator = configurations.iterator;
-  void enqueueConfiguration(ProcessQueue queue) {
-    if (!configurationIterator.moveNext()) return;
-
-    var conf = configurationIterator.current;
+  var testSuites = new List<TestSuite>();
+  for (var conf in configurations) {
     TestingServerRunner.setPackageRootDir(conf);
-
     for (String key in selectors.keys) {
       if (key == 'co19') {
-        queue.addTestSuite(new Co19TestSuite(conf));
+        testSuites.add(new Co19TestSuite(conf));
       } else if (conf['runtime'] == 'vm' && key == 'vm') {
         // vm tests contain both cc tests (added here) and dart tests (added in
         // [TEST_SUITE_DIRECTORIES]).
-        queue.addTestSuite(new VMTestSuite(conf));
+        testSuites.add(new VMTestSuite(conf));
       } else if (conf['compiler'] == 'dartc' && key == 'dartc') {
-        queue.addTestSuite(new SamplesDartcTestSuite(conf));
-        queue.addTestSuite(new JUnitDartcTestSuite(conf));
+        testSuites.add(new SamplesDartcTestSuite(conf));
+        testSuites.add(new JUnitDartcTestSuite(conf));
       }
     }
 
     for (final testSuiteDir in TEST_SUITE_DIRECTORIES) {
       final name = testSuiteDir.filename;
       if (selectors.containsKey(name)) {
-        queue.addTestSuite(
+        testSuites.add(
             new StandardTestSuite.forDirectory(conf, testSuiteDir,
             serverList: TestingServerRunner.serverList));
       }
     }
   }
 
+  void allTestsFinished() {
+    TestingServerRunner.terminateHttpServers();
+    DebugLogger.close();
+  }
+
   // Start process queue.
   new ProcessQueue(maxProcesses,
                    progressIndicator,
                    startTime,
                    printTiming,
-                   enqueueConfiguration,
-                   () => TestingServerRunner.terminateHttpServers(),
+                   testSuites,
+                   allTestsFinished,
                    verbose,
                    listTests);
 }
diff --git a/tools/testing/dart/http_server.dart b/tools/testing/dart/http_server.dart
index b774319..dcc37a6 100644
--- a/tools/testing/dart/http_server.dart
+++ b/tools/testing/dart/http_server.dart
@@ -7,7 +7,10 @@
 import 'dart:io';
 import 'dart:isolate';
 import 'test_suite.dart';  // For TestUtils.
-import '../../../pkg/args/lib/args.dart';
+// TODO(efortuna): Rewrite to not use the args library and simply take an
+// expected number of arguments, so test.dart doesn't rely on the args library?
+// See discussion on https://codereview.chromium.org/11931025/.
+import 'vendored_pkg/args/args.dart';
 
 main() {
   /** Convenience method for local testing. */
@@ -73,11 +76,8 @@
     var httpServer = new HttpServer();
     var packagesDirName = 'packages';
     httpServer.onError = (e) {
-      // Consider errors in the builtin http server fatal.
-      // Intead of just throwing the exception we print
-      // a message that makes it clearer what happened.
+      // TODO(ricow): Once we have a debug log we should write this out there.
       print('Test http server error: $e');
-      exit(1);
     };
     httpServer.defaultRequestHandler = (request, resp) {
       var requestPath = new Path(request.path.substring(1)).canonicalize();
diff --git a/tools/testing/dart/multitest.dart b/tools/testing/dart/multitest.dart
index abc4441..85a9d1b 100644
--- a/tools/testing/dart/multitest.dart
+++ b/tools/testing/dart/multitest.dart
@@ -7,6 +7,7 @@
 import "dart:async";
 import "dart:io";
 import "test_suite.dart";
+import "utils.dart";
 
 // Multitests are Dart test scripts containing lines of the form
 // " [some dart code] /// [key]: [error type]"
@@ -58,15 +59,8 @@
   // Read the entire file into a byte buffer and transform it to a
   // String. This will treat the file as ascii but the only parts
   // we are interested in will be ascii in any case.
-  RandomAccessFile file = new File.fromPath(filePath).openSync(FileMode.READ);
-  List chars = new List(file.lengthSync());
-  int offset = 0;
-  while (offset != chars.length) {
-    offset += file.readListSync(chars, offset, chars.length - offset);
-  }
-  file.closeSync();
-  String contents = new String.fromCharCodes(chars);
-  chars = null;
+  List bytes = new File.fromPath(filePath).readAsBytesSync();
+  String contents = decodeUtf8(bytes);
   int first_newline = contents.indexOf('\n');
   final String line_separator =
       (first_newline == 0 || contents[first_newline - 1] != '\r')
@@ -74,6 +68,7 @@
       : '\r\n';
   List<String> lines = contents.split(line_separator);
   if (lines.last == '') lines.removeLast();
+  bytes = null;
   contents = null;
   Set<String> validMultitestOutcomes = new Set<String>.from(
       ['compile-time error', 'runtime error',
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index fa2edd5..44b7f2e 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -108,7 +108,7 @@
               'arch',
               'The architecture to run tests for',
               ['-a', '--arch'],
-              ['all', 'ia32', 'x64', 'simarm'],
+              ['all', 'ia32', 'x64', 'simarm', 'simmips'],
               'ia32'),
           new _TestOptionSpecification(
               'system',
@@ -270,9 +270,17 @@
               false,
               'bool'),
           new _TestOptionSpecification(
-              'append_flaky_log',
-              'Do not delete the old flaky log but rather append to it.',
-              ['--append_flaky_log'],
+              'append_logs',
+              'Do not delete old logs but rather append to them.',
+              ['--append_logs'],
+              [],
+              false,
+              'bool'
+              ),
+          new _TestOptionSpecification(
+              'write_debug_log',
+              'Don\'t write debug messages to stdout but rather to a logfile.',
+              ['--write-debug-log'],
               [],
               false,
               'bool'
diff --git a/tools/testing/dart/test_progress.dart b/tools/testing/dart/test_progress.dart
index c74025e..7a45a41 100644
--- a/tools/testing/dart/test_progress.dart
+++ b/tools/testing/dart/test_progress.dart
@@ -5,10 +5,12 @@
 library test_progress;
 
 import "dart:io";
+import "dart:io" as io;
+import "http_server.dart" as http_server;
+import "status_file_parser.dart";
 import "test_runner.dart";
 import "test_suite.dart";
-import "status_file_parser.dart";
-import "http_server.dart" as http_server;
+import "utils.dart";
 
 class ProgressIndicator {
   ProgressIndicator(this._startTime, this._printTiming)
@@ -109,7 +111,9 @@
     _printTimingInformation();
     stdout.close();
     stderr.close();
-    if (_failedTests > 0) exit(1);
+    if (_failedTests > 0) {
+      io.exitCode = 1;
+    }
   }
 
   void _printStartProgress(TestCase test) {}
@@ -188,13 +192,13 @@
         output.add('DRT pixel test failed! stdout is not printed because it '
                    'contains binary data!');
       } else {
-        output.add(new String.fromCharCodes(test.lastCommandOutput.stdout));
+        output.add(decodeUtf8(test.lastCommandOutput.stdout));
       }
     }
     if (!test.lastCommandOutput.stderr.isEmpty) {
       output.add('');
       output.add('stderr:');
-      output.add(new String.fromCharCodes(test.lastCommandOutput.stderr));
+      output.add(decodeUtf8(test.lastCommandOutput.stderr));
     }
     if (test is BrowserTestCase) {
       // Additional command for rerunning the steps locally after the fact.
@@ -286,7 +290,9 @@
     }
     stdout.close();
     stderr.close();
-    if (_failedTests > 0) exit(1);
+    if (_failedTests > 0) {
+      io.exitCode = 1;
+    }
   }
 
   void allTestsKnown() {
@@ -336,7 +342,7 @@
   addColorWrapped(List<int> codes, String string, int color) {
     codes.add(27);
     codes.addAll('[${color}m'.charCodes);
-    codes.addAll(string.charCodes);
+    codes.addAll(encodeUtf8(string));
     codes.add(27);
     codes.addAll('[0m'.charCodes);
   }
@@ -360,7 +366,7 @@
   String _header(String header) {
     var result = [];
     addColorWrapped(result, header, BOLD);
-    return new String.fromCharCodes(result);
+    return decodeUtf8(result);
   }
 }
 
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index 20c10ac..297d8d2 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -17,10 +17,11 @@
 import "dart:io" as io;
 import "dart:isolate";
 import "dart:uri";
+import "http_server.dart" as http_server;
 import "status_file_parser.dart";
 import "test_progress.dart";
 import "test_suite.dart";
-import "http_server.dart" as http_server;
+import "utils.dart";
 
 const int NO_TIMEOUT = 0;
 const int SLOW_TIMEOUT_MULTIPLIER = 4;
@@ -625,7 +626,7 @@
     // and the virtual framebuffer X server didn't hook up, or DRT crashed with
     // a core dump. Sometimes DRT crashes after it has set the stdout to PASS,
     // so we have to do this check first.
-    var stderrLines = new String.fromCharCodes(super.stderr).split("\n");
+    var stderrLines = decodeUtf8(super.stderr).split("\n");
     for (String line in stderrLines) {
       // TODO(kustermann,ricow): Issue: 7564
       // This seems to happen quite frequently, we need to figure out why.
@@ -700,7 +701,7 @@
     // Browser tests fail unless stdout contains
     // 'Content-Type: text/plain' followed by 'PASS'.
     bool has_content_type = false;
-    var stdoutLines = new String.fromCharCodes(super.stdout).split("\n");
+    var stdoutLines = decodeUtf8(super.stdout).split("\n");
     for (String line in stdoutLines) {
       switch (line) {
         case 'Content-Type: text/plain':
@@ -773,7 +774,7 @@
     List<String> staticWarnings = [];
 
     // Read the returned list of errors and stuff them away.
-    var stderrLines = new String.fromCharCodes(super.stderr).split("\n");
+    var stderrLines = decodeUtf8(super.stderr).split("\n");
     for (String line in stderrLines) {
       if (line.length == 0) continue;
       List<String> fields = splitMachineError(line);
@@ -949,9 +950,9 @@
         && testCase.configuration['verbose']) {
       print(testCase.displayName);
 
-      print(new String.fromCharCodes(lastCommandOutput.stderr));
+      print(decodeUtf8(lastCommandOutput.stderr));
       if (!lastCommandOutput.command.isPixelTest) {
-        print(new String.fromCharCodes(lastCommandOutput.stdout));
+        print(decodeUtf8(lastCommandOutput.stdout));
       } else {
         print("DRT pixel test failed! stdout is not printed because it "
               "contains binary data!");
@@ -1319,7 +1320,8 @@
         } else if (line.startsWith('>>> ')) {
           throw new Exception('Unexpected command from dartc batch runner.');
         } else {
-          buffer.addAll("$line\n".charCodes);
+          buffer.addAll(encodeUtf8(line));
+          buffer.addAll("\n".charCodes);
         }
         line = stream.readLine();
       }
@@ -1346,7 +1348,8 @@
         if (line.startsWith('>>> EOF STDERR')) {
           _stderrDone();
         } else {
-          buffer.addAll("$line\n".charCodes);
+          buffer.addAll(encodeUtf8(line));
+          buffer.addAll("\n".charCodes);
         }
         line = stream.readLine();
       }
@@ -1423,15 +1426,14 @@
  */
 class ProcessQueue {
   int _numProcesses = 0;
-  int _activeTestListers = 0;
   int _maxProcesses;
+  bool _allTestsWereEnqueued = false;
 
   /** The number of tests we allow to actually fail before we stop retrying. */
   int _MAX_FAILED_NO_RETRY = 4;
   bool _verbose;
   bool _listTests;
   Function _allDone;
-  EnqueueMoreWork _enqueueMoreWork;
   Queue<TestCase> _tests;
   ProgressIndicator _progress;
 
@@ -1465,7 +1467,7 @@
                String progress,
                Date startTime,
                bool printTiming,
-               this._enqueueMoreWork,
+               testSuites,
                this._allDone,
                [bool verbose = false,
                 bool listTests = false])
@@ -1477,20 +1479,7 @@
                                                    printTiming),
         _batchProcesses = new Map<String, List<BatchRunnerProcess>>(),
         _testCache = new Map<String, List<TestInformation>>() {
-    _checkDone();
-  }
-
-  /**
-   * Registers a TestSuite so that all of its tests will be run.
-   */
-  void addTestSuite(TestSuite testSuite) {
-    _activeTestListers++;
-    testSuite.forEachTest(_runTest, _testCache, _testListerDone);
-  }
-
-  void _testListerDone() {
-    _activeTestListers--;
-    _checkDone();
+    _runTests(testSuites);
   }
 
   /**
@@ -1501,24 +1490,33 @@
     _allDone();
     if (browserUsed != '' && _seleniumServer != null) {
       _seleniumServer.kill();
-    } else {
-      _progress.allDone();
     }
+    _progress.allDone();
   }
 
   void _checkDone() {
-    // When there are no more active test listers ask for more work
-    // from process queue users.
-    if (_activeTestListers == 0) {
-     _enqueueMoreWork(this);
+    if (_allTestsWereEnqueued && _tests.isEmpty && _numProcesses == 0) {
+      _terminateBatchRunners().then((_) => _cleanupAndMarkDone());
     }
-    // If there is still no work, we are done.
-    if (_activeTestListers == 0) {
-      _progress.allTestsKnown();
-      if (_tests.isEmpty && _numProcesses == 0) {
-        _terminateBatchRunners().then((_) => _cleanupAndMarkDone());
+  }
+
+  void _runTests(List<TestSuite> testSuites) {
+    // FIXME: For some reason we cannot call this method on all test suites
+    // in parallel.
+    // If we do, not all tests get enqueued (if --arch=all was specified,
+    // we don't get twice the number of tests [tested on -rvm -cnone])
+    // Issue: 7927
+    Iterator<TestSuite> iterator = testSuites.iterator;
+    void enqueueNextSuite() {
+      if (!iterator.moveNext()) {
+        _allTestsWereEnqueued = true;
+        _progress.allTestsKnown();
+        _checkDone();
+      } else {
+        iterator.current.forEachTest(_runTest, _testCache, enqueueNextSuite);
       }
     }
+    enqueueNextSuite();
   }
 
   /**
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index c458e52..2b3075f 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -17,12 +17,15 @@
 import "dart:async";
 import "dart:io";
 import "dart:isolate";
+import "dart:uri";
+import "drt_updater.dart";
+import "multitest.dart";
 import "status_file_parser.dart";
 import "test_runner.dart";
-import "multitest.dart";
-import "drt_updater.dart";
-import "dart:uri";
-import '../../../pkg/path/lib/path.dart' as pathLib;
+import "utils.dart";
+
+// TODO(efortuna,whess): Remove this import.
+import 'vendored_pkg/path/path.dart' as pathLib;
 
 part "browser_test.dart";
 
@@ -415,6 +418,8 @@
    */
   List serverList;
 
+  static final RegExp multiTestRegExp = new RegExp(r"/// [0-9][0-9]:(.*)");
+
   StandardTestSuite(Map configuration,
                     String suiteName,
                     Path suiteDirectory,
@@ -1287,11 +1292,13 @@
    * configurations, so it may not use [configuration].
    */
   static Map readOptionsFromFile(Path filePath) {
+    if (filePath.segments().contains('co19')) {
+      return readOptionsFromCo19File(filePath);
+    }
     RegExp testOptionsRegExp = new RegExp(r"// VMOptions=(.*)");
     RegExp dartOptionsRegExp = new RegExp(r"// DartOptions=(.*)");
     RegExp otherScriptsRegExp = new RegExp(r"// OtherScripts=(.*)");
     RegExp packageRootRegExp = new RegExp(r"// PackageRoot=(.*)");
-    RegExp multiTestRegExp = new RegExp(r"/// [0-9][0-9]:(.*)");
     RegExp multiHtmlTestRegExp =
         new RegExp(r"useHtmlIndividualConfiguration()");
     RegExp staticTypeRegExp =
@@ -1309,25 +1316,14 @@
     RegExp sourceOrImportRegExp =
         new RegExp("^(#source|#import|part)[ \t]+[\('\"]", multiLine: true);
 
-    // Read the entire file into a byte buffer and transform it to a
-    // String. This will treat the file as ascii but the only parts
-    // we are interested in will be ascii in any case.
-    RandomAccessFile file = new File.fromPath(filePath).openSync(FileMode.READ);
-    List chars = new List(file.lengthSync());
-    var offset = 0;
-    while (offset != chars.length) {
-      offset += file.readListSync(chars, offset, chars.length - offset);
-    }
-    file.closeSync();
-    String contents = new String.fromCharCodes(chars);
-    chars = null;
+    var bytes = new File.fromPath(filePath).readAsBytesSync();
+    String contents = decodeUtf8(bytes);
+    bytes = null;
 
     // Find the options in the file.
     List<List> result = new List<List>();
     List<String> dartOptions;
     String packageRoot;
-    bool hasCompileError = contents.contains("@compile-error");
-    bool hasRuntimeError = contents.contains("@runtime-error");
     bool isStaticClean = false;
 
     Iterable<Match> matches = testOptionsRegExp.allMatches(contents);
@@ -1407,8 +1403,8 @@
     return { "vmOptions": result,
              "dartOptions": dartOptions,
              "packageRoot": packageRoot,
-             "hasCompileError": hasCompileError,
-             "hasRuntimeError": hasRuntimeError,
+             "hasCompileError": false,
+             "hasRuntimeError": false,
              "isStaticClean" : isStaticClean,
              "otherScripts": otherScripts,
              "isMultitest": isMultitest,
@@ -1436,6 +1432,64 @@
     // may lead to reads from empty files.
     return [vmOptions[0]];
   }
+
+  /**
+   * Read options from a co19 test file.
+   *
+   * The reason this is different from [readOptionsFromFile] is that
+   * co19 is developed based on a contract which defines certain test
+   * tags. These tags may appear unused, but should not be removed
+   * without consulting with the co19 team.
+   *
+   * Also, [readOptionsFromFile] recognizes a number of additional
+   * tags that are not appropriate for use in general tests of
+   * conformance to the Dart language. Any Dart implementation must
+   * pass the co19 test suite as is, and not require extra flags,
+   * environment variables, configuration files, etc.
+   */
+  static Map readOptionsFromCo19File(Path filePath) {
+    String contents = decodeUtf8(new File.fromPath(filePath).readAsBytesSync());
+
+    bool hasCompileError = contents.contains("@compile-error");
+    bool hasRuntimeError = contents.contains("@runtime-error");
+    bool hasDynamicTypeError = contents.contains("@dynamic-type-error");
+    bool hasStaticWarning = contents.contains("@static-warning");
+    bool isMultitest = multiTestRegExp.hasMatch(contents);
+
+    if (hasDynamicTypeError) {
+      // TODO(ahe): Remove this warning when co19 no longer uses this tag.
+
+      // @dynamic-type-error has been replaced by tests that use
+      // tests/co19/src/Utils/dynamic_check.dart to dynamically detect
+      // if a test is running in checked mode or not and change its
+      // expectations accordingly.
+
+      // Using stderr.writeString to avoid breaking dartc/junit_tests
+      // which parses the output of the --list option.
+      stderr.writeString(
+          "Warning: deprecated @dynamic-type-error tag used in $filePath\n");
+    }
+
+    return {
+      "vmOptions": <List>[[]],
+      "dartOptions": null,
+      "packageRoot": null,
+      "hasCompileError": hasCompileError,
+      "hasRuntimeError": hasRuntimeError,
+      "isStaticClean" : !hasStaticWarning,
+      "otherScripts": <String>[],
+      "isMultitest": isMultitest,
+      "isMultiHtmlTest": false,
+      "subtestNames": <String>[],
+      "containsLeadingHash": false,
+      "isolateStubs": '',
+      "containsDomImport": false,
+      "isLibraryDefinition": false,
+      "containsSourceOrImport": false,
+      "numStaticTypeAnnotations": 0,
+      "numCompileTimeAnnotations": 0,
+    };
+  }
 }
 
 
@@ -1660,6 +1714,10 @@
     return completer.future;
   }
 
+  static Path debugLogfile() {
+    return new Path(".debug.log");
+  }
+
   static String flakyFileName() {
     // If a flaky test did fail, infos about it (i.e. test name, stdin, stdout)
     // will be written to this file. This is useful for the debugging of
diff --git a/tools/testing/dart/utils.dart b/tools/testing/dart/utils.dart
new file mode 100644
index 0000000..7c2bbf7
--- /dev/null
+++ b/tools/testing/dart/utils.dart
@@ -0,0 +1,62 @@
+// 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 utils;
+
+import 'dart:io';
+import 'dart:utf' as utf;
+
+class DebugLogger {
+  static OutputStream _stream;
+
+  /**
+   * If [path] was null, the DebugLogger will write messages to stdout.
+   */
+  static init(Path path, {append: false}) {
+    if (path != null) {
+      var mode = append ? FileMode.APPEND : FileMode.WRITE;
+      _stream = new File.fromPath(path).openOutputStream(mode);
+    }
+  }
+
+  static void close() {
+    if (_stream != null) {
+      _stream.close();
+      _stream = null;
+    }
+  }
+
+  static void info(String msg) {
+    _print("Info: $msg");
+  }
+
+  static void warning(String msg) {
+    _print("Warning: $msg");
+  }
+
+  static void error(String msg) {
+    _print("Error: $msg");
+  }
+
+  static void _print(String msg) {
+    if (_stream != null) {
+      _stream.write(encodeUtf8(msg));
+      _stream.write([0x0a]);
+    } else {
+      print(msg);
+    }
+  }
+}
+
+List<int> encodeUtf8(String string) {
+  return utf.encodeUtf8(string);
+}
+
+// TODO(kustermann,ricow): As soon we have a debug log we should log
+// invalid utf8-encoded input to the log.
+// Currently invalid bytes will be replaced by a replacement character.
+String decodeUtf8(List<int> bytes) {
+  return utf.decodeUtf8(bytes);
+}
+
diff --git a/tools/testing/dart/vendored_pkg/README.txt b/tools/testing/dart/vendored_pkg/README.txt
new file mode 100644
index 0000000..0d4c1a7
--- /dev/null
+++ b/tools/testing/dart/vendored_pkg/README.txt
@@ -0,0 +1,4 @@
+The files in this folder are copies of libraries in the pkg directory. We have
+copies here to prevent a bootstrapping issue when running the test.dart binary
+in case breaking changes are made to the language in future revisions, we can
+still test with a known stable version.
diff --git a/tools/testing/dart/vendored_pkg/args/args.dart b/tools/testing/dart/vendored_pkg/args/args.dart
new file mode 100644
index 0000000..29da1e2
--- /dev/null
+++ b/tools/testing/dart/vendored_pkg/args/args.dart
@@ -0,0 +1,402 @@
+// 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.
+
+/**
+ * This library lets you define parsers for parsing raw command-line arguments
+ * into a set of options and values using [GNU][] and [POSIX][] style options.
+ *
+ * ## Defining options ##
+ *
+ * To use this library, you create an [ArgParser] object which will contain
+ * the set of options you support:
+ *
+ *     var parser = new ArgParser();
+ *
+ * Then you define a set of options on that parser using [addOption()] and
+ * [addFlag()]. The minimal way to create an option is:
+ *
+ *     parser.addOption('name');
+ *
+ * This creates an option named "name". Options must be given a value on the
+ * command line. If you have a simple on/off flag, you can instead use:
+ *
+ *     parser.addFlag('name');
+ *
+ * Flag options will, by default, accept a 'no-' prefix to negate the option.
+ * This can be disabled like so:
+ *
+ *     parser.addFlag('name', negatable: false);
+ *
+ * (From here on out "option" will refer to both "regular" options and flags.
+ * In cases where the distinction matters, we'll use "non-flag option".)
+ *
+ * Options may have an optional single-character abbreviation:
+ *
+ *     parser.addOption('mode', abbr: 'm');
+ *     parser.addFlag('verbose', abbr: 'v');
+ *
+ * They may also specify a default value. The default value will be used if the
+ * option isn't provided:
+ *
+ *     parser.addOption('mode', defaultsTo: 'debug');
+ *     parser.addFlag('verbose', defaultsTo: false);
+ *
+ * The default value for non-flag options can be any [String]. For flags, it
+ * must be a [bool].
+ *
+ * To validate non-flag options, you may provide an allowed set of values. When
+ * you do, it will throw a [FormatException] when you parse the arguments if
+ * the value for an option is not in the allowed set:
+ *
+ *     parser.addOption('mode', allowed: ['debug', 'release']);
+ *
+ * You can provide a callback when you define an option. When you later parse
+ * a set of arguments, the callback for that option will be invoked with the
+ * value provided for it:
+ *
+ *     parser.addOption('mode', callback: (mode) => print('Got mode $mode));
+ *     parser.addFlag('verbose', callback: (verbose) {
+ *       if (verbose) print('Verbose');
+ *     });
+ *
+ * The callback for each option will *always* be called when you parse a set of
+ * arguments. If the option isn't provided in the args, the callback will be
+ * passed the default value, or `null` if there is none set.
+ *
+ * ## Parsing arguments ##
+ *
+ * Once you have an [ArgParser] set up with some options and flags, you use it
+ * by calling [ArgParser.parse()] with a set of arguments:
+ *
+ *     var results = parser.parse(['some', 'command', 'line', 'args']);
+ *
+ * These will usually come from `new Options().arguments`, but you can pass in
+ * any list of strings. It returns an instance of [ArgResults]. This is a
+ * map-like object that will return the value of any parsed option.
+ *
+ *     var parser = new ArgParser();
+ *     parser.addOption('mode');
+ *     parser.addFlag('verbose', defaultsTo: true);
+ *     var results = parser.parse('['--mode', 'debug', 'something', 'else']);
+ *
+ *     print(results['mode']); // debug
+ *     print(results['verbose']); // true
+ *
+ * The [parse()] method will stop as soon as it reaches `--` or anything that
+ * it doesn't recognize as an option, flag, or option value. If there are still
+ * arguments left, they will be provided to you in
+ * [ArgResults.rest].
+ *
+ *     print(results.rest); // ['something', 'else']
+ *
+ * ## Specifying options ##
+ *
+ * To actually pass in options and flags on the command line, use GNU or POSIX
+ * style. If you define an option like:
+ *
+ *     parser.addOption('name', abbr: 'n');
+ *
+ * Then a value for it can be specified on the command line using any of:
+ *
+ *     --name=somevalue
+ *     --name somevalue
+ *     -nsomevalue
+ *     -n somevalue
+ *
+ * Given this flag:
+ *
+ *     parser.addFlag('name', abbr: 'n');
+ *
+ * You can set it on using one of:
+ *
+ *     --name
+ *     -n
+ *
+ * Or set it off using:
+ *
+ *     --no-name
+ *
+ * Multiple flag abbreviation can also be collapsed into a single argument. If
+ * you define:
+ *
+ *     parser.addFlag('verbose', abbr: 'v');
+ *     parser.addFlag('french', abbr: 'f');
+ *     parser.addFlag('iambic-pentameter', abbr: 'i');
+ *
+ * Then all three flags could be set using:
+ *
+ *     -vfi
+ *
+ * By default, an option has only a single value, with later option values
+ * overriding earlier ones; for example:
+ *
+ *     var parser = new ArgParser();
+ *     parser.addOption('mode');
+ *     var results = parser.parse(['--mode', 'on', '--mode', 'off']);
+ *     print(results['mode']); // prints 'off'
+ *
+ * If you need multiple values, set the [allowMultiple] flag. In that
+ * case the option can occur multiple times and when parsing arguments a
+ * List of values will be returned:
+ *
+ *     var parser = new ArgParser();
+ *     parser.addOption('mode', allowMultiple: true);
+ *     var results = parser.parse(['--mode', 'on', '--mode', 'off']);
+ *     print(results['mode']); // prints '[on, off]'
+ *
+ * ## Defining commands ##
+ *
+ * In addition to *options*, you can also define *commands*. A command is a
+ * named argument that has its own set of options. For example, when you run:
+ *
+ *     $ git commit -a
+ *
+ * The executable is `git`, the command is `commit`, and the `-a` option is an
+ * option passed to the command. You can add a command like so:
+ *
+ *     var parser = new ArgParser();
+ *     var command = parser.addCommand("commit");
+ *     command.addFlag('all', abbr: 'a');
+ *
+ * It returns another [ArgParser] which you can use to define options and
+ * subcommands on that command. When an argument list is parsed, you can then
+ * determine which command was entered and what options were provided for it.
+ *
+ *     var results = parser.parse(['commit', '-a']);
+ *     print(results.command.name); // "commit"
+ *     print(results.command['a']); // true
+ *
+ * ## Displaying usage ##
+ *
+ * This library can also be used to automatically generate nice usage help
+ * text like you get when you run a program with `--help`. To use this, you
+ * will also want to provide some help text when you create your options. To
+ * define help text for the entire option, do:
+ *
+ *     parser.addOption('mode', help: 'The compiler configuration',
+ *         allowed: ['debug', 'release']);
+ *     parser.addFlag('verbose', help: 'Show additional diagnostic info');
+ *
+ * For non-flag options, you can also provide detailed help for each expected
+ * value using a map:
+ *
+ *     parser.addOption('arch', help: 'The architecture to compile for',
+ *         allowedHelp: {
+ *           'ia32': 'Intel x86',
+ *           'arm': 'ARM Holding 32-bit chip'
+ *         });
+ *
+ * If you define a set of options like the above, then calling this:
+ *
+ *     print(parser.getUsage());
+ *
+ * Will display something like:
+ *
+ *     --mode            The compiler configuration
+ *                       [debug, release]
+ *
+ *     --[no-]verbose    Show additional diagnostic info
+ *     --arch            The architecture to compile for
+ *
+ *           [arm]       ARM Holding 32-bit chip
+ *           [ia32]      Intel x86
+ *
+ * To assist the formatting of the usage help, single line help text will
+ * be followed by a single new line. Options with multi-line help text
+ * will be followed by two new lines. This provides spatial diversity between
+ * options.
+ *
+ * [posix]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02
+ * [gnu]: http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces
+ */
+library args;
+
+import 'src/parser.dart';
+import 'src/usage.dart';
+
+/**
+ * A class for taking a list of raw command line arguments and parsing out
+ * options and flags from them.
+ */
+class ArgParser {
+  /**
+   * The options that have been defined for this parser.
+   */
+  final Map<String, Option> options = <String, Option>{};
+
+  /**
+   * The commands that have been defined for this parser.
+   */
+  final Map<String, ArgParser> commands = <String, ArgParser>{};
+
+  /** Creates a new ArgParser. */
+  ArgParser();
+
+  /**
+   * Defines a command. A command is a named argument which may in turn
+   * define its own options and subcommands. Returns an [ArgParser] that can
+   * be used to define the command's options.
+   */
+  ArgParser addCommand(String name) {
+    // Make sure the name isn't in use.
+    if (commands.containsKey(name)) {
+      throw new ArgumentError('Duplicate command "$name".');
+    }
+
+    var command = new ArgParser();
+    commands[name] = command;
+    return command;
+  }
+
+  /**
+   * Defines a flag. Throws an [ArgumentError] if:
+   *
+   * * There is already an option named [name].
+   * * There is already an option using abbreviation [abbr].
+   */
+  void addFlag(String name, {String abbr, String help, bool defaultsTo: false,
+      bool negatable: true, void callback(bool value)}) {
+    _addOption(name, abbr, help, null, null, defaultsTo, callback,
+        isFlag: true, negatable: negatable);
+  }
+
+  /**
+   * Defines a value-taking option. Throws an [ArgumentError] if:
+   *
+   * * There is already an option with name [name].
+   * * There is already an option using abbreviation [abbr].
+   */
+  void addOption(String name, {String abbr, String help, List<String> allowed,
+      Map<String, String> allowedHelp, String defaultsTo,
+      void callback(value), bool allowMultiple: false}) {
+    _addOption(name, abbr, help, allowed, allowedHelp, defaultsTo,
+        callback, isFlag: false, allowMultiple: allowMultiple);
+  }
+
+  void _addOption(String name, String abbr, String help, List<String> allowed,
+      Map<String, String> allowedHelp, defaultsTo,
+      void callback(value), {bool isFlag, bool negatable: false,
+      bool allowMultiple: false}) {
+    // Make sure the name isn't in use.
+    if (options.containsKey(name)) {
+      throw new ArgumentError('Duplicate option "$name".');
+    }
+
+    // Make sure the abbreviation isn't too long or in use.
+    if (abbr != null) {
+      if (abbr.length > 1) {
+        throw new ArgumentError(
+            'Abbreviation "$abbr" is longer than one character.');
+      }
+
+      var existing = findByAbbreviation(abbr);
+      if (existing != null) {
+        throw new ArgumentError(
+            'Abbreviation "$abbr" is already used by "${existing.name}".');
+      }
+    }
+
+    options[name] = new Option(name, abbr, help, allowed, allowedHelp,
+        defaultsTo, callback, isFlag: isFlag, negatable: negatable,
+        allowMultiple: allowMultiple);
+  }
+
+  /**
+   * Parses [args], a list of command-line arguments, matches them against the
+   * flags and options defined by this parser, and returns the result.
+   */
+  ArgResults parse(List<String> args) =>
+      new Parser(null, this, args.toList()).parse();
+
+  /**
+   * Generates a string displaying usage information for the defined options.
+   * This is basically the help text shown on the command line.
+   */
+  String getUsage() => new Usage(this).generate();
+
+  /**
+   * Get the default value for an option. Useful after parsing to test
+   * if the user specified something other than the default.
+   */
+  getDefault(String option) {
+    if (!options.containsKey(option)) {
+      throw new ArgumentError('No option named $option');
+    }
+    return options[option].defaultValue;
+  }
+
+  /**
+   * Finds the option whose abbreviation is [abbr], or `null` if no option has
+   * that abbreviation.
+   */
+  Option findByAbbreviation(String abbr) {
+    return options.values.firstMatching((option) => option.abbreviation == abbr,
+        orElse: () => null);
+  }
+}
+
+/**
+ * A command-line option. Includes both flags and options which take a value.
+ */
+class Option {
+  final String name;
+  final String abbreviation;
+  final List allowed;
+  final defaultValue;
+  final Function callback;
+  final String help;
+  final Map<String, String> allowedHelp;
+  final bool isFlag;
+  final bool negatable;
+  final bool allowMultiple;
+
+  Option(this.name, this.abbreviation, this.help, this.allowed,
+      this.allowedHelp, this.defaultValue, this.callback, {this.isFlag,
+      this.negatable, this.allowMultiple: false});
+}
+
+/**
+ * The results of parsing a series of command line arguments using
+ * [ArgParser.parse()]. Includes the parsed options and any remaining unparsed
+ * command line arguments.
+ */
+class ArgResults {
+  final Map _options;
+
+  /**
+   * If these are the results for parsing a command's options, this will be
+   * the name of the command. For top-level results, this returns `null`.
+   */
+  final String name;
+
+  /**
+   * The command that was selected, or `null` if none was. This will contain
+   * the options that were selected for that command.
+   */
+  final ArgResults command;
+
+  /**
+   * The remaining command-line arguments that were not parsed as options or
+   * flags. If `--` was used to separate the options from the remaining
+   * arguments, it will not be included in this list.
+   */
+  final List<String> rest;
+
+  /** Creates a new [ArgResults]. */
+  ArgResults(this._options, this.name, this.command, this.rest);
+
+  /** Gets the parsed command-line option named [name]. */
+  operator [](String name) {
+    if (!_options.containsKey(name)) {
+      throw new ArgumentError(
+          'Could not find an option named "$name".');
+    }
+
+    return _options[name];
+  }
+
+  /** Get the names of the options as a [Collection]. */
+  Collection<String> get options => _options.keys.toList();
+}
+
diff --git a/tools/testing/dart/vendored_pkg/args/src/parser.dart b/tools/testing/dart/vendored_pkg/args/src/parser.dart
new file mode 100644
index 0000000..d35f9ea
--- /dev/null
+++ b/tools/testing/dart/vendored_pkg/args/src/parser.dart
@@ -0,0 +1,281 @@
+// 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 args.src.parser;
+
+import '../args.dart';
+
+final _SOLO_OPT = new RegExp(r'^-([a-zA-Z0-9])$');
+final _ABBR_OPT = new RegExp(r'^-([a-zA-Z0-9]+)(.*)$');
+final _LONG_OPT = new RegExp(r'^--([a-zA-Z\-_0-9]+)(=(.*))?$');
+
+/**
+ * The actual parsing class. Unlike [ArgParser] which is really more an "arg
+ * grammar", this is the class that does the parsing and holds the mutable
+ * state required during a parse.
+ */
+class Parser {
+  /**
+   * If parser is parsing a command's options, this will be the name of the
+   * command. For top-level results, this returns `null`.
+   */
+  final String commandName;
+
+  /**
+   * The parser for the supercommand of this command parser, or `null` if this
+   * is the top-level parser.
+   */
+  final Parser parent;
+
+  /** The grammar being parsed. */
+  final ArgParser grammar;
+
+  /** The arguments being parsed. */
+  final List<String> args;
+
+  /** The accumulated parsed options. */
+  final Map results = {};
+
+  Parser(this.commandName, this.grammar, this.args, [this.parent]);
+
+  /** The current argument being parsed. */
+  String get current => args[0];
+
+  /** Parses the arguments. This can only be called once. */
+  ArgResults parse() {
+    var commandResults = null;
+
+    // Initialize flags to their defaults.
+    grammar.options.forEach((name, option) {
+      if (option.allowMultiple) {
+        results[name] = [];
+      } else {
+        results[name] = option.defaultValue;
+      }
+    });
+
+    // Parse the args.
+    while (args.length > 0) {
+      if (current == '--') {
+        // Reached the argument terminator, so stop here.
+        args.removeAt(0);
+        break;
+      }
+
+      // Try to parse the current argument as a command. This happens before
+      // options so that commands can have option-like names.
+      var command = grammar.commands[current];
+      if (command != null) {
+        var commandName = args.removeAt(0);
+        var commandParser = new Parser(commandName, command, args, this);
+        commandResults = commandParser.parse();
+        continue;
+      }
+
+      // Try to parse the current argument as an option. Note that the order
+      // here matters.
+      if (parseSoloOption()) continue;
+      if (parseAbbreviation(this)) continue;
+      if (parseLongOption()) continue;
+
+      // If we got here, the argument doesn't look like an option, so stop.
+      break;
+    }
+
+    // Set unspecified multivalued arguments to their default value,
+    // if any, and invoke the callbacks.
+    grammar.options.forEach((name, option) {
+      if (option.allowMultiple &&
+          results[name].length == 0 &&
+          option.defaultValue != null) {
+        results[name].add(option.defaultValue);
+      }
+      if (option.callback != null) option.callback(results[name]);
+    });
+
+    // Add in the leftover arguments we didn't parse to the innermost command.
+    var rest = args.toList();
+    args.clear();
+    return new ArgResults(results, commandName, commandResults, rest);
+  }
+
+  /**
+   * Pulls the value for [option] from the second argument in [args]. Validates
+   * that there is a valid value there.
+   */
+  void readNextArgAsValue(Option option) {
+    // Take the option argument from the next command line arg.
+    validate(args.length > 0,
+        'Missing argument for "${option.name}".');
+
+    // Make sure it isn't an option itself.
+    validate(!_ABBR_OPT.hasMatch(current) && !_LONG_OPT.hasMatch(current),
+        'Missing argument for "${option.name}".');
+
+    setOption(results, option, current);
+    args.removeAt(0);
+  }
+
+  /**
+   * Tries to parse the current argument as a "solo" option, which is a single
+   * hyphen followed by a single letter. We treat this differently than
+   * collapsed abbreviations (like "-abc") to handle the possible value that
+   * may follow it.
+   */
+  bool parseSoloOption() {
+    var soloOpt = _SOLO_OPT.firstMatch(current);
+    if (soloOpt == null) return false;
+
+    var option = grammar.findByAbbreviation(soloOpt[1]);
+    if (option == null) {
+      // Walk up to the parent command if possible.
+      validate(parent != null,
+          'Could not find an option or flag "-${soloOpt[1]}".');
+      return parent.parseSoloOption();
+    }
+
+    args.removeAt(0);
+
+    if (option.isFlag) {
+      setOption(results, option, true);
+    } else {
+      readNextArgAsValue(option);
+    }
+
+    return true;
+  }
+
+  /**
+   * Tries to parse the current argument as a series of collapsed abbreviations
+   * (like "-abc") or a single abbreviation with the value directly attached
+   * to it (like "-mrelease").
+   */
+  bool parseAbbreviation(Parser innermostCommand) {
+    var abbrOpt = _ABBR_OPT.firstMatch(current);
+    if (abbrOpt == null) return false;
+
+    // If the first character is the abbreviation for a non-flag option, then
+    // the rest is the value.
+    var c = abbrOpt[1].substring(0, 1);
+    var first = grammar.findByAbbreviation(c);
+    if (first == null) {
+      // Walk up to the parent command if possible.
+      validate(parent != null,
+          'Could not find an option with short name "-$c".');
+      return parent.parseAbbreviation(innermostCommand);
+    } else if (!first.isFlag) {
+      // The first character is a non-flag option, so the rest must be the
+      // value.
+      var value = '${abbrOpt[1].substring(1)}${abbrOpt[2]}';
+      setOption(results, first, value);
+    } else {
+      // If we got some non-flag characters, then it must be a value, but
+      // if we got here, it's a flag, which is wrong.
+      validate(abbrOpt[2] == '',
+        'Option "-$c" is a flag and cannot handle value '
+        '"${abbrOpt[1].substring(1)}${abbrOpt[2]}".');
+
+      // Not an option, so all characters should be flags.
+      // We use "innermostCommand" here so that if a parent command parses the
+      // *first* letter, subcommands can still be found to parse the other
+      // letters.
+      for (var i = 0; i < abbrOpt[1].length; i++) {
+        var c = abbrOpt[1].substring(i, i + 1);
+        innermostCommand.parseShortFlag(c);
+      }
+    }
+
+    args.removeAt(0);
+    return true;
+  }
+
+  void parseShortFlag(String c) {
+    var option = grammar.findByAbbreviation(c);
+    if (option == null) {
+      // Walk up to the parent command if possible.
+      validate(parent != null,
+          'Could not find an option with short name "-$c".');
+      parent.parseShortFlag(c);
+      return;
+    }
+
+    // In a list of short options, only the first can be a non-flag. If
+    // we get here we've checked that already.
+    validate(option.isFlag,
+        'Option "-$c" must be a flag to be in a collapsed "-".');
+
+    setOption(results, option, true);
+  }
+
+  /**
+   * Tries to parse the current argument as a long-form named option, which
+   * may include a value like "--mode=release" or "--mode release".
+   */
+  bool parseLongOption() {
+    var longOpt = _LONG_OPT.firstMatch(current);
+    if (longOpt == null) return false;
+
+    var name = longOpt[1];
+    var option = grammar.options[name];
+    if (option != null) {
+      args.removeAt(0);
+      if (option.isFlag) {
+        validate(longOpt[3] == null,
+            'Flag option "$name" should not be given a value.');
+
+        setOption(results, option, true);
+      } else if (longOpt[3] != null) {
+        // We have a value like --foo=bar.
+        setOption(results, option, longOpt[3]);
+      } else {
+        // Option like --foo, so look for the value as the next arg.
+        readNextArgAsValue(option);
+      }
+    } else if (name.startsWith('no-')) {
+      // See if it's a negated flag.
+      name = name.substring('no-'.length);
+      option = grammar.options[name];
+      if (option == null) {
+        // Walk up to the parent command if possible.
+        validate(parent != null, 'Could not find an option named "$name".');
+        return parent.parseLongOption();
+      }
+
+      args.removeAt(0);
+      validate(option.isFlag, 'Cannot negate non-flag option "$name".');
+      validate(option.negatable, 'Cannot negate option "$name".');
+
+      setOption(results, option, false);
+    } else {
+      // Walk up to the parent command if possible.
+      validate(parent != null, 'Could not find an option named "$name".');
+      return parent.parseLongOption();
+    }
+
+    return true;
+  }
+
+  /**
+   * Called during parsing to validate the arguments. Throws a
+   * [FormatException] if [condition] is `false`.
+   */
+  validate(bool condition, String message) {
+    if (!condition) throw new FormatException(message);
+  }
+
+  /** Validates and stores [value] as the value for [option]. */
+  setOption(Map results, Option option, value) {
+    // See if it's one of the allowed values.
+    if (option.allowed != null) {
+      validate(option.allowed.any((allow) => allow == value),
+          '"$value" is not an allowed value for option "${option.name}".');
+    }
+
+    if (option.allowMultiple) {
+      results[option.name].add(value);
+    } else {
+      results[option.name] = value;
+    }
+  }
+}
diff --git a/tools/testing/dart/vendored_pkg/args/src/usage.dart b/tools/testing/dart/vendored_pkg/args/src/usage.dart
new file mode 100644
index 0000000..72525e2
--- /dev/null
+++ b/tools/testing/dart/vendored_pkg/args/src/usage.dart
@@ -0,0 +1,238 @@
+// 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 args.src.usage;
+
+import 'dart:math';
+
+import '../args.dart';
+
+/**
+ * Takes an [ArgParser] and generates a string of usage (i.e. help) text for its
+ * defined options. Internally, it works like a tabular printer. The output is
+ * divided into three horizontal columns, like so:
+ *
+ *     -h, --help  Prints the usage information
+ *     |  |        |                                 |
+ *
+ * It builds the usage text up one column at a time and handles padding with
+ * spaces and wrapping to the next line to keep the cells correctly lined up.
+ */
+class Usage {
+  static const NUM_COLUMNS = 3; // Abbreviation, long name, help.
+
+  /** The parser this is generating usage for. */
+  final ArgParser args;
+
+  /** The working buffer for the generated usage text. */
+  StringBuffer buffer;
+
+  /**
+   * The column that the "cursor" is currently on. If the next call to
+   * [write()] is not for this column, it will correctly handle advancing to
+   * the next column (and possibly the next row).
+   */
+  int currentColumn = 0;
+
+  /** The width in characters of each column. */
+  List<int> columnWidths;
+
+  /**
+   * The number of sequential lines of text that have been written to the last
+   * column (which shows help info). We track this so that help text that spans
+   * multiple lines can be padded with a blank line after it for separation.
+   * Meanwhile, sequential options with single-line help will be compacted next
+   * to each other.
+   */
+  int numHelpLines = 0;
+
+  /**
+   * How many newlines need to be rendered before the next bit of text can be
+   * written. We do this lazily so that the last bit of usage doesn't have
+   * dangling newlines. We only write newlines right *before* we write some
+   * real content.
+   */
+  int newlinesNeeded = 0;
+
+  Usage(this.args);
+
+  /**
+   * Generates a string displaying usage information for the defined options.
+   * This is basically the help text shown on the command line.
+   */
+  String generate() {
+    buffer = new StringBuffer();
+
+    calculateColumnWidths();
+
+    args.options.forEach((name, option) {
+      write(0, getAbbreviation(option));
+      write(1, getLongOption(option));
+
+      if (option.help != null) write(2, option.help);
+
+      if (option.allowedHelp != null) {
+        var allowedNames = option.allowedHelp.keys.toList();
+        allowedNames.sort();
+        newline();
+        for (var name in allowedNames) {
+          write(1, getAllowedTitle(name));
+          write(2, option.allowedHelp[name]);
+        }
+        newline();
+      } else if (option.allowed != null) {
+        write(2, buildAllowedList(option));
+      } else if (option.defaultValue != null) {
+        if (option.isFlag && option.defaultValue == true) {
+          write(2, '(defaults to on)');
+        } else if (!option.isFlag) {
+          write(2, '(defaults to "${option.defaultValue}")');
+        }
+      }
+
+      // If any given option displays more than one line of text on the right
+      // column (i.e. help, default value, allowed options, etc.) then put a
+      // blank line after it. This gives space where it's useful while still
+      // keeping simple one-line options clumped together.
+      if (numHelpLines > 1) newline();
+    });
+
+    return buffer.toString();
+  }
+
+  String getAbbreviation(Option option) {
+    if (option.abbreviation != null) {
+      return '-${option.abbreviation}, ';
+    } else {
+      return '';
+    }
+  }
+
+  String getLongOption(Option option) {
+    if (option.negatable) {
+      return '--[no-]${option.name}';
+    } else {
+      return '--${option.name}';
+    }
+  }
+
+  String getAllowedTitle(String allowed) {
+    return '      [$allowed]';
+  }
+
+  void calculateColumnWidths() {
+    int abbr = 0;
+    int title = 0;
+    args.options.forEach((name, option) {
+      // Make room in the first column if there are abbreviations.
+      abbr = max(abbr, getAbbreviation(option).length);
+
+      // Make room for the option.
+      title = max(title, getLongOption(option).length);
+
+      // Make room for the allowed help.
+      if (option.allowedHelp != null) {
+        for (var allowed in option.allowedHelp.keys) {
+          title = max(title, getAllowedTitle(allowed).length);
+        }
+      }
+    });
+
+    // Leave a gutter between the columns.
+    title += 4;
+    columnWidths = [abbr, title];
+  }
+
+  newline() {
+    newlinesNeeded++;
+    currentColumn = 0;
+    numHelpLines = 0;
+  }
+
+  write(int column, String text) {
+    var lines = text.split('\n');
+
+    // Strip leading and trailing empty lines.
+    while (lines.length > 0 && lines[0].trim() == '') {
+      lines.removeRange(0, 1);
+    }
+
+    while (lines.length > 0 && lines[lines.length - 1].trim() == '') {
+      lines.removeLast();
+    }
+
+    for (var line in lines) {
+      writeLine(column, line);
+    }
+  }
+
+  writeLine(int column, String text) {
+    // Write any pending newlines.
+    while (newlinesNeeded > 0) {
+      buffer.add('\n');
+      newlinesNeeded--;
+    }
+
+    // Advance until we are at the right column (which may mean wrapping around
+    // to the next line.
+    while (currentColumn != column) {
+      if (currentColumn < NUM_COLUMNS - 1) {
+        buffer.add(padRight('', columnWidths[currentColumn]));
+      } else {
+        buffer.add('\n');
+      }
+      currentColumn = (currentColumn + 1) % NUM_COLUMNS;
+    }
+
+    if (column < columnWidths.length) {
+      // Fixed-size column, so pad it.
+      buffer.add(padRight(text, columnWidths[column]));
+    } else {
+      // The last column, so just write it.
+      buffer.add(text);
+    }
+
+    // Advance to the next column.
+    currentColumn = (currentColumn + 1) % NUM_COLUMNS;
+
+    // If we reached the last column, we need to wrap to the next line.
+    if (column == NUM_COLUMNS - 1) newlinesNeeded++;
+
+    // Keep track of how many consecutive lines we've written in the last
+    // column.
+    if (column == NUM_COLUMNS - 1) {
+      numHelpLines++;
+    } else {
+      numHelpLines = 0;
+    }
+  }
+
+  buildAllowedList(Option option) {
+    var allowedBuffer = new StringBuffer();
+    allowedBuffer.add('[');
+    bool first = true;
+    for (var allowed in option.allowed) {
+      if (!first) allowedBuffer.add(', ');
+      allowedBuffer.add(allowed);
+      if (allowed == option.defaultValue) {
+        allowedBuffer.add(' (default)');
+      }
+      first = false;
+    }
+    allowedBuffer.add(']');
+    return allowedBuffer.toString();
+  }
+}
+
+/** Pads [source] to [length] by adding spaces at the end. */
+String padRight(String source, int length) {
+  final result = new StringBuffer();
+  result.add(source);
+
+  while (result.length < length) {
+    result.add(' ');
+  }
+
+  return result.toString();
+}
\ No newline at end of file
diff --git a/tools/testing/dart/vendored_pkg/path/path.dart b/tools/testing/dart/vendored_pkg/path/path.dart
new file mode 100644
index 0000000..f27d558
--- /dev/null
+++ b/tools/testing/dart/vendored_pkg/path/path.dart
@@ -0,0 +1,689 @@
+// Copyright (c) 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.
+
+/// A comprehensive, cross-platform path manipulation library.
+library path;
+
+import 'dart:io' as io;
+
+/// An internal builder for the current OS so we can provide a straight
+/// functional interface and not require users to create one.
+final _builder = new Builder();
+
+/// Gets the path to the current working directory.
+String get current => new io.Directory.current().path;
+
+/// Gets the path separator for the current platform. On Mac and Linux, this
+/// is `/`. On Windows, it's `\`.
+String get separator => _builder.separator;
+
+/// Converts [path] to an absolute path by resolving it relative to the current
+/// working directory. If [path] is already an absolute path, just returns it.
+///
+///     path.absolute('foo/bar.txt'); // -> /your/current/dir/foo/bar.txt
+String absolute(String path) => join(current, path);
+
+/// Gets the part of [path] after the last separator.
+///
+///     path.basename('path/to/foo.dart'); // -> 'foo.dart'
+///     path.basename('path/to');          // -> 'to'
+///
+/// Trailing separators are ignored.
+///
+///     builder.dirname('path/to/'); // -> 'to'
+String basename(String path) => _builder.basename(path);
+
+/// Gets the part of [path] after the last separator, and without any trailing
+/// file extension.
+///
+///     path.basenameWithoutExtension('path/to/foo.dart'); // -> 'foo'
+///
+/// Trailing separators are ignored.
+///
+///     builder.dirname('path/to/foo.dart/'); // -> 'foo'
+String basenameWithoutExtension(String path) =>
+    _builder.basenameWithoutExtension(path);
+
+/// Gets the part of [path] before the last separator.
+///
+///     path.dirname('path/to/foo.dart'); // -> 'path/to'
+///     path.dirname('path/to');          // -> 'to'
+///
+/// Trailing separators are ignored.
+///
+///     builder.dirname('path/to/'); // -> 'path'
+String dirname(String path) => _builder.dirname(path);
+
+/// Gets the file extension of [path]: the portion of [basename] from the last
+/// `.` to the end (including the `.` itself).
+///
+///     path.extension('path/to/foo.dart');    // -> '.dart'
+///     path.extension('path/to/foo');         // -> ''
+///     path.extension('path.to/foo');         // -> ''
+///     path.extension('path/to/foo.dart.js'); // -> '.js'
+///
+/// If the file name starts with a `.`, then that is not considered the
+/// extension:
+///
+///     path.extension('~/.bashrc');    // -> ''
+///     path.extension('~/.notes.txt'); // -> '.txt'
+String extension(String path) => _builder.extension(path);
+
+// TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed.
+/// Returns the root of [path], if it's absolute, or the empty string if it's
+/// relative.
+///
+///     // Unix
+///     path.rootPrefix('path/to/foo'); // -> ''
+///     path.rootPrefix('/path/to/foo'); // -> '/'
+///
+///     // Windows
+///     path.rootPrefix(r'path\to\foo'); // -> ''
+///     path.rootPrefix(r'C:\path\to\foo'); // -> r'C:\'
+String rootPrefix(String path) => _builder.rootPrefix(path);
+
+/// Returns `true` if [path] is an absolute path and `false` if it is a
+/// relative path. On POSIX systems, absolute paths start with a `/` (forward
+/// slash). On Windows, an absolute path starts with `\\`, or a drive letter
+/// followed by `:/` or `:\`.
+bool isAbsolute(String path) => _builder.isAbsolute(path);
+
+/// Returns `true` if [path] is a relative path and `false` if it is absolute.
+/// On POSIX systems, absolute paths start with a `/` (forward slash). On
+/// Windows, an absolute path starts with `\\`, or a drive letter followed by
+/// `:/` or `:\`.
+bool isRelative(String path) => _builder.isRelative(path);
+
+/// Joins the given path parts into a single path using the current platform's
+/// [separator]. Example:
+///
+///     path.join('path', 'to', 'foo'); // -> 'path/to/foo'
+///
+/// If any part ends in a path separator, then a redundant separator will not
+/// be added:
+///
+///     path.join('path/', 'to', 'foo'); // -> 'path/to/foo
+///
+/// If a part is an absolute path, then anything before that will be ignored:
+///
+///     path.join('path', '/to', 'foo'); // -> '/to/foo'
+String join(String part1, [String part2, String part3, String part4,
+            String part5, String part6, String part7, String part8]) =>
+  _builder.join(part1, part2, part3, part4, part5, part6, part7, part8);
+
+// TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed.
+/// Splits [path] into its components using the current platform's [separator].
+///
+///     path.split('path/to/foo'); // -> ['path', 'to', 'foo']
+///
+/// The path will *not* be normalized before splitting.
+///
+///     path.split('path/../foo'); // -> ['path', '..', 'foo']
+///
+/// If [path] is absolute, the root directory will be the first element in the
+/// array. Example:
+///
+///     // Unix
+///     path.split('/path/to/foo'); // -> ['/', 'path', 'to', 'foo']
+///
+///     // Windows
+///     path.split(r'C:\path\to\foo'); // -> [r'C:\', 'path', 'to', 'foo']
+List<String> split(String path) => _builder.split(path);
+
+/// Normalizes [path], simplifying it by handling `..`, and `.`, and
+/// removing redundant path separators whenever possible.
+///
+///     path.normalize('path/./to/..//file.text'); // -> 'path/file.txt'
+String normalize(String path) => _builder.normalize(path);
+
+/// Attempts to convert [path] to an equivalent relative path from the current
+/// directory.
+///
+///     // Given current directory is /root/path:
+///     path.relative('/root/path/a/b.dart'); // -> 'a/b.dart'
+///     path.relative('/root/other.dart'); // -> '../other.dart'
+///
+/// If the [from] argument is passed, [path] is made relative to that instead.
+///
+///     path.relative('/root/path/a/b.dart',
+///         from: '/root/path'); // -> 'a/b.dart'
+///     path.relative('/root/other.dart',
+///         from: '/root/path'); // -> '../other.dart'
+///
+/// Since there is no relative path from one drive letter to another on Windows,
+/// this will return an absolute path in that case.
+///
+///     path.relative(r'D:\other', from: r'C:\home'); // -> 'D:\other'
+String relative(String path, {String from}) =>
+    _builder.relative(path, from: from);
+
+/// Removes a trailing extension from the last part of [path].
+///
+///     withoutExtension('path/to/foo.dart'); // -> 'path/to/foo'
+String withoutExtension(String path) => _builder.withoutExtension(path);
+
+/// An instantiable class for manipulating paths. Unlike the top-level
+/// functions, this lets you explicitly select what platform the paths will use.
+class Builder {
+  /// Creates a new path builder for the given style and root directory.
+  ///
+  /// If [style] is omitted, it uses the host operating system's path style. If
+  /// [root] is omitted, it defaults to the current working directory. If [root]
+  /// is relative, it is considered relative to the current working directory.
+  factory Builder({Style style, String root}) {
+    if (style == null) {
+      if (io.Platform.operatingSystem == 'windows') {
+        style = Style.windows;
+      } else {
+        style = Style.posix;
+      }
+    }
+
+    if (root == null) root = current;
+
+    return new Builder._(style, root);
+  }
+
+  Builder._(this.style, this.root);
+
+  /// The style of path that this builder works with.
+  final Style style;
+
+  /// The root directory that relative paths will be relative to.
+  final String root;
+
+  /// Gets the path separator for the builder's [style]. On Mac and Linux,
+  /// this is `/`. On Windows, it's `\`.
+  String get separator => style.separator;
+
+  /// Gets the part of [path] after the last separator on the builder's
+  /// platform.
+  ///
+  ///     builder.basename('path/to/foo.dart'); // -> 'foo.dart'
+  ///     builder.basename('path/to');          // -> 'to'
+  ///
+  /// Trailing separators are ignored.
+  ///
+  ///     builder.dirname('path/to/'); // -> 'to'
+  String basename(String path) => _parse(path).basename;
+
+  /// Gets the part of [path] after the last separator on the builder's
+  /// platform, and without any trailing file extension.
+  ///
+  ///     builder.basenameWithoutExtension('path/to/foo.dart'); // -> 'foo'
+  ///
+  /// Trailing separators are ignored.
+  ///
+  ///     builder.dirname('path/to/foo.dart/'); // -> 'foo'
+  String basenameWithoutExtension(String path) =>
+    _parse(path).basenameWithoutExtension;
+
+  /// Gets the part of [path] before the last separator.
+  ///
+  ///     builder.dirname('path/to/foo.dart'); // -> 'path/to'
+  ///     builder.dirname('path/to');          // -> 'path'
+  ///
+  /// Trailing separators are ignored.
+  ///
+  ///     builder.dirname('path/to/'); // -> 'path'
+  String dirname(String path) {
+    var parsed = _parse(path);
+    parsed.removeTrailingSeparators();
+    if (parsed.parts.isEmpty) return parsed.root == null ? '.' : parsed.root;
+    if (parsed.parts.length == 1) {
+      return parsed.root == null ? '.' : parsed.root;
+    }
+    parsed.parts.removeLast();
+    parsed.separators.removeLast();
+    parsed.removeTrailingSeparators();
+    return parsed.toString();
+  }
+
+  /// Gets the file extension of [path]: the portion of [basename] from the last
+  /// `.` to the end (including the `.` itself).
+  ///
+  ///     builder.extension('path/to/foo.dart'); // -> '.dart'
+  ///     builder.extension('path/to/foo'); // -> ''
+  ///     builder.extension('path.to/foo'); // -> ''
+  ///     builder.extension('path/to/foo.dart.js'); // -> '.js'
+  ///
+  /// If the file name starts with a `.`, then it is not considered an
+  /// extension:
+  ///
+  ///     builder.extension('~/.bashrc');    // -> ''
+  ///     builder.extension('~/.notes.txt'); // -> '.txt'
+  String extension(String path) => _parse(path).extension;
+
+  // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed.
+  /// Returns the root of [path], if it's absolute, or an empty string if it's
+  /// relative.
+  ///
+  ///     // Unix
+  ///     builder.rootPrefix('path/to/foo'); // -> ''
+  ///     builder.rootPrefix('/path/to/foo'); // -> '/'
+  ///
+  ///     // Windows
+  ///     builder.rootPrefix(r'path\to\foo'); // -> ''
+  ///     builder.rootPrefix(r'C:\path\to\foo'); // -> r'C:\'
+  String rootPrefix(String path) {
+    var root = _parse(path).root;
+    return root == null ? '' : root;
+  }
+
+  /// Returns `true` if [path] is an absolute path and `false` if it is a
+  /// relative path. On POSIX systems, absolute paths start with a `/` (forward
+  /// slash). On Windows, an absolute path starts with `\\`, or a drive letter
+  /// followed by `:/` or `:\`.
+  bool isAbsolute(String path) => _parse(path).isAbsolute;
+
+  /// Returns `true` if [path] is a relative path and `false` if it is absolute.
+  /// On POSIX systems, absolute paths start with a `/` (forward slash). On
+  /// Windows, an absolute path starts with `\\`, or a drive letter followed by
+  /// `:/` or `:\`.
+  bool isRelative(String path) => !isAbsolute(path);
+
+  /// Joins the given path parts into a single path. Example:
+  ///
+  ///     builder.join('path', 'to', 'foo'); // -> 'path/to/foo'
+  ///
+  /// If any part ends in a path separator, then a redundant separator will not
+  /// be added:
+  ///
+  ///     builder.join('path/', 'to', 'foo'); // -> 'path/to/foo
+  ///
+  /// If a part is an absolute path, then anything before that will be ignored:
+  ///
+  ///     builder.join('path', '/to', 'foo'); // -> '/to/foo'
+  ///
+  String join(String part1, [String part2, String part3, String part4,
+              String part5, String part6, String part7, String part8]) {
+    var buffer = new StringBuffer();
+    var needsSeparator = false;
+
+    var parts = [part1, part2, part3, part4, part5, part6, part7, part8];
+    for (var i = 1; i < parts.length; i++) {
+      if (parts[i] != null && parts[i - 1] == null) {
+        throw new ArgumentError("join(): part ${i - 1} was null, but part $i "
+            "was not.");
+      }
+    }
+
+    for (var part in parts) {
+      if (part == null) continue;
+
+      if (this.isAbsolute(part)) {
+        // An absolute path discards everything before it.
+        buffer.clear();
+        buffer.add(part);
+      } else {
+        if (part.length > 0 && part[0].contains(style.separatorPattern)) {
+          // The part starts with a separator, so we don't need to add one.
+        } else if (needsSeparator) {
+          buffer.add(separator);
+        }
+
+        buffer.add(part);
+      }
+
+      // Unless this part ends with a separator, we'll need to add one before
+      // the next part.
+      needsSeparator = part.length > 0 &&
+          !part[part.length - 1].contains(style.separatorPattern);
+    }
+
+    return buffer.toString();
+  }
+
+  // TODO(nweiz): add a UNC example for Windows once issue 7323 is fixed.
+  /// Splits [path] into its components using the current platform's
+  /// [separator]. Example:
+  ///
+  ///     builder.split('path/to/foo'); // -> ['path', 'to', 'foo']
+  ///
+  /// The path will *not* be normalized before splitting.
+  ///
+  ///     builder.split('path/../foo'); // -> ['path', '..', 'foo']
+  ///
+  /// If [path] is absolute, the root directory will be the first element in the
+  /// array. Example:
+  ///
+  ///     // Unix
+  ///     builder.split('/path/to/foo'); // -> ['/', 'path', 'to', 'foo']
+  ///
+  ///     // Windows
+  ///     builder.split(r'C:\path\to\foo'); // -> [r'C:\', 'path', 'to', 'foo']
+  List<String> split(String path) {
+    var parsed = _parse(path);
+    // Filter out empty parts that exist due to multiple separators in a row.
+    parsed.parts = parsed.parts.where((part) => !part.isEmpty).toList();
+    if (parsed.root != null) parsed.parts.insertRange(0, 1, parsed.root);
+    return parsed.parts;
+  }
+
+  /// Normalizes [path], simplifying it by handling `..`, and `.`, and
+  /// removing redundant path separators whenever possible.
+  ///
+  ///     builder.normalize('path/./to/..//file.text'); // -> 'path/file.txt'
+  String normalize(String path) {
+    if (path == '') return path;
+
+    var parsed = _parse(path);
+    parsed.normalize();
+    return parsed.toString();
+  }
+
+  /// Creates a new path by appending the given path parts to the [root].
+  /// Equivalent to [join()] with [root] as the first argument. Example:
+  ///
+  ///     var builder = new Builder(root: 'root');
+  ///     builder.resolve('path', 'to', 'foo'); // -> 'root/path/to/foo'
+  String resolve(String part1, [String part2, String part3, String part4,
+              String part5, String part6, String part7]) {
+    if (!?part2) return join(root, part1);
+    if (!?part3) return join(root, part1, part2);
+    if (!?part4) return join(root, part1, part2, part3);
+    if (!?part5) return join(root, part1, part2, part3, part4);
+    if (!?part6) return join(root, part1, part2, part3, part4, part5);
+    if (!?part7) return join(root, part1, part2, part3, part4, part5, part6);
+    return join(root, part1, part2, part3, part4, part5, part6, part7);
+  }
+
+  /// Attempts to convert [path] to an equivalent relative path relative to
+  /// [root].
+  ///
+  ///     var builder = new Builder(root: '/root/path');
+  ///     builder.relative('/root/path/a/b.dart'); // -> 'a/b.dart'
+  ///     builder.relative('/root/other.dart'); // -> '../other.dart'
+  ///
+  /// If the [from] argument is passed, [path] is made relative to that instead.
+  ///
+  ///     builder.relative('/root/path/a/b.dart',
+  ///         from: '/root/path'); // -> 'a/b.dart'
+  ///     builder.relative('/root/other.dart',
+  ///         from: '/root/path'); // -> '../other.dart'
+  ///
+  /// Since there is no relative path from one drive letter to another on
+  /// Windows, this will return an absolute path in that case.
+  ///
+  ///     builder.relative(r'D:\other', from: r'C:\other'); // -> 'D:\other'
+  ///
+  /// This will also return an absolute path if an absolute [path] is passed to
+  /// a builder with a relative [root].
+  ///
+  ///     var builder = new Builder(r'some/relative/path');
+  ///     builder.relative(r'/absolute/path'); // -> '/absolute/path'
+  String relative(String path, {String from}) {
+    if (path == '') return '.';
+
+    from = from == null ? root : this.join(root, from);
+
+    // We can't determine the path from a relative path to an absolute path.
+    if (this.isRelative(from) && this.isAbsolute(path)) {
+      return this.normalize(path);
+    }
+
+    // If the given path is relative, resolve it relative to the root of the
+    // builder.
+    if (this.isRelative(path)) path = this.resolve(path);
+
+    // If the path is still relative and `from` is absolute, we're unable to
+    // find a path from `from` to `path`.
+    if (this.isRelative(path) && this.isAbsolute(from)) {
+      throw new ArgumentError('Unable to find a path to "$path" from "$from".');
+    }
+
+    var fromParsed = _parse(from)..normalize();
+    var pathParsed = _parse(path)..normalize();
+
+    // If the root prefixes don't match (for example, different drive letters
+    // on Windows), then there is no relative path, so just return the absolute
+    // one. In Windows, drive letters are case-insenstive and we allow
+    // calculation of relative paths, even if a path has not been normalized.
+    if (fromParsed.root != pathParsed.root &&
+        ((fromParsed.root ==  null || pathParsed.root == null) ||
+          fromParsed.root.toLowerCase().replaceAll('/', '\\') !=
+          pathParsed.root.toLowerCase().replaceAll('/', '\\'))) {
+      return pathParsed.toString();
+    }
+
+    // Strip off their common prefix.
+    while (fromParsed.parts.length > 0 && pathParsed.parts.length > 0 &&
+           fromParsed.parts[0] == pathParsed.parts[0]) {
+      fromParsed.parts.removeAt(0);
+      fromParsed.separators.removeAt(0);
+      pathParsed.parts.removeAt(0);
+      pathParsed.separators.removeAt(0);
+    }
+
+    // If there are any directories left in the root path, we need to walk up
+    // out of them.
+    pathParsed.parts.insertRange(0, fromParsed.parts.length, '..');
+    pathParsed.separators.insertRange(0, fromParsed.parts.length,
+        style.separator);
+
+    // Corner case: the paths completely collapsed.
+    if (pathParsed.parts.length == 0) return '.';
+
+    // Make it relative.
+    pathParsed.root = '';
+    pathParsed.removeTrailingSeparators();
+
+    return pathParsed.toString();
+  }
+
+  /// Removes a trailing extension from the last part of [path].
+  ///
+  ///     builder.withoutExtension('path/to/foo.dart'); // -> 'path/to/foo'
+  String withoutExtension(String path) {
+    var parsed = _parse(path);
+
+    for (var i = parsed.parts.length - 1; i >= 0; i--) {
+      if (!parsed.parts[i].isEmpty) {
+        parsed.parts[i] = parsed.basenameWithoutExtension;
+        break;
+      }
+    }
+
+    return parsed.toString();
+  }
+
+  _ParsedPath _parse(String path) {
+    var before = path;
+
+    // Remove the root prefix, if any.
+    var root = style.getRoot(path);
+    if (root != null) path = path.substring(root.length);
+
+    // Split the parts on path separators.
+    var parts = [];
+    var separators = [];
+    var start = 0;
+    for (var match in style.separatorPattern.allMatches(path)) {
+      parts.add(path.substring(start, match.start));
+      separators.add(match[0]);
+      start = match.end;
+    }
+
+    // Add the final part, if any.
+    if (start < path.length) {
+      parts.add(path.substring(start));
+      separators.add('');
+    }
+
+    return new _ParsedPath(style, root, parts, separators);
+  }
+}
+
+/// An enum type describing a "flavor" of path.
+class Style {
+  /// POSIX-style paths use "/" (forward slash) as separators. Absolute paths
+  /// start with "/". Used by UNIX, Linux, Mac OS X, and others.
+  static final posix = new Style._('posix', '/', '/', '/');
+
+  /// Windows paths use "\" (backslash) as separators. Absolute paths start with
+  /// a drive letter followed by a colon (example, "C:") or two backslashes
+  /// ("\\") for UNC paths.
+  // TODO(rnystrom): The UNC root prefix should include the drive name too, not
+  // just the "\\".
+  static final windows = new Style._('windows', '\\', r'[/\\]',
+      r'\\\\|[a-zA-Z]:[/\\]');
+
+  Style._(this.name, this.separator, String separatorPattern,
+      String rootPattern)
+    : separatorPattern = new RegExp(separatorPattern),
+      _rootPattern = new RegExp('^$rootPattern');
+
+  /// The name of this path style. Will be "posix" or "windows".
+  final String name;
+
+  /// The path separator for this style. On POSIX, this is `/`. On Windows,
+  /// it's `\`.
+  final String separator;
+
+  /// The [Pattern] that can be used to match a separator for a path in this
+  /// style. Windows allows both "/" and "\" as path separators even though
+  /// "\" is the canonical one.
+  final Pattern separatorPattern;
+
+  // TODO(nweiz): make this a Pattern when issue 7080 is fixed.
+  /// The [RegExp] that can be used to match the root prefix of an absolute
+  /// path in this style.
+  final RegExp _rootPattern;
+
+  /// Gets the root prefix of [path] if path is absolute. If [path] is relative,
+  /// returns `null`.
+  String getRoot(String path) {
+    var match = _rootPattern.firstMatch(path);
+    if (match == null) return null;
+    return match[0];
+  }
+
+  String toString() => name;
+}
+
+// TODO(rnystrom): Make this public?
+class _ParsedPath {
+  /// The [Style] that was used to parse this path.
+  Style style;
+
+  /// The absolute root portion of the path, or `null` if the path is relative.
+  /// On POSIX systems, this will be `null` or "/". On Windows, it can be
+  /// `null`, "//" for a UNC path, or something like "C:\" for paths with drive
+  /// letters.
+  String root;
+
+  /// The path-separated parts of the path. All but the last will be
+  /// directories.
+  List<String> parts;
+
+  /// The path separators following each part. The last one will be an empty
+  /// string unless the path ends with a trailing separator.
+  List<String> separators;
+
+  /// The file extension of the last part, or "" if it doesn't have one.
+  String get extension => _splitExtension()[1];
+
+  /// `true` if this is an absolute path.
+  bool get isAbsolute => root != null;
+
+  _ParsedPath(this.style, this.root, this.parts, this.separators);
+
+  String get basename {
+    var copy = this.clone();
+    copy.removeTrailingSeparators();
+    if (copy.parts.isEmpty) return root == null ? '' : root;
+    return copy.parts.last;
+  }
+
+  String get basenameWithoutExtension {
+    var copy = this.clone();
+    copy.removeTrailingSeparators();
+    if (copy.parts.isEmpty) return root == null ? '' : root;
+    return copy._splitExtension()[0];
+  }
+
+  void removeTrailingSeparators() {
+    while (!parts.isEmpty && parts.last == '') {
+      parts.removeLast();
+      separators.removeLast();
+    }
+    if (separators.length > 0) separators[separators.length - 1] = '';
+  }
+
+  void normalize() {
+    // Handle '.', '..', and empty parts.
+    var leadingDoubles = 0;
+    var newParts = [];
+    for (var part in parts) {
+      if (part == '.' || part == '') {
+        // Do nothing. Ignore it.
+      } else if (part == '..') {
+        // Pop the last part off.
+        if (newParts.length > 0) {
+          newParts.removeLast();
+        } else {
+          // Backed out past the beginning, so preserve the "..".
+          leadingDoubles++;
+        }
+      } else {
+        newParts.add(part);
+      }
+    }
+
+    // A relative path can back out from the start directory.
+    if (!isAbsolute) {
+      newParts.insertRange(0, leadingDoubles, '..');
+    }
+
+    // If we collapsed down to nothing, do ".".
+    if (newParts.length == 0 && !isAbsolute) {
+      newParts.add('.');
+    }
+
+    // Canonicalize separators.
+    var newSeparators = [];
+    newSeparators.insertRange(0, newParts.length, style.separator);
+
+    parts = newParts;
+    separators = newSeparators;
+
+    // Normalize the Windows root if needed.
+    if (root != null && style == Style.windows) {
+      root = root.replaceAll('/', '\\');
+    }
+    removeTrailingSeparators();
+  }
+
+  String toString() {
+    var builder = new StringBuffer();
+    if (root != null) builder.add(root);
+    for (var i = 0; i < parts.length; i++) {
+      builder.add(parts[i]);
+      builder.add(separators[i]);
+    }
+
+    return builder.toString();
+  }
+
+  /// Splits the last part of the path into a two-element list. The first is
+  /// the name of the file without any extension. The second is the extension
+  /// or "" if it has none.
+  List<String> _splitExtension() {
+    if (parts.isEmpty) return ['', ''];
+
+    var file = parts.last;
+    if (file == '..') return ['..', ''];
+
+    var lastDot = file.lastIndexOf('.');
+
+    // If there is no dot, or it's the first character, like '.bashrc', it
+    // doesn't count.
+    if (lastDot <= 0) return [file, ''];
+
+    return [file.substring(0, lastDot), file.substring(lastDot)];
+  }
+
+  _ParsedPath clone() => new _ParsedPath(
+      style, root, new List.from(parts), new List.from(separators));
+}
diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart
index 3f19eaa..3bcb9ee 100644
--- a/utils/apidoc/apidoc.dart
+++ b/utils/apidoc/apidoc.dart
@@ -95,14 +95,6 @@
   _diff = new HtmlDiff(printWarnings:false);
   _diff.run();
 
-  // Process handwritten HTML documentation.
-  print('Processing handwritten HTML documentation...');
-  final htmldoc = new Htmldoc();
-  htmldoc.includeApi = true;
-  htmldoc.documentLibraries(
-    <Path>[doc.scriptDir.append('../../tools/dom/doc/html.dartdoc')],
-    libPath, pkgPath);
-
   // Process libraries.
 
   // TODO(johnniwinther): Libraries for the compilation seem to be more like
@@ -138,7 +130,7 @@
 
   lister.onDone = (success) {
     print('Generating docs...');
-    final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache,
+    final apidoc = new Apidoc(mdn, outputDir, mode, generateAppCache,
         excludedLibraries);
     apidoc.dartdocPath =
         doc.scriptDir.append('../../sdk/lib/_internal/dartdoc/');
@@ -158,99 +150,10 @@
   };
 }
 
-/**
- * This class is purely here to scrape handwritten HTML documentation.
- * This scraped documentation will later be merged with the generated
- * HTML library.
- */
-class Htmldoc extends doc.Dartdoc {
-  doc.DocComment libraryComment;
-
-  /**
-   * Map from qualified type names to comments.
-   */
-  Map<String, doc.DocComment> typeComments;
-
-  /**
-   * Map from qualified member names to comments.
-   */
-  Map<String, doc.DocComment> memberComments;
-
-  Htmldoc() {
-    typeComments = new Map<String, doc.DocComment>();
-    memberComments = new Map<String, doc.DocComment>();
-  }
-
-  // Suppress any actual writing to file.  This is only for analysis.
-  void endFile() {
-  }
-
-  void write(String s) {
-  }
-
-  doc.DocComment getRecordedLibraryComment(LibraryMirror library) {
-    if (HTML_LIBRARY_NAMES.contains(doc.displayName(library))) {
-      return libraryComment;
-    }
-    return null;
-  }
-
-  doc.DocComment getRecordedTypeComment(TypeMirror type) {
-    if (typeComments.containsKey(type.qualifiedName)) {
-      return typeComments[type.qualifiedName];
-    }
-    return null;
-  }
-
-  doc.DocComment getRecordedMemberComment(MemberMirror member) {
-    if (memberComments.containsKey(member.qualifiedName)) {
-      return memberComments[member.qualifiedName];
-    }
-    return null;
-  }
-
-  // These methods are subclassed and used for internal processing.
-  // Do not invoke outside of this class.
-  doc.DocComment getLibraryComment(LibraryMirror library) {
-    doc.DocComment comment = super.getLibraryComment(library);
-    libraryComment = comment;
-    return comment;
-  }
-
-  doc.DocComment getTypeComment(TypeMirror type) {
-    doc.DocComment comment = super.getTypeComment(type);
-    recordTypeComment(type, comment);
-    return comment;
-  }
-
-  doc.DocComment getMemberComment(MemberMirror member) {
-    doc.DocComment comment = super.getMemberComment(member);
-    recordMemberComment(member, comment);
-    return comment;
-  }
-
-  void recordTypeComment(TypeMirror type, doc.DocComment comment) {
-    if (comment != null && comment.text.contains('@domName')) {
-      // This is not a handwritten comment.
-      return;
-    }
-    typeComments[type.qualifiedName] = comment;
-  }
-
-  void recordMemberComment(MemberMirror member, doc.DocComment comment) {
-    if (comment != null && comment.text.contains('@domName')) {
-      // This is not a handwritten comment.
-      return;
-    }
-    memberComments[member.qualifiedName] = comment;
-  }
-}
-
 class Apidoc extends doc.Dartdoc {
   /** Big ball of JSON containing the scraped MDN documentation. */
   final Map mdn;
 
-  final Htmldoc htmldoc;
 
   static const disqusShortname = 'dartapidocs';
 
@@ -267,7 +170,7 @@
    */
   String mdnUrl = null;
 
-  Apidoc(this.mdn, this.htmldoc, Path outputDir, int mode,
+  Apidoc(this.mdn, Path outputDir, int mode,
          bool generateAppCache, [excludedLibraries]) {
     if (?excludedLibraries) {
       this.excludedLibraries = excludedLibraries;
@@ -394,30 +297,21 @@
   }
 
   doc.DocComment getLibraryComment(LibraryMirror library) {
-    if (HTML_LIBRARY_NAMES.contains(doc.displayName(library))) {
-      return htmldoc.libraryComment;
-    }
     return super.getLibraryComment(library);
   }
 
   doc.DocComment getTypeComment(TypeMirror type) {
     return _mergeDocs(
-        includeMdnTypeComment(type), super.getTypeComment(type),
-        htmldoc.getRecordedTypeComment(type));
+        includeMdnTypeComment(type), super.getTypeComment(type));
   }
 
   doc.DocComment getMemberComment(MemberMirror member) {
     return _mergeDocs(
-        includeMdnMemberComment(member), super.getMemberComment(member),
-        htmldoc.getRecordedMemberComment(member));
+        includeMdnMemberComment(member), super.getMemberComment(member));
   }
 
   doc.DocComment _mergeDocs(MdnComment mdnComment,
-                            doc.DocComment fileComment,
-                            doc.DocComment handWrittenComment) {
-    // Prefer the hand-written comment first.
-    if (handWrittenComment != null) return handWrittenComment;
-
+                            doc.DocComment fileComment) {
     // Otherwise, prefer comment from the (possibly generated) Dart file.
     if (fileComment != null) return fileComment;
 
diff --git a/utils/apidoc/html_diff.dart b/utils/apidoc/html_diff.dart
index f39cb12..776ed1a 100644
--- a/utils/apidoc/html_diff.dart
+++ b/utils/apidoc/html_diff.dart
@@ -9,6 +9,8 @@
 library html_diff;
 
 import 'dart:io';
+import 'dart:async';
+import '../../sdk/lib/html/html_common/metadata.dart';
 
 // TODO(rnystrom): Use "package:" URL (#4968).
 import '../../sdk/lib/_internal/dartdoc/lib/dartdoc.dart';
@@ -33,38 +35,36 @@
  * based on two indicators:
  *
  *   1. Auto-detected wrappers. Most `dart:html` types correspond
- *      straightforwardly to a single `@domName` type, and
+ *      straightforwardly to a single `@DomName` type, and
  *      have the same name.  In addition, most `dart:html` methods
- *      just call a single `@domName` method. This class
+ *      just call a single `@DomName` method. This class
  *      detects these simple correspondences automatically.
  *
  *   2. Manual annotations. When it's not clear which
- *      `@domName` items a given `dart:html` item
+ *      `@DomName` items a given `dart:html` item
  *      corresponds to, the `dart:html` item can be annotated in the
- *      documentation comments using the `@domName` annotation.
+ *      documentation comments using the `@DomName` annotation.
  *
- * The `@domName` annotations for types and members are of the form
- * `@domName NAME(, NAME)*`, where the `NAME`s refer to the
- * `@domName` types/members that correspond to the
+ * The `@DomName` annotations for types and members are of the form
+ * `@DomName NAME(, NAME)*`, where the `NAME`s refer to the
+ * `@DomName` types/members that correspond to the
  * annotated `dart:html` type/member. `NAME`s on member annotations
  * can refer to either fully-qualified member names (e.g.
  * `Document.createElement`) or unqualified member names
  * (e.g. `createElement`).  Unqualified member names are assumed to
- * refer to members of one of the corresponding `@domName`
+ * refer to members of one of the corresponding `@DomName`
  * types.
  */
 class HtmlDiff {
   /**
    * A map from `dart:html` members to the corresponding fully qualified
-   * `@domName` member(s).
+   * `@DomName` member(s).
    */
   final Map<String, Set<String>> htmlToDom;
 
-  /** A map from `dart:html` types to corresponding `@domName` types. */
+  /** A map from `dart:html` types to corresponding `@DomName` types. */
   final Map<String, Set<String>> htmlTypesToDom;
 
-  final CommentMap comments;
-
   /** If true, then print warning messages. */
   final bool _printWarnings;
 
@@ -88,8 +88,7 @@
   HtmlDiff({bool printWarnings: false}) :
     _printWarnings = printWarnings,
     htmlToDom = new Map<String, Set<String>>(),
-    htmlTypesToDom = new Map<String, Set<String>>(),
-    comments = new CommentMap();
+    htmlTypesToDom = new Map<String, Set<String>>();
 
   void warn(String s) {
     if (_printWarnings) {
@@ -98,7 +97,7 @@
   }
 
   /**
-   * Computes the `@domName` to `dart:html` mapping, and
+   * Computes the `@DomName` to `dart:html` mapping, and
    * places it in [htmlToDom] and [htmlTypesToDom]. Before this is run, dart2js
    * should be initialized (via [parseOptions] and [initializeWorld]) and
    * [HtmlDiff.initialize] should be called.
@@ -124,9 +123,9 @@
   }
 
   /**
-   * Records the `@domName` to `dart:html` mapping for
+   * Records the `@DomName` to `dart:html` mapping for
    * [htmlMember] (from `dart:html`). [domTypes] are the
-   * `@domName` type values that correspond to [htmlMember]'s
+   * `@DomName` type values that correspond to [htmlMember]'s
    * defining type.
    */
   void _addMemberDiff(MemberMirror htmlMember, List<String> domTypes,
@@ -146,18 +145,21 @@
   }
 
   /**
-   * Returns the `@domName` type values that correspond to
+   * Returns the `@DomName` type values that correspond to
    * [htmlType] from `dart:html`. This can be the empty list if no
    * correspondence is found.
    */
   List<String> htmlToDomTypes(ClassMirror htmlType) {
-    if (htmlType.simpleName == null) return [];
-    final tags = _getTags(comments.find(htmlType.location));
-    if (tags.containsKey('domName')) {
+    if (htmlType.simpleName == null) return <String>[];
+
+    final domNameMetadata = _findMetadata(htmlType.metadata, 'DomName');
+    if (domNameMetadata != null) {
       var domNames = <String>[];
-      for (var s in tags['domName'].split(',')) {
+      var tags = deprecatedFutureValue(domNameMetadata.getField('name'));
+      for (var s in tags.reflectee.split(',')) {
         domNames.add(s.trim());
       }
+
       if (domNames.length == 1 && domNames[0] == 'none') return <String>[];
       return domNames;
     }
@@ -165,20 +167,23 @@
   }
 
   /**
-   * Returns the `@domName` member values that correspond to
+   * Returns the `@DomName` member values that correspond to
    * [htmlMember] from `dart:html`. This can be the empty set if no
    * correspondence is found.  [domTypes] are the
-   * `@domName` type values that correspond to [htmlMember]'s
+   * `@DomName` type values that correspond to [htmlMember]'s
    * defining type.
    */
   Set<String> htmlToDomMembers(MemberMirror htmlMember, List<String> domTypes) {
     if (htmlMember.isPrivate) return new Set();
-    final tags = _getTags(comments.find(htmlMember.location));
-    if (tags.containsKey('domName')) {
+
+    final domNameMetadata = _findMetadata(htmlMember.metadata, 'DomName');
+    if (domNameMetadata != null) {
       var domNames = <String>[];
-      for (var s in tags['domName'].split(',')) {
+      var tags = deprecatedFutureValue(domNameMetadata.getField('name'));
+      for (var s in tags.reflectee.split(',')) {
         domNames.add(s.trim());
       }
+
       if (domNames.length == 1 && domNames[0] == 'none') return new Set();
       final members = new Set();
       domNames.forEach((name) {
@@ -204,12 +209,12 @@
   }
 
   /**
-   * Returns the `@domName` strings that are indicated by
+   * Returns the `@DomName` strings that are indicated by
    * [name]. [name] can be either an unqualified member name
    * (e.g. `createElement`), in which case it's treated as the name of
    * a member of one of [defaultTypes], or a fully-qualified member
    * name (e.g. `Document.createElement`), in which case it's treated as a
-   * member of the @domName element (`Document` in this case).
+   * member of the @DomName element (`Document` in this case).
    */
   Set<String> _membersFromName(String name, List<String> defaultTypes) {
     if (!name.contains('.', 0)) {
@@ -229,21 +234,11 @@
     return new Set.from([name]);
   }
 
-  /**
-   * Extracts a [Map] from tag names to values from [comment], which is parsed
-   * from a Dart source file via dartdoc. Tags are of the form `@NAME VALUE`,
-   * where `NAME` is alphabetic and `VALUE` can contain any character other than
-   * `;`. Multiple tags can be separated by semicolons.
-   *
-   * At time of writing, the only tag that's used is `@domName`.
-   */
-  Map<String, String> _getTags(String comment) {
-    if (comment == null) return const <String, String>{};
-    final re = new RegExp("@([a-zA-Z]+) ([^;]+)(?:;|\$)");
-    final tags = <String, String>{};
-    for (var m in re.allMatches(comment.trim())) {
-      tags[m[1]] = m[2];
-    }
-    return tags;
-  }
+}
+
+/// Returns the metadata for the given string or null if not found.
+InstanceMirror _findMetadata(List<InstanceMirror> metadataList, String find) {
+  return metadataList.firstMatching(
+      (metadata) => metadata.type.simpleName == find,
+      orElse: () => null);
 }
diff --git a/utils/archive/Makefile b/utils/archive/Makefile
deleted file mode 100644
index 6e1892c..0000000
--- a/utils/archive/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# TODO(nweiz): replace this with a .gypi file
-
-CC = gcc
-CFLAGS = -fPIC -m32 -I ../../runtime/include/ -g
-LDFLAGS = -shared -m32 -g -larchive -Wl,-soname,libdart_archive.so
-
-all: libdart_archive.so
-
-libdart_archive.so: dart_archive.o entry.o messaging.o reader.o
-	$(CC) $(LDFLAGS) -o $@ dart_archive.o entry.o messaging.o reader.o
-
-dart_archive.o: dart_archive.c dart_archive.h
-	$(CC) $(CFLAGS) -c $<
-
-entry.o: entry.c entry.h messaging.h dart_archive.h
-	$(CC) $(CFLAGS) -c $<
-
-messaging.o: messaging.c messaging.h dart_archive.h
-	$(CC) $(CFLAGS) -c $<
-
-reader.o: reader.c reader.h entry.h messaging.h dart_archive.h
-	$(CC) $(CFLAGS) -c $<
diff --git a/utils/archive/archive.dart b/utils/archive/archive.dart
deleted file mode 100644
index 48fab29..0000000
--- a/utils/archive/archive.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * The primary library file for the archive library. This is the only file that
- * should be imported by clients.
- */
-library archive;
-
-import 'entry.dart' as entry;
-import 'reader.dart' as reader;
-
-// TODO(nweiz): Remove this when 3071 is fixed.
-/** An error raised by the archive library. */
-abstract class ArchiveException {
-  /** A description of the error that occurred. */
-  final String message;
-
-  /** The error code for the error, or null. */
-  final int errno;
-}
-
-// TODO(nweiz): Remove this when 3071 is fixed.
-/** See [reader.ArchiveReader]. */
-class ArchiveReader extends reader.ArchiveReader {}
-
-// TODO(nweiz): Remove this when 3071 is fixed.
-/** See [entry.ArchiveEntry]. */
-class ArchiveEntry extends entry.ArchiveEntry {
-  ArchiveEntry.internal(List properties, int archiveId)
-    : super.internal(properties, archiveId);
-
-  /** Create a new [ArchiveEntry] with default values for all of its fields. */
-  static Future<ArchiveEntry> create() => entry.ArchiveEntry.create();
-}
diff --git a/utils/archive/dart_archive.c b/utils/archive/dart_archive.c
deleted file mode 100644
index da284a6..0000000
--- a/utils/archive/dart_archive.c
+++ /dev/null
@@ -1,415 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include <assert.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "dart_archive.h"
-#include "entry.h"
-#include "messaging.h"
-#include "reader.h"
-
-/** The enumeration of request types for communicating with Dart. */
-enum RequestType {
-  kArchiveReadNew = 0,
-  kArchiveReadSupportFilterAll,
-  kArchiveReadSupportFilterBzip2,
-  kArchiveReadSupportFilterCompress,
-  kArchiveReadSupportFilterGzip,
-  kArchiveReadSupportFilterLzma,
-  kArchiveReadSupportFilterXz,
-  kArchiveReadSupportFilterProgram,
-  kArchiveReadSupportFilterProgramSignature,
-  kArchiveReadSupportFormatAll,
-  kArchiveReadSupportFormatAr,
-  kArchiveReadSupportFormatCpio,
-  kArchiveReadSupportFormatEmpty,
-  kArchiveReadSupportFormatIso9660,
-  kArchiveReadSupportFormatMtree,
-  kArchiveReadSupportFormatRaw,
-  kArchiveReadSupportFormatTar,
-  kArchiveReadSupportFormatZip,
-  kArchiveReadSetFilterOption,
-  kArchiveReadSetFormatOption,
-  kArchiveReadSetOption,
-  kArchiveReadOpenFilename,
-  kArchiveReadOpenMemory,
-  kArchiveReadNextHeader,
-  kArchiveReadDataBlock,
-  kArchiveReadDataSkip,
-  kArchiveReadClose,
-  kArchiveReadFree,
-  kArchiveEntryClone,
-  kArchiveEntryFree,
-  kArchiveEntryNew,
-  kArchiveEntrySetHardlink,
-  kArchiveEntrySetPathname,
-  kArchiveEntrySetSymlink,
-  kArchiveEntrySetGid,
-  kArchiveEntrySetUid,
-  kArchiveEntrySetPerm,
-  kArchiveEntrySetGname,
-  kArchiveEntrySetUname,
-  kArchiveEntrySetFflagsSet,
-  kArchiveEntrySetFflagsClear,
-  kArchiveEntrySetFflagsText,
-  kArchiveEntrySetFiletype,
-  kArchiveEntrySetMode,
-  kArchiveEntrySetSize,
-  kArchiveEntrySetDev,
-  kArchiveEntrySetDevmajor,
-  kArchiveEntrySetDevminor,
-  kArchiveEntrySetIno,
-  kArchiveEntrySetNlink,
-  kArchiveEntrySetRdev,
-  kArchiveEntrySetRdevmajor,
-  kArchiveEntrySetRdevminor,
-  kArchiveEntrySetAtime,
-  kArchiveEntrySetBirthtime,
-  kArchiveEntrySetCtime,
-  kArchiveEntrySetMtime,
-  kNumberOfRequestTypes
-};
-
-/**
- * Dispatches a message from Dart to its native function equivalent.
- *
- * In addition to matching up a message with its respective function, this
- * parses out the standard archive struct argument from the message and resolves
- * it to an actual pointer to an archive struct.
- */
-static void archiveDispatch(Dart_Port dest_port_id,
-                            Dart_Port reply_port_id,
-                            Dart_CObject* message) {
-  if (message->type != kArray) {
-    postInvalidArgument(reply_port_id, "Message was not an array.");
-    return;
-  } else if (message->value.as_array.length < 2) {
-    postInvalidArgument(reply_port_id, "Message array had %d elements, " \
-      "expected at least 2.", message->value.as_array.length);
-    return;
-  }
-
-  Dart_CObject* wrapped_request_type = message->value.as_array.values[0];
-  if (wrapped_request_type->type != kInt32) {
-    postInvalidArgument(reply_port_id, "Invalid request type %d.",
-      wrapped_request_type->type);
-    return;
-  }
-  enum RequestType request_type = wrapped_request_type->value.as_int32;
-
-  Dart_CObject* id = message->value.as_array.values[1];
-  void* ptr;
-  if (id->type == kNull) {
-    ptr = NULL;
-  } else if (id->type == kInt64 || id->type == kInt32) {
-    ptr = (void*) (intptr_t) getInteger(id);
-  } else {
-    postInvalidArgument(reply_port_id, "Invalid id type %d.", id->type);
-    return;
-  }
-
-  switch (request_type) {
-  case kArchiveReadNew:
-    archiveReadNew(reply_port_id);
-    break;
-  case kArchiveReadSupportFilterAll:
-    archiveReadSupportFilterAll(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFilterBzip2:
-    archiveReadSupportFilterBzip2(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFilterCompress:
-    archiveReadSupportFilterCompress(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFilterGzip:
-    archiveReadSupportFilterGzip(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFilterLzma:
-    archiveReadSupportFilterLzma(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFilterXz:
-    archiveReadSupportFilterXz(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFilterProgram:
-    archiveReadSupportFilterProgram(
-      reply_port_id, (struct archive*) ptr, message);
-    break;
-  case kArchiveReadSupportFilterProgramSignature:
-    archiveReadSupportFilterProgramSignature(
-        reply_port_id, (struct archive*) ptr, message);
-    break;
-  case kArchiveReadSupportFormatAll:
-    archiveReadSupportFormatAll(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatAr:
-    archiveReadSupportFormatAr(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatCpio:
-    archiveReadSupportFormatCpio(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatEmpty:
-    archiveReadSupportFormatEmpty(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatIso9660:
-    archiveReadSupportFormatIso9660(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatMtree:
-    archiveReadSupportFormatMtree(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatRaw:
-    archiveReadSupportFormatRaw(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatTar:
-    archiveReadSupportFormatTar(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSupportFormatZip:
-    archiveReadSupportFormatZip(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadSetFilterOption:
-    archiveReadSetFilterOption(reply_port_id, (struct archive*) ptr, message);
-    break;
-  case kArchiveReadSetFormatOption:
-    archiveReadSetFormatOption(reply_port_id, (struct archive*) ptr, message);
-    break;
-  case kArchiveReadSetOption:
-    archiveReadSetOption(reply_port_id, (struct archive*) ptr, message);
-    break;
-  case kArchiveReadOpenFilename:
-    archiveReadOpenFilename(reply_port_id, (struct archive*) ptr, message);
-    break;
-  case kArchiveReadOpenMemory:
-    archiveReadOpenMemory(reply_port_id, (struct archive*) ptr, message);
-    break;
-  case kArchiveReadNextHeader:
-    archiveReadNextHeader(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadDataBlock:
-    archiveReadDataBlock(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadDataSkip:
-    archiveReadDataSkip(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadClose:
-    archiveReadClose(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveReadFree:
-    archiveReadFree(reply_port_id, (struct archive*) ptr);
-    break;
-  case kArchiveEntryClone:
-    archiveEntryClone(reply_port_id, (struct archive_entry*) ptr);
-    break;
-  case kArchiveEntryFree:
-    archiveEntryFree(reply_port_id, (struct archive_entry*) ptr);
-    break;
-  case kArchiveEntryNew:
-    archiveEntryNew(reply_port_id);
-    break;
-  case kArchiveEntrySetHardlink:
-    archiveEntrySetHardlink(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetPathname:
-    archiveEntrySetPathname(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetSymlink:
-    archiveEntrySetSymlink(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetGid:
-    archiveEntrySetGid(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetUid:
-    archiveEntrySetUid(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetPerm:
-    archiveEntrySetPerm(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetGname:
-    archiveEntrySetGname(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetUname:
-    archiveEntrySetUname(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetFflagsSet:
-    archiveEntrySetFflagsSet(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetFflagsClear:
-    archiveEntrySetFflagsClear(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetFiletype:
-    archiveEntrySetFiletype(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetMode:
-    archiveEntrySetMode(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetSize:
-    archiveEntrySetSize(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetDev:
-    archiveEntrySetDev(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetDevmajor:
-    archiveEntrySetDevmajor(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetDevminor:
-    archiveEntrySetDevminor(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetIno:
-    archiveEntrySetIno(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetNlink:
-    archiveEntrySetNlink(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetRdev:
-    archiveEntrySetRdev(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetRdevmajor:
-    archiveEntrySetRdevmajor(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetRdevminor:
-    archiveEntrySetRdevminor(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetAtime:
-    archiveEntrySetAtime(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetBirthtime:
-    archiveEntrySetBirthtime(
-        reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetCtime:
-    archiveEntrySetCtime(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  case kArchiveEntrySetMtime:
-    archiveEntrySetMtime(reply_port_id, (struct archive_entry*) ptr, message);
-    break;
-  default:
-    postInvalidArgument(reply_port_id, "Invalid request id %d.", request_type);
-    break;
-  }
-}
-
-/**
- * Checks if [handle] represents an error and, if so, propagates it to Dart.
- * Otherwise, returns [handle].
- */
-static Dart_Handle handleError(Dart_Handle handle) {
-  if (Dart_IsError(handle)) Dart_PropagateError(handle);
-  return handle;
-}
-
-/**
- * A function exposed to Dart that creates a [ServicePort] for two-way
- * communication between Dart and C.
- *
- * Takes no arguments and returns a [ServicePort].
- */
-static void archiveServicePort(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  Dart_SetReturnValue(arguments, Dart_Null());
-  Dart_Port service_port =
-      Dart_NewNativePort("ArchiveService", archiveDispatch, false);
-  if (service_port != ILLEGAL_PORT) {
-    Dart_Handle send_port = handleError(Dart_NewSendPort(service_port));
-    Dart_SetReturnValue(arguments, send_port);
-  }
-  Dart_ExitScope();
-}
-
-/**
- * The C callback that runs the Dart finalizer for an object. Set up by
- * [attachDartFinalizer]. [handle] is the object that's been collected, and
- * [peerPtr] is a Dart list containing the callback and its argument.
- */
-static void runDartFinalizer(Dart_Handle handle, void* peerPtr) {
-  Dart_EnterScope();
-  Dart_Handle wrappedPeer = (Dart_Handle) peerPtr;
-  Dart_Handle callback = handleError(Dart_ListGetAt(wrappedPeer, 0));
-  Dart_Handle peer = handleError(Dart_ListGetAt(wrappedPeer, 1));
-
-  handleError(Dart_InvokeClosure(callback, 1, &peer));
-  Dart_DeletePersistentHandle(wrappedPeer);
-  Dart_ExitScope();
-}
-
-/**
- * Attaches a finalizer callback to a Dart object.
- *
- * This takes a Dart object, a callback function, and an argument to pass to the
- * callback function. The callback will be called with the given argument some
- * time after the object has been garbage collected.
- */
-static void attachDartFinalizer(Dart_NativeArguments arguments) {
-  Dart_EnterScope();
-  Dart_SetReturnValue(arguments, Dart_Null());
-  Dart_Handle object = handleError(Dart_GetNativeArgument(arguments, 0));
-  Dart_Handle callback = handleError(Dart_GetNativeArgument(arguments, 1));
-  Dart_Handle peer = handleError(Dart_GetNativeArgument(arguments, 2));
-
-  Dart_Handle wrappedPeer = handleError(Dart_NewList(2));
-  handleError(Dart_ListSetAt(wrappedPeer, 0, callback));
-  handleError(Dart_ListSetAt(wrappedPeer, 1, peer));
-  wrappedPeer = handleError(Dart_NewPersistentHandle(wrappedPeer));
-
-  handleError(Dart_NewWeakPersistentHandle(
-      object, wrappedPeer, runDartFinalizer));
-  Dart_ExitScope();
-}
-
-/**
- * A struct representing a function exposed to Dart and the name under which it
- * can be looked up.
- */
-struct FunctionLookup {
-  const char* name;
-  Dart_NativeFunction function;
-};
-
-/** The list of functions exposed to Dart. */
-struct FunctionLookup function_list[] = {
-  {"Archive_ServicePort", archiveServicePort},
-  {"Archive_AttachFinalizer", attachDartFinalizer},
-  {NULL, NULL}
-};
-
-/**
- * Resolves a Dart name as provided in a `native` declaration and returns the
- * C function that should be invoked for that name.
- */
-static Dart_NativeFunction resolveName(Dart_Handle name, int argc) {
-  if (!Dart_IsString8(name)) return NULL;
-  Dart_EnterScope();
-  const char* cname;
-  handleError(Dart_StringToCString(name, &cname));
-
-  Dart_NativeFunction result = NULL;
-  int i;
-  for (i = 0; function_list[i].name != NULL; ++i) {
-    if (strcmp(function_list[i].name, cname) == 0) {
-      result = function_list[i].function;
-      break;
-    }
-  }
-  Dart_ExitScope();
-  return result;
-}
-
-/** Initializes the C extension. */
-DART_EXPORT Dart_Handle dart_archive_Init(Dart_Handle parent_library) {
-  if (Dart_IsError(parent_library)) return parent_library;
-
-  Dart_Handle result_code = Dart_SetNativeResolver(parent_library, resolveName);
-  if (Dart_IsError(result_code)) return result_code;
-
-  return Dart_Null();
-}
diff --git a/utils/archive/dart_archive.h b/utils/archive/dart_archive.h
deleted file mode 100644
index 67bb916..0000000
--- a/utils/archive/dart_archive.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef DART_ARCHIVE_H_
-#define DART_ARCHIVE_H_
-
-#include "dart_api.h"
-#include "archive.h"
-#include "archive_entry.h"
-
-#endif  // DART_ARCHIVE_H_
diff --git a/utils/archive/entry.c b/utils/archive/entry.c
deleted file mode 100644
index 81cc018..0000000
--- a/utils/archive/entry.c
+++ /dev/null
@@ -1,376 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "entry.h"
-#include "messaging.h"
-
-#define DART_TIMESTAMP(name)                                      \
-  Dart_CObject name;                                              \
-  if (archive_entry_ ## name ## _is_set(e)) {                     \
-    int64_t seconds = archive_entry_ ## name(e);                  \
-    int64_t nanoseconds = archive_entry_ ## name ## _nsec(e);     \
-    name.type = kInt64;                                           \
-    name.value.as_int64 = seconds * 1000 + nanoseconds / 1000000; \
-  } else {                                                        \
-    name.type = kNull;                                            \
-  }
-
-#define RAW_ARCHIVE_SIZE 29
-
-void postArchiveEntryArray(Dart_Port p, struct archive_entry* e) {
-  if (checkPointerError(p, e, "archive entry")) return;
-
-  Dart_CObject* archive_entry_array[RAW_ARCHIVE_SIZE];
-
-  DART_INT64(id, (intptr_t) e);
-  archive_entry_array[0] = &id;
-
-  // archive_entry_paths(3)
-  DART_STRING(hardlink, (char*) archive_entry_hardlink(e));
-  archive_entry_array[1] = &hardlink;
-  DART_STRING(pathname, (char*) archive_entry_pathname(e));
-  archive_entry_array[2] = &pathname;
-  DART_STRING(sourcepath, (char*) archive_entry_sourcepath(e));
-  archive_entry_array[3] = &sourcepath;
-  DART_STRING(symlink, (char*) archive_entry_symlink(e));
-  archive_entry_array[4] = &symlink;
-
-  // archive_entry_perms(3)
-  DART_INT32(gid, archive_entry_gid(e));
-  archive_entry_array[5] = &gid;
-  DART_INT32(uid, archive_entry_uid(e));
-  archive_entry_array[6] = &uid;
-  DART_INT32(perm, archive_entry_perm(e));
-  archive_entry_array[7] = &perm;
-  DART_STRING(strmode, (char*) archive_entry_strmode(e));
-  archive_entry_array[8] = &strmode;
-  DART_STRING(gname, (char*) archive_entry_gname(e));
-  archive_entry_array[9] = &gname;
-  DART_STRING(uname, (char*) archive_entry_uname(e));
-  archive_entry_array[10] = &uname;
-
-  unsigned long fflags_set;
-  unsigned long fflags_clear;
-  archive_entry_fflags(e, &fflags_set, &fflags_clear);
-  DART_INT64(wrapped_fflags_set, fflags_set);
-  archive_entry_array[11] = &wrapped_fflags_set;
-  DART_INT64(wrapped_fflags_clear, fflags_clear);
-  archive_entry_array[12] = &wrapped_fflags_clear;
-
-  DART_STRING(fflags_text, (char*) archive_entry_fflags_text(e));
-  archive_entry_array[13] = &fflags_text;
-
-  // archive_entry_stat(3)
-  DART_INT32(filetype, archive_entry_filetype(e));
-  archive_entry_array[14] = &filetype;
-  DART_INT32(mode, archive_entry_mode(e));
-  archive_entry_array[15] = &mode;
-
-  Dart_CObject size;
-  if (archive_entry_size_is_set(e)) {
-    size.type = kInt64;
-    size.value.as_int64 = archive_entry_size(e);
-  } else {
-    size.type = kNull;
-  }
-  archive_entry_array[16] = &size;
-
-  Dart_CObject dev;
-  if (archive_entry_dev_is_set(e)) {
-    dev.type = kInt64;
-    dev.value.as_int64 = archive_entry_dev(e);
-  } else {
-    dev.type = kNull;
-  }
-  archive_entry_array[17] = &dev;
-
-  DART_INT64(devmajor, archive_entry_devmajor(e));
-  archive_entry_array[18] = &devmajor;
-  DART_INT64(devminor, archive_entry_devminor(e));
-  archive_entry_array[19] = &devminor;
-
-  Dart_CObject ino;
-  if (archive_entry_ino_is_set(e)) {
-    ino.type = kInt64;
-    ino.value.as_int64 = archive_entry_ino64(e);
-  } else {
-    ino.type = kNull;
-  }
-  archive_entry_array[20] = &ino;
-
-  DART_INT64(nlink, archive_entry_nlink(e));
-  archive_entry_array[21] = &nlink;
-  DART_INT64(rdev, archive_entry_rdev(e));
-  archive_entry_array[22] = &rdev;
-  DART_INT64(rdevmajor, archive_entry_rdevmajor(e));
-  archive_entry_array[23] = &rdevmajor;
-  DART_INT64(rdevminor, archive_entry_rdevminor(e));
-  archive_entry_array[24] = &rdevminor;
-
-  // archive_entry_time(3)
-  DART_TIMESTAMP(atime);
-  archive_entry_array[25] = &atime;
-  DART_TIMESTAMP(birthtime);
-  archive_entry_array[26] = &birthtime;
-  DART_TIMESTAMP(ctime);
-  archive_entry_array[27] = &ctime;
-  DART_TIMESTAMP(mtime);
-  archive_entry_array[28] = &mtime;
-  // If you add entries, don't forget to increase RAW_ARCHIVE_SIZE.
-
-  Dart_CObject wrapped_archive_entry;
-  wrapped_archive_entry.type = kArray;
-  wrapped_archive_entry.value.as_array.values = archive_entry_array;
-  wrapped_archive_entry.value.as_array.length = RAW_ARCHIVE_SIZE;
-
-  postSuccess(p, &wrapped_archive_entry);
-}
-
-void archiveEntryClone(Dart_Port p, struct archive_entry* e) {
-  postArchiveEntryArray(p, archive_entry_clone(e));
-}
-
-void archiveEntryFree(Dart_Port p, struct archive_entry* e) {
-  archive_entry_free(e);
-  postSuccess(p, NULL);
-}
-
-void archiveEntryNew(Dart_Port p) {
-  postArchiveEntryArray(p, archive_entry_new());
-}
-
-void archiveEntrySetHardlink(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getNullableStringArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_hardlink(e, getNullableString(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetPathname(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getNullableStringArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_pathname(e, getNullableString(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetSymlink(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getNullableStringArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_symlink(e, getNullableString(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetGid(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_gid(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetUid(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_uid(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetPerm(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_perm(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetGname(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getNullableStringArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_update_gname_utf8(e, getNullableString(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetUname(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getNullableStringArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_update_uname_utf8(e, getNullableString(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetFflagsSet(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_fflags(e, getInteger(value), 0);
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetFflagsClear(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_fflags(e, 0, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetFiletype(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_filetype(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetMode(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_mode(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetSize(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  if (request->type == kNull) {
-    archive_entry_unset_size(e);
-    postSuccess(p, NULL);
-    return;
-  }
-
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_size(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetDev(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_dev(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetDevmajor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_devmajor(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetDevminor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_devminor(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetIno(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_ino64(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetNlink(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_nlink(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetRdev(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_rdev(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetRdevmajor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_rdevmajor(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetRdevminor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  archive_entry_set_rdevminor(e, getInteger(value));
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetAtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  if (request->type == kNull) {
-    archive_entry_unset_atime(e);
-    postSuccess(p, NULL);
-    return;
-  }
-
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  int64_t atime = getInteger(value);
-  archive_entry_set_atime(e, atime / 1000, (atime % 1000) * 1000000);
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetBirthtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  if (request->type == kNull) {
-    archive_entry_unset_birthtime(e);
-    postSuccess(p, NULL);
-    return;
-  }
-
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  int64_t birthtime = getInteger(value);
-  archive_entry_set_birthtime(
-      e, birthtime / 1000, (birthtime % 1000) * 1000000);
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetCtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  if (request->type == kNull) {
-    archive_entry_unset_ctime(e);
-    postSuccess(p, NULL);
-    return;
-  }
-
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  int64_t ctime = getInteger(value);
-  archive_entry_set_ctime(e, ctime / 1000, (ctime % 1000) * 1000000);
-  postSuccess(p, NULL);
-}
-
-void archiveEntrySetMtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request) {
-  if (request->type == kNull) {
-    archive_entry_unset_mtime(e);
-    postSuccess(p, NULL);
-    return;
-  }
-
-  Dart_CObject* value = getIntArgument(p, request, 0);
-  if (value == NULL) return;
-  int64_t mtime = getInteger(value);
-  archive_entry_set_mtime(e, mtime / 1000, (mtime % 1000) * 1000000);
-  postSuccess(p, NULL);
-}
diff --git a/utils/archive/entry.dart b/utils/archive/entry.dart
deleted file mode 100644
index f851959..0000000
--- a/utils/archive/entry.dart
+++ /dev/null
@@ -1,337 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library entry;
-
-import 'dart:io';
-import 'archive.dart' as archive;
-import 'entry_request.dart';
-import 'read_request.dart' as read;
-import 'utils.dart';
-
-/**
- * A single file in an archive.
- *
- * This is accessible via [ArchiveInputStream.onEntry].
- */
-class ArchiveEntry {
-  /**
-   * The various properties of this archive entry, as sent over from the C
-   * extension.
-   */
-  final List _properties;
-
-  /**
-   * The id of the archive to which this entry belongs. Used to read the entry
-   * data. This will be set to null once there's no longer data available to be
-   * read for this entry.
-   */
-  int _archiveId;
-
-  /**
-   * The input stream being used to read data from this entry. This is null
-   * until [openInputStream] is called.
-   */
-  InputStream _input;
-
-  // TODO(nweiz): Get rid of this once issue 4202 is fixed.
-  /**
-   * A future that only exists once [openInputStream] is called, and completes
-   * once the input stream is closed.
-   *
-   * For internal use only.
-   */
-  Future inputComplete;
-
-  ArchiveEntry.internal(this._properties, this._archiveId) {
-    attachFinalizer(this, (id) => call(FREE, id), _id);
-  }
-
-  /** Create a new [ArchiveEntry] with default values for all of its fields. */
-  static Future<ArchiveEntry> create() {
-    return call(NEW).then((properties) {
-      return new archive.ArchiveEntry.internal(properties, null);
-    });
-  }
-
-  /** The id of the underlying archive entry. */
-  int get _id => _properties[0];
-
-  /** If this entry is a hardlink, this is the destination. Otherwise, null. */
-  String get hardlink => _properties[1];
-  set hardlink(String value) => _set(SET_HARDLINK, 1, value);
-
-  /** The path to this entry in the archive. */
-  String get pathname => _properties[2];
-  set pathname(String value) => _set(SET_PATHNAME, 2, value);
-
-  /** The path to this entry on disk, */
-  String get sourcepath => _properties[3];
-
-  /** If this entry is a symlink, this is the destination. Otherwise, null. */
-  String get symlink => _properties[4];
-  set symlink(String value) => _set(SET_SYMLINK, 4, value);
-
-  /** The group identifier for this entry. */
-  int get gid => _properties[5];
-  set gid(int value) => _set(SET_GID, 5, value);
-
-  /** The user identifier for this entry. */
-  int get uid => _properties[6];
-  set uid(int value) => _set(SET_UID, 6, value);
-
-  /** The permissions bitmask for this entry. */
-  int get perm_mask => _properties[7];
-  set perm_mask(int value) => _set(SET_PERM, 7, value);
-
-  /**
-   * The String representation of the permissions for this entry.
-   *
-   * Note that if you set [perm_mask], this value will not change.
-   */
-  String get strmode => _properties[8];
-
-  /** The name of the group this entry belongs to. */
-  String get gname => _properties[9];
-  set gname(String value) => _set(SET_GNAME, 9, value);
-
-  /** The name of the user this entry belongs to. */
-  String get uname => _properties[10];
-  set uname(String value) => _set(SET_UNAME, 10, value);
-
-  /**
-   * The file flag bits that should be set for this entry.
-   *
-   * Note that if you set [fflags_text], this value will not change, and vice
-   * versa.
-   */
-  int get fflags_set => _properties[11];
-  set fflags_set(int value) => _set(SET_FFLAGS_SET, 11, value);
-
-  /**
-   * The file flag bits that should be cleared for this entry.
-   *
-   * Note that if you set [fflags_text], this value will not change, and vice
-   * versa.
-   */
-  int get fflags_clear => _properties[12];
-  set fflags_clear(int value) => _set(SET_FFLAGS_CLEAR, 12, value);
-
-  /**
-   * The textual representation of the file flags for this entry.
-   *
-   * Note that if you set [fflags_set] or [fflags_clear], this value will not
-   * change, and vice versa.
-   */
-  String get fflags_text => _properties[13];
-
-  /** The filetype bitmask for this entry. */
-  int get filetype_mask => _properties[14];
-  set filetype_mask(int value) => _set(SET_FILETYPE, 14, value);
-
-  /** The filetype and permissions bitmask for this entry. */
-  int get mode_mask => _properties[15];
-  set mode_mask(int value) => _set(SET_MODE, 15, value);
-
-  /** The size of this entry in bytes, or null if it's unset. */
-  int get size => _properties[16];
-  set size(int value) => _set(SET_SIZE, 16, value);
-
-  /** The ID of the device containing this entry, or null if it's unset. */
-  int get dev => _properties[17];
-  set dev(int value) => _set(SET_DEV, 17, value);
-
-  /** The major number of the ID of the device containing this entry. */
-  int get devmajor => _properties[18];
-  set devmajor(int value) => _set(SET_DEVMAJOR, 18, value);
-
-  /** The minor number of the ID of the device containing this entry. */
-  int get devminor => _properties[19];
-  set devminor(int value) => _set(SET_DEVMINOR, 19, value);
-
-  /** The inode number of this entry, or null if it's unset. */
-  int get ino => _properties[20];
-  set ino(int value) => _set(SET_INO, 20, value);
-
-  /** The number of references to this entry. */
-  int get nlink => _properties[21];
-  set nlink(int value) => _set(SET_NLINK, 21, value);
-
-  /** The device ID of this entry. */
-  int get rdev => _properties[22];
-  set rdev(int value) => _set(SET_RDEV, 22, value);
-
-  /** The major number of the device ID of this entry. */
-  int get rdevmajor => _properties[23];
-  set rdevmajor(int value) => _set(SET_RDEVMAJOR, 23, value);
-
-  /** The minor number of the device ID of this entry. */
-  int get rdevminor => _properties[24];
-  set rdevminor(int value) => _set(SET_RDEVMINOR, 24, value);
-
-  /** The last time this entry was accessed, or null if it's unset. */
-  Date get atime => _fromMs(_properties[25]);
-  set atime(Date value) => _set(SET_ATIME, 25, _toMs(value));
-
-  /** The time this entry was created, or null if it's unset. */
-  Date get birthtime => _fromMs(_properties[26]);
-  set birthtime(Date value) => _set(SET_BIRTHTIME, 26, _toMs(value));
-
-  /**
-   * The last time an inode property of this entry was changed, or null if it's
-   * unset.
-   */
-  Date get ctime => _fromMs(_properties[27]);
-  set ctime(Date value) => _set(SET_CTIME, 27, _toMs(value));
-
-  /** The last time this entry was modified, or null if it's unset. */
-  Date get mtime => _fromMs(_properties[28]);
-  set mtime(Date value) => _set(SET_MTIME, 28, _toMs(value));
-
-  /** Whether [openInputStream] has been called. */
-  bool get isInputOpen => _input != null;
-
-  /** Create a deep copy of this [ArchiveEntry]. */
-  Future<ArchiveEntry> clone() {
-    return call(CLONE, _id).
-      transform((array) => new archive.ArchiveEntry.internal(array, null));
-  }
-
-  /**
-   * Consumes the entire contents of this entry at once and returns it wrapped
-   * in a [CompleteArchiveEntry]. All metadata fields in the returned entry are
-   * copies of the fields in this entry.
-   *
-   * This may not be called if [openInputStream] is called, and vice versa.
-   */
-  Future<CompleteArchiveEntry> readAll() {
-    var stream = openInputStream();
-    var buffer = <int>[];
-    var completer = new Completer<List<int>>();
-
-    stream.onData = () => buffer.addAll(stream.read());
-    stream.onError = completer.completeError;
-    stream.onClosed = () => completer.complete(buffer);
-
-    return Future.wait([call(CLONE, _id), completer.future])
-      .then((list) => new CompleteArchiveEntry._(list[0], list[1]));
-  }
-
-  /**
-   * Set a property value with index [value] on the local representation of the
-   * archive entry and on the native representation.
-   */
-  void _set(int requestType, int index, value) {
-    _properties[index] = value;
-    // Since the native code processes messages in order, the SET_* messages
-    // will be received and processed before any further messages.
-    call(requestType, _id, [value]).then((_) {});
-  }
-
-  /**
-   * Converts [ms], the (possibly null) number of milliseconds since the epoch
-   * into a Date object (which may also be null).
-   */
-  Date _fromMs(int ms) {
-    if (ms == null) return null;
-    return new Date.fromMillisecondsSinceEpoch(ms);
-  }
-
-  /**
-   * Converts [date], which may be null, into the number of milliseconds since
-   * the epoch (which may also be null).
-   */
-  int _toMs(Date date) {
-    if (date == null) return null;
-    return date.millisecondsSinceEpoch;
-  }
-
-  /**
-   * Creates a new input stream for reading the contents of this entry.
-   *
-   * The contents of an entry must be consumed before the next entry is read
-   * from the parent [ArchiveInputStream]. This means that [openInputStream]
-   * must be called from the [ArchiveInputStream.onEntry] callback, or before
-   * the future returned by that callback completes. Once the next entry has
-   * been read, calling [openInputStream] will throw an [ArchiveException].
-   *
-   * Only one input stream may be opened per entry.
-   */
-  InputStream openInputStream() {
-    if (_archiveId == null) {
-      throw new UnsupportedError("Cannot open input stream for "
-          "archive entry $pathname.");
-    } else if (_input != null) {
-      throw new UnsupportedError("An input stream has already been"
-          "opened for archive entry $pathname.");
-    }
-
-    var inputCompleter = new Completer();
-    inputComplete = inputCompleter.future;
-
-    _input = new ListInputStream();
-    // TODO(nweiz): Report errors once issue 3657 is fixed
-    var future = _consumeInput().then((_) {
-      if (!_input.closed) _input.markEndOfStream();
-      // Asynchronously complete to give the InputStream callbacks a chance to
-      // fire.
-      return async();
-    }).then((_) => inputCompleter.complete(null));
-
-    future.handleException((e) {
-      print(e);
-      print(future.stackTrace);
-    });
-    return _input;
-  }
-
-  /**
-   * Close this entry so that its input stream no longer produces data.
-   *
-   * In addition to closing the associated input stream, this will prevent new
-   * input streams from being opened.
-   */
-  void close() {
-    _archiveId = null;
-    if (_input != null) _input.close();
-  }
-
-  /**
-   * Read all data from the archive and write it to [_input]. Returns a future
-   * that completes once this is done.
-   *
-   * This assumes that both [_input] and [_archiveId] are non-null and that
-   * [_input] is open, although if that changes before this completes it will
-   * handle it gracefully.
-   */
-  Future _consumeInput() {
-    var data;
-    return call(read.DATA_BLOCK, _archiveId).then((_data) {
-      data = _data;
-      // TODO(nweiz): This async() call is only necessary because of issue 4222.
-      return async();
-    }).then((_) {
-      if (_input.closed || _archiveId == null || data == null) {
-        return new Future.immediate(null);
-      }
-      _input.write(data);
-      return _consumeInput();
-    });
-  }
-}
-
-/**
- * An [ArchiveEntry] that contains the complete decompressed contents of the
- * file.
- */
-class CompleteArchiveEntry extends ArchiveEntry {
-  /** The contents of the entry as bytes. */
-  final List<int> contentBytes;
-
-  /** The contents of the entry as a string. */
-  String get contents => new String.fromCharCodes(contentBytes);
-
-  CompleteArchiveEntry._(List properties, this.contentBytes)
-    : super.internal(properties, null);
-}
diff --git a/utils/archive/entry.h b/utils/archive/entry.h
deleted file mode 100644
index a3b2562..0000000
--- a/utils/archive/entry.h
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * This file declares request-handling functions for handling archive entries.
- * Each function is called when a message is received with the corresponding
- * request type, and posts a success or error response to the reply port.
- *
- * There is a close correspondence between most functions here and the
- * libarchive API. It's left up to the Dart code to present a more Darty API. As
- * such, documentation of these functions is omitted, since it's available in
- * the libarchive documentation.
- */
-#ifndef DART_ARCHIVE_ENTRY_H_
-#define DART_ARCHIVE_ENTRY_H_
-
-#include "dart_archive.h"
-
-/**
- * Posts a response containing all the data in archive entry [e]. If [e] is
- * `NULL`, posts an error response instead.
- */
-void postArchiveEntryArray(Dart_Port p, struct archive_entry* e);
-
-void archiveEntryClone(Dart_Port p, struct archive_entry* e);
-
-void archiveEntryFree(Dart_Port p, struct archive_entry* e);
-
-void archiveEntryNew(Dart_Port p);
-
-void archiveEntrySetHardlink(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetPathname(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetSourcepath(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetSymlink(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetGid(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetUid(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetPerm(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetGname(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetUname(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetFflagsSet(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetFflagsClear(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetFflagsText(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetFiletype(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetMode(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetSize(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetDev(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetDevmajor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetDevminor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetIno(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetNlink(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetRdev(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetRdevmajor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetRdevminor(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetAtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetBirthtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetCtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-void archiveEntrySetMtime(Dart_Port p, struct archive_entry* e,
-    Dart_CObject* request);
-
-#endif  // DART_ARCHIVE_MESSAGING_H_
-
diff --git a/utils/archive/entry_request.dart b/utils/archive/entry_request.dart
deleted file mode 100644
index 5aab778..0000000
--- a/utils/archive/entry_request.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/** The request ids for entry-related messages to send to the C extension. */
-library entry_request;
-
-import 'read_request.dart' as read;
-
-final int _first = read.LAST;
-
-final int CLONE = _first + 1;
-final int FREE = _first + 2;
-final int NEW = _first + 3;
-final int SET_HARDLINK = _first + 4;
-final int SET_PATHNAME = _first + 5;
-final int SET_SYMLINK = _first + 6;
-final int SET_GID = _first + 7;
-final int SET_UID = _first + 8;
-final int SET_PERM_MASK = _first + 9;
-final int SET_GNAME = _first + 10;
-final int SET_UNAME = _first + 11;
-final int SET_FFLAGS_SET = _first + 12;
-final int SET_FFLAGS_CLEAR = _first + 13;
-final int SET_FILETYPE_MASK = _first + 14;
-final int SET_MODE_MASK = _first + 15;
-final int SET_SIZE = _first + 16;
-final int SET_DEV = _first + 17;
-final int SET_DEVMAJOR = _first + 18;
-final int SET_DEVMINOR = _first + 19;
-final int SET_INO = _first + 20;
-final int SET_NLINK = _first + 21;
-final int SET_RDEV = _first + 22;
-final int SET_RDEVMAJOR = _first + 23;
-final int SET_RDEVMINOR = _first + 24;
-final int SET_ATIME = _first + 25;
-final int SET_BIRTHTIME = _first + 26;
-final int SET_CTIME = _first + 27;
-final int SET_MTIME = _first + 28;
-
-final int LAST = SET_MTIME;
diff --git a/utils/archive/input_stream.dart b/utils/archive/input_stream.dart
deleted file mode 100644
index b71be44..0000000
--- a/utils/archive/input_stream.dart
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library input_stream;
-
-import 'archive.dart' as archive;
-import 'entry.dart';
-import 'read_request.dart';
-import 'utils.dart';
-
-/**
- * A stream of [ArchiveEntry]s being read from an archive.
- *
- * This is accessible via [ArchiveReader].
- */
-class ArchiveInputStream {
-  /**
-   * The id of the underlying archive.
-   *
-   * This will be set to null once the input stream has finished reading from
-   * the archive.
-   */
-  final Reference<int> _id;
-
-  /** A [Completer] that will fire once the [_onEntry] callback is set. */
-  final Completer<Function> _onEntryCompleter;
-
-  /** The callback to call when the input stream is closed. */
-  Function _onClosed;
-
-  /** The callback to call when an error occurs. */
-  Function _onError;
-
-  /** The entry that is currently eligible to read data from the archive. */
-  ArchiveEntry _currentEntry;
-
-  ArchiveInputStream(int id)
-    : _id = new Reference<int>(id),
-      _onEntryCompleter = new Completer<Function>() {
-    var future = _consumeHeaders();
-    future.handleException((e) {
-      if (_onError != null) {
-        _onError(e, future.stackTrace);
-        return true;
-      } else {
-        throw e;
-      }
-    });
-
-    future.then((_) {
-      close();
-      if (_onClosed != null) _onClosed();
-    });
-
-    attachFinalizer(this, (id) {
-      if (id.value != null) call(FREE, id.value).then(() {});
-    }, _id);
-  }
-
-  /** Whether this stream has finished reading entries. */
-  bool get closed => _id.value == null;
-
-  /**
-   * Reads the entire contents of the archive at once.
-   *
-   * Note that this is mutually exclusive with reading individual entries using
-   * [onEntry].
-   */
-  Future<List<CompleteArchiveEntry>> readAll() {
-    var completer = new Completer<List<Future<CompleteArchiveEntry>>>();
-    var result = <Future<CompleteArchiveEntry>>[];
-
-    this.onEntry = (entry) => result.add(entry.readAll());
-    this.onError = (e, stack) => completer.completeError(e, stack);
-    this.onClosed = () => completer.complete(result);
-
-    return completer.future.then(Future.wait);
-  }
-
-  /**
-   * Sets a callback to call when a new entry is read from the archive.
-   *
-   * The [ArchiveEntry] that's read from an archive initially only contains
-   * header information such as the filename and permissions. To get the actual
-   * data contained in the entry, use [ArchiveEntry.openInputStream].
-   *
-   * Since the entries are read in sequence from the archive, the data stream
-   * for one entry must be opened before the next entry is read from the
-   * archive. The next entry will not be read until the return value of
-   * [callback] has completed.
-   *
-   * If [callback] calls [ArchiveEntry.openInputStream] before it returns, or if
-   * it doesn't want to read the contents of [entry], it can return null.
-   */
-  void set onEntry(Future callback(ArchiveEntry entry)) {
-    _onEntryCompleter.complete(callback);
-  }
-
-  /**
-   * Sets a callback to call when the input stream is done emitting entries.
-   */
-  void set onClosed(void callback()) {
-    _onClosed = callback;
-  }
-
-  /**
-   * Sets a callback to call if an error occurs while extracting the archive.
-   *
-   * [e] is the error that occured and [stack] is the stack trace of the error.
-   */
-  void set onError(void callback(e, stack)) {
-    _onError = callback;
-  }
-
-  /**
-   * Closes the input stream. No more entries will be emitted.
-   */
-  void close() {
-    if (closed) return;
-    call(FREE, _id.value).then((_) {});
-    _id.value = null;
-    if (_currentEntry != null) _currentEntry.close();
-    if (!_onEntryCompleter.future.isComplete) _onEntryCompleter.complete(null);
-  }
-
-  /**
-   * Consumes and emits all [ArchiveEntries] in this archive.
-   */
-  Future _consumeHeaders() {
-    if (closed) return new Future.immediate(null);
-    var data;
-    return call(NEXT_HEADER, _id.value).then((_data) {
-      data = _data;
-      if (data == null) return new Future.immediate(null);
-      return _emit(new archive.ArchiveEntry.internal(data, _id.value)).
-        then((_) => _consumeHeaders());
-    });
-  }
-
-  /**
-   * Emits [entry] to the [onEntry] callback. Returns a [Future] that will
-   * complete once the callback's return value completes and the entry's data
-   * has been fully consumed.
-   */
-  Future _emit(ArchiveEntry entry) {
-    _currentEntry = entry;
-    var future = _onEntryCompleter.future.then((onEntry) {
-      if (closed) return new Future.immediate(null);
-      var result = onEntry(entry);
-      if (result is Future) return result;
-      return new Future.immediate(null);
-    }).then((_) {
-      if (entry.isInputOpen) return entry.inputComplete;
-      return new Future.immediate(null);
-    }).whenComplete(() {
-      _currentEntry = null;
-      entry.close();
-    });
-    return future;
-  }
-}
diff --git a/utils/archive/messaging.c b/utils/archive/messaging.c
deleted file mode 100644
index bbfb8f8..0000000
--- a/utils/archive/messaging.c
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include <errno.h>
-#include <stdarg.h>
-
-#include "messaging.h"
-
-void postResult(Dart_Port p, bool success, int err, Dart_CObject* response) {
-  DART_BOOL(wrapped_success, success);
-  DART_INT32(wrapped_err, err);
-  
-  Dart_CObject* values[3];
-  values[0] = &wrapped_success;
-  values[1] = &wrapped_err;
-  values[2] = response;
-
-  Dart_CObject full_response;
-  full_response.type = kArray;
-  full_response.value.as_array.values = values;
-  full_response.value.as_array.length = 3;
-
-  Dart_PostCObject(p, &full_response);
-}
-
-void postError(Dart_Port p, struct archive* a) {
-  DART_STRING(error_string, (char*) archive_error_string(a));
-  postResult(p, false, archive_errno(a), &error_string);
-}
-
-void postInvalidArgument(Dart_Port p, const char* format, ...) {
-  va_list args;
-  char buffer[256];
-
-  va_start(args, format);
-  vsnprintf(buffer, 256, format, args);
-  va_end(args);
-
-  DART_STRING(error_string, buffer);
-  postResult(p, false, EINVAL, &error_string);
-}
-
-void postSuccess(Dart_Port p, Dart_CObject* response) {
-  if (response != NULL) {
-    postResult(p, true, 0, response);
-    return;
-  }
-
-  DART_NULL(null_response);
-  postResult(p, true, 0, &null_response);
-}
-
-bool checkError(Dart_Port p, struct archive* a, int result) {
-  if (result == ARCHIVE_OK) return false;
-  // TODO(nweiz): What should we do about non-fatal warnings?
-  if (result == ARCHIVE_WARN) return false;
-  postError(p, a);
-  return true;
-}
-
-bool checkPointerError(Dart_Port p, void* pointer, char* name) {
-  if (pointer != NULL) return false;
-  char buffer[100];
-  snprintf(buffer, 100, "Failed to allocate memory for %s.", name);
-  DART_STRING(error_string, buffer);
-  postResult(p, false, ENOMEM, &error_string);
-  return true;
-}
-
-bool checkType(Dart_Port p, Dart_CObject* object, enum Type type) {
-  if (object->type == type) return false;
-  postInvalidArgument(p, "Invalid argument: expected type %d, was type %d.",
-    type, object->type);
-  return true;
-}
-
-void checkResult(Dart_Port p, struct archive* a, int result) {
-  if (checkError(p, a, result)) return;
-  postSuccess(p, NULL);
-}
-
-void checkPointerResult(Dart_Port p, void* pointer, char* name) {
-  if (checkPointerError(p, pointer, name)) return;
-  DART_INT64(result, (intptr_t) pointer);
-  postSuccess(p, &result);
-}
-
-Dart_CObject* getArgument(Dart_Port p, Dart_CObject* request, int i) {
-  if (checkType(p, request, kArray)) return NULL;
-
-  i += 2; // Skip over the message name and archive id.
-  if (request->value.as_array.length > i) {
-    return request->value.as_array.values[i];
-  }
-
-  postInvalidArgument(p, "Invalid argument: expected at least %d arguments, " \
-    "were %d.", i - 2, request->value.as_array.length - 2);
-  return NULL;
-}
-
-Dart_CObject* getTypedArgument(Dart_Port p, Dart_CObject* request, int i,
-                               enum Type type) {
-  Dart_CObject* arg = getArgument(p, request, i);
-  if (arg == NULL) return NULL;
-  if (checkType(p, arg, type)) return NULL;
-  return arg;
-}
-
-Dart_CObject* getIntArgument(Dart_Port p, Dart_CObject* request, int i) {
-  Dart_CObject* arg = getArgument(p, request, i);
-  if (arg == NULL) return NULL;
-  if (arg->type == kInt64) return arg;
-  if (arg->type == kInt32) return arg;
-  postInvalidArgument(p, "Invalid argument %d: expected integer, was type %d.",
-    i+1, arg->type);
-  return NULL;
-}
-
-int64_t getInteger(Dart_CObject* object) {
-  assert(object->type == kInt64 || object->type == kInt32);
-  if (object->type == kInt64) return object->value.as_int64;
-  if (object->type == kInt32) return (int64_t) object->value.as_int32;
-  return 0; // Should never reach this point.
-}
-
-Dart_CObject* getNullableStringArgument(Dart_Port p, Dart_CObject* request,
-    int i) {
-  Dart_CObject* arg = getArgument(p, request, i);
-  if (arg == NULL) return NULL;
-  if (arg->type == kNull) return arg;
-  if (arg->type == kString) return arg;
-  postInvalidArgument(p, "Invalid argument %d: expected string or null, was " \
-    "type %d.", i+1, arg->type);
-  return NULL;
-}
-
-char* getNullableString(Dart_CObject* object) {
-  assert(object->type == kNull || object->type == kString);
-  if (object->type == kString) return object->value.as_string;
-  return NULL;
-}
-
-bool getOptionArguments(Dart_Port p, Dart_CObject* request, char** module,
-    char** name, char** value) {
-  *module = NULL;
-  *name = NULL;
-  *value = NULL;
-
-  Dart_CObject* wrappedModule = getNullableStringArgument(p, request, 0);
-  if (wrappedModule == NULL) return false;
-  *module = getNullableString(wrappedModule);
-
-  Dart_CObject* wrappedName = getTypedArgument(p, request, 0, kString);
-  if (wrappedName == NULL) return false;
-  *name = wrappedName->value.as_string;
-
-  Dart_CObject* wrappedValue = getNullableStringArgument(p, request, 0);
-  if (wrappedValue == NULL) return false;
-  *value = getNullableString(wrappedValue);
-
-  return true;
-}
-
diff --git a/utils/archive/messaging.h b/utils/archive/messaging.h
deleted file mode 100644
index bce0692..0000000
--- a/utils/archive/messaging.h
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef DART_ARCHIVE_MESSAGING_H_
-#define DART_ARCHIVE_MESSAGING_H_
-
-#include "dart_archive.h"
-
-/**
- * Posts a reponse to the main Dart isolate. Only one response should be sent
- * for each request.
- *
- * [p] is the reply port for the isolate. [success] indicates whether or not the
- * request completed successfully; if not, [err] indicates the precise nature of
- * the error. [response] contains request-specific response data to send to
- * Dart; it may not be `NULL`, but it may be the Dart `null` value.
- */
-void postResult(Dart_Port p, bool success, int err, Dart_CObject* response);
-
-/**
- * Posts an error response to the main Dart isolate.
- *
- * This should be used when libarchive signals an error. The errno and error
- * message are taken from libarchive's built-in error information for [a].
- */
-void postError(Dart_Port p, struct archive* a);
-
-/**
- * Posts an invalid argument error response to the main Dart isolate.
- *
- * This should be used when the arguments sent by the Dart code have unexpected
- * types. Takes a `printf`-style [format] string for describing the error. Note
- * that the error string will be cut off at 256 characters.
- */
-void postInvalidArgument(Dart_Port p, const char* format, ...);
-
-/**
- * Posts a success response to the main Dart isolate. [response] is the
- * request-specific Dart object containing the response data. It may be `NULL`.
- */
-void postSuccess(Dart_Port p, Dart_CObject* response);
-
-/**
- * Checks [error], the return code of a libarchive call for error conditions,
- * and sends an appropriate error response if any are detected.
- * 
- * Returns `true` if an error is detected and the containing function should
- * short-circuit.
- */
-bool checkError(Dart_Port p, struct archive* a, int result);
-
-/**
- * Sends an error response if [pointer] is invalid. [name] is the name of the
- * object being allocated, for error reporting.
- * 
- * Returns `true` if an error is detected and the containing function should
- * short-circuit.
- */
-bool checkPointerError(Dart_Port p, void* pointer, char* name);
-
-/**
- * Like [checkError], but sends a success message with no attached data if no
- * error is detected. No further responses should be sent after calling this.
- */
-void checkResult(Dart_Port p, struct archive* a, int result);
-
-/**
- * Like [checkPointerError], but sends a success message with the pointer as a
- * Dart integer if no error is detected. No further responses should be sent
- * after calling this.
- */
-void checkPointerResult(Dart_Port p, void* pointer, char* name);
-
-/**
- * Checks that [object] is of the expected type [type]. If not, sends an
- * appropriate error response.
- *
- * Returns `true` if a type error is detected and the containing function should
- * short-circuit.
- */
-bool checkType(Dart_Port p, Dart_CObject* object, enum Type type);
-
-/**
- * Gets the [i]th argument from [request], which should be the Dart object
- * passed in to each handler function. If this fails (e.g. there isn't an [i]th
- * argument), it will return `NULL`.
- */
-Dart_CObject* getArgument(Dart_Port p, Dart_CObject* request, int i);
-
-/**
- * Like [getArgument], but also ensures that the argument is of type [type].
- */
-Dart_CObject* getTypedArgument(Dart_Port p, Dart_CObject* request, int i,
-                               enum Type type);
-
-/**
- * Like [getArgument], but also ensures that the argument is an integer type
- * (`int32` or `int64`). [getInteger] should be used to extract the actual value
- * of the argument.
- */
-Dart_CObject* getIntArgument(Dart_Port p, Dart_CObject* request, int i);
-
-/**
- * Gets the integer value of [object], which should be an `int32` or an `int64`.
- * Note that this does not validate the type of its argument.
- */
-int64_t getInteger(Dart_CObject* object);
-
-/**
- * Like [getArgument], but also ensures that the argument is a string or null.
- * [getNullableString] should be used to extract the actual value of the
- * argument.
- */
-Dart_CObject* getNullableStringArgument(Dart_Port p, Dart_CObject* request,
-    int i);
-
-/**
- * Gets the string value of [object] or `NULL` if it's null. Note that this does
- * not validate the type of its argument.
- */
-char* getNullableString(Dart_CObject* object);
-
-/**
- * Gets the module, name, and value, for a libarchive `set_option` function
- * call. Returns whether or not the arguments were parsed correctly.
- */
-bool getOptionArguments(Dart_Port p, Dart_CObject* request, char** module,
-    char** name, char** value);
-
-/** Declares a null [Dart_CObject] named [name]. */
-#define DART_NULL(name) \
-  Dart_CObject name;    \
-  name.type = kNull;
-
-/**
- * Declares a [Dart_CObject] bool named [name] with value [val].
- *
- * [val] should be a C boolean.
- */
-#define DART_BOOL(name, val) \
-  Dart_CObject name;         \
-  name.type = kBool;         \
-  name.value.as_bool = val;
-
-/**
- * Declares a [Dart_CObject] `int32` named [name] with value [val].
- *
- * [val] should be a C integer.
- */
-#define DART_INT32(name, val) \
-  Dart_CObject name;          \
-  name.type = kInt32;         \
-  name.value.as_int32 = val;
-
-/**
- * Declares a [Dart_CObject] `int64` named [name] with value [val].
- *
- * [val] should be a C integer.
- */
-#define DART_INT64(name, val) \
-  Dart_CObject name;          \
-  name.type = kInt64;         \
-  name.value.as_int64 = val;
-
-/**
- * Declares a [Dart_CObject] double named [name] with value [val].
- *
- * [val] should be a C float.
- */
-#define DART_DOUBLE(name, val) \
-  Dart_CObject name;           \
-  name.type = kDouble;         \
-  name.value.as_double = val;
-
-/**
- * Declares a [Dart_CObject] string named [name] with value [val].
- *
- * [val] should be a C string or `NULL`.
- */
-#define DART_STRING(name, val)  \
-  Dart_CObject name;            \
-  if (val == NULL) {            \
-    name.type = kNull;          \
-  } else {                      \
-    name.type = kString;        \
-    name.value.as_string = val; \
-  }
-
-#endif  // DART_ARCHIVE_MESSAGING_H_
diff --git a/utils/archive/options.dart b/utils/archive/options.dart
deleted file mode 100644
index cfebf1f..0000000
--- a/utils/archive/options.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library options;
-
-/**
- * An individual option.
- */
-class ArchiveOption {
-  /** The name of the option. */
-  final String name;
-
-  /** The value of the option. */
-  final value;
-
-  /** The module to which the option applies.*/
-  String module;
-
-  ArchiveOption(this.name, this.value, [this.module]);
-}
-
-/**
- * A collection of options.
- */
-class ArchiveOptions {
-  /** The internal options map. */
-  final Map<String, ArchiveOption> _options;
-
-  ArchiveOptions() : _options = <String, ArchiveOption>{};
-
-  /** Returns whether any options have been set. */
-  bool get isEmpty => _options.isEmpty;
-
-  /**
-   * Sets an option. [value] should either be a bool or something with a
-   * reasonable `toString` method.
-   *
-   * To set the module for an option, use [operator[]].
-   */
-  void operator[]=(String name, value) {
-    _options[name] = new ArchiveOption(name, value);
-  }
-
-  /** Gets the option with the given name. */
-  ArchiveOption operator[](String name) {
-    return _options[name];
-  }
-
-  /** Gets all options. */
-  List<ArchiveOption> get all => _options.values.toList();
-}
diff --git a/utils/archive/read_request.dart b/utils/archive/read_request.dart
deleted file mode 100644
index 33efdbc..0000000
--- a/utils/archive/read_request.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/** The request ids for read-related messages to send to the C extension. */
-library read_request;
-
-final int NEW = 0;
-final int SUPPORT_FILTER_ALL = 1;
-final int SUPPORT_FILTER_BZIP2 = 2;
-final int SUPPORT_FILTER_COMPRESS = 3;
-final int SUPPORT_FILTER_GZIP = 4;
-final int SUPPORT_FILTER_LZMA = 5;
-final int SUPPORT_FILTER_XZ = 6;
-final int SUPPORT_FILTER_PROGRAM = 7;
-final int SUPPORT_FILTER_PROGRAM_SIGNATURE = 8;
-final int SUPPORT_FORMAT_ALL = 9;
-final int SUPPORT_FORMAT_AR = 10;
-final int SUPPORT_FORMAT_CPIO = 11;
-final int SUPPORT_FORMAT_EMPTY = 12;
-final int SUPPORT_FORMAT_ISO9660 = 13;
-final int SUPPORT_FORMAT_MTREE = 14;
-final int SUPPORT_FORMAT_RAW = 15;
-final int SUPPORT_FORMAT_TAR = 16;
-final int SUPPORT_FORMAT_ZIP = 17;
-final int SET_FILTER_OPTION = 18;
-final int SET_FORMAT_OPTION = 19;
-final int SET_OPTION = 20;
-final int OPEN_FILENAME = 21;
-final int OPEN_MEMORY = 22;
-final int NEXT_HEADER = 23;
-final int DATA_BLOCK = 24;
-final int DATA_SKIP = 25;
-final int CLOSE = 26;
-final int FREE = 27;
-
-final int LAST = FREE;
diff --git a/utils/archive/reader.c b/utils/archive/reader.c
deleted file mode 100644
index 00a7db3..0000000
--- a/utils/archive/reader.c
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "entry.h"
-#include "messaging.h"
-#include "reader.h"
-
-void archiveReadNew(Dart_Port p) {
-  checkPointerResult(p, archive_read_new(), "archive input stream");
-}
-
-void archiveReadSupportFilterAll(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_filter_all(a));
-}
-
-void archiveReadSupportFilterBzip2(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_filter_bzip2(a));
-}
-
-void archiveReadSupportFilterCompress(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_filter_compress(a));
-}
-
-void archiveReadSupportFilterGzip(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_filter_gzip(a));
-}
-
-void archiveReadSupportFilterLzma(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_filter_lzma(a));
-}
-
-void archiveReadSupportFilterXz(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_filter_xz(a));
-}
-
-void archiveReadSupportFilterProgram(Dart_Port p, struct archive* a,
-                                     Dart_CObject* request) {
-  Dart_CObject* cmd = getTypedArgument(p, request, 0, kString);
-  if (cmd == NULL) return;
-  int result = archive_read_support_filter_program(
-      a, cmd->value.as_string);
-  checkResult(p, a, result);
-}
-
-void archiveReadSupportFilterProgramSignature(
-    Dart_Port p, struct archive* a, Dart_CObject* request) {
-  Dart_CObject* cmd = getTypedArgument(p, request, 0, kString);
-  if (cmd == NULL) return;
-
-  Dart_CObject* signature = getTypedArgument(p, request, 1, kUint8Array);
-  if (cmd == NULL) return;
-
-  int result = archive_read_support_filter_program_signature(
-      a, cmd->value.as_string, signature->value.as_byte_array.values,
-      signature->value.as_byte_array.length);
-  checkResult(p, a, result);
-}
-
-void archiveReadSupportFormatAll(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_all(a));
-}
-
-void archiveReadSupportFormatAr(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_ar(a));
-}
-
-void archiveReadSupportFormatCpio(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_cpio(a));
-}
-
-void archiveReadSupportFormatEmpty(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_empty(a));
-}
-
-void archiveReadSupportFormatIso9660(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_iso9660(a));
-}
-
-void archiveReadSupportFormatMtree(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_mtree(a));
-}
-
-void archiveReadSupportFormatRaw(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_raw(a));
-}
-
-void archiveReadSupportFormatTar(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_tar(a));
-}
-
-void archiveReadSupportFormatZip(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_support_format_zip(a));
-}
-
-void archiveReadSetFilterOption(Dart_Port p, struct archive* a,
-                                Dart_CObject* request) {
-  char* module;
-  char* name;
-  char* value;
-
-  getOptionArguments(p, request, &module, &name, &value);
-  int result = archive_read_set_filter_option(a, module, name, value);
-  checkResult(p, a, result);
-}
-
-void archiveReadSetFormatOptions(Dart_Port p, struct archive* a,
-                                 Dart_CObject* request) {
-  char* module;
-  char* name;
-  char* value;
-
-  getOptionArguments(p, request, &module, &name, &value);
-  int result = archive_read_set_format_option(a, module, name, value);
-  checkResult(p, a, result);
-}
-
-void archiveReadSetOptions(Dart_Port p, struct archive* a,
-                           Dart_CObject* request) {
-  char* module;
-  char* name;
-  char* value;
-
-  getOptionArguments(p, request, &module, &name, &value);
-  int result = archive_read_set_option(a, module, name, value);
-  checkResult(p, a, result);
-}
-
-// TODO(nweiz): wrap archive_read_open2
-// TODO(nweiz): wrap archive_read_FILE when issue 4160 is fixed
-
-void archiveReadOpenFilename(Dart_Port p, struct archive* a,
-                             Dart_CObject* request) {
-  Dart_CObject* filename = getTypedArgument(p, request, 0, kString);
-  if (filename == NULL) return;
-
-  Dart_CObject* block_size = getIntArgument(p, request, 1);
-  if (block_size == NULL) return;
-
-  int result = archive_read_open_filename(a, filename->value.as_string,
-                                          getInteger(block_size));
-  checkResult(p, a, result);
-}
-
-void archiveReadOpenMemory(Dart_Port p, struct archive* a,
-                           Dart_CObject* request) {
-  Dart_CObject* filename = getTypedArgument(p, request, 0, kUint8Array);
-  if (filename == NULL) return;
-
-  int result = archive_read_open_memory(a, filename->value.as_byte_array.values,
-                                        filename->value.as_byte_array.length);
-  checkResult(p, a, result);
-}
-
-void archiveReadNextHeader(Dart_Port p, struct archive* a) {
-  // TODO(nweiz): At some point, we'll want to attach the actual archive pointer
-  // to the struct we send to Dart so that it can later be modified, passed in
-  // to other functions, etc. When we do so, we'll need to use archive_entry_new
-  // to create it and we'll have to attach a finalizer to the Dart object to
-  // ensure that it gets freed.
-  struct archive_entry* entry = archive_entry_new();
-  if (checkPointerError(p, entry, "archive entry")) return;
-
-  int result = archive_read_next_header2(a, entry);
-  if (result == ARCHIVE_EOF) {
-    postSuccess(p, NULL);
-    archive_entry_free(entry);
-  } else if (checkError(p, a, result)) {
-    archive_entry_free(entry);
-  } else {
-    postArchiveEntryArray(p, entry);
-  }
-}
-
-void archiveReadDataBlock(Dart_Port p, struct archive* a) {
-  const void* buffer;
-  size_t len;
-  int64_t offset;
-  int result = archive_read_data_block(a, &buffer, &len, &offset);
-  if (result == ARCHIVE_EOF) {
-    postSuccess(p, NULL);
-    return;
-  }
-  if (checkError(p, a, result)) return;
-
-  Dart_CObject wrapped_data_block;
-  wrapped_data_block.type = kUint8Array;
-  wrapped_data_block.value.as_byte_array.length = len;
-  wrapped_data_block.value.as_byte_array.values = (void*) buffer + offset;
-  postSuccess(p, &wrapped_data_block);
-}
-
-void archiveReadDataSkip(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_data_skip(a));
-}
-
-// TODO(nweiz): wrap archive_read_into_fd when issue 4160 is fixed
-// TODO(nweiz): wrap archive_read_extract and friends
-
-void archiveReadClose(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_close(a));
-}
-
-void archiveReadFree(Dart_Port p, struct archive* a) {
-  checkResult(p, a, archive_read_free(a));
-}
diff --git a/utils/archive/reader.dart b/utils/archive/reader.dart
deleted file mode 100644
index f1bf6d5..0000000
--- a/utils/archive/reader.dart
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library reader;
-
-import 'input_stream.dart';
-import 'options.dart';
-import 'read_request.dart';
-import 'utils.dart';
-
-/**
- * A class for extracting and decompressing an archive.
- *
- * Each instance of this class represents a specific set of options for
- * extracting an archive. These options can be used to create multiple input
- * streams using the [reader.ArchiveReader.openFilename] and
- * [reader.ArchiveReader.openMemory] methods.
- *
- * Before opening an archive, this needs to be configured. [filter] should be
- * used to enable specific decompression algorithms, and [format] should be used
- * to enable specific archive formats.
- */
-class ArchiveReader {
-  /**
-   * The configuration for the filter(s) to use when decompressing the contents
-   * of an archive. The precise compression used is auto-detected from among all
-   * enabled options.
-   */
-  final Filter filter;
-
-  /**
-   * The configuration for the archive format(s) to look for when extracting the
-   * contents of an archive. The format used is auto-detected from among all
-   * enabled options.
-   */
-  final Format format;
-
-  /**
-   * Options for both [filter] and [format]. See [the libarchive
-   * documentation][wiki] for a list of available options.
-   *
-   * [wiki]: https://github.com/libarchive/libarchive/wiki/ManPageArchiveReadSetOptions3
-   */
-  final ArchiveOptions options;
-
-  /** Creates a new, unconfigured archive reader. */
-  ArchiveReader() : filter = new Filter._(),
-                    format = new Format._(),
-                    options = new ArchiveOptions();
-
-  /**
-   * Begins extracting from [file].
-   *
-   * [block_size] only needs to be specified for reading from devices that
-   * require strict I/O blocking.
-   */
-  Future<ArchiveInputStream> openFilename(String file, [int block_size=16384]) {
-    var id;
-    return _createArchive().then((_id) {
-      id = _id;
-      return call(OPEN_FILENAME, id, [file, block_size]);
-    }).then((_) => new ArchiveInputStream(id));
-  }
-
-  /** Begins extracting from [data], which should be a list of bytes. */
-  Future<ArchiveInputStream> openData(List<int> data) {
-    var id;
-    return _createArchive().then((_id) {
-      id = _id;
-      return call(OPEN_MEMORY, id, [bytesForC(data)]);
-    }).then((_) => new ArchiveInputStream(id));
-  }
-
-  /**
-   * Creates an archive struct, applies all the configuration options to it, and
-   * returns its id.
-   */
-  Future<int> _createArchive() {
-    return call(NEW).then((id) {
-      if (id == 0 || id == null) {
-        throw new ArchiveException("Archive is invalid or closed.");
-      }
-      return _pushConfiguration(id).then((_) => id);
-    });
-  }
-
-  /**
-   * Applies all configuration in this archive to the archive identified by
-   * [id]. Returns a future that completes once all the configuration is
-   * applied.
-   */
-  Future _pushConfiguration(int id) {
-    var pending = <Future>[];
-    if (filter.program != null) {
-      if (filter.programSignature != null) {
-        var signature = bytesForC(filter.programSignature);
-        pending.add(call(SUPPORT_FILTER_PROGRAM_SIGNATURE, id,
-                          [filter.program, signature]));
-      } else {
-        pending.add(call(SUPPORT_FILTER_PROGRAM, id, [filter.program]));
-      }
-    } else if (filter.all) {
-      pending.add(call(SUPPORT_FILTER_ALL, id));
-    } else {
-      if (filter.bzip2) pending.add(call(SUPPORT_FILTER_BZIP2, id));
-      if (filter.compress) {
-        pending.add(call(SUPPORT_FILTER_COMPRESS, id));
-      }
-      if (filter.gzip) pending.add(call(SUPPORT_FILTER_GZIP, id));
-      if (filter.lzma) pending.add(call(SUPPORT_FILTER_LZMA, id));
-      if (filter.xz) pending.add(call(SUPPORT_FILTER_XZ, id));
-    }
-
-    if (format.all) {
-      pending.add(call(SUPPORT_FORMAT_ALL, id));
-    } else {
-      if (format.ar) pending.add(call(SUPPORT_FORMAT_AR, id));
-      if (format.cpio) pending.add(call(SUPPORT_FORMAT_CPIO, id));
-      if (format.empty) pending.add(call(SUPPORT_FORMAT_EMPTY, id));
-      if (format.iso9660) pending.add(call(SUPPORT_FORMAT_ISO9660, id));
-      if (format.mtree) pending.add(call(SUPPORT_FORMAT_MTREE, id));
-      if (format.raw) pending.add(call(SUPPORT_FORMAT_RAW, id));
-      if (format.tar) pending.add(call(SUPPORT_FORMAT_TAR, id));
-      if (format.zip) pending.add(call(SUPPORT_FORMAT_ZIP, id));
-    }
-
-    void addOption(request, option) {
-      var value;
-      if (option.value == false || option.value == null) {
-        value = null;
-      } else if (option.value == true) {
-        value = '1';
-      } else {
-        value = option.value.toString();
-      }
-
-      pending.add(CALL(request, id, [module, option.name, value]));
-    };
-
-    for (var option in filter.options.all) {
-      addOption(SET_FILTER_OPTION, option);
-    }
-
-    for (var option in format.options.all) {
-      addOption(SET_FORMAT_OPTION, option);
-    }
-
-    for (var option in options.all) {
-      addOption(SET_OPTION, option);
-    }
-
-    return Future.wait(pending);
-  }
-}
-
-/**
- * The configuration for the filter(s) to use when decompressing the contents
- * of an archive. The precise compression used is auto-detected from among all
- * enabled options.
- */
-class Filter {
-  /**
-   * Auto-detect among all possible filters. If this is set, all other filter
-   * flags are ignored. [program] takes precedence over this.
-   */
-  bool all = false;
-
-  /**
-   * Enable [bzip2][wp] compression.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Bzip2
-   */
-  bool bzip2 = false;
-
-  /**
-   * Enable the compression used by [the `compress` utility][wp].
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Compress
-   */
-  bool compress = false;
-
-  /**
-   * Enable [gzip][wp] compression.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Gzip
-   */
-  bool gzip = false;
-
-  /**
-   * Enable [lzma][wp] compression.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Lzma
-   */
-  bool lzma = false;
-
-  /**
-   * Enable [xz][wp] compression.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Xz
-   */
-  bool xz = false;
-
-  /**
-   * Compress using the command-line program `program`. If this is specified and
-   * [programSignature] is not, all other filter flags are ignored. This takes
-   * precedence over [all].
-   */
-  String program;
-
-  // TODO(nweiz): allow multiple programs with signatures to be specified.
-  /**
-   * If set, `program` will be applied only to files whose initial bytes match
-   * [programSignature].
-   */
-  List<int> programSignature;
-
-  /**
-   * Options for individual filters. See [the libarchive documentation][wiki]
-   * for a list of available options.
-   *
-   * [wiki]: https://github.com/libarchive/libarchive/wiki/ManPageArchiveReadSetOptions3
-   */
-  final ArchiveOptions options;
-
-  Filter._() : options = new ArchiveOptions();
-}
-
-/**
- * The configuration for the archive format(s) to look for when extracting the
- * contents of an archive. The format used is auto-detected from among all
- * enabled options.
- */
-class Format {
-  /**
-   * Auto-detect among all possible formats. If this is set, all other format
-   * flags are ignored.
-   */
-  bool all = false;
-
-  /**
-   * Enable the [ar][wp] format.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Ar_(Unix)
-   */
-  bool ar = false;
-
-  /**
-   * Enable the [cpio][wp] format.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Cpio
-   */
-  bool cpio = false;
-
-  /** Enable treating empty files as archives with no entries. */
-  bool empty = false;
-
-  /**
-   * Enable the [ISO 9660][wp] format.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/ISO_9660
-   */
-  bool iso9660 = false;
-
-  /**
-   * Enable the [mtree][wiki] format.
-   *
-   * [wiki]: https://github.com/libarchive/libarchive/wiki/ManPageMtree5
-   */
-  bool mtree = false;
-
-  /** Enable treating unknown files as archives containing a single file. */
-  bool raw = false;
-
-  /**
-   * Enable the [tar][wp] format.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/Tar_(file_format)
-   */
-  bool tar = false;
-
-  /**
-   * Enable the [zip][wp] format.
-   *
-   * [wp]: http://en.wikipedia.org/wiki/ZIP_(file_format)
-   */
-  bool zip = false;
-
-
-  /**
-   * Options for individual formats. See [the libarchive documentation][wiki]
-   * for a list of available options.
-   *
-   * [wiki]: https://github.com/libarchive/libarchive/wiki/ManPageArchiveReadSetOptions3
-   */
-  final ArchiveOptions options;
-
-  Format._() : options = new ArchiveOptions();
-}
diff --git a/utils/archive/reader.h b/utils/archive/reader.h
deleted file mode 100644
index ac73d6e..0000000
--- a/utils/archive/reader.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/**
- * This file declares request-handling functions for reading archives. Each
- * function is called when a message is received with the corresponding request
- * type, and posts a success or error response to the reply port.
- *
- * There is a close correspondence between functions here and the libarchive
- * API. It's left up to the Dart code to present a more Darty API. As such,
- * documentation of these functions is omitted, since it's available in the
- * libarchive documentation.
- */
-#ifndef DART_ARCHIVE_READER_H_
-#define DART_ARCHIVE_READER_H_
-
-#include "dart_archive.h"
-
-void archiveReadNew(Dart_Port p);
-
-void archiveReadSupportFilterAll(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFilterBzip2(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFilterCompress(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFilterGzip(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFilterLzma(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFilterXz(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFilterProgram(Dart_Port p, struct archive* a,
-                                     Dart_CObject* request);
-
-void archiveReadSupportFilterProgramSignature(
-    Dart_Port p, struct archive* a, Dart_CObject* request);
-
-void archiveReadSupportFormatAll(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatAr(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatCpio(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatEmpty(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatIso9660(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatMtree(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatRaw(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatTar(Dart_Port p, struct archive* a);
-
-void archiveReadSupportFormatZip(Dart_Port p, struct archive* a);
-
-void archiveReadSetFilterOption(Dart_Port p, struct archive* a,
-                                Dart_CObject* request);
-
-void archiveReadSetFormatOption(Dart_Port p, struct archive* a,
-                                Dart_CObject* request);
-
-void archiveReadSetOption(Dart_Port p, struct archive* a,
-                          Dart_CObject* request);
-
-void archiveReadOpenFilename(Dart_Port p, struct archive* a,
-                             Dart_CObject* request);
-
-void archiveReadOpenMemory(Dart_Port p, struct archive* a,
-                           Dart_CObject* request);
-
-void archiveReadNextHeader(Dart_Port p, struct archive* a);
-
-void archiveReadDataBlock(Dart_Port p, struct archive* a);
-
-void archiveReadDataSkip(Dart_Port p, struct archive* a);
-
-void archiveReadClose(Dart_Port p, struct archive* a);
-
-void archiveReadFree(Dart_Port p, struct archive* a);
-
-#endif  // DART_ARCHIVE_READER_H_
diff --git a/utils/archive/utils.dart b/utils/archive/utils.dart
deleted file mode 100644
index a5e0219..0000000
--- a/utils/archive/utils.dart
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library utils;
-
-import 'dart-ext:dart_archive';
-import 'dart:isolate';
-import 'archive.dart' as archive;
-
-/** The cache of the port used to communicate with the C extension. */
-SendPort _port;
-
-/** The port used to communicate with the C extension. */
-SendPort get servicePort {
-  if (_port == null) _port = _newServicePort();
-  return _port;
-}
-
-/** Creates a new port to communicate with the C extension. */
-SendPort _newServicePort() native "Archive_ServicePort";
-
-/**
- * Send a message to the C extension.
- *
- * [requestType] is the specific request id to send. [id] is the id of the
- * archive; it may be null for requests that don't operate on a specific
- * archive. [args] are arguments that will be passed on to the extension. They
- * should all be C-safe.
- *
- * Returns a future that completes with the C extension's reply.
- */
-Future call(int requestType, [int id, List args]) {
-  var fullArgs = [requestType, id];
-  if (args != null) fullArgs.addAll(args);
-  return servicePort.call(listForC(fullArgs)).then((response) {
-    var success = response[0];
-    var errno = response[1];
-    var message = response[2];
-
-    if (!success) throw new ArchiveException(message, errno);
-    return message;
-  });
-}
-
-/** Converts [input] to a fixed-length list which C can understand. */
-List listForC(List input) {
-  var list = new List.fixedLength(input.length);
-  list.setRange(0, input.length, input);
-  return list;
-}
-
-/** Converts [input] to a [Uint8List] that C can process easily. */
-Uint8List bytesForC(List<int> input) {
-  var list = new Uint8List(input.length);
-  list.setRange(0, input.length, input);
-  return list;
-}
-
-/**
- * Attaches [callback] as a finalizer for [object]. After [object] has been
- * garbage collected, [callback] will be called and passed [peer] as an
- * argument.
- *
- * Neither [callback] nor [peer] should contain any references to [object];
- * otherwise, [object] will never be collected and [callback] will never be
- * called.
- */
-void attachFinalizer(object, void callback(peer), [peer]) {}
-
-// TODO(nweiz): re-enable this once issue 4378 is fixed.
-// void attachFinalizer(object, void callback(peer), [peer])
-//     native "Archive_AttachFinalizer";
-
-/**
- * A reference to a single value.
- *
- * This is primarily meant to be used when a finalizer needs to refer to a field
- * on the object being finalized that may be set to null during the lifetime of
- * the object. Since the object itself has been garbage collected once the
- * finalizer runs, it needs a second-order reference to check if the field is
- * null.
- */
-class Reference<E> {
-  E value;
-  Reference(this.value);
-}
-
-/**
- * Returns a [Future] that completes immediately upon hitting the event loop.
- */
-Future async() {
-  var completer = new Completer();
-  new Timer(0, (_) => completer.complete(null));
-  return completer.future;
-}
-
-/** An error raised by the archive library. */
-class ArchiveException implements archive.ArchiveException {
-  /** A description of the error that occurred. */   
-  final String message;
-
-  /** The error code for the error, or null. */
-  final int errno;
-
-  ArchiveException(this.message, [this.errno]);
-
-  String toString() {
-    if (errno == null) return "Archive error: $message";
-    return "Archive error $errno: $message";
-  }
-}
diff --git a/utils/pub/error_group.dart b/utils/pub/error_group.dart
new file mode 100644
index 0000000..a9f7861
--- /dev/null
+++ b/utils/pub/error_group.dart
@@ -0,0 +1,268 @@
+// 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 error_group;
+
+import 'dart:async';
+
+/// An [ErrorGroup] entangles the errors of multiple [Future]s and [Stream]s
+/// with one another. This allows APIs to expose multiple [Future]s and
+/// [Stream]s that have identical error conditions without forcing API consumers
+/// to attach error handling to objects they don't care about.
+///
+/// To use an [ErrorGroup], register [Future]s and [Stream]s with it using
+/// [registerFuture] and [registerStream]. These methods return wrapped versions
+/// of the [Future]s and [Stream]s, which should then be used in place of the
+/// originals. For example:
+///
+///     var errorGroup = new ErrorGroup();
+///     future = errorGroup.registerFuture(future);
+///     stream = errorGroup.registerStream(stream);
+///
+/// An [ErrorGroup] has two major effects on its wrapped members:
+///
+/// * An error in any member of the group will be propagated to every member
+///   that hasn't already completed. If those members later complete, their
+///   values will be ignored.
+/// * If any member of this group has a listener, errors on members without
+///   listeners won't get passed to the top-level error handler.
+class ErrorGroup {
+  /// The [Future]s that are members of [this].
+  final _futures = <_ErrorGroupFuture>[];
+
+  /// The [Stream]s that are members of [this].
+  final _streams = <_ErrorGroupStream>[];
+
+  /// Whether [this] has completed, either successfully or with an error.
+  var _isDone = false;
+
+  /// The [Completer] for [done].
+  final _doneCompleter = new Completer();
+
+  /// The underlying [Future] for [done]. We need to be able to access it
+  /// internally as an [_ErrorGroupFuture] so we can check if it has listeners
+  /// and signal errors on it.
+  _ErrorGroupFuture _done;
+
+  /// Returns a [Future] that completes successully when all members of [this]
+  /// are complete, or with an error if any member receives an error.
+  ///
+  /// This [Future] is effectively in the group in that an error on it won't be
+  /// passed to the top-level error handler unless no members of the group have
+  /// listeners attached.
+  Future get done => _done;
+
+  /// Creates a new group with no members.
+  ErrorGroup() {
+    this._done = new _ErrorGroupFuture(this, _doneCompleter.future);
+  }
+
+  /// Registers a [Future] as a member of [this]. Returns a wrapped version of
+  /// [future] that should be used in its place.
+  ///
+  /// If all members of [this] have already completed successfully or with an
+  /// error, it's a [StateError] to try to register a new [Future].
+  Future registerFuture(Future future) {
+    if (_isDone) {
+      throw new StateError("Can't register new members on a complete "
+          "ErrorGroup.");
+    }
+
+    var wrapped = new _ErrorGroupFuture(this, future);
+    _futures.add(wrapped);
+    return wrapped;
+  }
+
+  /// Registers a [Stream] as a member of [this]. Returns a wrapped version of
+  /// [stream] that should be used in its place. The returned [Stream] will be
+  /// multi-subscription if and only if [stream] is.
+  ///
+  /// Since all errors in a group are passed to all members, the returned
+  /// [Stream] will automatically unsubscribe all its listeners when it
+  /// encounters an error.
+  ///
+  /// If all members of [this] have already completed successfully or with an
+  /// error, it's a [StateError] to try to register a new [Stream].
+  Stream registerStream(Stream stream) {
+    if (_isDone) {
+      throw new StateError("Can't register new members on a complete "
+          "ErrorGroup.");
+    }
+
+    var wrapped = new _ErrorGroupStream(this, stream);
+    _streams.add(wrapped);
+    return wrapped;
+  }
+
+  /// Sends [error] to all members of [this]. Like errors that come from
+  /// members, this will only be passed to the top-level error handler if no
+  /// members have listeners.
+  ///
+  /// If all members of [this] have already completed successfully or with an
+  /// error, it's a [StateError] to try to signal an error.
+  void signalError(AsyncError error) {
+    if (_isDone) {
+      throw new StateError("Can't signal errors on a complete ErrorGroup.");
+    }
+
+    _signalError(error);
+  }
+
+  /// Signal an error internally. This is just like [signalError], but instead
+  /// of throwing an error if [this] is complete, it just does nothing.
+  void _signalError(AsyncError error) {
+    if (_isDone) return;
+
+    var caught = false;
+    for (var future in _futures) {
+      if (future._isDone || future._hasListeners) caught = true;
+      future._signalError(error);
+    }
+
+    for (var stream in _streams) {
+      if (stream._isDone || stream._hasListeners) caught = true;
+      stream._signalError(error);
+    }
+
+    _isDone = true;
+    _done._signalError(error);
+    if (!caught && !_done._hasListeners) error.throwDelayed();
+  }
+
+  /// Notifies [this] that one of its member [Future]s is complete.
+  void _signalFutureComplete(_ErrorGroupFuture future) {
+    if (_isDone) return;
+
+    _isDone = _futures.every((future) => future._isDone) &&
+        _streams.every((stream) => stream._isDone);
+    if (_isDone) _doneCompleter.complete();
+  }
+
+  /// Notifies [this] that one of its member [Stream]s is complete.
+  void _signalStreamComplete(_ErrorGroupStream stream) {
+    if (_isDone) return;
+
+    _isDone = _futures.every((future) => future._isDone) &&
+        _streams.every((stream) => stream._isDone);
+    if (_isDone) _doneCompleter.complete();
+  }
+}
+
+/// A [Future] wrapper that keeps track of whether it's been completed and
+/// whether it has any listeners. It also notifies its parent [ErrorGroup] when
+/// it completes successfully or receives an error.
+class _ErrorGroupFuture implements Future {
+  /// The parent [ErrorGroup].
+  final ErrorGroup _group;
+
+  /// Whether [this] has completed, either successfully or with an error.
+  var _isDone = false;
+
+  /// The underlying [Completer] for [this].
+  final _completer = new Completer();
+
+  /// Whether [this] has any listeners.
+  bool _hasListeners = false;
+
+  /// Creates a new [_ErrorGroupFuture] that's a child of [_group] and wraps
+  /// [inner].
+  _ErrorGroupFuture(this._group, Future inner) {
+    inner.then((value) {
+      if (!_isDone) _completer.complete(value);
+      _isDone = true;
+      _group._signalFutureComplete(this);
+    }).catchError((error) => _group._signalError(error));
+
+    // Make sure _completer.future doesn't automatically send errors to the
+    // top-level.
+    _completer.future.catchError((_) {});
+  }
+
+  Future then(onValue(T value), {onError(AsyncError asyncError)}) {
+    _hasListeners = true;
+    return _completer.future.then(onValue, onError: onError);
+  }
+
+  Future catchError(onError(AsyncError asyncError), {bool test(Object error)}) {
+    _hasListeners = true;
+    return _completer.future.catchError(onError, test: test);
+  }
+
+  Future whenComplete(void action()) {
+    _hasListeners = true;
+    return _completer.future.whenComplete(action);
+  }
+
+  Stream<T> asStream() {
+    _hasListeners = true;
+    return _completer.future.asStream();
+  }
+
+  /// Signal that an error from [_group] should be propagated through [this],
+  /// unless it's already complete.
+  void _signalError(AsyncError error) {
+    if (!_isDone) _completer.completeError(error.error, error.stackTrace);
+    _isDone = true;
+  }
+}
+
+// TODO(nweiz): currently streams never top-level unhandled errors (issue 7843).
+// When this is fixed, this class will need to prevent such errors from being
+// top-leveled.
+/// A [Stream] wrapper that keeps track of whether it's been completed and
+/// whether it has any listeners. It also notifies its parent [ErrorGroup] when
+/// it completes successfully or receives an error.
+class _ErrorGroupStream extends Stream {
+  /// The parent [ErrorGroup].
+  final ErrorGroup _group;
+
+  /// Whether [this] has completed, either successfully or with an error.
+  var _isDone = false;
+
+  /// The underlying [StreamController] for [this].
+  final StreamController _controller;
+
+  /// The [StreamSubscription] that connects the wrapped [Stream] to
+  /// [_controller].
+  StreamSubscription _subscription;
+
+  /// Whether [this] has any listeners.
+  bool get _hasListeners => _controller.hasSubscribers;
+
+  /// Creates a new [_ErrorGroupFuture] that's a child of [_group] and wraps
+  /// [inner].
+  _ErrorGroupStream(this._group, Stream inner)
+    : _controller = inner.isSingleSubscription ?
+          new StreamController() :
+          new StreamController.multiSubscription() {
+    _subscription = inner.listen(_controller.add,
+        onError: (e) => _group._signalError(e),
+        onDone: () {
+          _isDone = true;
+          _group._signalStreamComplete(this);
+          _controller.close();
+        });
+  }
+
+  StreamSubscription listen(void onData(value),
+      {void onError(AsyncError error), void onDone(),
+       bool unsubscribeOnError}) {
+    return _controller.stream.listen(onData,
+        onError: onError,
+        onDone: onDone,
+        unsubscribeOnError: true);
+  }
+
+  /// Signal that an error from [_group] should be propagated through [this],
+  /// unless it's already complete.
+  void _signalError(AsyncError e) {
+    if (_isDone) return;
+    _subscription.cancel();
+    // Call these asynchronously to work around issue 7913.
+    new Future.immediate(null).then((_) {
+      _controller.signalError(e.error, e.stackTrace);
+      _controller.close();
+    });
+  }
+}
diff --git a/utils/pub/io.dart b/utils/pub/io.dart
index f70849f..b227378 100644
--- a/utils/pub/io.dart
+++ b/utils/pub/io.dart
@@ -563,8 +563,11 @@
 
 /// Wraps [stream] in a single-subscription [Stream] that emits the same data.
 Stream<List<int>> wrapInputStream(InputStream stream) {
-  var controller = new StreamController.singleSubscription();
-  if (stream.closed) return controller..close();
+  var controller = new StreamController();
+  if (stream.closed) {
+    controller.close();
+    return controller.stream;
+  }
 
   stream.onClosed = controller.close;
   stream.onData = () => controller.add(stream.read());
diff --git a/utils/tests/pub/command_line_config.dart b/utils/tests/pub/command_line_config.dart
new file mode 100644
index 0000000..6b61a45
--- /dev/null
+++ b/utils/tests/pub/command_line_config.dart
@@ -0,0 +1,139 @@
+// 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 command_line_config;
+
+import 'dart:io';
+
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../pub/utils.dart';
+
+const _GREEN = '\u001b[32m';
+const _RED = '\u001b[31m';
+const _MAGENTA = '\u001b[35m';
+const _NONE = '\u001b[0m';
+
+/// Pretty Unicode characters!
+const _CHECKBOX = '\u2713';
+const _BALLOT_X = '\u2717';
+
+/// A custom unittest configuration for running the pub tests from the
+/// command-line and generating human-friendly output.
+class CommandLineConfiguration extends Configuration {
+  void onInit() {
+    // Do nothing. Overridden to prevent the base class from printing.
+  }
+
+  void onTestResult(TestCase testCase) {
+    var result;
+    switch (testCase.result) {
+      case PASS: result = '$_GREEN$_CHECKBOX$_NONE'; break;
+      case FAIL: result = '$_RED$_BALLOT_X$_NONE'; break;
+      case ERROR: result = '$_MAGENTA?$_NONE'; break;
+    }
+    print('$result ${testCase.description}');
+
+    if (testCase.message != '') {
+      print(_indent(testCase.message));
+    }
+
+    _printStackTrace(testCase.stackTrace);
+
+    currentTestCase = null;
+  }
+
+  void onSummary(int passed, int failed, int errors, List<TestCase> results,
+      String uncaughtError) {
+    var success = false;
+    if (uncaughtError != null) {
+      print('Top-level uncaught error: $uncaughtError');
+    } else if (errors != 0) {
+      print('${_GREEN}$passed${_NONE} passed, ${_RED}$failed${_NONE} failed, '
+            '${_MAGENTA}$errors${_NONE} errors.');
+    } else if (failed != 0) {
+      print('${_GREEN}$passed${_NONE} passed, ${_RED}$failed${_NONE} '
+            'failed.');
+    } else if (passed == 0) {
+      print('No tests found.');
+    } else {
+      print('All ${_GREEN}$passed${_NONE} tests passed!');
+      success = true;
+    }
+  }
+
+  void onDone(bool success) {
+    if (!success) exit(1);
+  }
+
+  void _printStackTrace(String stackTrace) {
+    if (stackTrace == null || stackTrace == '') return;
+
+    // Parse out each stack entry.
+    var regexp = new RegExp(r'#\d+\s+(.*) \(file:///([^)]+)\)');
+    var stack = [];
+    for (var line in stackTrace.split('\n')) {
+      if (line.trim() == '') continue;
+
+      var match = regexp.firstMatch(line);
+      if (match == null) throw "Couldn't clean up stack trace line '$line'.";
+      stack.add(new Pair(match[2], match[1]));
+    }
+
+    if (stack.length == 0) return;
+
+    // Find the common prefixes of the paths.
+    var common = 0;
+    while (true) {
+      var matching = true;
+      // TODO(bob): Handle empty stack.
+      var c = stack[0].first[common];
+      for (var pair in stack) {
+        if (pair.first.length <= common || pair.first[common] != c) {
+          matching = false;
+          break;
+        }
+      }
+
+      if (!matching) break;
+      common++;
+    }
+
+    // Remove them.
+    if (common > 0) {
+      for (var pair in stack) {
+        pair.first = pair.first.substring(common);
+      }
+    }
+
+    // Figure out the longest path so we know how much to pad.
+    int longest = stack.mappedBy((pair) => pair.first.length).max();
+
+    // Print out the stack trace nicely formatted.
+    for (var pair in stack) {
+      var path = pair.first;
+      path = path.replaceFirst(':', ' ');
+      print('  ${_padLeft(path, longest)}  ${pair.last}');
+    }
+
+    print('');
+  }
+
+  String _padLeft(String string, int length) {
+    if (string.length >= length) return string;
+
+    var result = new StringBuffer();
+    result.add(string);
+    for (var i = 0; i < length - string.length; i++) {
+      result.add(' ');
+    }
+
+    return result.toString();
+  }
+
+  String _indent(String str) {
+    // TODO(nweiz): Use this simpler code once issue 2980 is fixed.
+    // return str.replaceAll(new RegExp("^", multiLine: true), "  ");
+    return Strings.join(str.split("\n").mappedBy((line) => "  $line"), "\n");
+  }
+}
diff --git a/utils/tests/pub/curl_client_test.dart b/utils/tests/pub/curl_client_test.dart
index eda16bf..372a331 100644
--- a/utils/tests/pub/curl_client_test.dart
+++ b/utils/tests/pub/curl_client_test.dart
@@ -168,7 +168,7 @@
   }
 }
 
-// TODO(nweiz): remove this once it's built in to unittest
+// TODO(nweiz): remove this once it's built in to unittest (issue 7922).
 /// A matcher for StateErrors.
 const isStateError = const _StateError();
 
diff --git a/utils/tests/pub/error_group_test.dart b/utils/tests/pub/error_group_test.dart
new file mode 100644
index 0000000..e6f8769
--- /dev/null
+++ b/utils/tests/pub/error_group_test.dart
@@ -0,0 +1,466 @@
+// 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 error_group_test;
+
+import 'dart:async';
+
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../pub/error_group.dart';
+import '../../pub/utils.dart';
+
+ErrorGroup errorGroup;
+
+// TODO(nweiz): once there's a global error handler, we should test that it does
+// and does not get called at appropriate times. See issue 5958.
+//
+// One particular thing we should test that has no tests now is that a stream
+// that has a subscription added and subsequently canceled counts as having no
+// listeners.
+
+main() {
+  group('with no futures or streams', () {
+    setUp(() {
+      errorGroup = new ErrorGroup();
+    });
+
+    test('should pass signaled errors to .done', () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new AsyncError(new FormatException()));
+    });
+
+    test("shouldn't allow additional futures or streams once an error has been "
+        "signaled", () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new AsyncError(new FormatException()));
+
+      expect(() => errorGroup.registerFuture(new Future.immediate(null)),
+          throwsStateError);
+      expect(() => errorGroup.registerStream(new StreamController().stream),
+          throwsStateError);
+    });
+  });
+
+  group('with a single future', () {
+    Completer completer;
+    Future future;
+
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      completer = new Completer();
+      future = errorGroup.registerFuture(completer.future);
+    });
+
+    test('should pass through a value from the future', () {
+      expect(future, completion(equals('value')));
+      expect(errorGroup.done, completes);
+      completer.complete('value');
+    });
+
+    test("shouldn't allow additional futures or streams once .done has "
+        "been called", () {
+      completer.complete('value');
+
+      expect(() => errorGroup.registerFuture(new Future.immediate(null)),
+          throwsStateError);
+      expect(() => errorGroup.registerStream(new StreamController().stream),
+          throwsStateError);
+    });
+
+    test('should pass through an exception from the future if it has a '
+        'listener', () {
+      expect(future, throwsFormatException);
+      // errorGroup shouldn't top-level the exception
+      completer.completeError(new FormatException());
+    });
+
+    test('should notify the error group of an exception from the future even '
+        'if it has a listener', () {
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      completer.completeError(new FormatException());
+    });
+
+    test('should pass a signaled exception to the future if it has a listener '
+        'and should ignore a subsequent value from that future', () {
+      expect(future, throwsFormatException);
+      // errorGroup shouldn't top-level the exception
+      errorGroup.signalError(new AsyncError(new FormatException()));
+      completer.complete('value');
+    });
+
+    test('should pass a signaled exception to the future if it has a listener '
+        'and should ignore a subsequent exception from that future', () {
+      expect(future, throwsFormatException);
+      // errorGroup shouldn't top-level the exception
+      errorGroup.signalError(new AsyncError(new FormatException()));
+      completer.completeError(new ArgumentError());
+    });
+
+    test('should notify the error group of a signaled exception even if the '
+        'future has a listener', () {
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new AsyncError(new FormatException()));
+    });
+
+    test("should complete .done if the future receives a value even if the "
+        "future doesn't have a listener", () {
+      expect(errorGroup.done, completes);
+      completer.complete('value');
+
+      // A listener added afterwards should receive the value
+      expect(errorGroup.done.then((_) => future),
+          completion(equals('value')));
+    });
+
+    test("should pipe an exception from the future to .done if the future "
+        "doesn't have a listener", () {
+      expect(errorGroup.done, throwsFormatException);
+      completer.completeError(new FormatException());
+
+      // A listener added afterwards should receive the exception
+      expect(errorGroup.done.catchError((_) {
+        expect(future, throwsFormatException);
+      }), completes);
+    });
+
+    test("should pass a signaled exception to .done if the future doesn't have "
+        "a listener",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new AsyncError(new FormatException()));
+
+      // A listener added afterwards should receive the exception
+      expect(errorGroup.done.catchError((_) {
+        completer.complete('value'); // should be ignored
+        expect(future, throwsFormatException);
+      }), completes);
+    });
+  });
+
+  group('with multiple futures', () {
+    Completer completer1;
+    Completer completer2;
+    Future future1;
+    Future future2;
+
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      completer1 = new Completer();
+      completer2 = new Completer();
+      future1 = errorGroup.registerFuture(completer1.future);
+      future2 = errorGroup.registerFuture(completer2.future);
+    });
+
+    test("should pipe exceptions from one future to the other and to "
+        ".complete", () {
+      expect(future1, throwsFormatException);
+      expect(future2, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+
+      completer1.completeError(new FormatException());
+    });
+
+    test("each future should be able to complete with a value "
+        "independently", () {
+      expect(future1, completion(equals('value1')));
+      expect(future2, completion(equals('value2')));
+      expect(errorGroup.done, completes);
+
+      completer1.complete('value1');
+      completer2.complete('value2');
+    });
+
+    test("shouldn't throw a top-level exception if a future receives an error "
+        "after the other listened future completes", () {
+      expect(future1, completion(equals('value')));
+      completer1.complete('value');
+
+      expect(future1.then((_) {
+        // shouldn't cause a top-level exception
+        completer2.completeError(new FormatException());
+      }), completes);
+    });
+
+    test("shouldn't throw a top-level exception if an error is signaled after "
+        "one listened future completes", () {
+      expect(future1, completion(equals('value')));
+      completer1.complete('value');
+
+      expect(future1.then((_) {
+        // shouldn't cause a top-level exception
+        errorGroup.signalError(new AsyncError(new FormatException()));
+      }), completes);
+    });
+  });
+
+  group('with a single stream', () {
+    StreamController controller;
+    Stream stream;
+
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller = new StreamController.multiSubscription();
+      stream = errorGroup.registerStream(controller.stream);
+    });
+
+    test('should pass through values from the stream', () {
+      expect(stream.elementAt(0), completion(equals(1)));
+      expect(stream.elementAt(1), completion(equals(2)));
+      expect(errorGroup.done, completes);
+
+      controller..add(1)..add(2)..close();
+    });
+
+    test('should pass through an error from the stream if it has a '
+        'listener', () {
+      expect(stream.first, throwsFormatException);
+      // errorGroup shouldn't top-level the exception
+      controller.signalError(new AsyncError(new FormatException()));
+    });
+
+    test('should notify the error group of an exception from the stream even '
+        'if it has a listener', () {
+      expect(stream.first, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      controller.signalError(new AsyncError(new FormatException()));
+    });
+
+    test('should pass a signaled exception to the stream if it has a listener '
+        'and should unsubscribe that stream', () {
+      expect(stream.first, throwsFormatException);
+      // errorGroup shouldn't top-level the exception
+      errorGroup.signalError(new AsyncError(new FormatException()));
+
+      expect(stream.first.catchError((_) {
+        controller.add('value');
+        return stream.isEmpty;
+      }), completion(isTrue));
+    });
+
+    test('should notify the error group of a signaled exception even if the '
+        'stream has a listener', () {
+      expect(stream.first, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new AsyncError(new FormatException()));
+    });
+
+    test("should complete .done when the stream is done even if the stream "
+        "doesn't have a listener", () {
+      expect(errorGroup.done, completes);
+      controller.add('value');
+      controller.close();
+
+      // A listener added afterwards should see an empty stream, since it's not
+      // single-subscription
+      expect(errorGroup.done.then((_) => stream.toList()),
+          completion(isEmpty));
+    });
+
+    test("should pipe an exception from the stream to .done if the stream "
+        "doesn't have a listener", () {
+      expect(errorGroup.done, throwsFormatException);
+      controller.signalError(new AsyncError(new FormatException()));
+
+      // A listener added afterwards should see an empty stream, since it's not
+      // single-subscription
+      expect(errorGroup.done.catchError((_) {
+        controller.add('value'); // should be ignored
+        return stream.toList();
+      }), completion(isEmpty));
+    });
+
+    test("should pass a signaled exception to .done if the stream doesn't "
+        "have a listener",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new AsyncError(new FormatException()));
+
+      // A listener added afterwards should receive the exception
+      expect(errorGroup.done.catchError((_) {
+        controller.add('value'); // should be ignored
+        return stream.toList();
+      }), completion(isEmpty));
+    });
+  });
+
+  group('with a single single-subscription stream', () {
+    StreamController controller;
+    Stream stream;
+
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller = new StreamController();
+      stream = errorGroup.registerStream(controller.stream);
+    });
+
+    test("should complete .done when the stream is done even if the stream "
+        "doesn't have a listener", () {
+      expect(errorGroup.done, completes);
+      controller.add('value');
+      controller.close();
+
+      // A listener added afterwards should receive the value
+      expect(errorGroup.done.then((_) => stream.toList()),
+          completion(equals(['value'])));
+    });
+
+    test("should pipe an exception from the stream to .done if the stream "
+        "doesn't have a listener", () {
+      expect(errorGroup.done, throwsFormatException);
+      controller.signalError(new AsyncError(new FormatException()));
+
+      // A listener added afterwards should receive the exception
+      expect(errorGroup.done.catchError((_) {
+        controller.add('value'); // should be ignored
+        expect(stream.first, throwsFormatException);
+      }), completes);
+    });
+
+    test("should pass a signaled exception to .done if the stream doesn't "
+        "have a listener",
+        () {
+      expect(errorGroup.done, throwsFormatException);
+      errorGroup.signalError(new AsyncError(new FormatException()));
+
+      // A listener added afterwards should receive the exception
+      expect(errorGroup.done.catchError((_) {
+        controller.add('value'); // should be ignored
+        expect(stream.first, throwsFormatException);
+      }), completes);
+    });
+  });
+
+  group('with multiple streams', () {
+    StreamController controller1;
+    StreamController controller2;
+    Stream stream1;
+    Stream stream2;
+
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller1 = new StreamController.multiSubscription();
+      controller2 = new StreamController.multiSubscription();
+      stream1 = errorGroup.registerStream(controller1.stream);
+      stream2 = errorGroup.registerStream(controller2.stream);
+    });
+
+    test("should pipe exceptions from one stream to the other and to .done",
+        () {
+      expect(stream1.first, throwsFormatException);
+      expect(stream2.first, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+
+      controller1.signalError(new AsyncError(new FormatException()));
+    });
+
+    test("each future should be able to emit values independently", () {
+      expect(stream1.toList(), completion(equals(['value1.1', 'value1.2'])));
+      expect(stream2.toList(), completion(equals(['value2.1', 'value2.2'])));
+      expect(errorGroup.done, completes);
+
+      controller1..add('value1.1')..add('value1.2')..close();
+      controller2..add('value2.1')..add('value2.2')..close();
+    });
+
+    test("shouldn't throw a top-level exception if a stream receives an error "
+        "after the other listened stream completes", () {
+      expect(stream1.toList(), completion(equals(['value1', 'value2'])));
+      controller1..add('value1')..add('value2')..close();
+
+      expect(stream1.toList().then((_) {
+        // shouldn't cause a top-level exception
+        controller2.signalError(new AsyncError(new FormatException()));
+      }), completes);
+    });
+
+    test("shouldn't throw a top-level exception if an error is signaled after "
+        "one listened stream completes", () {
+      expect(stream1.toList(), completion(equals(['value1', 'value2'])));
+      controller1..add('value1')..add('value2')..close();
+
+      expect(stream1.toList().then((_) {
+        // shouldn't cause a top-level exception
+        errorGroup.signalError(new AsyncError(new FormatException()));
+      }), completes);
+    });
+  });
+
+  group('with a stream and a future', () {
+    StreamController controller;
+    Stream stream;
+    Completer completer;
+    Future future;
+
+    setUp(() {
+      errorGroup = new ErrorGroup();
+      controller = new StreamController.multiSubscription();
+      stream = errorGroup.registerStream(controller.stream);
+      completer = new Completer();
+      future = errorGroup.registerFuture(completer.future);
+    });
+
+    test("should pipe exceptions from the stream to the future", () {
+      expect(stream.first, throwsFormatException);
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+
+      controller.signalError(new AsyncError(new FormatException()));
+    });
+
+    test("should pipe exceptions from the future to the stream", () {
+      expect(stream.first, throwsFormatException);
+      expect(future, throwsFormatException);
+      expect(errorGroup.done, throwsFormatException);
+
+      completer.completeError(new FormatException());
+    });
+
+    test("the stream and the future should be able to complete/emit values "
+        "independently", () {
+      expect(stream.toList(), completion(equals(['value1.1', 'value1.2'])));
+      expect(future, completion(equals('value2.0')));
+      expect(errorGroup.done, completes);
+
+      controller..add('value1.1')..add('value1.2')..close();
+      completer.complete('value2.0');
+    });
+
+    test("shouldn't throw a top-level exception if the stream receives an error "
+        "after the listened future completes", () {
+      expect(future, completion(equals('value')));
+      completer.complete('value');
+
+      expect(future.then((_) {
+        // shouldn't cause a top-level exception
+        controller.signalError(new AsyncError(new FormatException()));
+      }), completes);
+    });
+
+    test("shouldn't throw a top-level exception if the future receives an "
+        "error after the listened stream completes", () {
+      expect(stream.toList(), completion(equals(['value1', 'value2'])));
+      controller..add('value1')..add('value2')..close();
+
+      expect(stream.toList().then((_) {
+        // shouldn't cause a top-level exception
+        completer.completeError(new FormatException());
+      }), completes);
+    });
+  });
+}
+
+// TODO(nweiz): remove this once it's built in to unittest (issue 7922).
+/// A matcher for StateErrors.
+const isStateError = const _StateError();
+
+/// A matcher for functions that throw StateError.
+const Matcher throwsStateError =
+    const Throws(isStateError);
+
+class _StateError extends TypeMatcher {
+  const _StateError() : super("StateError");
+  bool matches(item, MatchState matchState) => item is StateError;
+}
diff --git a/utils/tests/pub/install/git/check_out_and_update_test.dart b/utils/tests/pub/install/git/check_out_and_update_test.dart
index 4bcbba6..22fed50 100644
--- a/utils/tests/pub/install/git/check_out_and_update_test.dart
+++ b/utils/tests/pub/install/git/check_out_and_update_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out and updates a package from Git', () {
+  integration('checks out and updates a package from Git', () {
     ensureGit();
 
     git('foo.git', [
@@ -63,7 +62,5 @@
         file('foo.dart', 'main() => "foo 2";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/check_out_branch_test.dart b/utils/tests/pub/install/git/check_out_branch_test.dart
index 4516f9c..42e65bd 100644
--- a/utils/tests/pub/install/git/check_out_branch_test.dart
+++ b/utils/tests/pub/install/git/check_out_branch_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out a package at a specific branch from Git', () {
+  integration('checks out a package at a specific branch from Git', () {
     ensureGit();
 
     var repo = git('foo.git', [
@@ -35,7 +34,5 @@
         file('foo.dart', 'main() => "foo 1";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/check_out_revision_test.dart b/utils/tests/pub/install/git/check_out_revision_test.dart
index 8ef60f9..3f11693 100644
--- a/utils/tests/pub/install/git/check_out_revision_test.dart
+++ b/utils/tests/pub/install/git/check_out_revision_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out a package at a specific revision from Git', () {
+  integration('checks out a package at a specific revision from Git', () {
     ensureGit();
 
     var repo = git('foo.git', [
@@ -35,7 +34,5 @@
         file('foo.dart', 'main() => "foo 1";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/check_out_test.dart b/utils/tests/pub/install/git/check_out_test.dart
index 6efa2be..f91fd1f 100644
--- a/utils/tests/pub/install/git/check_out_test.dart
+++ b/utils/tests/pub/install/git/check_out_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out a package from Git', () {
+  integration('checks out a package from Git', () {
     ensureGit();
 
     git('foo.git', [
@@ -35,7 +34,5 @@
         file('foo.dart', 'main() => "foo";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/check_out_transitive_test.dart b/utils/tests/pub/install/git/check_out_transitive_test.dart
index 662dbc7..9f93e09 100644
--- a/utils/tests/pub/install/git/check_out_transitive_test.dart
+++ b/utils/tests/pub/install/git/check_out_transitive_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out packages transitively from Git', () {
+  integration('checks out packages transitively from Git', () {
     ensureGit();
 
     git('foo.git', [
@@ -47,7 +46,5 @@
         file('bar.dart', 'main() => "bar";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/check_out_twice_test.dart b/utils/tests/pub/install/git/check_out_twice_test.dart
index ea07651..8195a25 100644
--- a/utils/tests/pub/install/git/check_out_twice_test.dart
+++ b/utils/tests/pub/install/git/check_out_twice_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out a package from Git twice', () {
+  integration('checks out a package from Git twice', () {
     ensureGit();
 
     git('foo.git', [
@@ -43,7 +42,5 @@
     // in the cache.
     schedulePub(args: ['install'],
         output: new RegExp(r"Dependencies installed!$"));
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart b/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart
index 5dd7f41..eee21d4 100644
--- a/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart
+++ b/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart
@@ -6,12 +6,12 @@
 
 import 'dart:io';
 
-import '../../test_pub.dart';
 import '../../../../../pkg/unittest/lib/unittest.dart';
+import '../../test_pub.dart';
 
 main() {
   group("(regression)", () {
-    test('checks out a package from Git with a trailing slash', () {
+    integration('checks out a package from Git with a trailing slash', () {
       ensureGit();
 
       git('foo.git', [
@@ -36,8 +36,6 @@
           file('foo.dart', 'main() => "foo";')
         ])
       ]).scheduleValidate();
-
-      run();
     });
   });
 }
diff --git a/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart b/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart
index c8f4648..d54881f 100644
--- a/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart
+++ b/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart
@@ -7,10 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('requires the dependency name to match the remote pubspec name', () {
+  integration('requires the dependency name to match the remote pubspec '
+      'name', () {
     ensureGit();
 
     git('foo.git', [
@@ -34,7 +34,5 @@
             '"weirdname", doesn\'t match the name "foo" in its '
             r'pubspec\.'),
         exitCode: 1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/different_repo_name_test.dart b/utils/tests/pub/install/git/different_repo_name_test.dart
index e3c2f5c..8f5657c 100644
--- a/utils/tests/pub/install/git/different_repo_name_test.dart
+++ b/utils/tests/pub/install/git/different_repo_name_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('doesn\'t require the repository name to match the name in the '
+  integration('doesn\'t require the repository name to match the name in the '
       'pubspec', () {
     ensureGit();
 
@@ -36,7 +35,5 @@
         file('weirdname.dart', 'main() => "weirdname";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/lock_version_test.dart b/utils/tests/pub/install/git/lock_version_test.dart
index ced05d7..793294c 100644
--- a/utils/tests/pub/install/git/lock_version_test.dart
+++ b/utils/tests/pub/install/git/lock_version_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('keeps a Git package locked to the version in the lockfile', () {
+  integration('keeps a Git package locked to the version in the lockfile', () {
     ensureGit();
 
     git('foo.git', [
@@ -47,7 +46,5 @@
         file('foo.dart', 'main() => "foo";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/require_pubspec_name_test.dart b/utils/tests/pub/install/git/require_pubspec_name_test.dart
index e0ea55a..68cc91ea 100644
--- a/utils/tests/pub/install/git/require_pubspec_name_test.dart
+++ b/utils/tests/pub/install/git/require_pubspec_name_test.dart
@@ -7,10 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('requires the dependency to have a pubspec with a name field', () {
+  integration('requires the dependency to have a pubspec with a name '
+      'field', () {
     ensureGit();
 
     git('foo.git', [
@@ -26,7 +26,5 @@
         error: new RegExp(r'^Package "foo"' "'" 's pubspec.yaml file is '
             r'missing the required "name" field \(e\.g\. "name: foo"\)\.'),
         exitCode: 1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/require_pubspec_test.dart b/utils/tests/pub/install/git/require_pubspec_test.dart
index 917a1f5..ffc0b60 100644
--- a/utils/tests/pub/install/git/require_pubspec_test.dart
+++ b/utils/tests/pub/install/git/require_pubspec_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('requires the dependency to have a pubspec', () {
+  integration('requires the dependency to have a pubspec', () {
     ensureGit();
 
     git('foo.git', [
@@ -25,7 +24,5 @@
         error: new RegExp('^Package "foo" doesn\'t have a '
             'pubspec.yaml file.'),
         exitCode: 1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart b/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart
index 59b4d44..67bef62 100644
--- a/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart
+++ b/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("doesn't update a locked Git package with a new compatible "
+  integration("doesn't update a locked Git package with a new compatible "
       "constraint", () {
     ensureGit();
 
@@ -45,7 +44,5 @@
         file('foo.dart', 'main() => "foo 1.0.0";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/git/unlock_if_incompatible_test.dart b/utils/tests/pub/install/git/unlock_if_incompatible_test.dart
index 17ddc10..47aa138 100644
--- a/utils/tests/pub/install/git/unlock_if_incompatible_test.dart
+++ b/utils/tests/pub/install/git/unlock_if_incompatible_test.dart
@@ -7,10 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('updates a locked Git package with a new incompatible constraint', () {
+  integration('updates a locked Git package with a new incompatible '
+      'constraint', () {
     ensureGit();
 
     git('foo.git', [
@@ -44,7 +44,5 @@
         file('foo.dart', 'main() => "foo 1.0.0";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/check_out_test.dart b/utils/tests/pub/install/hosted/check_out_test.dart
index 80126c5..ab8cab0 100644
--- a/utils/tests/pub/install/hosted/check_out_test.dart
+++ b/utils/tests/pub/install/hosted/check_out_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out a package from a pub server', () {
+  integration('checks out a package from a pub server', () {
     servePackages([package("foo", "1.2.3")]);
 
     appDir([dependency("foo", "1.2.3")]).scheduleCreate();
@@ -20,7 +19,5 @@
 
     cacheDir({"foo": "1.2.3"}).scheduleValidate();
     packagesDir({"foo": "1.2.3"}).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/check_out_transitive_test.dart b/utils/tests/pub/install/hosted/check_out_transitive_test.dart
index c449acd..dd5f01b 100644
--- a/utils/tests/pub/install/hosted/check_out_transitive_test.dart
+++ b/utils/tests/pub/install/hosted/check_out_transitive_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out packages transitively from a pub server', () {
+  integration('checks out packages transitively from a pub server', () {
     servePackages([
       package("foo", "1.2.3", [dependency("bar", "2.0.4")]),
       package("bar", "2.0.3"),
@@ -25,7 +24,5 @@
 
     cacheDir({"foo": "1.2.3", "bar": "2.0.4"}).scheduleValidate();
     packagesDir({"foo": "1.2.3", "bar": "2.0.4"}).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart b/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart
index 6277936..9bd2348 100644
--- a/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart
+++ b/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart
@@ -7,10 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("doesn't update dependencies whose constraints have been removed", () {
+  integration("doesn't update dependencies whose constraints have been "
+      "removed", () {
     servePackages([
       package("foo", "1.0.0", [dependency("shared-dep")]),
       package("bar", "1.0.0", [dependency("shared-dep", "<2.0.0")]),
@@ -39,7 +39,5 @@
       "bar": null,
       "shared-dep": "1.0.0"
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart b/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart
index aaddfcf..ed0ca96 100644
--- a/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart
+++ b/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('fails gracefully if the package does not exist', () {
+  integration('fails gracefully if the package does not exist', () {
     servePackages([]);
 
     appDir([dependency("foo", "1.2.3")]).scheduleCreate();
@@ -19,7 +18,5 @@
         error: new RegExp('Could not find package "foo" at '
                             'http://localhost:'),
         exitCode: 1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart b/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart
index 1cd6300..6a40f08 100644
--- a/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart
+++ b/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('fails gracefully if the url does not resolve', () {
+  integration('fails gracefully if the url does not resolve', () {
     dir(appPath, [
       pubspec({
         "name": "myapp",
@@ -28,7 +27,5 @@
     schedulePub(args: ['install'],
         error: new RegExp('Could not resolve URL "http://pub.invalid".'),
         exitCode: 1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart b/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart
index 4febc6e..01d95b7 100644
--- a/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart
+++ b/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("removes a dependency that's been removed from the pubspec", () {
+  integration("removes a dependency that's been removed from the pubspec", () {
     servePackages([
       package("foo", "1.0.0"),
       package("bar", "1.0.0")
@@ -35,7 +34,5 @@
       "foo": "1.0.0",
       "bar": null
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart b/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart
index 2a16d31..959d51a 100644
--- a/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart
+++ b/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart
@@ -7,10 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("removes a transitive dependency that's no longer depended on", () {
+  integration("removes a transitive dependency that's no longer depended"
+      " on", () {
     servePackages([
       package("foo", "1.0.0", [dependency("shared-dep")]),
       package("bar", "1.0.0", [
@@ -44,7 +44,5 @@
       "shared-dep": "1.0.0",
       "bar-dep": null,
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/resolve_constraints_test.dart b/utils/tests/pub/install/hosted/resolve_constraints_test.dart
index 2a3f319..fa95d32 100644
--- a/utils/tests/pub/install/hosted/resolve_constraints_test.dart
+++ b/utils/tests/pub/install/hosted/resolve_constraints_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('resolves version constraints from a pub server', () {
+  integration('resolves version constraints from a pub server', () {
     servePackages([
       package("foo", "1.2.3", [dependency("baz", ">=2.0.0")]),
       package("bar", "2.3.4", [dependency("baz", "<3.0.0")]),
@@ -35,7 +34,5 @@
       "bar": "2.3.4",
       "baz": "2.0.4"
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart b/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart
index aa79296..e6ccc35 100644
--- a/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart
+++ b/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart
@@ -7,11 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("doesn't update a locked pub server package with a new compatible "
-      "constraint", () {
+  integration("doesn't update a locked pub server package with a new "
+      "compatible constraint", () {
     servePackages([package("foo", "1.0.0")]);
 
     appDir([dependency("foo")]).scheduleCreate();
@@ -29,7 +28,5 @@
         output: new RegExp(r"Dependencies installed!$"));
 
     packagesDir({"foo": "1.0.0"}).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart b/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart
index 3a580c6..782a52a 100644
--- a/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart
+++ b/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("doesn't unlock dependencies if a new dependency is already "
+  integration("doesn't unlock dependencies if a new dependency is already "
       "satisfied", () {
     servePackages([
       package("foo", "1.0.0", [dependency("bar", "<2.0.0")]),
@@ -47,7 +46,5 @@
       "baz": "1.0.0",
       "newdep": "2.0.0"
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/stay_locked_test.dart b/utils/tests/pub/install/hosted/stay_locked_test.dart
index 316333c..5bd5ec2 100644
--- a/utils/tests/pub/install/hosted/stay_locked_test.dart
+++ b/utils/tests/pub/install/hosted/stay_locked_test.dart
@@ -7,10 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('keeps a pub server package locked to the version in the lockfile', () {
+  integration('keeps a pub server package locked to the version in the '
+      'lockfile', () {
     servePackages([package("foo", "1.0.0")]);
 
     appDir([dependency("foo")]).scheduleCreate();
@@ -32,7 +32,5 @@
         output: new RegExp(r"Dependencies installed!$"));
 
     packagesDir({"foo": "1.0.0"}).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart b/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart
index 89ca81f..13a6920 100644
--- a/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart
+++ b/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('updates a locked pub server package with a new incompatible '
+  integration('updates a locked pub server package with a new incompatible '
       'constraint', () {
     servePackages([package("foo", "1.0.0")]);
 
@@ -29,7 +28,5 @@
         output: new RegExp(r"Dependencies installed!$"));
 
     packagesDir({"foo": "1.0.1"}).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart b/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart
index ba86a53..91edd34 100644
--- a/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart
+++ b/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart
@@ -7,11 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("unlocks dependencies if necessary to ensure that a new dependency "
-      "is satisfied", () {
+  integration("unlocks dependencies if necessary to ensure that a new "
+      "dependency is satisfied", () {
     servePackages([
       package("foo", "1.0.0", [dependency("bar", "<2.0.0")]),
       package("bar", "1.0.0", [dependency("baz", "<2.0.0")]),
@@ -51,7 +50,5 @@
       "qux": "1.0.0",
       "newdep": "2.0.0"
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/pub_install_test.dart b/utils/tests/pub/install/pub_install_test.dart
index 4f9dc43..7589bc5 100644
--- a/utils/tests/pub/install/pub_install_test.dart
+++ b/utils/tests/pub/install/pub_install_test.dart
@@ -6,22 +6,20 @@
 
 import 'dart:io';
 
-import '../test_pub.dart';
 import '../../../../pkg/unittest/lib/unittest.dart';
+import '../test_pub.dart';
 
 main() {
   group('requires', () {
-    test('a pubspec', () {
+    integration('a pubspec', () {
       dir(appPath, []).scheduleCreate();
 
       schedulePub(args: ['install'],
           error: new RegExp(r'^Could not find a file named "pubspec\.yaml"'),
           exitCode: 1);
-
-      run();
     });
 
-    test('a pubspec with a "name" key', () {
+    integration('a pubspec with a "name" key', () {
       dir(appPath, [
         pubspec({"dependencies": {"foo": null}})
       ]).scheduleCreate();
@@ -30,12 +28,10 @@
           error: new RegExp(r'^pubspec.yaml is missing the required "name" '
               r'field \(e\.g\. "name: myapp"\)\.'),
           exitCode: 1);
-
-      run();
     });
   });
 
-  test('adds itself to the packages', () {
+  integration('adds itself to the packages', () {
     // The symlink should use the name in the pubspec, not the name of the
     // directory.
     dir(appPath, [
@@ -51,11 +47,9 @@
         file('foo.dart', 'main() => "foo";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 
-  test('does not adds itself to the packages if it has no "lib" directory', () {
+  integration('does not adds itself to the packages if it has no "lib" directory', () {
     // The symlink should use the name in the pubspec, not the name of the
     // directory.
     dir(appPath, [
@@ -68,11 +62,9 @@
     dir(packagesPath, [
       nothing("myapp_name")
     ]).scheduleValidate();
-
-    run();
   });
 
-  test('does not add a package if it does not have a "lib" directory', () {
+  integration('does not add a package if it does not have a "lib" directory', () {
     // Using an SDK source, but this should be true of all sources.
     dir(sdkPath, [
       file('revision', '1234'),
@@ -92,11 +84,9 @@
             'directory so you will not be able to import any libraries from '
             'it.'),
         output: new RegExp(r"Dependencies installed!$"));
-
-    run();
   });
 
-  test('does not warn if the root package lacks a "lib" directory', () {
+  integration('does not warn if the root package lacks a "lib" directory', () {
     dir(appPath, [
       appPubspec([])
     ]).scheduleCreate();
@@ -104,11 +94,9 @@
     schedulePub(args: ['install'],
         error: '',
         output: new RegExp(r"Dependencies installed!$"));
-
-    run();
   });
 
-  test('overwrites the existing packages directory', () {
+  integration('overwrites the existing packages directory', () {
     dir(appPath, [
       appPubspec([]),
       dir('packages', [
@@ -125,12 +113,10 @@
       nothing('foo'),
       dir('myapp', [file('myapp.dart', 'main() => "myapp";')])
     ]).scheduleValidate();
-
-    run();
   });
 
   group('creates a packages directory in', () {
-    test('"test/" and its subdirectories', () {
+    integration('"test/" and its subdirectories', () {
       dir(appPath, [
         appPubspec([]),
         libDir('foo'),
@@ -156,11 +142,9 @@
           ])
         ])
       ]).scheduleValidate();
-
-      run();
     });
 
-    test('"example/" and its subdirectories', () {
+    integration('"example/" and its subdirectories', () {
       dir(appPath, [
         appPubspec([]),
         libDir('foo'),
@@ -186,11 +170,9 @@
           ])
         ])
       ]).scheduleValidate();
-
-      run();
     });
 
-    test('"tool/" and its subdirectories', () {
+    integration('"tool/" and its subdirectories', () {
       dir(appPath, [
         appPubspec([]),
         libDir('foo'),
@@ -216,11 +198,9 @@
           ])
         ])
       ]).scheduleValidate();
-
-      run();
     });
 
-    test('"web/" and its subdirectories', () {
+    integration('"web/" and its subdirectories', () {
       dir(appPath, [
         appPubspec([]),
         libDir('foo'),
@@ -246,11 +226,9 @@
           ])
         ])
       ]).scheduleValidate();
-
-      run();
     });
 
-    test('"bin/"', () {
+    integration('"bin/"', () {
       dir(appPath, [
         appPubspec([]),
         libDir('foo'),
@@ -269,8 +247,6 @@
           ])
         ])
       ]).scheduleValidate();
-
-      run();
     });
   });
 }
diff --git a/utils/tests/pub/install/sdk/check_out_test.dart b/utils/tests/pub/install/sdk/check_out_test.dart
index c99658d..0b658ac 100644
--- a/utils/tests/pub/install/sdk/check_out_test.dart
+++ b/utils/tests/pub/install/sdk/check_out_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('checks out a package from the SDK', () {
+  integration('checks out a package from the SDK', () {
     dir(sdkPath, [
       file('revision', '1234'),
       dir('pkg', [
@@ -29,7 +28,5 @@
         output: new RegExp(r"Dependencies installed!$"));
 
     packagesDir({"foo": "0.0.1234"}).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/install/sdk/check_out_transitive_test.dart b/utils/tests/pub/install/sdk/check_out_transitive_test.dart
index 04dd55e..4a95147 100644
--- a/utils/tests/pub/install/sdk/check_out_transitive_test.dart
+++ b/utils/tests/pub/install/sdk/check_out_transitive_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('includes transitive dependencies', () {
+  integration('includes transitive dependencies', () {
     dir(sdkPath, [
       file('revision', '1234'),
       dir('pkg', [
@@ -36,7 +35,5 @@
       'foo': '0.0.1234',
       'bar': '0.0.1234'
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/oauth2_test.dart b/utils/tests/pub/oauth2_test.dart
index 1c94c32..42be210 100644
--- a/utils/tests/pub/oauth2_test.dart
+++ b/utils/tests/pub/oauth2_test.dart
@@ -9,6 +9,7 @@
 import 'dart:uri';
 
 import 'test_pub.dart';
+import 'test_pub.dart';
 import '../../../pkg/http/lib/http.dart' as http;
 import '../../../pkg/unittest/lib/unittest.dart';
 import '../../pub/io.dart';
@@ -17,8 +18,8 @@
 main() {
   setUp(() => normalPackage.scheduleCreate());
 
-  test('with no credentials.json, authenticates and saves credentials.json',
-      () {
+  integration('with no credentials.json, authenticates and saves '
+      'credentials.json', () {
     var server = new ScheduledServer();
     var pub = startPubLish(server);
     confirmPublish(pub);
@@ -34,11 +35,9 @@
     pub.kill();
 
     credentialsFile(server, 'access token').scheduleValidate();
-
-    run();
   });
 
-  test('with a pre-existing credentials.json does not authenticate', () {
+  integration('with a pre-existing credentials.json does not authenticate', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -52,12 +51,10 @@
     });
 
     pub.kill();
-
-    run();
   });
 
-  test('with an expired credentials.json, refreshes and saves the refreshed '
-      'access token to credentials.json', () {
+  integration('with an expired credentials.json, refreshes and saves the '
+      'refreshed access token to credentials.json', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token',
         refreshToken: 'refresh token',
@@ -93,11 +90,9 @@
 
     credentialsFile(server, 'new access token', refreshToken: 'refresh token')
         .scheduleValidate();
-
-    run();
   });
 
-  test('with an expired credentials.json without a refresh token, '
+  integration('with an expired credentials.json without a refresh token, '
        'authenticates again and saves credentials.json', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token',
@@ -121,12 +116,10 @@
     pub.kill();
 
     credentialsFile(server, 'new access token').scheduleValidate();
-
-    run();
   });
 
-  test('with a malformed credentials.json, authenticates again and saves '
-      'credentials.json', () {
+  integration('with a malformed credentials.json, authenticates again and '
+      'saves credentials.json', () {
     var server = new ScheduledServer();
     dir(cachePath, [
       file('credentials.json', '{bad json')
@@ -146,11 +139,9 @@
     pub.kill();
 
     credentialsFile(server, 'new access token').scheduleValidate();
-
-    run();
   });
 
-  test('with server-rejected credentials, authenticates again and saves '
+  integration('with server-rejected credentials, authenticates again and saves '
       'credentials.json', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
@@ -177,7 +168,6 @@
         'Looks great! Are you ready to upload your package (y/n)? '
         'Pub needs your authorization to upload packages on your behalf.'));
     pub.kill();
-    run();
   });
 }
 
diff --git a/utils/tests/pub/pub.status b/utils/tests/pub/pub.status
index 86e5e4e..09fcf6d 100644
--- a/utils/tests/pub/pub.status
+++ b/utils/tests/pub/pub.status
@@ -2,6 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
+pub_uploader_test: Pass, Fail # Issue 7905
+pub_lish_test: Pass, Fail # Issue 7905
+oauth2_test: Pass, Fail # Issue 7905, 7920
+curl_client_test: Pass, Fail # Issue 7920
+
 # Pub only runs on the VM, so just rule out all compilers.
 [ $compiler == dart2js || $compiler == dart2dart || $compiler == dartc ]
 *: Skip
diff --git a/utils/tests/pub/pub_lish_test.dart b/utils/tests/pub/pub_lish_test.dart
index babba9ea..b0faa95 100644
--- a/utils/tests/pub/pub_lish_test.dart
+++ b/utils/tests/pub/pub_lish_test.dart
@@ -8,6 +8,7 @@
 import 'dart:json' as json;
 
 import 'test_pub.dart';
+import 'test_pub.dart';
 import '../../../pkg/unittest/lib/unittest.dart';
 import '../../pub/io.dart';
 
@@ -49,7 +50,7 @@
 main() {
   setUp(() => normalPackage.scheduleCreate());
 
-  test('archives and uploads a package', () {
+  integration('archives and uploads a package', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -72,14 +73,12 @@
         'Looks great! Are you ready to upload your package (y/n)?'
         ' Package test_pkg 1.0.0 uploaded!'));
     pub.shouldExit(0);
-
-    run();
   });
 
   // TODO(nweiz): Once a multipart/form-data parser in Dart exists, we should
   // test that "pub lish" chooses the correct files to publish.
 
-  test('package validation has an error', () {
+  integration('package validation has an error', () {
     var package = package("test_pkg", "1.0.0");
     package.remove("homepage");
     dir(appPath, [pubspec(package)]).scheduleCreate();
@@ -91,11 +90,9 @@
     expectLater(pub.remainingStderr(),
         contains("Sorry, your package is missing a requirement and can't be "
             "published yet."));
-
-    run();
   });
 
-  test('package validation has a warning and is canceled', () {
+  integration('package validation has a warning and is canceled', () {
     var package = package("test_pkg", "1.0.0");
     package["author"] = "Nathan Weizenbaum";
     dir(appPath, [pubspec(package)]).scheduleCreate();
@@ -106,11 +103,9 @@
     pub.writeLine("n");
     pub.shouldExit(1);
     expectLater(pub.remainingStderr(), contains("Package upload canceled."));
-
-    run();
   });
 
-  test('package validation has a warning and continues', () {
+  integration('package validation has a warning and continues', () {
     var package = package("test_pkg", "1.0.0");
     package["author"] = "Nathan Weizenbaum";
     dir(appPath, [pubspec(package)]).scheduleCreate();
@@ -132,11 +127,9 @@
     pub.shouldExit(0);
     expectLater(pub.remainingStdout(),
         contains('Package test_pkg 1.0.0 uploaded!'));
-
-    run();
   });
 
-  test('upload form provides an error', () {
+  integration('upload form provides an error', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -153,11 +146,9 @@
 
     expectLater(pub.nextErrLine(), equals('your request sucked'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('upload form provides invalid JSON', () {
+  integration('upload form provides invalid JSON', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -172,11 +163,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals('{not json'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('upload form is missing url', () {
+  integration('upload form is missing url', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -194,11 +183,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals(json.stringify(body)));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('upload form url is not a string', () {
+  integration('upload form url is not a string', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -217,11 +204,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals(json.stringify(body)));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('upload form is missing fields', () {
+  integration('upload form is missing fields', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -233,11 +218,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals(json.stringify(body)));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('upload form fields is not a map', () {
+  integration('upload form fields is not a map', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -249,11 +232,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals(json.stringify(body)));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('upload form fields has a non-string value', () {
+  integration('upload form fields has a non-string value', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -268,11 +249,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals(json.stringify(body)));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('cloud storage upload provides an error', () {
+  integration('cloud storage upload provides an error', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -292,11 +271,9 @@
     // can parse the XML.
     expectLater(pub.nextErrLine(), equals('Failed to upload the package.'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test("cloud storage upload doesn't redirect", () {
+  integration("cloud storage upload doesn't redirect", () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -311,11 +288,9 @@
 
     expectLater(pub.nextErrLine(), equals('Failed to upload the package.'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('package creation provides an error', () {
+  integration('package creation provides an error', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -334,11 +309,9 @@
 
     expectLater(pub.nextErrLine(), equals('Your package was too boring.'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('package creation provides invalid JSON', () {
+  integration('package creation provides invalid JSON', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -355,11 +328,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals('{not json'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('package creation provides a malformed error', () {
+  integration('package creation provides a malformed error', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -378,11 +349,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals(json.stringify(body)));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('package creation provides a malformed success', () {
+  integration('package creation provides a malformed success', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubLish(server);
@@ -400,7 +369,5 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals(json.stringify(body)));
     pub.shouldExit(1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/pub_uploader_test.dart b/utils/tests/pub/pub_uploader_test.dart
index fe6e2b6..2557845 100644
--- a/utils/tests/pub/pub_uploader_test.dart
+++ b/utils/tests/pub/pub_uploader_test.dart
@@ -8,6 +8,7 @@
 import 'dart:json' as json;
 
 import 'test_pub.dart';
+import 'test_pub.dart';
 import '../../../pkg/unittest/lib/unittest.dart';
 import '../../pub/utils.dart';
 import '../../pub/io.dart';
@@ -43,7 +44,7 @@
         output: USAGE_STRING, exitCode: 64));
   });
 
-  test('adds an uploader', () {
+  integration('adds an uploader', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
@@ -62,11 +63,9 @@
 
     expectLater(pub.nextLine(), equals('Good job!'));
     pub.shouldExit(0);
-
-    run();
   });
 
-  test('removes an uploader', () {
+  integration('removes an uploader', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
@@ -82,11 +81,9 @@
 
     expectLater(pub.nextLine(), equals('Good job!'));
     pub.shouldExit(0);
-
-    run();
   });
 
-  test('defaults to the current package', () {
+  integration('defaults to the current package', () {
     normalPackage.scheduleCreate();
 
     var server = new ScheduledServer();
@@ -104,11 +101,9 @@
 
     expectLater(pub.nextLine(), equals('Good job!'));
     pub.shouldExit(0);
-
-    run();
   });
 
-  test('add provides an error', () {
+  integration('add provides an error', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
@@ -124,11 +119,9 @@
 
     expectLater(pub.nextErrLine(), equals('Bad job!'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('remove provides an error', () {
+  integration('remove provides an error', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubUploader(server,
@@ -146,11 +139,9 @@
 
     expectLater(pub.nextErrLine(), equals('Bad job!'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('add provides invalid JSON', () {
+  integration('add provides invalid JSON', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
@@ -163,11 +154,9 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals('{not json'));
     pub.shouldExit(1);
-
-    run();
   });
 
-  test('remove provides invalid JSON', () {
+  integration('remove provides invalid JSON', () {
     var server = new ScheduledServer();
     credentialsFile(server, 'access token').scheduleCreate();
     var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
@@ -181,7 +170,5 @@
     expectLater(pub.nextErrLine(), equals('Invalid server response:'));
     expectLater(pub.nextErrLine(), equals('{not json'));
     pub.shouldExit(1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/test_pub.dart b/utils/tests/pub/test_pub.dart
index 87053b9..f9bd96b 100644
--- a/utils/tests/pub/test_pub.dart
+++ b/utils/tests/pub/test_pub.dart
@@ -29,6 +29,16 @@
 import '../../pub/utils.dart';
 import '../../pub/validator.dart';
 import '../../pub/yaml/yaml.dart';
+import 'command_line_config.dart';
+
+/// This should be called at the top of a test file to set up an appropriate
+/// test configuration for the machine running the tests.
+initConfig() {
+  // If we aren't running on the bots, use the human-friendly config.
+  if (new Options().arguments.contains('--human')) {
+    configure(new CommandLineConfiguration());
+  }
+}
 
 /// Creates a new [FileDescriptor] with [name] and [contents].
 FileDescriptor file(Pattern name, String contents) =>
@@ -443,11 +453,19 @@
 /// complete.
 final _TIMEOUT = 30000;
 
+/// Defines an integration test. The [body] should schedule a series of
+/// operations which will be run asynchronously.
+integration(String description, body()) {
+  test(description, () {
+    body();
+    _run();
+  });
+}
+
 /// Runs all the scheduled events for a test case. This should only be called
 /// once per test case.
-void run() {
+void _run() {
   var createdSandboxDir;
-
   var asyncDone = expectAsync0(() {});
 
   Future cleanup() {
@@ -525,7 +543,7 @@
 /// Any futures in [args] will be resolved before the process is started.
 void runPub({List args, Pattern output, Pattern error, int exitCode: 0}) {
   schedulePub(args: args, output: output, error: error, exitCode: exitCode);
-  run();
+  _run();
 }
 
 /// Starts a Pub process and returns a [ScheduledProcess] that supports
diff --git a/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart b/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart
index 3925408..15fa3f9 100644
--- a/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart
+++ b/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart
@@ -7,11 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("doesn't update one locked Git package's dependencies if it's not "
-      "necessary", () {
+  integration("doesn't update one locked Git package's dependencies if it's "
+      "not necessary", () {
     ensureGit();
 
     git('foo.git', [
@@ -59,7 +58,5 @@
         file('foo-dep.dart', 'main() => "foo-dep";')
       ]),
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/git/update_locked_test.dart b/utils/tests/pub/update/git/update_locked_test.dart
index 0d23088..1fd9718 100644
--- a/utils/tests/pub/update/git/update_locked_test.dart
+++ b/utils/tests/pub/update/git/update_locked_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("updates locked Git packages", () {
+  integration("updates locked Git packages", () {
     ensureGit();
 
     git('foo.git', [
@@ -58,7 +57,5 @@
         file('bar.dart', 'main() => "bar 2";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/git/update_one_locked_test.dart b/utils/tests/pub/update/git/update_one_locked_test.dart
index c654e85..3c06726 100644
--- a/utils/tests/pub/update/git/update_one_locked_test.dart
+++ b/utils/tests/pub/update/git/update_one_locked_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("updates one locked Git package but no others", () {
+  integration("updates one locked Git package but no others", () {
     ensureGit();
 
     git('foo.git', [
@@ -58,7 +57,5 @@
         file('bar.dart', 'main() => "bar";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart b/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart
index 36c5e7f..aa4ef46 100644
--- a/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart
+++ b/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("updates Git packages to an incompatible pubspec", () {
+  integration("updates Git packages to an incompatible pubspec", () {
     ensureGit();
 
     git('foo.git', [
@@ -44,7 +43,5 @@
         file('foo.dart', 'main() => "foo";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart b/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart
index b777103..21951ab 100644
--- a/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart
+++ b/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("updates Git packages to a nonexistent pubspec", () {
+  integration("updates Git packages to a nonexistent pubspec", () {
     ensureGit();
 
     var repo = git('foo.git', [
@@ -43,7 +42,5 @@
         file('foo.dart', 'main() => "foo";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart b/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart
index e9e980a..6bbb45c 100644
--- a/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart
+++ b/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('fails gracefully if the package does not exist', () {
+  integration('fails gracefully if the package does not exist', () {
     servePackages([]);
 
     appDir([dependency("foo", "1.2.3")]).scheduleCreate();
@@ -19,7 +18,5 @@
         error: new RegExp('Could not find package "foo" at '
                             'http://localhost:'),
         exitCode: 1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart b/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart
index 314f41f..d7f8cbd 100644
--- a/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart
+++ b/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test('fails gracefully if the url does not resolve', () {
+  integration('fails gracefully if the url does not resolve', () {
     dir(appPath, [
       pubspec({
         "name": "myapp",
@@ -28,7 +27,5 @@
     schedulePub(args: ['update'],
         error: new RegExp('Could not resolve URL "http://pub.invalid".'),
         exitCode: 1);
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart b/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart
index 2b53de7..e39c184 100644
--- a/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart
+++ b/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("removes a dependency that's been removed from the pubspec", () {
+  integration("removes a dependency that's been removed from the pubspec", () {
     servePackages([
       package("foo", "1.0.0"),
       package("bar", "1.0.0")
@@ -35,7 +34,5 @@
       "foo": "1.0.0",
       "bar": null
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart b/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart
index 2afc65d..fa54439 100644
--- a/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart
+++ b/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart
@@ -7,10 +7,10 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("removes a transitive dependency that's no longer depended on", () {
+  integration("removes a transitive dependency that's no longer depended "
+      "on", () {
     servePackages([
       package("foo", "1.0.0", [dependency("shared-dep")]),
       package("bar", "1.0.0", [
@@ -44,7 +44,5 @@
       "shared-dep": "1.0.0",
       "bar-dep": null,
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/hosted/unlock_dependers_test.dart b/utils/tests/pub/update/hosted/unlock_dependers_test.dart
index 6a0d2e0..b1436e9 100644
--- a/utils/tests/pub/update/hosted/unlock_dependers_test.dart
+++ b/utils/tests/pub/update/hosted/unlock_dependers_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("updates a locked package's dependers in order to get it to max "
+  integration("updates a locked package's dependers in order to get it to max "
       "version", () {
     servePackages([
       package("foo", "1.0.0", [dependency("bar", "<2.0.0")]),
@@ -39,7 +38,5 @@
       "foo": "2.0.0",
       "bar": "2.0.0"
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart b/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart
index aae6ca1..1c1b95d 100644
--- a/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart
+++ b/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("updates one locked pub server package's dependencies if it's "
+  integration("updates one locked pub server package's dependencies if it's "
       "necessary", () {
     servePackages([
       package("foo", "1.0.0", [dependency("foo-dep")]),
@@ -39,7 +38,5 @@
       "foo": "2.0.0",
       "foo-dep": "2.0.0"
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/hosted/update_removed_constraints_test.dart b/utils/tests/pub/update/hosted/update_removed_constraints_test.dart
index 911fa34..06dadff 100644
--- a/utils/tests/pub/update/hosted/update_removed_constraints_test.dart
+++ b/utils/tests/pub/update/hosted/update_removed_constraints_test.dart
@@ -7,10 +7,9 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
-  test("updates dependencies whose constraints have been removed", () {
+  integration("updates dependencies whose constraints have been removed", () {
     servePackages([
       package("foo", "1.0.0", [dependency("shared-dep")]),
       package("bar", "1.0.0", [dependency("shared-dep", "<2.0.0")]),
@@ -39,7 +38,5 @@
       "bar": null,
       "shared-dep": "2.0.0"
     }).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/update/pub_update_test.dart b/utils/tests/pub/update/pub_update_test.dart
index 831d2ce..ef18e84 100644
--- a/utils/tests/pub/update/pub_update_test.dart
+++ b/utils/tests/pub/update/pub_update_test.dart
@@ -6,22 +6,20 @@
 
 import 'dart:io';
 
-import '../test_pub.dart';
 import '../../../../pkg/unittest/lib/unittest.dart';
+import '../test_pub.dart';
 
 main() {
   group('requires', () {
-    test('a pubspec', () {
+    integration('a pubspec', () {
       dir(appPath, []).scheduleCreate();
 
       schedulePub(args: ['update'],
           error: new RegExp(r'^Could not find a file named "pubspec.yaml"'),
           exitCode: 1);
-
-      run();
     });
 
-    test('a pubspec with a "name" key', () {
+    integration('a pubspec with a "name" key', () {
       dir(appPath, [
         pubspec({"dependencies": {"foo": null}})
       ]).scheduleCreate();
@@ -30,12 +28,10 @@
           error: new RegExp(r'^pubspec.yaml is missing the required "name" '
               r'field \(e\.g\. "name: myapp"\)\.'),
           exitCode: 1);
-
-      run();
     });
   });
 
-  test('adds itself to the packages', () {
+  integration('adds itself to the packages', () {
     // The symlink should use the name in the pubspec, not the name of the
     // directory.
     dir(appPath, [
@@ -51,11 +47,10 @@
         file('myapp_name.dart', 'main() => "myapp_name";')
       ])
     ]).scheduleValidate();
-
-    run();
   });
 
-  test('does not adds itself to the packages if it has no "lib" directory', () {
+  integration('does not adds itself to the packages if it has no "lib" '
+      'directory', () {
     // The symlink should use the name in the pubspec, not the name of the
     // directory.
     dir(appPath, [
@@ -68,11 +63,10 @@
     dir(packagesPath, [
       nothing("myapp_name")
     ]).scheduleValidate();
-
-    run();
   });
 
-  test('does not add a package if it does not have a "lib" directory', () {
+  integration('does not add a package if it does not have a "lib" '
+      'directory', () {
     // Using an SDK source, but this should be true of all sources.
     dir(sdkPath, [
       file('revision', '1234'),
@@ -91,7 +85,5 @@
         output: new RegExp(r"Dependencies updated!$"));
 
     packagesDir({"foo": null}).scheduleValidate();
-
-    run();
   });
 }
diff --git a/utils/tests/pub/validator_test.dart b/utils/tests/pub/validator_test.dart
index 9f0a366..75b51ff 100644
--- a/utils/tests/pub/validator_test.dart
+++ b/utils/tests/pub/validator_test.dart
@@ -55,46 +55,41 @@
   group('should consider a package valid if it', () {
     setUp(scheduleNormalPackage);
 
-    test('looks normal', () {
+    integration('looks normal', () {
       dir(appPath, [libPubspec("test_pkg", "1.0.0")]).scheduleCreate();
       expectNoValidationError(dependency);
       expectNoValidationError(lib);
       expectNoValidationError(license);
       expectNoValidationError(name);
       expectNoValidationError(pubspecField);
-      run();
     });
 
-    test('has a COPYING file', () {
+    integration('has a COPYING file', () {
       file(join(appPath, 'LICENSE'), '').scheduleDelete();
       file(join(appPath, 'COPYING'), '').scheduleCreate();
       expectNoValidationError(license);
-      run();
     });
 
-    test('has a prefixed LICENSE file', () {
+    integration('has a prefixed LICENSE file', () {
       file(join(appPath, 'LICENSE'), '').scheduleDelete();
       file(join(appPath, 'MIT_LICENSE'), '').scheduleCreate();
       expectNoValidationError(license);
-      run();
     });
 
-    test('has a suffixed LICENSE file', () {
+    integration('has a suffixed LICENSE file', () {
       file(join(appPath, 'LICENSE'), '').scheduleDelete();
       file(join(appPath, 'LICENSE.md'), '').scheduleCreate();
       expectNoValidationError(license);
-      run();
     });
 
-    test('has "authors" instead of "author"', () {
+    integration('has "authors" instead of "author"', () {
       var package = package("test_pkg", "1.0.0");
       package["authors"] = [package.remove("author")];
       dir(appPath, [pubspec(package)]).scheduleCreate();
       expectNoValidationError(pubspecField);
-      run();
     });
 
-    test('has a badly-named library in lib/src', () {
+    integration('has a badly-named library in lib/src', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0"),
         dir("lib", [
@@ -103,10 +98,9 @@
         ])
       ]).scheduleCreate();
       expectNoValidationError(name);
-      run();
     });
 
-    test('has a non-Dart file in lib', () {
+    integration('has a non-Dart file in lib', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0"),
         dir("lib", [
@@ -114,68 +108,61 @@
         ])
       ]).scheduleCreate();
       expectNoValidationError(lib);
-      run();
     });
 
-    test('has an unconstrained dependency on "unittest"', () {
+    integration('has an unconstrained dependency on "unittest"', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0", [
           {'hosted': 'unittest'}
         ])
       ]).scheduleCreate();
       expectNoValidationError(dependency);
-      run();
     });
 
-    test('has a nested directory named "tools"', () {
+    integration('has a nested directory named "tools"', () {
       dir(appPath, [
         dir("foo", [dir("tools")])
       ]).scheduleCreate();
       expectNoValidationError(directory);
-      run();
     });
   });
 
   group('should consider a package invalid if it', () {
     setUp(scheduleNormalPackage);
 
-    test('is missing the "homepage" field', () {
+    integration('is missing the "homepage" field', () {
       var package = package("test_pkg", "1.0.0");
       package.remove("homepage");
       dir(appPath, [pubspec(package)]).scheduleCreate();
 
       expectValidationError(pubspecField);
-      run();
     });
 
-    test('is missing the "description" field', () {
+    integration('is missing the "description" field', () {
       var package = package("test_pkg", "1.0.0");
       package.remove("description");
       dir(appPath, [pubspec(package)]).scheduleCreate();
 
       expectValidationError(pubspecField);
-      run();
     });
 
-    test('is missing the "author" field', () {
+    integration('is missing the "author" field', () {
       var package = package("test_pkg", "1.0.0");
       package.remove("author");
       dir(appPath, [pubspec(package)]).scheduleCreate();
 
       expectValidationError(pubspecField);
-      run();
     });
 
-    test('has a single author without an email', () {
+    integration('has a single author without an email', () {
       var package = package("test_pkg", "1.0.0");
       package["author"] = "Nathan Weizenbaum";
       dir(appPath, [pubspec(package)]).scheduleCreate();
 
       expectValidationWarning(pubspecField);
-      run();
     });
 
-    test('has one of several authors without an email', () {
+    integration('has one of several authors without an email', () {
       var package = package("test_pkg", "1.0.0");
       package.remove("author");
       package["authors"] = [
@@ -186,19 +173,17 @@
       dir(appPath, [pubspec(package)]).scheduleCreate();
 
       expectValidationWarning(pubspecField);
-      run();
     });
 
-    test('has a single author without a name', () {
+    integration('has a single author without a name', () {
       var package = package("test_pkg", "1.0.0");
       package["author"] = "<nweiz@google.com>";
       dir(appPath, [pubspec(package)]).scheduleCreate();
 
       expectValidationWarning(pubspecField);
-      run();
     });
 
-    test('has one of several authors without a name', () {
+    integration('has one of several authors without a name', () {
       var package = package("test_pkg", "1.0.0");
       package.remove("author");
       package["authors"] = [
@@ -209,103 +194,89 @@
       dir(appPath, [pubspec(package)]).scheduleCreate();
 
       expectValidationWarning(pubspecField);
-      run();
     });
 
-    test('has no LICENSE file', () {
+    integration('has no LICENSE file', () {
       file(join(appPath, 'LICENSE'), '').scheduleDelete();
       expectValidationError(license);
-      run();
     });
 
-    test('has an empty package name', () {
+    integration('has an empty package name', () {
       dir(appPath, [libPubspec("", "1.0.0")]).scheduleCreate();
       expectValidationError(name);
-      run();
     });
 
-    test('has a package name with an invalid character', () {
+    integration('has a package name with an invalid character', () {
       dir(appPath, [libPubspec("test-pkg", "1.0.0")]).scheduleCreate();
       expectValidationError(name);
-      run();
     });
 
-    test('has a package name that begins with a number', () {
+    integration('has a package name that begins with a number', () {
       dir(appPath, [libPubspec("8ball", "1.0.0")]).scheduleCreate();
       expectValidationError(name);
-      run();
     });
 
-    test('has a package name that contains upper-case letters', () {
+    integration('has a package name that contains upper-case letters', () {
       dir(appPath, [libPubspec("TestPkg", "1.0.0")]).scheduleCreate();
       expectValidationWarning(name);
-      run();
     });
 
-    test('has a package name that is a Dart reserved word', () {
+    integration('has a package name that is a Dart reserved word', () {
       dir(appPath, [libPubspec("operator", "1.0.0")]).scheduleCreate();
       expectValidationError(name);
-      run();
     });
 
-    test('has a library name with an invalid character', () {
+    integration('has a library name with an invalid character', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0"),
         dir("lib", [file("test-pkg.dart", "int i = 0;")])
       ]).scheduleCreate();
       expectValidationError(name);
-      run();
     });
 
-    test('has a library name that begins with a number', () {
+    integration('has a library name that begins with a number', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0"),
         dir("lib", [file("8ball.dart", "int i = 0;")])
       ]).scheduleCreate();
       expectValidationError(name);
-      run();
     });
 
-    test('has a library name that contains upper-case letters', () {
+    integration('has a library name that contains upper-case letters', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0"),
         dir("lib", [file("TestPkg.dart", "int i = 0;")])
       ]).scheduleCreate();
       expectValidationWarning(name);
-      run();
     });
 
-    test('has a library name that is a Dart reserved word', () {
+    integration('has a library name that is a Dart reserved word', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0"),
         dir("lib", [file("operator.dart", "int i = 0;")])
       ]).scheduleCreate();
       expectValidationError(name);
-      run();
     });
 
-    test('has a single library named differently than the package', () {
+    integration('has a single library named differently than the package', () {
       file(join(appPath, "lib", "test_pkg.dart"), '').scheduleDelete();
       dir(appPath, [
         dir("lib", [file("best_pkg.dart", "int i = 0;")])
       ]).scheduleCreate();
       expectValidationWarning(name);
-      run();
     });
 
-    test('has no lib directory', () {
+    integration('has no lib directory', () {
       dir(join(appPath, "lib")).scheduleDelete();
       expectValidationError(lib);
-      run();
     });
 
-    test('has an empty lib directory', () {
+    integration('has an empty lib directory', () {
       file(join(appPath, "lib", "test_pkg.dart"), '').scheduleDelete();
       expectValidationError(lib);
-      run();
     });
 
-    test('has a lib directory containing only src', () {
+    integration('has a lib directory containing only src', () {
       file(join(appPath, "lib", "test_pkg.dart"), '').scheduleDelete();
       dir(appPath, [
         dir("lib", [
@@ -313,12 +284,12 @@
         ])
       ]).scheduleCreate();
       expectValidationError(lib);
-      run();
     });
 
     group('has a dependency with a non-hosted source', () {
       group('where a hosted version of that dependency exists', () {
-        test("and should suggest the hosted package's primary version", () {
+        integration("and should suggest the hosted package's primary "
+            "version", () {
           useMockClient(new MockClient((request) {
             expect(request.method, equals("GET"));
             expect(request.url.path, equals("/packages/foo.json"));
@@ -339,12 +310,10 @@
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, someElement(contains(
                   '  foo: ">=2.0.0 <3.0.0"'))));
-
-          run();
         });
 
-        test("and should suggest the hosted package's prerelease version if "
-            "it's the only version available", () {
+        integration("and should suggest the hosted package's prerelease "
+            "version if it's the only version available", () {
           useMockClient(new MockClient((request) {
             expect(request.method, equals("GET"));
             expect(request.url.path, equals("/packages/foo.json"));
@@ -365,12 +334,10 @@
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, someElement(contains(
                   '  foo: ">=3.0.0-pre <4.0.0"'))));
-
-          run();
         });
 
-        test("and should suggest a tighter constraint if the primary version "
-            "is pre-1.0.0", () {
+        integration("and should suggest a tighter constraint if the primary "
+            "version is pre-1.0.0", () {
           useMockClient(new MockClient((request) {
             expect(request.method, equals("GET"));
             expect(request.url.path, equals("/packages/foo.json"));
@@ -391,13 +358,11 @@
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, someElement(contains(
                   '  foo: ">=0.0.2 <0.0.3"'))));
-
-          run();
         });
       });
 
       group('where no hosted version of that dependency exists', () {
-        test("and should use the other source's version", () {
+        integration("and should use the other source's version", () {
           useMockClient(new MockClient((request) {
             expect(request.method, equals("GET"));
             expect(request.url.path, equals("/packages/foo.json"));
@@ -417,12 +382,10 @@
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, someElement(contains(
                   '  foo: ">=1.0.0 <2.0.0"'))));
-
-          run();
         });
 
-        test("and should use the other source's unquoted version if it's "
-            "concrete", () {
+        integration("and should use the other source's unquoted version if "
+            "it's concrete", () {
           useMockClient(new MockClient((request) {
             expect(request.method, equals("GET"));
             expect(request.url.path, equals("/packages/foo.json"));
@@ -441,15 +404,13 @@
 
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, someElement(contains('  foo: 0.2.3'))));
-
-          run();
         });
       });
     });
 
     group('has an unconstrained dependency', () {
       group('and it should not suggest a version', () {
-        test("if there's no lockfile", () {
+        integration("if there's no lockfile", () {
           dir(appPath, [
             libPubspec("test_pkg", "1.0.0", [
               {'hosted': 'foo'}
@@ -458,11 +419,10 @@
 
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, everyElement(isNot(contains("\n  foo:")))));
-
-          run();
         });
 
-        test("if the lockfile doesn't have an entry for the dependency", () {
+        integration("if the lockfile doesn't have an entry for the "
+            "dependency", () {
           dir(appPath, [
             libPubspec("test_pkg", "1.0.0", [
               {'hosted': 'foo'}
@@ -483,13 +443,11 @@
 
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, everyElement(isNot(contains("\n  foo:")))));
-
-          run();
         });
       });
 
       group('with a lockfile', () {
-        test('and it should suggest a constraint based on the locked '
+        integration('and it should suggest a constraint based on the locked '
             'version', () {
           dir(appPath, [
             libPubspec("test_pkg", "1.0.0", [
@@ -512,11 +470,9 @@
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, someElement(contains(
                   '  foo: ">=1.2.3 <2.0.0"'))));
-
-          run();
         });
 
-        test('and it should suggest a concrete constraint if the locked '
+        integration('and it should suggest a concrete constraint if the locked '
             'version is pre-1.0.0', () {
           dir(appPath, [
             libPubspec("test_pkg", "1.0.0", [
@@ -539,13 +495,11 @@
           expectLater(schedulePackageValidation(dependency),
               pairOf(isEmpty, someElement(contains(
                   '  foo: ">=0.1.2 <0.1.3"'))));
-
-          run();
         });
       });
     });
 
-    test('has a hosted dependency on itself', () {
+    integration('has a hosted dependency on itself', () {
       dir(appPath, [
         libPubspec("test_pkg", "1.0.0", [
           {'hosted': {'name': 'test_pkg', 'version': '>=1.0.0'}}
@@ -553,8 +507,6 @@
       ]).scheduleCreate();
 
       expectValidationWarning(dependency);
-
-      run();
     });
 
     group('has a top-level directory named', () {
@@ -562,10 +514,9 @@
 
       var names = ["tools", "tests", "docs", "examples", "sample", "samples"];
       for (var name in names) {
-        test('"$name"', () {
+        integration('"$name"', () {
           dir(appPath, [dir(name)]).scheduleCreate();
           expectValidationWarning(directory);
-          run();
         });
       }
     });